SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
日本Androidの会 京都支部
                      第3回 勉強会
                       (2011-12-03)

     OpenCV を
Android で動かしてみた



      Toru UENOYAMA
  @ 日本Androidの会 京都支部
自己紹介
   名前
       上野山 徹 (うえのやま とおる)
       Google+ : Toru UENOYAMA

   出身
       和歌山県
        • みかん と 梅干し と
          タチウオ と カレー で有名
                                  和歌山県

   仕事
       京都の電機メーカーで
        (組み込み + 画像処理)/2なソフト開発してます
What’s OpenCV ?
OpenCVとは
  オープンソースの画像処理ライブラリ
  コンピュータビジョンに関する
   数多くの機能を提供する
  最新研究の画像処理技術やGPGPUにも対応
  言語インターフェイス
     • 元はC言語向け
     • 今では C++, Python, Ruby, Java などなど
    対応OS
     • Windows, MacOS, Linux, FreeBSD, iOS, Android など

         ホビーユースから学術研究用途まで
        幅広く使える画像処理ライブラリです!
                                                         4
OpenCVの機能
各種フィルタなど        幾何表現や
 汎用画像処理         画像特徴量

                                           複数カメラで
領域分割・切出し                                   の三次元復元



色変換・形状変換




                                          フィッティング

機械学習,形状
認識,顔検出     移動物体の追跡

                        http://opencv.willowgarage.com/wiki/
                                                               5
OpenCV の実用例
   DARPA Grand Challenge
     制限時間内に車両自律走行で
      走破させる競技
     多くのチームが
      OpenCVを使用



   一部の画像処理検査装置
   研究機関でのアルゴリズム評価ソフト

                  http://en.wikipedia.org/wiki/DARPA_Grand_Challenge
                  http://www.cengen.com/content/darpa-grand-challenge-2004
                                                                             6
OpenCV の 歴史
   略歴
       1999年 Intelにて開発がスタート
       2006年 正式版(1.0)リリース
       2008年 WillowGarage(米ベンチャー)が開発を引継ぐ
   バージョン
          Ver     年月                   主な変更内容
        1.0     2006年10月   正式リリース
        1.1α    2008年10月   バグ修正,機能追加
        2.0     2009年9月    C++インターフェイス追加
        2.1     2010年4月    機能追加,TBB対応
        2.2     2010年12月   ライブラリ構成の見直し(細分化), CUDA対応
        2.3     2011年6月    Androidに正式対応,機能追加
        2.3.1   2011年7月    Android版のAPI充実

                                                      7
OpenCVの特徴

   実装機能が豊富
       画像処理に関することはほぼ網羅されている
        • 新機能もどんどん追加されている
       豊富すぎて必要な機能を探すのが大変だったり


   機能の粒度が小さい
       必要な機能だけを組み合わせて使える
        • (無駄がない)
       ほしい機能を作るためには,関連する関数を
        適切に組み合わせないといけない
                                8
OpenCVの特徴
   ドキュメントが全体的に不足
     リファレンスに行間が多すぎ
     リファレンス化されていない関数も多い
        • マイナー言語の場合は,C/C++言語向けの内容と
          ソースコードを見比べながら試行錯誤…


    面倒ごともありますが,ベタな実装と比較すれば
        画像処理プログラミングが
         かなり楽になります!

                                     9
Android 版 OpenCV
OpenCV for Android
   概要
     OpenCV 2.2 以前でもAndroidで動作したものの…
     これから使うなら 最新版(2.3.1beta2)のPrebuilt
      パッケージがおすすめ

   動作環境
       Android ≧ 2.2 (APIレベル ≧ 8)
        ※ JavaAPIを用いない場合は Android ≧ 1.5 (APIレベル≧3)


   インストール方法
       http://bit.ly/nqPTnO を参照してください。
                                                 11
Android版を使う上でまず考えること
   どちらのAPIを使うか
    ① Java APIを使う
    ② C++ APIを使う (NDK)
    ③ ハイブリッド(①+②)


   カメラ画像をどのように取得するか
    ① Android のカメラ機能
    ② OpenCV のカメラ機能


    ⇒ それぞれ,以降のページで説明します
                          12
Java API for Android
   特徴
       Java上で実装・ビルドする。
        • NDKは不要 
       API呼び出し時のオーバーヘッドが大きい 
        • API内部の処理はNDKでビルド済のため変わらないハズ
     デバッグは楽                        SurfaceView

     PC版とAPI仕様が
      異なる                    行わせたい画像処理 in Java

            オーバーヘッド大

                                  Java API (OpenCV)
         OpenCV for Android
                                Native Library (OpenCV)
                                                          13
C++ API for Android
   特徴
     C++によりネイティブコードでOpenCVを呼び出す
     Java側(UI側)からの呼び出しは,
      JNIラッパーを作成しなければならない 
     NDKでのビルドが必要 
     デバッグが面倒                SurfaceView

     Java側からの呼び出しを        UI側の処理 in Java
      減らすことで,オーバー       JNIラッパー(自作する)
      ヘッドを減らせる 
                        行わせたい画像処理 in C++
     PC版と同じAPIを使える 

           OpenCV for Android   Native Library (OpenCV)

                                                          14
Androidのカメラ機能を使う場合
   Android OSのカメラ    SurfaceView        Activity

    機能を用いてyuv形式
    で取得したのち,         SampleViewBase

    OpenCVのMat型に
    変換する。            Sample1View       Sample1Java

   OS標準のAPIを用いる
    ため,機種
    依存性が小             Mat型変数(mYuv)にカメラ画像のByte配列を格納


   少し遅いかも
                               SurfaceViewに描画するため,
                               Mat型からBitmapを生成して戻る

                                                     15
OpenCVのカメラ機能を使う場合
   OpenCVのカメラ画像                 SurfaceView            Activity

    取得API(highgui.VideoCaputure)
    を用いて画像データを SampleCvViewBase
    取得する。
                                  Sample2View         Sample2View


   機種依存性が高い

                                    VideoCapture.retreive で直接Mat
   処理が軽いかも                         型変数にカメラ画像を取得。




                                          SurfaceViewに描画するため,
                                          Mat型からBitmapを生成して戻る
                                                                    16
リファレンス情報(1/2)
   http://opencv.jp/
       日本語のリファレンスが存在する
        • REFERENCE MANUAL → C++リファレンス
        • COOKBOOK [おすすめ]
     少し情報が古い(Ver2.2相当)
     Java版が無いので、C++版から読み替えが必要


   http://opencv.itseez.com/modules/refman.html
     英語だが最新リファレンス(Ver2.3相当)
     JavaAPIの記述がないので読み替えが必要


                                                   17
リファレンス情報(2/2)
   Javadoc でソースから生成する
       Java API のリファレンスが手に入る
        • クラス構造などは参考になる
       説明はわかりにくい
        • 結局C++リファレンスと
          にらめっこになる
       Javadocの生成方法
        > javadoc –help
        > cd <ソース解凍先>¥OpenCV-2.3.1
        > javadoc -sourcepath src -d javadoc -subpackages org.opencv


   『詳解 OpenCV』(オライリー社)
       画像処理アルゴリズムの考え方も含め
        丁寧に記述されている
       C API (≠C++) のため読み替えがさらに大変
                                                                       18
Androidで実装するときのTIPS
   まずはPC版OpenCVでアルゴリズムを検討し、
    その後Androidに移植すると良さそう。
     OpenCVのライブラリサイズが大きい(5MB強)ため、
      デバッグ時の転送&展開に時間がかかる。
     JavaAPIの情報が少ないため、想定通りに動かな
      い場合の切り分けが難しい。


   端末によってカメラの解像度や写りの質・
    CPU速度などが異なるため、一様には
    動作してくれないことにも注意する。

                                19
Android版OpenCVの実装例




                     20
ドロイドくん追跡カー@KOF2011
11/11~12に開催されたKOF2011
(関西オープンフォーラム) に動態展示しました
全体処理の流れ
 ドロイドくん                                                                           ギアボックス




                                    ②左右モーターの
            内蔵カメラ                    回転速度と
                                     駆動時間を指令




            ①OpenCVで
             ドロイドくんの
Androidケータイ  位置を検出                                                                            Arduino

    http://ja.wikipedia.org/wiki/Arduino , http://www.tamiya.com/japan/products/70168double_gearbox/index.htm
①画像処理
   緑色の領域を抽出し,サイズが最も大きな
    領域をドロイド君人形と認識させる。
    カメラ画像を取得     “色”で分離しやすい
                    指標に変換     (色相)
     RGB→HSV変換
                              (彩度)
    色相,彩度,輝度
                 緑色のピクセルだけ
     で制限をかける      にマークをつける    (輝度)


     ノイズ除去

     領域に分割

     最大の領域を
      見つける
    モータ制御値を       抽出領域の中心が
     生成(&送信)     画面中央に来るように
                                23
ソースコード(画像取得,色抽出,領域分割)




                        24
ソースコード(最大領域の探索)




                  25
②モーターを動かす
          【ハード構成】      【ソフト構成】

                       画像追跡ソフト
          Android端末
                                      OpenCV




                        Microbridge
                                      通信ソケットのようなものを
                USB                   張ってくれます
                                      今回は,左右モーターの回転
          USBホストシールド
                                      時間と回転速度を指令
                                      (Down方向のみ)
           Arduino
          (マイコン基板)     モーター制御ソフト

回転方向の     モータードライバ
選択と,        シールド                      指令された回転時間・速度に
電力増幅                    PWM           なるように,PWMを生成
(約500円)        PWM
          タミヤモーター

                                                  26
ソースコード(指令値の生成と送信)




    バイト配列をsendすれば




                    27
ソースコード(Arduino)

     バイト配列として       データ受信時の
     受信データを読み出せる
                   イベントハンドラ


                              初期化処理




                                      28
実機デモ




       デモ
            29
まとめ



       和歌山県は
      近畿地方です!

                                          30
特別出演:あり太君 http://twitter.com/shokokanko
まとめ <Take2>
   You + Android = Androidはより優秀なWeb端末
   You + Android + OpenCV =
    Androidが簡単に画像処理機能を持てる!
   You + Android + OpenCV + Micro Processor =
    Androidが ”アンドロイド” に進化する!!

                  OpenCVやマイコンで
                  一緒に遊びませんか?
                     →『日本 Android の会 京都支部』
                       http://groups.google.com/group/android-kyoto
                                                                31
Thank you!

Contenu connexe

Tendances

[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo NagataInsight Technology, Inc.
 
Hyper-V ネットワークの基本
Hyper-V ネットワークの基本Hyper-V ネットワークの基本
Hyper-V ネットワークの基本Syuichi Murashima
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛Edward Kuo
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
SQL Server中級者のための実践で使えるかもしれないTips集
SQL Server中級者のための実践で使えるかもしれないTips集SQL Server中級者のための実践で使えるかもしれないTips集
SQL Server中級者のための実践で使えるかもしれないTips集Sho Okada
 
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらいSatoshi Kubo
 
MAP 実装してみた
MAP 実装してみたMAP 実装してみた
MAP 実装してみたMasakazu Asama
 
SpectreBustersあるいはLinuxにおけるSpectre対策
SpectreBustersあるいはLinuxにおけるSpectre対策SpectreBustersあるいはLinuxにおけるSpectre対策
SpectreBustersあるいはLinuxにおけるSpectre対策Masami Hiramatsu
 
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたLinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたHiraku Toyooka
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングYuma Ohgami
 
ストリーミングサービス研究グループ
ストリーミングサービス研究グループストリーミングサービス研究グループ
ストリーミングサービス研究グループMasaaki Nabeshima
 
【18-C-3】システムアーキテクチャ構築の実践手法
【18-C-3】システムアーキテクチャ構築の実践手法【18-C-3】システムアーキテクチャ構築の実践手法
【18-C-3】システムアーキテクチャ構築の実践手法Developers Summit
 
Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)marsee101
 
Jenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanJenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanAkihiko Horiuchi
 

Tendances (20)

