opencv 3.0 on ios
TRANSCRIPT
• 堤 修一(つつみ しゅういち)
• iOS専業フリーランス
• ブログ『Over&Out その後』
• 著書『iOS×BLE Core Bluetoothプログラミング』『iOSアプリ開発 達人のレシピ100』
• WWDC 2015 行きます!
自己紹介
• iOS 3, 4 時代
• iOS 3, 4 時代
- Core Image も vImage もまだなく、@niw さんがビルドした
OpenCV バイナリをみんな使用
• iOS 3, 4 時代
- Core Image も vImage もまだなく、@niw さんがビルドした
OpenCV バイナリをみんな使用
• iOS 5 時代
• iOS 3, 4 時代
- Core Image も vImage もまだなく、@niw さんがビルドした
OpenCV バイナリをみんな使用
• iOS 5 時代
- Core Image 登場。顔認識やフィルタ処理がサックリできるようになる
• iOS 3, 4 時代
- Core Image も vImage もまだなく、@niw さんがビルドした
OpenCV バイナリをみんな使用
• iOS 5 時代
- Core Image 登場。顔認識やフィルタ処理がサックリできるようになる
- vImage 登場。CPUのベクトルプロセッサを利用して最適化された画像処理が可能に
• iOS 3, 4 時代
- Core Image も vImage もまだなく、@niw さんがビルドした
OpenCV バイナリをみんな使用
• iOS 5 時代
- Core Image 登場。顔認識やフィルタ処理がサックリできるようになる
- vImage 登場。CPUのベクトルプロセッサを利用して最適化された画像処理が可能に
- GPUImage 登場(2012年2月)。その後iOSにおける画像/動画処理のデファクトスタンダードOSSに
• iOS 6, 7
- Core Image や vImage の機能が増強される(CIFilter でいえば、48 種 → 94 種 → ? )
• iOS 6, 7
- Core Image や vImage の機能が増強される(CIFilter でいえば、48 種 → 94 種 → ? )
• iOS 8
• iOS 6, 7
- Core Image や vImage の機能が増強される(CIFilter でいえば、48 種 → 94 種 → ? )
• iOS 8
- CIKernel が iOS でも利用できるようになり、自分でシェーダを書いてカスタムフィルタを自作可能に
• iOS 6, 7
- Core Image や vImage の機能が増強される(CIFilter でいえば、48 種 → 94 種 → ? )
• iOS 8
- CIKernel が iOS でも利用できるようになり、自分でシェーダを書いてカスタムフィルタを自作可能に
- CIDetector も QRコード検出等の機能追加
今となっては iOS では Core Image も vImage も
GPUImage も自作シェーダも使えるけど、
OpenCV もすごくいいですよ
という話を、最新版 3.0.0 ベースで話します。
理由その3:今が熱い• Release History
- 1.0 2006.10 - 2.0 2009.10 - 2.1 2010.4 - 2.2 2010.12 - 2.3 2011.7 - 2.4 2012.5 - 3.0 RC1 2015.4.24
理由その3:今が熱い• Release History
- 1.0 2006.10 - 2.0 2009.10 - 2.1 2010.4 - 2.2 2010.12 - 2.3 2011.7 - 2.4 2012.5 - 3.0 RC1 2015.4.24
6年ぶりのメジャーアップデート!
顔「以外」のものを検出同梱の学習ツールを使い、分類器自体を自作
→ 任意の対象を検出可能(CIDetectorでは顔やQRコード等、APIが用意されているものだけ)
顔「以外」のものを検出同梱の学習ツールを使い、分類器自体を自作
→ 任意の対象を検出可能(CIDetectorでは顔やQRコード等、APIが用意されているものだけ)
車
顔「以外」のものを検出同梱の学習ツールを使い、分類器自体を自作
→ 任意の対象を検出可能(CIDetectorでは顔やQRコード等、APIが用意されているものだけ)
車 動物
顔「以外」のものを検出同梱の学習ツールを使い、分類器自体を自作
→ 任意の対象を検出可能(CIDetectorでは顔やQRコード等、APIが用意されているものだけ)
参考:『顔以外のものを画像認識する - Qiita』
車 動物 ロゴ
顔を「認識」する• 顔「検出」ではなく「認識」
- 誰の顔かを推定する
• 複数種の手法が実装されている
- Eigenfaces
- Fisherfaces
- Local Binary Patterns Histogram(LBPH)
特徴点の検出• 特徴量算出に用いる
• 用途
- ARのマーカー認識
- パノラマ写真合成
- 物体認識
• 多数の手法が実装されている
- SIFT
- SURF
- ORB
- AKAZE 3.0.0
物体追跡• 映像内で見え方が刻々と変化する物体を追跡
• 複数実装あり
- TrackerBoosting
- TrackerMIL
- TrackerMedianFlow
- TrackerTLD
3.0.0
物体追跡• 映像内で見え方が刻々と変化する物体を追跡
• 複数実装あり
- TrackerBoosting
- TrackerMIL
- TrackerMedianFlow
- TrackerTLD
3.0.0
動画内のパンダが向きを変えても執拗にトラッキング!(3:14~)
物体追跡• 映像内で見え方が刻々と変化する物体を追跡
• 複数実装あり
- TrackerBoosting
- TrackerMIL
- TrackerMedianFlow
- TrackerTLD
• Tracker以外にも物体追跡の手法は(3.0より前から)色々とあるらしい
3.0.0
動画内のパンダが向きを変えても執拗にトラッキング!(3:14~)
一部バージョンは可能• 野良でビルド済みバイナリを置いてpodspec提供してる人がいる
- https://github.com/Fl0p/OpenCV-iOS - 2.4.8 が最新
- pull request 送ってみるといいかも
- オフィシャルで対応してほしいところ。。
GPUの利用• NVidia CUDA ランタイム API を利用して実装されている
→ iOS デバイスには恩恵なし
参考:GPUモジュールの概要説明 — opencv 2.2 documentation
• OpenCV の豊富な機能をOpenGL ES 2.0シェーダで書き換えて iOS (の GPU で)使いたい、というのが
GPUImage を作った動機らしい
並列化技術のサポートOpenCVがサポートしている並列化技術:
• OpenMP / TBB (Threading Building Blocks)
- iOSには関係なし(?←よくわかってない)
• OpenCL
- Private Framework としてはiOSに入ってるらしい
- が、Privateなので現状では恩恵受けてないはず
• GCD
- 2.4.3以降、一部処理でサポート(by Change Log)
Accelerate.framework との併用
cv::Mat から vImage_Buffer に変換 → vImage の処理を併用可能
- vImage 等、Accelerate~にある処理はそっちを使う、という選択肢がとれる
NEON• 参考書籍:「iOS SDK Hacks」
- NEONを用いたベクトル演算のサンプル・ベンチマーク
• NEONを用いたアルファブレンディングのサンプル
- https://github.com/Itseez/opencv_for_ios_book_samples/ • CvEffects/CvEffects/Processing_NEON.cpp
• OpenCV 3.0 では NEON による最適化も行われているらしい
open-source NEON optimizations - OpenCV Q&A Forum3.0.0
OpenCV on iOS• ひさしぶりのメジャーアップデートで今が熱い
• 他にはない機能が盛りだくさん
• パフォーマンス面では vImage、Core Image、GPUImage
と比較すると不利かも。ただしそれらと併用可能
➡ Core Image や GPUImage にはない高度な/最新の処理を行いたい場合は OpenCV もあたってみるといいかも
See also• OpenCV for iOS で画像の自動補間・修復
• iOS / OpenCV 3.0 で画像の特徴点を検出する(AKAZE, SIFT, SURF, ORB)
• OpenCV for iOS でウォーリーを探すカメラアプリをつくる
• OpenCV 3.0 の拡張モジュール群 opencv_contrib を iOS で利用する
• iOSと機械学習
• 「FILTERS」で学ぶ GLSL
• 【oFセミナーメモ5】映像解析
• 【iOS8】CIKernel を使ったカスタムフィルタのつくりかた
• 「顔以外」のものを画像認識する
• OpenCV for iOSの使い方
• Core Image の遷移エフェクトを使う
• Core Image の全エフェクトを試せるサンプルコードを公開しました
• シャッター音の鳴らないカメラアプリの実装方法
• 『漫画カメラ』風に写真を加工するiPhoneアプリの作り方
• 『第3回 iphone_dev_jp 東京iPhone/Mac勉強会』で vImage について発表してきました