狠狠撸

狠狠撸Share a Scribd company logo
OpenCV 3.0 on iOS
堤 修一 @shu223
2015.5.16 yidev #19
? 堤 修一(つつみ しゅういち)
? iOS専業フリーランス
? ブログ『Over&Out その後』
? 著書?
『iOS×BLE?Core Bluetoothプログラミング』?
『iOSアプリ開発 達人のレシピ100』
? WWDC 2015 行きます!
自己紹介
制作実绩(叠尝贰関连)
制作実绩(叠尝贰関连)
制作実绩(叠尝贰関连)
Music for the Deaf
制作実绩(叠尝贰関连)
Music for the Deaf
制作実绩(叠尝贰関连)
Music for the Deaf
制作実绩(叠尝贰関连)
Music for the Deaf
OpenCV とは by Google
はじめに:
iOSと画像/動画処理の歴史
? 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
? 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コード検出等の機能追加
OpenCV が iOS 開発者界隈で
忘れられつつあるような???
今日话すこと
今となっては iOS では Core Image も vImage も
GPUImage も自作シェーダも使えるけど、
今となっては iOS では Core Image も vImage も
GPUImage も自作シェーダも使えるけど、
OpenCV もすごくいいですよ
今となっては iOS では Core Image も vImage も
GPUImage も自作シェーダも使えるけど、
OpenCV もすごくいいですよ
という話を、最新版 3.0.0 ベースで話します。
なぜ今翱辫别苍颁痴か?
理由その1:圧倒的に机能が豊富
理由その1:圧倒的に机能が豊富
? 2500以上のアルゴリズム?機能
理由その1:圧倒的に机能が豊富
? 2500以上のアルゴリズム?機能
? 最新アルゴリズムが日々実装されている
- GSoC(Google Summer Of Code)
理由その2:Cross Platform
理由その2:Cross Platform
? サポートしているプラットフォーム
- iOS
- Android
- Linux
- Mac OS X
- Windows
- etc…
理由その2:Cross Platform
? サポートしているプラットフォーム
- iOS
- Android
- Linux
- Mac OS X
- Windows
- etc…
? 言語はC++
理由その3:今が热い
理由その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年ぶりのメジャーアップデート!
OpenCV でできること
の一例
(かつ Core Image や vImage でできないこと)
颜「以外」のものを検出
颜「以外」のものを検出
同梱の学習ツールを使い、分類器自体を自作
颜「以外」のものを検出
同梱の学習ツールを使い、分類器自体を自作
→ 任意の対象を検出可能(CIDetectorでは顔やQRコード等、APIが用意されているものだけ)
颜「以外」のものを検出
同梱の学習ツールを使い、分類器自体を自作
→ 任意の対象を検出可能(CIDetectorでは顔やQRコード等、APIが用意されているものだけ)
車
颜「以外」のものを検出
同梱の学習ツールを使い、分類器自体を自作
→ 任意の対象を検出可能(CIDetectorでは顔やQRコード等、APIが用意されているものだけ)
車 動物
颜「以外」のものを検出
同梱の学習ツールを使い、分類器自体を自作
→ 任意の対象を検出可能(CIDetectorでは顔やQRコード等、APIが用意されているものだけ)
参考:『顔以外のものを画像認識する - Qiita』
車 動物 ロゴ
颜を「认识」する
颜を「认识」する
? 顔「検出」ではなく「認識」
- 誰の顔かを推定する
颜を「认识」する
? 顔「検出」ではなく「認識」
- 誰の顔かを推定する
? 複数種の手法が実装されてい
る
- Eigenfaces
- Fisherfaces
- Local Binary Patterns
Histogram(LBPH)
特徴点の検出
特徴点の検出
? 特徴量算出に用いる
特徴点の検出
? 特徴量算出に用いる
? 用途
- ARのマーカー認識
- パノラマ写真合成
- 物体認識
特徴点の検出
? 特徴量算出に用いる
? 用途
- ARのマーカー認識
- パノラマ写真合成
- 物体認識
? 多数の手法が実装されている
- SIFT
- SURF
- ORB
- AKAZE 3.0.0
文字検出?認識 3.0.0
文字検出?認識
? 文字領域の「検出」
- ERFilter
3.0.0
文字検出?認識
? 文字領域の「検出」
- ERFilter
? 文字の「認識」
- OCRTesseract
OCRライブラリTesseractのラッパー
- OCRHMMDecoder
3.0.0
物体追跡 3.0.0
物体追跡
? 映像内で見え方が刻々と変化する
物体を追跡
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~)
High Dynamic Range Imaging (HDR) 3.0.0
High Dynamic Range Imaging (HDR) 3.0.0
Exposure sequence
High Dynamic Range Imaging (HDR) 3.0.0
Exposure sequence Exposure fusion
画像修復?补间(滨苍辫补颈苍迟颈苍驳)
画像修復?补间(滨苍辫补颈苍迟颈苍驳)
? 写真に意図せず写りこんでし
まった物体等を取り除き、そ
れによって欠損した領域を自
動修復する技術
画像修復?补间(滨苍辫补颈苍迟颈苍驳)
? 写真に意図せず写りこんでし
まった物体等を取り除き、そ
れによって欠損した領域を自
動修復する技術
? 関数を1つ呼ぶだけ
画像修復?补间(滨苍辫补颈苍迟颈苍驳)
? 写真に意図せず写りこんでし
まった物体等を取り除き、そ
れによって欠損した領域を自
動修復する技術
? 関数を1つ呼ぶだけ
元画像
画像修復?补间(滨苍辫补颈苍迟颈苍驳)
? 写真に意図せず写りこんでし
まった物体等を取り除き、そ
れによって欠損した領域を自
動修復する技術
? 関数を1つ呼ぶだけ
元画像 除去したい部分を指定
画像修復?补间(滨苍辫补颈苍迟颈苍驳)
? 写真に意図せず写りこんでし
まった物体等を取り除き、そ
れによって欠損した領域を自
動修復する技術
? 関数を1つ呼ぶだけ
元画像 除去したい部分を指定
他にも色々
他にも色々
領域分割?ラベリング
他にも色々
領域分割?ラベリング
Objectiveness 検出
他にも色々
領域分割?ラベリング
Objectiveness 検出
三次元姿勢(Pose)推定
iOS アプリへの導入方法
1. ビルドスクリプト を実行?
?
2. プロジェクトに追加
3. 依存フレームワークを追加
おなじみの3ステップ
CocoaPods?
一部バージョンは可能
? 野良でビルド済みバイナリを置いてpodspec提供し
てる人がいる
- https://github.com/Fl0p/OpenCV-iOS
- 2.4.8 が最新
- pull request 送ってみるといいかも
- オフィシャルで対応してほしいところ。。
Swift からの利用
? C++ で書く必要があるので、ObjC でラッパー書い
て Bridging Header で呼び出す
OpenCV のパフォーマンス?
on iOS
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_Bu?er に変換 → vImage の処理を併用可能
- vImage 等、Accelerate~にある処理はそっちを使う、という選択肢がとれる
NEON
? 参考書籍:「iOS SDK Hacks」
- NEONを用いたベクトル演算のサンプル?ベンチマーク
? NEONを用いたアルファブレンディングのサンプル
- https://github.com/Itseez/opencv_for_ios_book_samples/
? CvE?ects/CvE?ects/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 について発表してきました

More Related Content

OpenCV 3.0 on iOS