Updated image classifier and object detector tests

This commit is contained in:
Prianka Liz Kariat 2023-05-02 08:45:44 +05:30
parent 82a238a0c8
commit 8284732874
2 changed files with 65 additions and 60 deletions

View File

@ -56,7 +56,6 @@ static NSString *const kLiveStreamTestsDictExpectationKey= @"expectation";
XCTAssertEqual(imageClassifierResult.classificationResult.classifications.count, 1); \
XCTAssertEqual(imageClassifierResult.classificationResult.classifications[0].headIndex, 0);
@interface MPPImageClassifierTests : XCTestCase <MPPImageClassifierDelegate> {
NSDictionary *liveStreamSucceedsTestDict;
NSDictionary *outOfOrderTimestampTestDict;
@ -442,7 +441,7 @@ static NSString *const kLiveStreamTestsDictExpectationKey= @"expectation";
#pragma mark Running Mode Tests
- (void)testCreateImageClassifierFailsWithResultListenerInNonLiveStreamMode {
- (void)testCreateImageClassifierFailsWithDelegateInNonLiveStreamMode {
MPPRunningMode runningModesToTest[] = {MPPRunningModeImage, MPPRunningModeVideo};
for (int i = 0; i < sizeof(runningModesToTest) / sizeof(runningModesToTest[0]); i++) {
MPPImageClassifierOptions *options = [self imageClassifierOptionsWithModelName:kFloatModelName];
@ -453,30 +452,31 @@ static NSString *const kLiveStreamTestsDictExpectationKey= @"expectation";
[self
assertCreateImageClassifierWithOptions:options
failsWithExpectedError:
[NSError
errorWithDomain:kExpectedErrorDomain
[NSError errorWithDomain:kExpectedErrorDomain
code:MPPTasksErrorCodeInvalidArgumentError
userInfo:@{
NSLocalizedDescriptionKey :
@"The vision task is in image or video mode. The delegate must not be"
@"set in the task's options."
@"The vision task is in image or video mode. The "
@"delegate must not be set in the task's options."
}]];
}
}
- (void)testCreateImageClassifierFailsWithMissingResultListenerInLiveStreamMode {
- (void)testCreateImageClassifierFailsWithMissingDelegateInLiveStreamMode {
MPPImageClassifierOptions *options = [self imageClassifierOptionsWithModelName:kFloatModelName];
options.runningMode = MPPRunningModeLiveStream;
[self assertCreateImageClassifierWithOptions:options
failsWithExpectedError:
[NSError errorWithDomain:kExpectedErrorDomain
[NSError
errorWithDomain:kExpectedErrorDomain
code:MPPTasksErrorCodeInvalidArgumentError
userInfo:@{
NSLocalizedDescriptionKey :
@"The vision task is in live stream mode. An object must be set as the delegate of"
@"the task in the its options to ensure asynchronous delivery of results."
@"The vision task is in live stream mode. An object "
@"must be set as the delegate of the task in its "
@"options to ensure asynchronous delivery of results."
}]];
}
@ -619,7 +619,7 @@ static NSString *const kLiveStreamTestsDictExpectationKey= @"expectation";
MPPImageClassifierOptions *options = [self imageClassifierOptionsWithModelName:kFloatModelName];
NSInteger maxResults = 3;
options.maxResults = maxResults;
options.maxResults = 3;
options.runningMode = MPPRunningModeLiveStream;
options.imageClassifierDelegate = self;
@ -631,7 +631,10 @@ static NSString *const kLiveStreamTestsDictExpectationKey= @"expectation";
MPPImageClassifier *imageClassifier = [self imageClassifierWithOptionsSucceeds:options];
outOfOrderTimestampTestDict = @{kLiveStreamTestsDictImageClassifierKey: imageClassifier, kLiveStreamTestsDictExpectationKey: expectation};
outOfOrderTimestampTestDict = @{
kLiveStreamTestsDictImageClassifierKey : imageClassifier,
kLiveStreamTestsDictExpectationKey : expectation
};
MPPImage *image = [self imageWithFileInfo:kBurgerImage];
@ -680,10 +683,12 @@ static NSString *const kLiveStreamTestsDictExpectationKey= @"expectation";
expectation.expectedFulfillmentCount = iterationCount + 1;
expectation.inverted = YES;
MPPImageClassifier *imageClassifier = [self imageClassifierWithOptionsSucceeds:options];
liveStreamSucceedsTestDict = @{kLiveStreamTestsDictImageClassifierKey: imageClassifier, kLiveStreamTestsDictExpectationKey: expectation};
liveStreamSucceedsTestDict = @{
kLiveStreamTestsDictImageClassifierKey : imageClassifier,
kLiveStreamTestsDictExpectationKey : expectation
};
// TODO: Mimic initialization from CMSampleBuffer as live stream mode is most likely to be used
// with the iOS camera. AVCaptureVideoDataOutput sample buffer delegates provide frames of type
@ -694,11 +699,11 @@ static NSString *const kLiveStreamTestsDictExpectationKey= @"expectation";
XCTAssertTrue([imageClassifier classifyAsyncImage:image timestampInMilliseconds:i error:nil]);
}
[self waitForExpectations:@[expectation] timeout:5];
[self waitForExpectations:@[ expectation ] timeout:1e-2f];
}
- (void)imageClassifier:(MPPImageClassifier *)imageClassifier
didFinishImageClassificationWithResult:(MPPImageClassifierResult *)imageClassifierResult
didFinishClassificationWithResult:(MPPImageClassifierResult *)imageClassifierResult
timestampInMilliseconds:(NSInteger)timestampInMilliseconds
error:(NSError *)error {
NSInteger maxResults = 3;
@ -710,8 +715,8 @@ static NSString *const kLiveStreamTestsDictExpectationKey= @"expectation";
if (imageClassifier == outOfOrderTimestampTestDict[kLiveStreamTestsDictImageClassifierKey]) {
[outOfOrderTimestampTestDict[kLiveStreamTestsDictExpectationKey] fulfill];
}
else if (imageClassifier == liveStreamSucceedsTestDict[kLiveStreamTestsDictImageClassifierKey]) {
} else if (imageClassifier ==
liveStreamSucceedsTestDict[kLiveStreamTestsDictImageClassifierKey]) {
[liveStreamSucceedsTestDict[kLiveStreamTestsDictExpectationKey] fulfill];
}
}

View File

@ -451,7 +451,7 @@ static NSString *const kLiveStreamTestsDictExpectationKey = @"expectation";
#pragma mark Running Mode Tests
- (void)testCreateObjectDetectorFailsWithResultListenerInNonLiveStreamMode {
- (void)testCreateObjectDetectorFailsWithDelegateInNonLiveStreamMode {
MPPRunningMode runningModesToTest[] = {MPPRunningModeImage, MPPRunningModeVideo};
for (int i = 0; i < sizeof(runningModesToTest) / sizeof(runningModesToTest[0]); i++) {
MPPObjectDetectorOptions *options = [self objectDetectorOptionsWithModelName:kModelName];
@ -472,7 +472,7 @@ static NSString *const kLiveStreamTestsDictExpectationKey = @"expectation";
}
}
- (void)testCreateObjectDetectorFailsWithMissingResultListenerInLiveStreamMode {
- (void)testCreateObjectDetectorFailsWithMissingDelegateInLiveStreamMode {
MPPObjectDetectorOptions *options = [self objectDetectorOptionsWithModelName:kModelName];
options.runningMode = MPPRunningModeLiveStream;
@ -484,9 +484,10 @@ static NSString *const kLiveStreamTestsDictExpectationKey = @"expectation";
userInfo:@{
NSLocalizedDescriptionKey :
@"The vision task is in live stream mode. An "
@"object must be set as the delegate of"
@"the task in the its options to ensure "
@"asynchronous delivery of results."
@"object must be set as the "
@"delegate of the task in its options to ensure "
@"asynchronous delivery of "
@"results."
}]];
}
@ -567,10 +568,7 @@ static NSString *const kLiveStreamTestsDictExpectationKey = @"expectation";
MPPObjectDetectorOptions *options = [self objectDetectorOptionsWithModelName:kModelName];
options.runningMode = MPPRunningModeLiveStream;
options.completion =
^(MPPObjectDetectionResult *result, NSInteger timestampInMilliseconds, NSError *error) {
};
options.objectDetectorDelegate = self;
MPPObjectDetector *objectDetector = [self objectDetectorWithOptionsSucceeds:options];
@ -635,13 +633,14 @@ static NSString *const kLiveStreamTestsDictExpectationKey = @"expectation";
options.maxResults = maxResults;
options.runningMode = MPPRunningModeLiveStream;
options.objectDetectorDelegate = self;
XCTestExpectation *expectation = [[XCTestExpectation alloc]
initWithDescription:@"detectWithOutOfOrderTimestampsAndLiveStream"];
expectation.expectedFulfillmentCount = 1;
MPPObjectDetector *objectDetector = [self objectDetectorWithOptionsSucceeds:options];
liveStreamSucceedsTestDict = {
liveStreamSucceedsTestDict = @{
kLiveStreamTestsDictObjectDetectorKey : objectDetector,
kLiveStreamTestsDictExpectationKey : expectation
};
@ -694,7 +693,7 @@ static NSString *const kLiveStreamTestsDictExpectationKey = @"expectation";
MPPObjectDetector *objectDetector = [self objectDetectorWithOptionsSucceeds:options];
liveStreamSucceedsTestDict = {
liveStreamSucceedsTestDict = @{
kLiveStreamTestsDictObjectDetectorKey : objectDetector,
kLiveStreamTestsDictExpectationKey : expectation
};
@ -711,12 +710,13 @@ static NSString *const kLiveStreamTestsDictExpectationKey = @"expectation";
[self waitForExpectations:@[ expectation ] timeout:0.5];
}
#pragma mark MPPObjectDetectorDelegate Methods
- (void)objectDetector:(MPPObjectDetector *)objectDetector
didFinishObjectDetectionWithResult:(MPPObjectDetectionResult *)objectDetectionResult
didFinishDetectionWithResult:(MPPObjectDetectionResult *)objectDetectionResult
timestampInMilliseconds:(NSInteger)timestampInMilliseconds
error:(NSError *)error {
NSInteger maxResults = 4;
[self assertObjectDetectionResult:result
[self assertObjectDetectionResult:objectDetectionResult
isEqualToExpectedResult:
[MPPObjectDetectorTests
expectedDetectionResultForCatsAndDogsImageWithTimestampInMilliseconds: