Upload
daisuke-yamashita
View
244
Download
5
Embed Size (px)
Citation preview
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_profileface.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
180CPU使用率(%) 処理時間(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/DeviceInformation/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
118100
180
100100
180
100118
処理時間(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
パフォーマンス面では
リアルタイムの認識は難しそう。。