28
OpenCVとモバイル 株式会社BizReach プロダクトマーケティング本部 山下大輔

OpenCV on mobile

Embed Size (px)

Citation preview

Page 1: OpenCV on mobile

OpenCVとモバイル

株式会社BizReach プロダクトマーケティング本部 山下大輔

Page 2: OpenCV on mobile

自己紹介・山下大輔(やました だいすけ) ・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

Page 3: OpenCV on mobile

swift系の勉強会やっています

http://d-cube.connpass.com/event/17185/機械学習で学ぶSwift入門

http://d-cube.connpass.com/event/17185/ゲーム開発で学ぶSwift入門

Page 4: OpenCV on mobile

OpenCVとモバイル

モバイル(iOS)視点

機械学習視点

・学習の視点ではなく認識の視点から

・パフォーマンス的にどうなのか ・実装も絡めながら説明

・OpenCVでどんなことができるかざっくり説明

Page 5: OpenCV on mobile

OpenCVについて

OpenCV(オープンシーヴィ、英語: Open Source Computer Vision Library)とはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリ。 2009年にWillow Garage(ウィロー・ガレージ)に開発が移管された後、2015年現在はItseezがメンテナンスを行なっている。

wikipediaより https://ja.wikipedia.org/wiki/OpenCV

Page 6: OpenCV on mobile

OpenCVについて

・最近3.0がリリース ・機能が豊富!   -車、動物、人の検出    ->カスケードファイルを切り替えることで対応可能

https://www.youtube.com/watch?v=5uCbEvXL94Q https://www.youtube.com/watch?v=3BJFxnap0AI

  -顔認識、顔検出 -文字認識、文字検出 -さまざまな特徴量計算に対応(SHIFT,SURFなど)

Page 7: OpenCV on mobile

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

正面顔、目、体、笑顔等の 検出用など

Page 8: OpenCV on mobile

OpenCVについて

ブースティング 決定木 EMアルゴリズム k近傍法 サポートベクターマシン

http://docs.opencv.org/3.0.0/dd/ded/group__ml.html

各種識別器も実装されています。

Page 9: OpenCV on mobile

OpenCVについて

・もちろんiOSで使えます! -公式でビルドライブラリが配布されている

       http://opencv.org/downloads.html

-CocoaPods上では公式には配布されていないので野良ビルドを使う必要がある。

       https://github.com/Zi0P4tch0/Specs

       ただし、現状は最新版の3.0には未対応

Page 10: OpenCV on mobile

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

Page 11: OpenCV on mobile

OpenCVについて

・c++で呼び出す必要があります。 swiftから使うにはbridge-headerを設置してobjective-c++を呼び出して、そこからOpenCVのライブラリを呼び出します。

OpenCV library

Objective c++

Swift

Page 12: OpenCV on mobile

顔検出 from 標準framework

・iOS 5.0あたりからCore Imageに機能的に追加された

顔の検出(笑顔検出、瞬き検出) QRコードの検出

・iOS 9.0では文字検出、文字認識系もできるように!

https://developer.apple.com/library/prerelease/ios/documentation/CoreImage/Reference/CIDetector_Ref/

・CIDetectorを使う

Page 13: OpenCV on mobile

顔認識、顔検出について

顔認識

顔検出

たかし

顔認識システム

顔検出システム

写真に写っているのは誰かを識別する

写真の中から人の顔を抽出する顔はここ!

Page 14: OpenCV on mobile

顔認識、顔検出について

顔検出

顔検出システム

写真の中から人の顔を抽出する顔はここ!

iOSではCore Image framework のCIDetectorクラスを 使うことで実装可能

Page 15: OpenCV on mobile

パフォーマンス面での比較

CIDetector vs OpenCV

Page 16: OpenCV on mobile

パフォーマンス面での比較

demo

Page 17: OpenCV on mobile

パフォーマンス面での比較

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

Page 18: OpenCV on mobile

パフォーマンス面での比較

CIDetectorAccuracyLow

CIDetectorAccuracyHigh

->認識精度は下がるっぽい? あまり体感では違いがわからず。  動画などのリアルタイムに処理する用途に向く

->認識精度が高いらしい。  静止画等の処理スピードが要求されない用途に向く

Page 19: OpenCV on mobile

パフォーマンス面での比較

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機能は使われていない。。

Page 20: OpenCV on mobile

局所特徴量について

https://www.youtube.com/watch?v=LWY-w8AGGhE

・ARマーカー  ->テンプレート画像とカメラで撮影した画像の    特徴量の対応付け

https://www.youtube.com/watch?v=8q0h1VJLIpM

・パノラマ写真作成

http://www.slideshare.net/lawmn/siftsurf

->回転、拡大縮小に強い特徴量

Page 21: OpenCV on mobile

局所特徴量について

SHIFT  ->1999年頃に考案された特徴量 SURF  ->SHIFTの速度改良版 ORB  ->SURFの10倍高速といわれている AKAZE  ->SHIFT,SURFの欠点を改良した特徴量

Page 22: OpenCV on mobile

パフォーマンス面での比較

demo

Page 23: OpenCV on mobile

パフォーマンス面での比較

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

Page 24: OpenCV on mobile

まとめ

・標準frameworkではできないことが色々できる。 ・GPUを使えない面でパフォーマンス的に不利な感。 ・OpenCVのパフォーマンスチューニングは少し面倒

OpenCV on iOS

OpenCV

・できることをざっくり紹介

Page 25: OpenCV on mobile

おまけ

Page 26: OpenCV on mobile

文字認識について

->iOS 9以降で可能になるはず

CIDetector

tesseract-oar->google が開発中のオープンソースライブラリ

->cocoaPods経由で簡単に導入可能

pod 'TesseractOCRiOS'

Page 27: OpenCV on mobile

パフォーマンス面では

demo

Page 28: OpenCV on mobile

パフォーマンス面では

リアルタイムの認識は難しそう。。