しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

CIDetectorで画像の顔認識をしてみる

まずはCoreImage.frameworkをプロジェクトに追加します。

f:id:llcc:20160509223036p:plain

顔認識の方法は以下の通りです。
CIDetectorのfeaturesInImageメソッドで画像解析をします。

戻り値として顔・目・口の位置や、顔の角度などを取得できます。
trackingIDは動画を解析する際に、顔を見分ける為に使われるIDだと思われます。

import CoreImage

let imageData = NSData(contentsOfURL: NSURL(string: "画像のURL")!)
let image = UIImage(data: imageData!)!
let ciImage = CIImage(image: image)!

let detector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: nil)
let features = detector.featuresInImage(ciImage)

print(features) // 複数の顔がある場合はfeaturesにも複数の要素がセットされる
(features as? [CIFaceFeature])?.forEach {
    print($0.bounds) // yの位置が上下判定しているので注意!!
    print($0.hasLeftEyePosition)
    print($0.leftEyePosition)
    print($0.hasRightEyePosition)
    print($0.rightEyePosition)
    print($0.hasMouthPosition)
    print($0.mouthPosition)
    print($0.hasTrackingID)
    print($0.trackingID)
    print($0.hasTrackingFrameCount)
    print($0.trackingFrameCount)
    print($0.hasFaceAngle)
    print($0.faceAngle)
    print($0.hasSmile)
    print($0.leftEyeClosed)
    print($0.rightEyeClosed)
}

認識の精度はかなり良く、正確な位置を示してくれました。