狠狠撸

狠狠撸Share a Scribd company logo
OpenCVとモバイル
株式会社BizReach
プロダクトマーケティング本部
山下大輔
自己紹介
?山下大輔(やました?だいすけ)
?2015年1月よりビズリーチのiOSエンジニア
?@daisuke0131
?http://www.facebook.com/daisuke0131
?https://github.com/daisuke0131
https://itunes.apple.com/jp/app/haikurasu-ren-cainokyaria/id972002786?mt=8
swift系の勉強会やっています
http://d-cube.connpass.com/event/17185/
機械学習で学ぶSwift入門
http://d-cube.connpass.com/event/17185/
ゲーム開発で学ぶSwift入門
OpenCVとモバイル
モバイル(iOS)視点
機械学習視点
?学習の視点ではなく認識の視点から
?パフォーマンス的にどうなのか
?実装も絡めながら説明
?OpenCVでどんなことができるかざっくり説明
OpenCVについて
OpenCV(オープンシーヴィ、英語: Open Source Computer Vision
Library)とはインテルが開発?公開したオープンソースのコンピュータ
ビジョン向けライブラリ。 2009年にWillow Garage(ウィロー?ガレー
ジ)に開発が移管された後、2015年現在はItseezがメンテナンスを行なっ
ている。
wikipediaより https://ja.wikipedia.org/wiki/OpenCV
OpenCVについて
?最近3.0がリリース
?機能が豊富!
??-車、動物、人の検出
???->カスケードファイルを切り替えることで対応可能
https://www.youtube.com/watch?
v=5uCbEvXL94Q
https://www.youtube.com/watch?v=3BJFxnap0AI
??-顔認識、顔検出
-文字認識、文字検出
-さまざまな特徴量計算に対応(SHIFT,SURFなど)
OpenCVについて
haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
haarcascade_frontalcatface.xml
haarcascade_frontalcatface_extended.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_default.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_licence_plate_rus_16stages.xml
haarcascade_lowerbody.xml
haarcascade_pro?leface.xml
haarcascade_righteye_2splits.xml
haarcascade_russian_plate_number.xml
haarcascade_russian_plate_number.xml
haarcascade_smile.xml
haarcascade_upperbody.xml
検出については学習済みのカスケードファイルが用意
参考)
https://github.com/Itseez/opencv/tree/master/data/haarcascades
正面顔、目、体、笑顔等の
検出用など
OpenCVについて
ブースティング
決定木
EMアルゴリズム
k近傍法
サポートベクターマシン
http://docs.opencv.org/3.0.0/dd/ded/group__ml.html
各種識別器も実装されています。
OpenCVについて
?もちろんiOSで使えます!
-公式でビルドライブラリが配布されている
???????http://opencv.org/downloads.html
-CocoaPods上では公式には配布されていないので野良ビル
ドを使う必要がある。
???????https://github.com/Zi0P4tch0/Specs
???????ただし、現状は最新版の3.0には未対応
OpenCVについて
OpenCV contrib
https://github.com/Itseez/opencv/
https://github.com/itseez/opencv_contrib
OpenCV
->SHIFT,SURFなどの局所特徴量のモジュールは別管理
->これらの機能を使いたい場合は個別にビルドして組み込む
ビルドスクリプトも用意されているので簡単
$python opencv/platforms/ios/build_framework.py ios
OpenCVについて
?c++で呼び出す必要があります。
swiftから使うにはbridge-headerを設置してobjective-
c++を呼び出して、そこからOpenCVのライブラリを呼び
出します。
OpenCV library
Objective c++
Swift
顔検出 from 標準framework
?iOS 5.0あたりからCore Imageに機能的に追加された
顔の検出(笑顔検出、瞬き検出)
QRコードの検出
?iOS 9.0では文字検出、文字認識系もできるように!
https://developer.apple.com/library/prerelease/ios/documentation/CoreImage/Reference/
CIDetector_Ref/
?CIDetectorを使う
顔認識、顔検出について
顔認識
顔検出
たかし
顔認識システム
顔検出システム
写真に写っているのは誰かを識別する
写真の中から人の顔を抽出する
顔はここ!
顔認識、顔検出について
顔検出
顔検出システム
写真の中から人の顔を抽出する
顔はここ!
iOSではCore Image framework のCIDetectorクラスを
使うことで実装可能
パフォーマンス面での比較
CIDetector vs OpenCV
パフォーマンス面での比較
demo
パフォーマンス面での比較
0
0.1
0.2
0.3
0.4
0
45
90
135
180
CIDetector(High) CIDetector(Low) OpenCV
0.209
0.118
0.382
180
60
130130
60
180
CPU使用率(%) 処理時間(sec)
検証端末:iPhone 6 Plus
パフォーマンス面での比較
CIDetectorAccuracyLow
CIDetectorAccuracyHigh
->認識精度は下がるっぽい??あまり体感では違いがわからず。
?動画などのリアルタイムに処理する用途に向く
->認識精度が高いらしい。
?静止画等の処理スピードが要求されない用途に向く
パフォーマンス面での比較
NVidia CUDA ランタイム API を利用して実装されているので,
NVidia の GPU のみがサポートされています
参考)Open CV docs
http://opencv.jp/opencv-2svn/cpp/gpu_gpu_module_introduction.html
iOS GPU
https://developer.apple.com/library/ios/documentation/DeviceInformatio
Reference/iOSDeviceCompatibility/OpenGLESPlatforms/
OpenGLESPlatforms.html
?OpenCV
->iOSではGPU機能は使われていない。。
局所特徴量について
https://www.youtube.com/watch?v=LWY-w8AGGhE
?ARマーカー
?->テンプレート画像とカメラで撮影した画像の
???特徴量の対応付け
https://www.youtube.com/watch?v=8q0h1VJLIpM
?パノラマ写真作成
http://www.slideshare.net/lawmn/siftsurf
->回転、拡大縮小に強い特徴量
局所特徴量について
SHIFT
?->1999年頃に考案された特徴量
SURF
?->SHIFTの速度改良版
ORB
?->SURFの10倍高速といわれている
AKAZE
?->SHIFT,SURFの欠点を改良した特徴量
パフォーマンス面での比較
demo
パフォーマンス面での比較
0
0.055
0.11
0.165
0.22
0
45
90
135
180
SHIFT SURF ORB AKAZE
0.124
0.032
0.119
0.208
118
100
180
100100
180
100
118
処理時間(sec)CPU使用率(%)
検証端末:iPhone 6 Plus
特徴点の抽出数 1400 ??1800?? ? 500?? 1300
まとめ
?標準frameworkではできないことが色々できる。
?GPUを使えない面でパフォーマンス的に不利な感。
?OpenCVのパフォーマンスチューニングは少し面倒
OpenCV on iOS
OpenCV
?できることをざっくり紹介
おまけ
文字認識について
->iOS 9以降で可能になるはず
CIDetector
tesseract-oar
->google が開発中のオープンソースライブラリ
->cocoaPods経由で簡単に導入可能
pod 'TesseractOCRiOS'
パフォーマンス面では
demo
パフォーマンス面では
リアルタイムの認識は難しそう。。

More Related Content

OpenCV on mobile