2017-09-14 5 views
0

durch Verwenden des folgenden Codes, um ein Gesicht von einem Bild zu erkennen.Wie führe ich die Gesichtserkennung in Swift

Wie kann ich ein Gesicht erkennen und es in einem NSMage speichern?

+0

So '' CIFeature' hat eine bounds' Eigenschaft, die das Begrenzungsrechteck definiert von dem, was gefunden wurde. Die Frage wird also: Wie kopierst du einen Teil eines Bildes? Zu welcher [diese Frage] (https://stackoverflow.com/questions/31254435/how-to-select-a-portion-of-animage-crop-and-save-it-using-swift) könnte etwas abwerfen Licht (persönlich mag ich die oben gewählte Antwort) und dann könntest du einen Blick auf [Wie man ein UIImage in eine Datei speichern mit UIImagePNGRepresentation] (https://www.hackingwithswift.com/example-code/media/how-to) -save-a-uiimage-to-a-file-using-uiimagepngrepräsentation) – MadProgrammer

+0

OSX hat keine UIwhatever. Er muss auch von NSImage in CImage konvertieren und zurück zu NSMagazin –

Antwort

5

Xcode 9 • Swift 4

extension NSImage { 
    var ciImage: CIImage? { 
     guard let data = tiffRepresentation else { return nil } 
     return CIImage(data: data) 
    } 
    var faces: [NSImage] { 
     guard let ciImage = ciImage else { return [] } 
     return (CIDetector(ofType: CIDetectorTypeFace, context: nil, options: [CIDetectorAccuracy: CIDetectorAccuracyHigh])? 
      .features(in: ciImage) as? [CIFaceFeature])? 
      .map { 
       let ciimage = ciImage.cropped(to: $0.bounds) // Swift 3 use cropping(to:) 
       let imageRep = NSCIImageRep(ciImage: ciimage) 
       let nsImage = NSImage(size: imageRep.size) 
       nsImage.addRepresentation(imageRep) 
      return nsImage 
     } ?? [] 
    } 
} 

Testing

let image = NSImage(contentsOf: URL(string: "https://i.stack.imgur.com/Xs4RX.jpg")!)! 
let faces = image.faces 

enter image description here

+0

Danke für Ihre Antwort. Wie kann ich die Größe des Crop-Fensters anpassen? Beispiel: Holen Sie das erkannte Gesichtsrechteck, erhöhen Sie die Größe des Rechtecks ​​und beschneiden Sie diesen Teil. Ändert $ 0.bounds mit einer benutzerdefinierten Rechteckhilfe. Bitte um Rat. – techno

+0

@techno die Antwort ist auf der iOS-Frage, die ich verknüpfte, als ich Ihre andere Frage schloss. Sie können 'bounds.insetBy (dx: -10, dy: -10) verwenden' –

+1

Vielen Dank ... :) – techno

Verwandte Themen