iOS Bestimmen Sie die Ecken einer Visitenkarte in Echtzeit

Ich möchte eine Visitenkarten-Erkennungsfunktion wie diese App implementieren https: //scanbot.i). Die Kamera sollte eine Visitenkarte erkennen und automatisch ein Bild davon aufnehmen (nur die Visitenkarte).

Meine Idee wurde mitBradLarson's GPUImage Bibliothek, erkenne die Ecken (mit dem Harris-Eckenerkennungsalgorithmus), berechne das größte Rechteck mit den erhaltenen Ecken und beschneide das im Rechteck enthaltene Bild.

Hier ist mein Code:

 - (void)setupFilter {
    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];

    filter = [[GPUImageHarrisCornerDetectionFilter alloc] init];
    [(GPUImageHarrisCornerDetectionFilter *)filter setThreshold:0.01f];
    [(GPUImageHarrisCornerDetectionFilter *)filter setSensitivity:0.5f];
    [(GPUImageHarrisCornerDetectionFilter *)filter setBlurRadiusInPixels:2.0f];

    [videoCamera addTarget:filter];
    videoCamera.runBenchmark = YES;
    GPUImageView *filterview = [[GPUImageView alloc] init];
    self.view=filterview;

    GPUImageCrosshairGenerator *crosshairGenerator = [[GPUImageCrosshairGenerator alloc] init];
    crosshairGenerator.crosshairWidth = 22.0;
    [crosshairGenerator forceProcessingAtSize:CGSizeMake(480.0, 640.0)];

    [(GPUImageHarrisCornerDetectionFilter *)filter setCornersDetectedBlock:^(GLfloat* cornerArray, NSUInteger cornersDetected, CMTime frameTime) {
        [crosshairGenerator renderCrosshairsFromArray:cornerArray count:cornersDetected frameTime:frameTime];
    }];

    GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
    [blendFilter forceProcessingAtSize:CGSizeMake(480.0, 640.0)];
    GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init];
    [videoCamera addTarget:gammaFilter];
    [gammaFilter addTarget:blendFilter];

    [crosshairGenerator addTarget:blendFilter];
    [blendFilter addTarget:filterview];

    [videoCamera startCameraCapture];

}

Das Problem ist, dass ich nicht weiß, wie ich die @ -Eigenschaft anpassen solthreshold undsensibility Attribute, um die Ecken zu erhalten (jetzt erhalte ich die Ecken für alle Objekte im Bild).

Ich weiß auch nicht, wie ich damit umgehen sollGLfloat* cornerArray.

Ich weiß nicht, ob ich auf dem richtigen Weg bin. Irgendwelche anderen Ideen zur Implementierung dieser Funktionalität oder gibt es eine vorhandene Bibliothek?

Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage