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