[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
 
Hyper-V ネットワークの基本
Hyper-V ネットワークの基本Hyper-V ネットワークの基本
Hyper-V ネットワークの基本
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
OTRS紹介資料
OTRS紹介資料OTRS紹介資料
OTRS紹介資料
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
Baremetal openstackのご紹介
Baremetal openstackのご紹介Baremetal openstackのご紹介
Baremetal openstackのご紹介
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
SQL Server中級者のための実践で使えるかもしれないTips集
SQL Server中級者のための実践で使えるかもしれないTips集SQL Server中級者のための実践で使えるかもしれないTips集
SQL Server中級者のための実践で使えるかもしれないTips集
 
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
 
iostatの見方
iostatの見方iostatの見方
iostatの見方
 
MAP 実装してみた
MAP 実装してみたMAP 実装してみた
MAP 実装してみた
 
SpectreBustersあるいはLinuxにおけるSpectre対策
SpectreBustersあるいはLinuxにおけるSpectre対策SpectreBustersあるいはLinuxにおけるSpectre対策
SpectreBustersあるいはLinuxにおけるSpectre対策
 
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたLinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
DPDKを拡張してみた話し
DPDKを拡張してみた話しDPDKを拡張してみた話し
DPDKを拡張してみた話し
 
ストリーミングサービス研究グループ
ストリーミングサービス研究グループストリーミングサービス研究グループ
ストリーミングサービス研究グループ
 
【18-C-3】システムアーキテクチャ構築の実践手法
【18-C-3】システムアーキテクチャ構築の実践手法【18-C-3】システムアーキテクチャ構築の実践手法
【18-C-3】システムアーキテクチャ構築の実践手法
 
Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)Vivado hls勉強会4(axi4 master)
Vivado hls勉強会4(axi4 master)
 
Jenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanJenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue Ocean
 

En vedette

Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Hiroshi Yoshida
 
Deflate
DeflateDeflate
Deflate7shi
 
単一物体追跡論文のサーベイ
単一物体追跡論文のサーベイ単一物体追跡論文のサーベイ
単一物体追跡論文のサーベイHitoshi Nishimura
 
Deep learningの軽い紹介
Deep learningの軽い紹介Deep learningの軽い紹介
Deep learningの軽い紹介Yoshihisa Maruya
 
勉強会資料 Distribution
勉強会資料 Distribution勉強会資料 Distribution
勉強会資料 Distributionmiki koganei
 
Compact ordered dict__k_lab_meeting_
Compact ordered dict__k_lab_meeting_Compact ordered dict__k_lab_meeting_
Compact ordered dict__k_lab_meeting_miki koganei
 
Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法Masashi Shibata
 
ARもVRもMRもまとめてドーン
ARもVRもMRもまとめてドーンARもVRもMRもまとめてドーン
ARもVRもMRもまとめてドーンSatoshi Maemoto
 
センサー・VR・MR 基本とオススメ
センサー・VR・MR 基本とオススメセンサー・VR・MR 基本とオススメ
センサー・VR・MR 基本とオススメSatoshi Maemoto
 
悪意ないユーザに配慮した不正クライアントの排除
悪意ないユーザに配慮した不正クライアントの排除悪意ないユーザに配慮した不正クライアントの排除
悪意ないユーザに配慮した不正クライアントの排除klab-koike-r
 
負荷試験、どうしてる?(公開版)
負荷試験、どうしてる?(公開版)負荷試験、どうしてる?(公開版)
負荷試験、どうしてる?(公開版)miki koganei
 
Raspberry piと.net coreのstandardな関係
Raspberry piと.net coreのstandardな関係Raspberry piと.net coreのstandardな関係
Raspberry piと.net coreのstandardな関係Masuda Tomoaki
 
MS COCO Dataset Introduction
MS COCO Dataset IntroductionMS COCO Dataset Introduction
MS COCO Dataset IntroductionShinagawa Seitaro
 
ARもVRもMRもまとめてドドンドーン!
ARもVRもMRもまとめてドドンドーン!ARもVRもMRもまとめてドドンドーン!
ARもVRもMRもまとめてドドンドーン!Satoshi Maemoto
 
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Yasutomo Kawanishi
 

En vedette (19)

OpenCV 3.0 on iOS
OpenCV 3.0 on iOSOpenCV 3.0 on iOS
OpenCV 3.0 on iOS
 
OpenCVの基礎
OpenCVの基礎OpenCVの基礎
OpenCVの基礎
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
 
Deflate
DeflateDeflate
Deflate
 
単一物体追跡論文のサーベイ
単一物体追跡論文のサーベイ単一物体追跡論文のサーベイ
単一物体追跡論文のサーベイ
 
Deep learningの軽い紹介
Deep learningの軽い紹介Deep learningの軽い紹介
Deep learningの軽い紹介
 
FPGAって、何?
FPGAって、何?FPGAって、何?
FPGAって、何?
 
