##はじめに
最近のアイドルは、1グループあたりの人数が多すぎて、効率よくヒゲを描かないと時間がまったく足りなくなってしまいました。
さて、iOSのCIDetectorTypeFaceを使用する事で簡単に顔を認識できることからA○B48人分の顔抽出を試して効率よくヒゲを描いてみたいと思います。
注.ここで紹介する画像はフリーの人物素材画像を使用しています。
http://www.photo-ac.com/ (人物)
http://www.irasutoya.com/2013/08/blog-post_8023.html (ひげ画像)
自身で遊ぶ場合は、ぜひ好きなアイドル画像をおかずに楽しんで下さい。
##Xcode6 Beta をダウンロードします.
iOSDevCenterからDLできます。
(iOS Developer Programへの登録(有償)が必要です)
https://developer.apple.com/devcenter/ios/index.action
##BuildPurchase->CoreImage.frameworkを選択します
##読み込むときにCopy Imagesにチェックを付けておきましょう.
##storyboardでImageViewをドラッグ&ドロップします
##ImageViewのImageに取り込んだ写真の名前が出てくるので選択すると画面に写真が表示されます
##ImageViewをコードに追加します(右、左クリックしたままスライドさせる)
##ViewController.swiftにロジックを記述します
ソースコードはgithubにあげています。下記をそのままCopy&PastすればOK.
https://github.com/oggata/FacialRecognition/blob/master/FacialRecognition/ViewController.swift
(以下にViewController.swift内部の簡単な解説を記載しますので参考にしてください)
###(コード解説)画像処理にはCIImageクラスを使います
画像に関するクラスは複数用意されていますが、用途によって変換をして使い、
今回は画像処理が目的なのでCIImageを使用します。
UIImage : Viewとして表示するための画像クラス
CIImage : CoreImageは画像処理のための画像クラス
NSImage : Cocoaで画像データを扱う為のクラス
CGImage : UIImageに含まれる
たとえば、UIImageクラスで作成された画像を使いたければ変換することもできます。
var uiImage = UIImage(named:"p2.jpg")
var ciImage = CIImage(CGImage:uiImage.CGImage)
###(コード解説)顔検出のやり方
解析の精度はoptionsで指定できます。
(options)
CIDetectorAccuracyLow - 精度は低いが、パフォーマンスは良い
CIDetectorAccuracyHigh - 精度は高いが、パフォーマンスは悪い
var ciDetector = CIDetector(
ofType:CIDetectorTypeFace
,context:nil
,options:[
CIDetectorAccuracy:CIDetectorAccuracyHigh,
CIDetectorSmile:true
]
)
###(コード解説)解析結果
結果は下記のような感じで座標が返ってきます。
CoreImageの座標系は左下が(0,0)になることに注意が必要です。(UI系は左上が(0,0))
bounds - 顔の範囲
hasLeftEyePosition - 左目の位置を検出できたか
hasMouthPosition - 口の位置を検出できたか
hasRightEyePosition - 右目の位置を検出できたか
leftEyePosition - 左目の位置
mouthPosition - 口の位置
rightEyePosition - 右目の位置
##シュミレーターで実行
おおお。上手にヒゲが描けました。
##おしまい
以上の方法で簡単に好きなアイドルに一瞬でヒゲを描く事ができるようになります。
ぜひ自分の好きな写真をおかずに遊んでみて下さい。