Отслеживание прямоугольников с помощью VNTrackRectangleRequest не работает
Я использую VNDetectRectanglesRequest из Vision Framework, чтобы обнаружить прямоугольник, а затем пытаюсь отследить его с помощью VNTrackRectangleRequest. Я использую код ниже, чтобы сначала обнаружить прямоугольник:
- (void)startDetectingRectanglesWithPixelBuffer:(CVPixelBufferRef)pixelBuffer{
VNDetectRectanglesRequest *detectRectangleRequest = [[VNDetectRectanglesRequest alloc] initWithCompletionHandler:^(VNRequest * _Nonnull request, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
NSArray *results = request.results;
VNDetectedObjectObservation *observation = [results firstObject];
self.rectangleObservation = [VNRectangleObservation observationWithBoundingBox:observation.boundingBox];
});
}];
// Start detecting rectangles
NSError *error = nil;
if (![self.detectRectanglesSequenceRequestHandler performRequests:@[detectRectangleRequest] onCVPixelBuffer:pixelBuffer orientation:kCGImagePropertyOrientationRight error:&error]) {
NSLog(@"Error perfoming request: %@", [error localizedDescription]);
}
}
Обнаружение прямоугольника работает отлично. Затем я использую обнаруженный прямоугольник в качестве входных данных для запроса отслеживания прямоугольника:
- (void)startTrackingRectangleWithPixelBuffer:(CVPixelBufferRef)pixelBuffer{
VNTrackRectangleRequest *trackRectangleRequest = [[VNTrackRectangleRequest alloc] initWithRectangleObservation:self.rectangleObservation completionHandler:^(VNRequest * _Nonnull request, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
NSArray *results = request.results;
VNRectangleObservation *observation = [results firstObject];
self.rectangleObservation = observation;
});
}];
NSError *error = nil;
if(![self.trackRectangleSequenceRequestHandler performRequests:@[trackRectangleRequest] onCVPixelBuffer:pixelBuffer orientation:kCGImagePropertyOrientationRight error:&error]){
NSLog(@"Error performing rectangle tracking request: %@", [error localizedDescription]);
}
}
По какой-то причине трекер не может отследить прямоугольник.
Это наблюдение, которое я получаю;
"7A862544-BFE2-456B-B0BA-4C5206474251 1 [0,0148148 0,0125 0 0]"
Как вы можете видеть, он возвращает наблюдение с шириной и высотой 0 и выдает следующую ошибку при продолжении отслеживания:
Внутренняя ошибка: не ограничен размер ограничивающего прямоугольника отслеживаемого объекта.
Я точно знаю, что в заданных координатах существует прямоугольник, с помощью которого я инициализирую VNRectangleObservation (я даже положил свой телефон на подставку с изображением прямоугольника под ним просто для большей уверенности), но отслеживание все равно не удается.
Не совсем уверен, что делать.
PS Обратите внимание, что при замене кода VNTrackRectangleRequest на VNTrackObjectRequest, код работает отлично, и прямоугольник отслеживается. Это очень странно