勉強会資料 Distribution
勉強会資料 Distribution勉強会資料 Distribution
勉強会資料 Distribution
 
Compact ordered dict__k_lab_meeting_
Compact ordered dict__k_lab_meeting_Compact ordered dict__k_lab_meeting_
Compact ordered dict__k_lab_meeting_
 
Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法
 
ARもVRもMRもまとめてドーン
ARもVRもMRもまとめてドーンARもVRもMRもまとめてドーン
ARもVRもMRもまとめてドーン
 
センサー・VR・MR 基本とオススメ
センサー・VR・MR 基本とオススメセンサー・VR・MR 基本とオススメ
センサー・VR・MR 基本とオススメ
 
悪意ないユーザに配慮した不正クライアントの排除
悪意ないユーザに配慮した不正クライアントの排除悪意ないユーザに配慮した不正クライアントの排除
悪意ないユーザに配慮した不正クライアントの排除
 
負荷試験、どうしてる?(公開版)
負荷試験、どうしてる?(公開版)負荷試験、どうしてる?(公開版)
負荷試験、どうしてる?(公開版)
 
Raspberry piと.net coreのstandardな関係
Raspberry piと.net coreのstandardな関係Raspberry piと.net coreのstandardな関係
Raspberry piと.net coreのstandardな関係
 
MS COCO Dataset Introduction
MS COCO Dataset IntroductionMS COCO Dataset Introduction
MS COCO Dataset Introduction
 
ARもVRもMRもまとめてドドンドーン!
ARもVRもMRもまとめてドドンドーン!ARもVRもMRもまとめてドドンドーン!
ARもVRもMRもまとめてドドンドーン!
 
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~
 
一般向けのDeep Learning
一般向けのDeep Learning一般向けのDeep Learning
一般向けのDeep Learning
 

Similaire à OpenCVをAndroidで動かしてみた

OpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメOpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメMasaki Otsuki
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏Developers Summit
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組みKouji Matsui
 
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介NilOne Ltd.
 
01 idea table3.1(up)
01 idea table3.1(up)01 idea table3.1(up)
01 idea table3.1(up)umisuzume
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応Masaru Horioka
 
01 idea table3.2
01 idea table3.201 idea table3.2
01 idea table3.2umisuzume
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構Ryosuke MATSUMOTO
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows AzureMicrosoft
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platformToru Yamaguchi
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 
技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution EngineAsuka Nakajima
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料OCHI Shuji
 
組込みAndroid入門実習
組込みAndroid入門実習組込みAndroid入門実習
組込みAndroid入門実習ksk sue
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~Saki Homma
 

Similaire à OpenCVをAndroidで動かしてみた (20)

OpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメOpenCV4Androidで画像処理アプリのススメ
OpenCV4Androidで画像処理アプリのススメ
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
 
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
 
01 idea table3.1(up)
01 idea table3.1(up)01 idea table3.1(up)
01 idea table3.1(up)
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応
 
01 idea table3.2
01 idea table3.201 idea table3.2
01 idea table3.2
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
 
ロボット用Open Source Software
ロボット用Open Source Softwareロボット用Open Source Software
ロボット用Open Source Software
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
組込みAndroid入門実習
組込みAndroid入門実習組込みAndroid入門実習
組込みAndroid入門実習
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
 
Android0422
Android0422Android0422
Android0422
 

Dernier

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Dernier (9)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

