Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pyconjp 2014 OpenCVのpythonインターフェース入門

58,859 views

Published on

PyconJP2014でのチュートリアル「」の発表資料(IPython Notebook)を、Keynoteで書き直してアップロードしたものです。

Published in: Software
  • Be the first to comment

Pyconjp 2014 OpenCVのpythonインターフェース入門

  1. 1. !OpenCVのpythonインター フェース入門 林昌希 (Masaki Hayashi) 慶應義塾大学 博士課程3年 PyConJP 2014,9月14日(日) 13:00- 13:30 この資料の元となった本番資料(IPython Notebook)も、以下に公開中です: https://github.com/payashim/tutorial-opencv-python-pyconjp2014
  2. 2. 発表者について • 専門は機械学習による画像認識。研究は「チームスポーツ映像 からの人物姿勢推定とその応用」 • 元計測システム開発者 => 現在 博士課程3年 • DERiVEコンピュータビジョンブログ・メルマガ(@derivecv) • 翻訳者に「コンピュータビジョン - アルゴリズムと応用」著者 :Richard Szeliski ; 訳者:玉木徹 他 • Web連載:「コンピュータビジョンのセカイ~今そこにある ミライ~」マイナビニュースにて2011年3月より連載中
  3. 3. 本日の内容 • コンピュータビジョンのためのオープンソースライ ブラリであるOpenCV(Open Computer Vision)のPythonインターフェースのチュートリ アル。 • 過去の私のブログでの記事のパワーアップ版: 【Python Advent Calendar 2013】OpenCVラ イブラリのpythonインターフェース入門
  4. 4. 目的(ターゲット層別) • コンピュータビジョンの初級者: Pythonでコンピュータ ビジョンプログラミングは簡単に始められる!! • コンピュータビジョンの中級者: C++でしかOpenCVを使っ ていない方 -->> Pythonインターフェースを知らないせい で莫大な時間損失をしていることに気づくべき!Matlabの ようにインタラクティブプログラミングの恩恵が得られる • データ解析•機械学習系のみなさま: Scikit-learnやpandas は使えて画像認識をはじめてみたい!という方への最初のきっ かけに
  5. 5. 目次 1. Computer Visionとは 2. OpenCVの概要と、pythonからの使用 3. 入出力と可視化 4. 画像処理の基礎的な処理のデモ 5. 応用例(動画での背景差分、人検出)
  6. 6. 1.Computer Visionとは • Computer Vision: カメラで撮影した画像•動画、デプスなどから、 実世界の様子を計算機で(できれば自動的に)把握する技術分野 https://www.youtube.com/watch?v=ftQnykTmGPw youtube :computer vision applications (代表的な応用例集)
  7. 7. 2.1 OpenCVの概要 ! • C++言語向けのComputer Vision向け大規模ライブラリ • Python, Javaなどのラッパーも提供されていて、C++版とほぼ 同じように使用できる • 画像処理,動画像入出力から, ステレオビジョン、局所特徴量、顔 検出などコンピュータビジョンの基本的な道具が全部入っている • 最新のバージョンはOpenCV2.4.9。先日、OpenCV3.0.0のα版 がリリース
  8. 8. OpenCV(2.4.9)の主要モジュール • 多くのモジュールに分割されているが、Pythonからだと全ての 関数は「cv2」でインポートし、cv2.から各関数にアクセスす るだけ 基本モジュール(いつも使うもの) • core • imgproc (画像処理) • highgui (画像の表示ウィンドウとマウスキーボード入力)
  9. 9. 応用モジュール(カテゴリーごと の処理) • video (動画処理、背景差分、オ プティカルフロー) • calib3d (カメラキャリブレーショ ン、ステレオ幾何) • features2d (局所特徴量とその マッチング) • objdetect (物体検出: 顔検出, 人検出,Latent SVM) • stitching (パノラマ作成 • superres (超解像) • videostab (動画安定化) • ml (基礎的な機械学習) • gpu, ocl (各アルゴリズムの CUDA版、OpenCL版) ※ ほとんどの関数・クラスはPythonからも使用可能であるが、gpuなど、 Pythonへのバインディングが提供されていないものもある点には注意。
  10. 10. 2.2 OpenCVのPythonからの使用法 • cv2モジュールをインポート • 画像データはnumpyのarray(多次元配列)として格納されている ! (C++ではなく)PythonでOpenCVを使うメリット • numpyやscipyなどのpythonで充実している数値計算ライブラリとの連繋 • C++と違って(コンパイルを待たずに)、インタラクティブに、実験的に実行でき る(しかもIPythonもある!) • IPython Notebook(再生可能なノート)による、全ての結果のノート保存と、そ のノートのグループ共有・Web共有 • Scikit-learn, pandasなど、機械学習、データサイエンスとの相性もGood
  11. 11. 3.入出力と可視化 • 画像の入力はcv2.imread() → numpy.ndarray型の画像データ OpenCVの画像データの構造 • カラー画像:(height × width × channels)の3次元配列 • グレー画像:(height × width)の2次元配列
  12. 12. 画像データがnumpy配列である利点 • numpy,scipyなどの線形代数関数が、OpenCVでのプログラム にも使用可能 (C++のOpenCVでは、画像を扱うcv::Matクラス に用意されている線形代数関数を用いる) • numpy的な画像操作を書けば、c言語並みの計算スピードを numpyにより簡単に確保しやすい。(詳しくは、DERiVEメル マガ vo.16,17の該当記事を参照) • numpyを介することで、scikit-learnやpyMC3などの、 Pythonの統計的・機械学習ライブラリとの連繋もGood! • numpyの配列はMatlabの配列と似ているので、研究者もPython へ移行しやすい。(参考:Numpy for Matlab Users: )
  13. 13. OpenCVのnumpy画像データ の注意点 ! • 画素やwidth,heightへのインデックスアクセスや行列操作の、C++- OpenCVにおける同じ操作との違いに注意(numpyに慣れる必要あり) • matplotlib,PIL,scikit-imageはRGB画像で保持するのに対して、OpeCV はBGR画像がデフォルト(後述のように、カラー変換が必要) • OpenCVは画像は全てnumpy.uint8型のnumpy arrayであるが、 scikit-imageなどではグレー画像だけはnumpy.float64型なので、他ラ イブラリと併用時に型変換を行うなど注意が必要 • (これらについて詳しくは、DERiVEメルマガ vo.16,17の該当記事を参 照)
  14. 14. 画像の可視化1 with OpenCV cv2.imshow()を用いる 結果:HighGUIの画像Windowが表示される
  15. 15. 画像の可視化2 with Matplotlib Matplotlibのpyplot.imshow()でも画像をplotできる ※ 前述のように、OpenCVの画像はデフォルトだとBGR画像な ので、matplotlibで正しく表示するには色変換する必要有り
  16. 16. 画像の可視化2 with Matplotlib • OpenCVのimreadで読み込んだ画像はBGR画像 => cvCvtColor()でRGB画像へ変換 (要するに。。) RGB画像にすればMatplotibでは正しく表示できる!
  17. 17. 4.画像処理の基礎的な処理のデモ: ガウシアンブラー • 元画像に対して、ガウシアンフィルターを用いてボケ画像を作成 ※ 上記2つの方法のどちらも、OpenCVの関数を1つ呼ぶだけで 処理が完了しているのがポイント
  18. 18. 4.画像処理の基礎的な処理のデモ: ガウシアンブラー
  19. 19. 4.画像処理の基礎的な処理のデモ: エッジ検出 • 元画像から、以下の各フィルターでエッジ画像を作成 • Laplacianフィルタで2次微分 • X方向の1次微分(Sobelフィルタ) • Y方向の1次微分(Sobelフィルタ)
  20. 20. 4.画像処理の基礎的な処理のデモ: エッジ検出
  21. 21. 5.1 動画での背景差分 • https://www.youtube.com/watch?v=UBZtk6EFxlY 今回のトーク向けに、私がPythonで作成した プログラムの結果動画
  22. 22. 5.2 人検出 https://www.youtube.com/watch?v=PzXIgVzxr7E こちらも私がOpenCV-Pythonで作成した結果
  23. 23. 機械学習を用いた画像認識を Pythonで作りたい方は: • DERiVEメルマガ(derivecv.tumblr.com/merumaga)で連載中の記事 「scikit-­‐‑learnとscikit-­‐‑imageでつくる人検出」をチェック! • Github repositoryに連載で紹介したコードを公開中: h;ps://github.com/ payashim/python_visual_recognition_tutorials • メルマガではアルゴリズムの解説とともに、Pythonによる「HOG+SVM による人検出器」のコーディング方法を解説中(数少ない、機械学習 の画像認識アルゴリズムのコーディング法の解説資料)。 • scikit-­‐‑learnとscikit-­‐‑imageを用いてHOG + SVM (Dalal, Triggs(2005))の人 検出手法(= OpenCVのHOGDescriptorと同じ)の実装方法を紹介中。 23
  24. 24. まとめ • OpenCVのPythonインターフェースの導入をしました • C++版OpenCVとほぼ同じ関数インターフェースがPython に用意されている • 画像データはnumpy.arrayの2次元(グレー画像) or 3次元(カ ラー画像)配列で保持 → numpy を介しているので、他の Python科学計算ライブラリと連繋が良い • 基本的な画像処理と画像認識の関数の使用例を紹介 この資料の元となった本番資料(IPython Notebook)も、以下に公開中です: https://github.com/payashim/tutorial-opencv-python-pyconjp2014

×