SlideShare a Scribd company logo
1 of 32
Download to read offline
日本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!

More Related Content

What's hot

【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 日本マイクロソフト株式会社
 
MediaPipeの紹介
MediaPipeの紹介MediaPipeの紹介
MediaPipeの紹介emakryo
 
アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~gree_tech
 
戦う情シス!全社 API で社内アプリ開発を加速させよう
戦う情シス!全社 API で社内アプリ開発を加速させよう戦う情シス!全社 API で社内アプリ開発を加速させよう
戦う情シス!全社 API で社内アプリ開発を加速させようYuki Hattori
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!Unity Technologies Japan K.K.
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントhistoria_Inc
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Masahito Zembutsu
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]DeNA
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccConcurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccYuji Kubota
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>エピック・ゲームズ・ジャパン Epic Games Japan
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計UnityTechnologiesJapan002
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!Masahiko Nakamura
 
スマートフォンゲームのチート事情
スマートフォンゲームのチート事情スマートフォンゲームのチート事情
スマートフォンゲームのチート事情直生 亀山
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Keisuke Fukuda
 
BDD Frameworkで回帰テストの自動実行を実現する方法
BDD Frameworkで回帰テストの自動実行を実現する方法BDD Frameworkで回帰テストの自動実行を実現する方法
BDD Frameworkで回帰テストの自動実行を実現する方法潤司 渡部
 

What's hot (20)

【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
 
MediaPipeの紹介
MediaPipeの紹介MediaPipeの紹介
MediaPipeの紹介
 
アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~
 
戦う情シス!全社 API で社内アプリ開発を加速させよう
戦う情シス!全社 API で社内アプリ開発を加速させよう戦う情シス!全社 API で社内アプリ開発を加速させよう
戦う情シス!全社 API で社内アプリ開発を加速させよう
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccConcurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
スマートフォンゲームのチート事情
スマートフォンゲームのチート事情スマートフォンゲームのチート事情
スマートフォンゲームのチート事情
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
BDD Frameworkで回帰テストの自動実行を実現する方法
BDD Frameworkで回帰テストの自動実行を実現する方法BDD Frameworkで回帰テストの自動実行を実現する方法
BDD Frameworkで回帰テストの自動実行を実現する方法
 

Viewers also liked

画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
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
 

Viewers also liked (20)

OpenCV 3.0 on iOS
OpenCV 3.0 on iOSOpenCV 3.0 on iOS
OpenCV 3.0 on iOS
 
OpenCVの基礎
OpenCVの基礎OpenCVの基礎
OpenCVの基礎
 
画像処理ライブラリ 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
 

Similar to 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
 

Similar to 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
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Recently uploaded (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

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