AI-For-Beginners/translations/ja/lessons/4-ComputerVision/06-IntroCV
localizeflow[bot] 52d3c08120 chore(i18n): sync translations with latest source changes (final snapshot) 2026-01-30 01:25:08 +00:00
..
lab chore(i18n): sync translations with latest source changes (final snapshot) 2026-01-30 01:25:08 +00:00
OpenCV.ipynb 🌐 Update translations via Co-op Translator 2025-09-07 15:24:18 +00:00
README.md chore(i18n): sync translations with latest source changes (final snapshot) 2026-01-30 01:25:08 +00:00

README.md

コンピュータビジョンの概要

コンピュータビジョンは、コンピュータがデジタル画像を高レベルで理解できるようにすることを目的とした分野です。この定義は非常に広範であり、理解には多くの意味が含まれます。例えば、画像内の物体を見つける(物体検出)、何が起きているかを理解する(イベント検出、画像をテキストで説明する、または3Dでシーンを再構築することなどです。さらに、人間の画像に関連する特別なタスクもあります。例えば、年齢や感情の推定、顔の検出と識別、3Dポーズ推定などです。

講義前のクイズ

コンピュータビジョンの最も基本的なタスクの一つは画像分類です。

コンピュータビジョンはしばしばAIの一分野と見なされます。現在では、ほとんどのコンピュータビジョンのタスクはニューラルネットワークを使用して解決されています。このセクションでは、コンピュータビジョンに使用される特別なタイプのニューラルネットワークである畳み込みニューラルネットワークについて学びます。

ただし、画像をニューラルネットワークに渡す前に、多くの場合、アルゴリズム的な手法を使用して画像を改善することが理にかなっています。

画像処理に利用できるPythonライブラリはいくつかあります

  • imageio は、さまざまな画像フォーマットの読み書きに使用できます。また、ffmpegをサポートしており、ビデオフレームを画像に変換する便利なツールです。
  • PillowPILとしても知られるは、より強力で、モーフィングやパレット調整などの画像操作もサポートしています。
  • OpenCV はC++で書かれた強力な画像処理ライブラリで、画像処理の事実上の標準となっています。Pythonインターフェースも便利です。
  • dlib は、多くの機械学習アルゴリズムを実装したC++ライブラリで、コンピュータビジョンアルゴリズムも含まれています。Pythonインターフェースもあり、顔や顔のランドマーク検出などの難しいタスクに使用できます。

OpenCV

OpenCVは画像処理の事実上の標準とされています。C++で実装された多くの便利なアルゴリズムが含まれています。PythonからもOpenCVを呼び出すことができます。

OpenCVを学ぶのに良い場所はこのLearn OpenCVコースです。このカリキュラムでは、OpenCVを学ぶことが目的ではなく、使用例とその方法を示すことが目的です。

画像の読み込み

Pythonでは画像をNumPy配列で便利に表現できます。例えば、320x200ピクセルのグレースケール画像は200x320の配列に保存され、同じサイズのカラー画像は200x320x33つのカラーチャンネルという形状になります。画像を読み込むには、以下のコードを使用します

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関数を呼び出して閾値処理を使用することは、明るさやコントラストを調整するよりも好ましい場合があります。
  • 画像にさまざまな変換を適用する:
    • アフィン変換 は、画像の回転、リサイズ、傾きを組み合わせる必要があり、画像内の3点のソースと目的地の位置が分かっている場合に便利です。アフィン変換は平行線を平行に保ちます。
    • 透視変換 は、画像内の4点のソースと目的地の位置が分かっている場合に便利です。例えば、スマートフォンのカメラで角度をつけて長方形の文書を撮影し、その文書自体の長方形画像を作成したい場合などです。
  • オプティカルフロー を使用して画像内の動きを理解する。

コンピュータビジョンの使用例

OpenCV Notebookでは、コンピュータビジョンを使用して特定のタスクを実行する例をいくつか示しています:

  • 点字本の写真の前処理。閾値処理、特徴検出、透視変換、NumPy操作を使用して、個々の点字記号を分離し、ニューラルネットワークによる分類に備える方法に焦点を当てています。
点字画像 前処理された点字画像 点字記号

画像はOpenCV.ipynbから引用

  • フレーム差分を使用したビデオ内の動きの検出。カメラが固定されている場合、カメラフィードのフレームは互いに非常に似ているはずです。フレームが配列として表現されているため、2つの連続するフレームの配列を引き算するだけでピクセル差分が得られます。静的なフレームでは差分は低く、画像内に大きな動きがあると差分が高くなります。

ビデオフレームとフレーム差分の画像

画像はOpenCV.ipynbから引用

  • オプティカルフローを使用した動きの検出オプティカルフローを使用すると、ビデオフレーム上の個々のピクセルがどのように移動するかを理解できます。オプティカルフローには2種類あります

    • 密なオプティカルフローは、各ピクセルがどこに移動しているかを示すベクトルフィールドを計算します。
    • 疎なオプティカルフローは、画像内の特徴的な部分(例:エッジ)を取り、それらのフレーム間の軌跡を構築します。

オプティカルフローの画像

画像はOpenCV.ipynbから引用

✍️ 実例ノートブック: OpenCV OpenCV in Actionを試す

OpenCV Notebookを探索して、OpenCVを使った実験をしてみましょう。

結論

動きの検出や指先の検出など、比較的複雑なタスクがコンピュータビジョンだけで解決できる場合があります。そのため、コンピュータビジョンの基本的な技術やOpenCVのようなライブラリが何をできるかを知っておくことは非常に役立ちます。

🚀 チャレンジ

AIショーのこのビデオを視聴して、Cortic Tigersプロジェクトについて学び、彼らがロボットを通じてコンピュータビジョンタスクを民主化するブロックベースのソリューションをどのように構築したかを確認してください。この分野への新しい学習者を導入する他のプロジェクトについても調査してみてください。

講義後のクイズ

レビューと自己学習

この素晴らしいチュートリアルでオプティカルフローについてさらに学びましょう。

課題

このラボでは、簡単なジェスチャーを含むビデオを撮影し、オプティカルフローを使用して上下左右の動きを抽出することを目指します。

手の動きフレーム