OpenCVをAndroidで動かしてみた

  • 1. 日本Androidの会 京都支部 第3回 勉強会 (2011-12-03) OpenCV を Android で動かしてみた Toru UENOYAMA @ 日本Androidの会 京都支部
  • 2. 自己紹介  名前  上野山 徹 (うえのやま とおる)  Google+ : Toru UENOYAMA  出身  和歌山県 • みかん と 梅干し と タチウオ と カレー で有名 和歌山県  仕事  京都の電機メーカーで (組み込み + 画像処理)/2なソフト開発してます
  • 4. OpenCVとは  オープンソースの画像処理ライブラリ  コンピュータビジョンに関する 数多くの機能を提供する  最新研究の画像処理技術やGPGPUにも対応  言語インターフェイス • 元はC言語向け • 今では C++, Python, Ruby, Java などなど  対応OS • Windows, MacOS, Linux, FreeBSD, iOS, Android など ホビーユースから学術研究用途まで 幅広く使える画像処理ライブラリです! 4
  • 5. OpenCVの機能 各種フィルタなど 幾何表現や 汎用画像処理 画像特徴量 複数カメラで 領域分割・切出し の三次元復元 色変換・形状変換 フィッティング 機械学習,形状 認識,顔検出 移動物体の追跡 http://opencv.willowgarage.com/wiki/ 5
  • 6. OpenCV の実用例  DARPA Grand Challenge  制限時間内に車両自律走行で 走破させる競技  多くのチームが OpenCVを使用  一部の画像処理検査装置  研究機関でのアルゴリズム評価ソフト http://en.wikipedia.org/wiki/DARPA_Grand_Challenge http://www.cengen.com/content/darpa-grand-challenge-2004 6
  • 7. OpenCV の 歴史  略歴  1999年 Intelにて開発がスタート  2006年 正式版(1.0)リリース  2008年 WillowGarage(米ベンチャー)が開発を引継ぐ  バージョン Ver 年月 主な変更内容 1.0 2006年10月 正式リリース 1.1α 2008年10月 バグ修正,機能追加 2.0 2009年9月 C++インターフェイス追加 2.1 2010年4月 機能追加,TBB対応 2.2 2010年12月 ライブラリ構成の見直し(細分化), CUDA対応 2.3 2011年6月 Androidに正式対応,機能追加 2.3.1 2011年7月 Android版のAPI充実 7
  • 8. OpenCVの特徴  実装機能が豊富  画像処理に関することはほぼ網羅されている • 新機能もどんどん追加されている  豊富すぎて必要な機能を探すのが大変だったり  機能の粒度が小さい  必要な機能だけを組み合わせて使える • (無駄がない)  ほしい機能を作るためには,関連する関数を 適切に組み合わせないといけない 8
  • 9. OpenCVの特徴  ドキュメントが全体的に不足  リファレンスに行間が多すぎ  リファレンス化されていない関数も多い • マイナー言語の場合は,C/C++言語向けの内容と ソースコードを見比べながら試行錯誤… 面倒ごともありますが,ベタな実装と比較すれば 画像処理プログラミングが かなり楽になります! 9
  • 11. OpenCV for Android  概要  OpenCV 2.2 以前でもAndroidで動作したものの…  これから使うなら 最新版(2.3.1beta2)のPrebuilt パッケージがおすすめ  動作環境  Android ≧ 2.2 (APIレベル ≧ 8) ※ JavaAPIを用いない場合は Android ≧ 1.5 (APIレベル≧3)  インストール方法  http://bit.ly/nqPTnO を参照してください。 11
  • 12. Android版を使う上でまず考えること  どちらのAPIを使うか ① Java APIを使う ② C++ APIを使う (NDK) ③ ハイブリッド(①+②)  カメラ画像をどのように取得するか ① Android のカメラ機能 ② OpenCV のカメラ機能 ⇒ それぞれ,以降のページで説明します 12
  • 13. Java API for Android  特徴  Java上で実装・ビルドする。 • NDKは不要   API呼び出し時のオーバーヘッドが大きい  • API内部の処理はNDKでビルド済のため変わらないハズ  デバッグは楽  SurfaceView  PC版とAPI仕様が 異なる  行わせたい画像処理 in Java オーバーヘッド大 Java API (OpenCV) OpenCV for Android Native Library (OpenCV) 13
  • 14. C++ API for Android  特徴  C++によりネイティブコードでOpenCVを呼び出す  Java側(UI側)からの呼び出しは, JNIラッパーを作成しなければならない   NDKでのビルドが必要   デバッグが面倒  SurfaceView  Java側からの呼び出しを UI側の処理 in Java 減らすことで,オーバー JNIラッパー(自作する) ヘッドを減らせる  行わせたい画像処理 in C++  PC版と同じAPIを使える  OpenCV for Android Native Library (OpenCV) 14
  • 15. Androidのカメラ機能を使う場合  Android OSのカメラ SurfaceView Activity 機能を用いてyuv形式 で取得したのち, SampleViewBase OpenCVのMat型に 変換する。 Sample1View Sample1Java  OS標準のAPIを用いる ため,機種 依存性が小 Mat型変数(mYuv)にカメラ画像のByte配列を格納  少し遅いかも SurfaceViewに描画するため, Mat型からBitmapを生成して戻る 15
  • 16. OpenCVのカメラ機能を使う場合  OpenCVのカメラ画像 SurfaceView Activity 取得API(highgui.VideoCaputure) を用いて画像データを SampleCvViewBase 取得する。 Sample2View Sample2View  機種依存性が高い VideoCapture.retreive で直接Mat  処理が軽いかも 型変数にカメラ画像を取得。 SurfaceViewに描画するため, Mat型からBitmapを生成して戻る 16
  • 17. リファレンス情報(1/2)  http://opencv.jp/  日本語のリファレンスが存在する • REFERENCE MANUAL → C++リファレンス • COOKBOOK [おすすめ]  少し情報が古い(Ver2.2相当)  Java版が無いので、C++版から読み替えが必要  http://opencv.itseez.com/modules/refman.html  英語だが最新リファレンス(Ver2.3相当)  JavaAPIの記述がないので読み替えが必要 17
  • 18. リファレンス情報(2/2)  Javadoc でソースから生成する  Java API のリファレンスが手に入る • クラス構造などは参考になる  説明はわかりにくい • 結局C++リファレンスと にらめっこになる  Javadocの生成方法 > javadoc –help > cd <ソース解凍先>¥OpenCV-2.3.1 > javadoc -sourcepath src -d javadoc -subpackages org.opencv  『詳解 OpenCV』(オライリー社)  画像処理アルゴリズムの考え方も含め 丁寧に記述されている  C API (≠C++) のため読み替えがさらに大変 18
  • 19. Androidで実装するときのTIPS  まずはPC版OpenCVでアルゴリズムを検討し、 その後Androidに移植すると良さそう。  OpenCVのライブラリサイズが大きい(5MB強)ため、 デバッグ時の転送&展開に時間がかかる。  JavaAPIの情報が少ないため、想定通りに動かな い場合の切り分けが難しい。  端末によってカメラの解像度や写りの質・ CPU速度などが異なるため、一様には 動作してくれないことにも注意する。 19
  • 22. 全体処理の流れ ドロイドくん ギアボックス ②左右モーターの 内蔵カメラ 回転速度と 駆動時間を指令 ①OpenCVで ドロイドくんの Androidケータイ 位置を検出 Arduino http://ja.wikipedia.org/wiki/Arduino , http://www.tamiya.com/japan/products/70168double_gearbox/index.htm
  • 23. ①画像処理  緑色の領域を抽出し,サイズが最も大きな 領域をドロイド君人形と認識させる。 カメラ画像を取得 “色”で分離しやすい 指標に変換 (色相) RGB→HSV変換 (彩度) 色相,彩度,輝度 緑色のピクセルだけ で制限をかける にマークをつける (輝度) ノイズ除去 領域に分割 最大の領域を 見つける モータ制御値を 抽出領域の中心が 生成(&送信) 画面中央に来るように 23
  • 26. ②モーターを動かす 【ハード構成】 【ソフト構成】 画像追跡ソフト Android端末 OpenCV Microbridge 通信ソケットのようなものを USB 張ってくれます 今回は,左右モーターの回転 USBホストシールド 時間と回転速度を指令 (Down方向のみ) Arduino (マイコン基板) モーター制御ソフト 回転方向の モータードライバ 選択と, シールド 指令された回転時間・速度に 電力増幅 PWM なるように,PWMを生成 (約500円) PWM タミヤモーター 26
  • 27. ソースコード(指令値の生成と送信) バイト配列をsendすれば 27
  • 28. ソースコード(Arduino) バイト配列として データ受信時の 受信データを読み出せる イベントハンドラ 初期化処理 28
  • 29. 実機デモ デモ 29
  • 30. まとめ 和歌山県は 近畿地方です! 30 特別出演:あり太君 http://twitter.com/shokokanko
  • 31. まとめ <Take2>  You + Android = Androidはより優秀なWeb端末  You + Android + OpenCV = Androidが簡単に画像処理機能を持てる!  You + Android + OpenCV + Micro Processor = Androidが ”アンドロイド” に進化する!! OpenCVやマイコンで 一緒に遊びませんか? →『日本 Android の会 京都支部』 http://groups.google.com/group/android-kyoto 31