|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OpenCV.ipynb | ||
| README.md | ||
README.md
コンピュータビジョン入門
コンピュータビジョンは、コンピュータがデジタル画像を高レベルで理解できるようにすることを目的とした分野です。この定義は非常に広範であり、「理解する」ということは、画像内の物体を見つける(物体検出)、何が起きているかを理解する(イベント検出)、画像をテキストで説明する、または3Dでシーンを再構築するなど、さまざまな意味を持ちます。人間の画像に関連する特別なタスクもあり、例えば年齢や感情の推定、顔の検出と識別、3Dポーズ推定などがあります。
講義前クイズ
コンピュータビジョンの最も基本的なタスクの一つは、画像分類です。
コンピュータビジョンはしばしばAIの一分野と見なされます。現在では、ほとんどのコンピュータビジョンのタスクはニューラルネットワークを使用して解決されています。このセクションでは、コンピュータビジョンに使用される特別なタイプのニューラルネットワーク、畳み込みニューラルネットワークについて学びます。
ただし、画像をニューラルネットワークに渡す前に、多くの場合、画像を強化するためのアルゴリズム的な技術を使用することが理にかなっています。
画像処理に利用できるPythonライブラリはいくつかあります:
- imageio は、さまざまな画像形式の読み書きに使用できます。また、ffmpegをサポートしており、ビデオフレームを画像に変換する便利なツールです。
- Pillow(PILとも呼ばれる)は、より強力で、モーフィングやパレット調整などの画像操作もサポートしています。
- OpenCV は、C++で書かれた強力な画像処理ライブラリで、画像処理の事実上の標準となっています。Pythonインターフェースも便利です。
- dlib は、多くの機械学習アルゴリズムを実装したC++ライブラリで、コンピュータビジョンアルゴリズムも含まれています。Pythonインターフェースもあり、顔や顔のランドマーク検出などの難しいタスクに使用できます。
OpenCV
OpenCVは、画像処理の事実上の標準とされています。C++で実装された多くの便利なアルゴリズムが含まれています。PythonからもOpenCVを呼び出すことができます。
OpenCVを学ぶのに良い場所はこのLearn OpenCVコースです。このカリキュラムでは、OpenCVを学ぶことが目的ではなく、使用例やその方法を示すことが目的です。
画像の読み込み
Pythonでは、画像をNumPy配列で便利に表現できます。例えば、320x200ピクセルのグレースケール画像は200x320の配列に格納され、同じサイズのカラー画像は200x320x3(3つのカラーチャンネル)という形状になります。画像を読み込むには、以下のコードを使用できます:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
伝統的に、OpenCVはカラー画像にBGR(青-緑-赤)エンコーディングを使用しますが、Pythonの他のツールはより一般的なRGB(赤-緑-青)を使用します。画像を正しく表示するには、NumPy配列の次元を入れ替えるか、OpenCV関数を呼び出してRGBカラースペースに変換する必要があります:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
同じcvtColor関数を使用して、画像をグレースケールやHSV(色相-彩度-明度)カラースペースに変換するなど、他のカラースペース変換を行うこともできます。
OpenCVを使用してビデオをフレームごとに読み込むことも可能です。例は演習OpenCV Notebookに記載されています。
画像処理
画像をニューラルネットワークに渡す前に、いくつかの前処理ステップを適用することができます。OpenCVは以下のようなことが可能です:
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)を使用して画像をリサイズするim = cv2.medianBlur(im,3)やim = cv2.GaussianBlur(im, (3,3), 0)を使用して画像をぼかす- 画像の明るさとコントラストを変更するには、NumPy配列操作を使用します。このStackoverflowのノートに記載されています。
cv2.thresholdやcv2.adaptiveThreshold関数を呼び出して閾値処理を使用することは、明るさやコントラストを調整するよりも好ましい場合があります。- 画像に対してさまざまな変換を適用する:
- オプティカルフロー を使用して画像内の動きを理解する。
コンピュータビジョンの使用例
OpenCV Notebookでは、コンピュータビジョンを使用して特定のタスクを実行する例をいくつか紹介しています:
- 点字の本の写真を前処理する。閾値処理、特徴検出、透視変換、NumPy操作を使用して、個々の点字記号を分離し、ニューラルネットワークによる分類に備える方法に焦点を当てています。
![]() |
![]() |
![]() |
|---|
画像はOpenCV.ipynbより
- フレーム差分を使用してビデオ内の動きを検出する。カメラが固定されている場合、カメラフィードのフレームは互いに非常に似ているはずです。フレームが配列として表現されているため、2つの連続するフレームの配列を引き算するだけでピクセル差分が得られます。静的なフレームでは差分は低くなり、画像に大きな動きがあると差分が高くなります。
画像はOpenCV.ipynbより
-
オプティカルフローを使用して動きを検出する。オプティカルフローを使用すると、ビデオフレーム上の個々のピクセルがどのように移動するかを理解できます。オプティカルフローには2種類あります:
- 密なオプティカルフローは、各ピクセルがどこに移動しているかを示すベクトルフィールドを計算します。
- 疎なオプティカルフローは、画像内の特徴的な部分(例:エッジ)を基にして、それらのフレーム間の軌跡を構築します。
画像はOpenCV.ipynbより
✍️ サンプルノートブック: OpenCV OpenCV in Actionを試す
OpenCV Notebookを探索して、OpenCVを使った実験をしてみましょう。
結論
動きの検出や指先の検出など、比較的複雑なタスクがコンピュータビジョンだけで解決できる場合があります。そのため、コンピュータビジョンの基本的な技術やOpenCVのようなライブラリが何をできるかを知っておくことは非常に役立ちます。
🚀 チャレンジ
AIショーのこのビデオを視聴して、Cortic Tigersプロジェクトについて学び、彼らがロボットを通じてコンピュータビジョンタスクを民主化するブロックベースのソリューションをどのように構築したかを確認してください。この分野への新しい学習者を導入するのに役立つ他のプロジェクトについても調査してみてください。
講義後クイズ
復習と自己学習
この素晴らしいチュートリアルでオプティカルフローについてさらに学びましょう。
課題
このラボでは、簡単なジェスチャーを含むビデオを撮影し、オプティカルフローを使用して上下左右の動きを抽出することが目標です。
免責事項:
この文書は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知ください。元の言語で記載された文書が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。




