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

50,070 views

Published on

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

Published in: Software
0 Comments
32 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
50,070
On SlideShare
0
From Embeds
0
Number of Embeds
37,083
Actions
Shares
0
Downloads
121
Comments
0
Likes
32
Embeds 0
No embeds

No notes for slide

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

×