81
82

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SwiftとCIDetectorで効率よくアイドルの写真にヒゲを書き加える方法

Last updated at Posted at 2014-07-01

girl_hige.png

##はじめに
最近のアイドルは、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

##SinglePageViewを作成します
スクリーンショット 2014-07-03 22.48.05.png

##ProductNameを設定しましょう
スクリーンショット 2014-07-03 22.59.44.png

##BuildPurchase->CoreImage.frameworkを選択します
スクリーンショット 2014-07-03 23.02.29.png

##写真をドラッグ&ドロップしてプロジェクトに取り込みます
スクリーンショット 2014-07-03 23.38.17.png

##読み込むときにCopy Imagesにチェックを付けておきましょう.
スクリーンショット 2014-07-03 23.38.25.png

##storyboardでImageViewをドラッグ&ドロップします
スクリーンショット 2014-07-03 23.00.30.png

##ImageViewのImageに取り込んだ写真の名前が出てくるので選択すると画面に写真が表示されます
スクリーンショット 2014-07-03 23.39.24.png

##ImageViewをコードに追加します(右、左クリックしたままスライドさせる)
スクリーンショット 2014-07-03 23.00.56.png

##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 - 右目の位置

##シュミレーターで実行
おおお。上手にヒゲが描けました。

女性にヒゲ
face001.png

外国の人にヒゲ
face002.png

集合写真にヒゲ
face003.png

##おしまい
以上の方法で簡単に好きなアイドルに一瞬でヒゲを描く事ができるようになります。
ぜひ自分の好きな写真をおかずに遊んでみて下さい。

81
82
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
82

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?