0

I am studying currency recognition problems which is related to the Vision SDK of iOS11. I'm having trouble handling VNHomographicImageRegistrationRequest, which determines the perspective warp matrix needed to align the content of two images. But I couldn't find how to send two images parameters into this API, can anyone help me?

Andy Jazz
  • 49,178
  • 17
  • 136
  • 220

2 Answers2

1

Apple's Vision framework flow is always the same: Request -> Handler -> Observation

Example:

// referenceAsset & asset2 can be:
//     CGImage - CIImage - URL - Data - CVPixelBuffer
// Check initializers for more info
let request = VNHomographicImageRegistrationRequest(targetedCGImage: asset2, options: [:])

let handler = VNSequenceRequestHandler()
try! handler.perform([request], on: referenceAsset)
if let results = request.results as? [VNImageHomographicAlignmentObservation] {
    print("Perspective warp found: \(results.count)")
    results.forEach { observation in
        // A matrix with 3 rows and 3 columns.
        print(observation.warpTransform)
    }
}
nathan
  • 9,329
  • 4
  • 37
  • 51
0
-(matrix_float3x3)predictWithVisionFromImage:(UIImage *)imageTarget toReferenceImage:(UIImage*)imageRefer{

    UIImage *scaledImageTarget = [imageTarget scaleToSize:CGSizeMake(224, 224)];
    CVPixelBufferRef bufferTarget = [imageTarget pixelBufferFromCGImage:scaledImageTarget];
    UIImage *scaledImageRefer = [imageRefer scaleToSize:CGSizeMake(224, 224)];
    CVPixelBufferRef bufferRefer = [imageRefer pixelBufferFromCGImage:scaledImageRefer];

    VNHomographicImageRegistrationRequest* request = [[VNHomographicImageRegistrationRequest alloc]initWithTargetedCVPixelBuffer:bufferTarget completionHandler:nil];

    VNHomographicImageRegistrationRequest* imageRequest = (VNHomographicImageRegistrationRequest*)request;
    VNImageRequestHandler* handler = [[VNImageRequestHandler alloc]initWithCVPixelBuffer:bufferRefer options:@{}];
    [handler performRequests:@[imageRequest] error:nil];
    NSArray* resultsArr = imageRequest.results;
    VNImageHomographicAlignmentObservation* firstObservation = [resultsArr firstObject];
    return firstObservation.warpTransform;
}
Axel Guilmin
  • 11,454
  • 9
  • 54
  • 64