CIDetector und UIImagePickerController
Ich versuche zu implementieren, die built-in-iOS-5 face-detection-API. Ich bin mit einer Instanz von UIImagePickerController
um dem Benutzer zu ermöglichen, ein Foto zu machen und dann bin ich versucht zu verwenden CIDetector
zum erkennen von Gesichtszügen. Leider featuresInImage
gibt immer ein array der Größe 0.
Hier der code:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage* picture = [info objectForKey:UIImagePickerControllerOriginalImage];
NSNumber *orientation = [NSNumber numberWithInt:
[picture imageOrientation]];
NSDictionary *imageOptions =
[NSDictionary dictionaryWithObject:orientation
forKey:CIDetectorImageOrientation];
CIImage *ciimage = [CIImage imageWithCGImage:[picture CGImage]
options:imageOptions];
NSDictionary *detectorOptions =
[NSDictionary dictionaryWithObject:CIDetectorAccuracyLow
forKey:CIDetectorAccuracy];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace
context:nil
options:detectorOptions];
NSArray *features = [detector featuresInImage:ciimage];
NSLog(@"Feature size: %d", features.count);
}
Diese immer 0 zurück features. Allerdings, wenn ich ein UIImage aus einer Datei eingebaut, um die Anwendung, die Gesichtserkennung funktioniert Super.
Ich bin mit code aus diesem Pragmatic Bookshelf Artikel.
Für was es Wert ist, ich finde den Fehler beim konvertieren der UIImage von der Kamera auf einen CIImage, aber es könnte alles sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
@tonyc Ihre Lösung funktioniert nur für einen speziellen Fall, der "UIImageOrientationRight". Das problem ergibt sich aus der Differenz zwischen der Orientierung bei UIImage und CIDetectorImageOrientation. Von iOS-docs:
So das problem ist jetzt die Konvertierung zwischen diesen beiden Orientierungen, hier ist was ich getan habe in meinem code habe ich getestet und es hat funktioniert für alle Ausrichtungen:
Sicher genug, nachdem er einen Tag mit der Suche in diesem und ratlos, ich habe eine Lösung gefunden, eine Stunde nach der Veröffentlichung dieser.
Habe ich schließlich bemerkt, dass die Gesichtserkennung funktionierte in der Landschaft, aber nicht im hochformat.
Stellt sich heraus, ich brauchte diese Optionen:
Swift 3-Version
Ich hatte ein ähnliches problem - die Gesichtserkennung arbeitet in Orientierungen, die nicht mit dem Bild übereinstimmen orientation-Eigenschaft.
iOS-Gesichtserkennung, Ausrichtung und Einstellung der CIImage Orientierung
einem schnellen work-around, den ich gefunden, um zu helfen, das zu ignorieren Sie die Ausrichtung der Bilder alle zusammen und "glätten" das Bild (so dass es keine Bild-Orientierung-Daten)
Habe ich diese code:
http://blog.logichigh.com/2008/06/05/uiimage-fix/
und sicher genug, wie es aussieht, ist die Arbeit viel besser für die front-Kamera Bilder. Ich habe nicht versucht, genug über die Landschaft zu sagen, ob es geholfen hat, es sieht aber vielversprechend