Updated object detector tests to use delegates
This commit is contained in:
parent
c58cb97055
commit
dffb73e4eb
|
@ -25,6 +25,8 @@ static NSDictionary *const kCatsAndDogsRotatedImage =
|
||||||
static NSString *const kExpectedErrorDomain = @"com.google.mediapipe.tasks";
|
static NSString *const kExpectedErrorDomain = @"com.google.mediapipe.tasks";
|
||||||
static const float pixelDifferenceTolerance = 10.0f;
|
static const float pixelDifferenceTolerance = 10.0f;
|
||||||
static const float scoreDifferenceTolerance = 0.02f;
|
static const float scoreDifferenceTolerance = 0.02f;
|
||||||
|
static NSString *const kLiveStreamTestsDictObjectDetectorKey = @"object_detector";
|
||||||
|
static NSString *const kLiveStreamTestsDictExpectationKey = @"expectation";
|
||||||
|
|
||||||
#define AssertEqualErrors(error, expectedError) \
|
#define AssertEqualErrors(error, expectedError) \
|
||||||
XCTAssertNotNil(error); \
|
XCTAssertNotNil(error); \
|
||||||
|
@ -58,7 +60,10 @@ static const float scoreDifferenceTolerance = 0.02f;
|
||||||
XCTAssertEqualWithAccuracy(boundingBox.size.height, expectedBoundingBox.size.height, \
|
XCTAssertEqualWithAccuracy(boundingBox.size.height, expectedBoundingBox.size.height, \
|
||||||
pixelDifferenceTolerance, @"index i = %d", idx);
|
pixelDifferenceTolerance, @"index i = %d", idx);
|
||||||
|
|
||||||
@interface MPPObjectDetectorTests : XCTestCase
|
@interface MPPObjectDetectorTests : XCTestCase <MPPObjectDetectorDelegate> {
|
||||||
|
NSDictionary *liveStreamSucceedsTestDict;
|
||||||
|
NSDictionary *outOfOrderTimestampTestDict;
|
||||||
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MPPObjectDetectorTests
|
@implementation MPPObjectDetectorTests
|
||||||
|
@ -452,20 +457,17 @@ static const float scoreDifferenceTolerance = 0.02f;
|
||||||
MPPObjectDetectorOptions *options = [self objectDetectorOptionsWithModelName:kModelName];
|
MPPObjectDetectorOptions *options = [self objectDetectorOptionsWithModelName:kModelName];
|
||||||
|
|
||||||
options.runningMode = runningModesToTest[i];
|
options.runningMode = runningModesToTest[i];
|
||||||
options.completion =
|
options.objectDetectorDelegate = self;
|
||||||
^(MPPObjectDetectionResult *result, NSInteger timestampInMilliseconds, NSError *error) {
|
|
||||||
};
|
|
||||||
|
|
||||||
[self
|
[self assertCreateObjectDetectorWithOptions:options
|
||||||
assertCreateObjectDetectorWithOptions:options
|
|
||||||
failsWithExpectedError:
|
failsWithExpectedError:
|
||||||
[NSError
|
[NSError errorWithDomain:kExpectedErrorDomain
|
||||||
errorWithDomain:kExpectedErrorDomain
|
|
||||||
code:MPPTasksErrorCodeInvalidArgumentError
|
code:MPPTasksErrorCodeInvalidArgumentError
|
||||||
userInfo:@{
|
userInfo:@{
|
||||||
NSLocalizedDescriptionKey :
|
NSLocalizedDescriptionKey :
|
||||||
@"The vision task is in image or video mode, a "
|
@"The vision task is in image or video mode. "
|
||||||
@"user-defined result callback should not be provided."
|
@"The delegate must not be"
|
||||||
|
@"set in the task's options."
|
||||||
}]];
|
}]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -481,8 +483,10 @@ static const float scoreDifferenceTolerance = 0.02f;
|
||||||
code:MPPTasksErrorCodeInvalidArgumentError
|
code:MPPTasksErrorCodeInvalidArgumentError
|
||||||
userInfo:@{
|
userInfo:@{
|
||||||
NSLocalizedDescriptionKey :
|
NSLocalizedDescriptionKey :
|
||||||
@"The vision task is in live stream mode, a "
|
@"The vision task is in live stream mode. An "
|
||||||
@"user-defined result callback must be provided."
|
@"object must be set as the delegate of"
|
||||||
|
@"the task in the its options to ensure "
|
||||||
|
@"asynchronous delivery of results."
|
||||||
}]];
|
}]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -636,18 +640,11 @@ static const float scoreDifferenceTolerance = 0.02f;
|
||||||
initWithDescription:@"detectWithOutOfOrderTimestampsAndLiveStream"];
|
initWithDescription:@"detectWithOutOfOrderTimestampsAndLiveStream"];
|
||||||
expectation.expectedFulfillmentCount = 1;
|
expectation.expectedFulfillmentCount = 1;
|
||||||
|
|
||||||
options.completion =
|
|
||||||
^(MPPObjectDetectionResult *result, NSInteger timestampInMilliseconds, NSError *error) {
|
|
||||||
[self assertObjectDetectionResult:result
|
|
||||||
isEqualToExpectedResult:
|
|
||||||
[MPPObjectDetectorTests
|
|
||||||
expectedDetectionResultForCatsAndDogsImageWithTimestampInMilliseconds:
|
|
||||||
timestampInMilliseconds]
|
|
||||||
expectedDetectionsCount:maxResults];
|
|
||||||
[expectation fulfill];
|
|
||||||
};
|
|
||||||
|
|
||||||
MPPObjectDetector *objectDetector = [self objectDetectorWithOptionsSucceeds:options];
|
MPPObjectDetector *objectDetector = [self objectDetectorWithOptionsSucceeds:options];
|
||||||
|
liveStreamSucceedsTestDict = {
|
||||||
|
kLiveStreamTestsDictObjectDetectorKey : objectDetector,
|
||||||
|
kLiveStreamTestsDictExpectationKey : expectation
|
||||||
|
};
|
||||||
|
|
||||||
MPPImage *image = [self imageWithFileInfo:kCatsAndDogsImage];
|
MPPImage *image = [self imageWithFileInfo:kCatsAndDogsImage];
|
||||||
|
|
||||||
|
@ -693,19 +690,15 @@ static const float scoreDifferenceTolerance = 0.02f;
|
||||||
expectation.expectedFulfillmentCount = iterationCount + 1;
|
expectation.expectedFulfillmentCount = iterationCount + 1;
|
||||||
expectation.inverted = YES;
|
expectation.inverted = YES;
|
||||||
|
|
||||||
options.completion =
|
options.objectDetectorDelegate = self;
|
||||||
^(MPPObjectDetectionResult *result, NSInteger timestampInMilliseconds, NSError *error) {
|
|
||||||
[self assertObjectDetectionResult:result
|
|
||||||
isEqualToExpectedResult:
|
|
||||||
[MPPObjectDetectorTests
|
|
||||||
expectedDetectionResultForCatsAndDogsImageWithTimestampInMilliseconds:
|
|
||||||
timestampInMilliseconds]
|
|
||||||
expectedDetectionsCount:maxResults];
|
|
||||||
[expectation fulfill];
|
|
||||||
};
|
|
||||||
|
|
||||||
MPPObjectDetector *objectDetector = [self objectDetectorWithOptionsSucceeds:options];
|
MPPObjectDetector *objectDetector = [self objectDetectorWithOptionsSucceeds:options];
|
||||||
|
|
||||||
|
liveStreamSucceedsTestDict = {
|
||||||
|
kLiveStreamTestsDictObjectDetectorKey : objectDetector,
|
||||||
|
kLiveStreamTestsDictExpectationKey : expectation
|
||||||
|
};
|
||||||
|
|
||||||
// TODO: Mimic initialization from CMSampleBuffer as live stream mode is most likely to be used
|
// 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
|
// with the iOS camera. AVCaptureVideoDataOutput sample buffer delegates provide frames of type
|
||||||
// `CMSampleBuffer`.
|
// `CMSampleBuffer`.
|
||||||
|
@ -718,4 +711,23 @@ static const float scoreDifferenceTolerance = 0.02f;
|
||||||
[self waitForExpectations:@[ expectation ] timeout:0.5];
|
[self waitForExpectations:@[ expectation ] timeout:0.5];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)objectDetector:(MPPObjectDetector *)objectDetector
|
||||||
|
didFinishObjectDetectionWithResult:(MPPObjectDetectionResult *)objectDetectionResult
|
||||||
|
timestampInMilliseconds:(NSInteger)timestampInMilliseconds
|
||||||
|
error:(NSError *)error {
|
||||||
|
NSInteger maxResults = 4;
|
||||||
|
[self assertObjectDetectionResult:result
|
||||||
|
isEqualToExpectedResult:
|
||||||
|
[MPPObjectDetectorTests
|
||||||
|
expectedDetectionResultForCatsAndDogsImageWithTimestampInMilliseconds:
|
||||||
|
timestampInMilliseconds]
|
||||||
|
expectedDetectionsCount:maxResults];
|
||||||
|
|
||||||
|
if (objectDetector == outOfOrderTimestampTestDict[kLiveStreamTestsDictObjectDetectorKey]) {
|
||||||
|
[outOfOrderTimestampTestDict[kLiveStreamTestsDictExpectationKey] fulfill];
|
||||||
|
} else if (objectDetector == liveStreamSucceedsTestDict[kLiveStreamTestsDictObjectDetectorKey]) {
|
||||||
|
[liveStreamSucceedsTestDict[kLiveStreamTestsDictExpectationKey] fulfill];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user