Pythonを使用したAI–コンピュータービジョン

コンピュータビジョンは、コンピュータソフトウェアとハ​​ードウェアを使用して人間の視覚をモデル化および複製することに関係しています。この章では、これについて詳しく学習します。

コンピュータビジョン

コンピュータビジョンは、シーンに存在する構造のプロパティの観点から、2D画像から3Dシーンを再構築、中断、および理解する方法を研究する分野です。

コンピュータビジョン階層

コンピュータビジョンは、次の3つの基本的なカテゴリに分類されます。

  • Low-level vision −特徴抽出用のプロセスイメージが含まれています。

  • Intermediate-level vision −オブジェクト認識と3Dシーン解釈が含まれます

  • High-level vision −活動、意図、行動などのシーンの概念的な説明が含まれています。

コンピュータビジョン対画像処理

画像処理は、画像から画像への変換を研究します。画像処理の入力と出力は両方とも画像です。

コンピュータビジョンは、画像から物理的なオブジェクトの明示的で意味のある記述を構築することです。コンピュータビジョンの出力は、3Dシーンの構造の説明または解釈です。

アプリケーション

コンピュータビジョンは、次の分野でアプリケーションを見つけます-

Robotics

  • ローカリゼーション-ロボットの位置を自動的に決定します

  • Navigation

  • 障害物の回避

  • 組立(ペグインホール、溶接、塗装)

  • 操作(例:PUMAロボットマニピュレーター)

  • ヒューマンロボットインタラクション(HRI):人々と対話してサービスを提供するインテリジェントロボティクス

Medicine

  • 分類と検出(例:病変または細胞の分類と腫瘍の検出)

  • 2D / 3Dセグメンテーション

  • 3D人間の臓器の再構成(MRIまたは超音波)

  • 視覚誘導ロボット手術

Security

  • バイオメトリクス(虹彩、指紋、顔認識)
  • 監視-特定の疑わしい活動または行動を検出する

Transportation

  • 自動運転車
  • 安全性、例えば、ドライバーの警戒監視

Industrial Automation Application

  • 産業検査(欠陥検出)
  • Assembly
  • バーコードとパッケージラベルの読み取り
  • オブジェクトの並べ替え
  • 文書の理解(例:OCR)

便利なパッケージのインストール

Pythonを使用したコンピュータービジョンの場合、次のような人気のあるライブラリを使用できます。 OpenCV(オープンソースコンピュータビジョン)。これは、主にリアルタイムのコンピュータビジョンを目的としたプログラミング機能のライブラリです。これはC ++で記述されており、その主要なインターフェイスはC ++です。このパッケージは、次のコマンドを使用してインストールできます-

pip install opencv_python-X.X-cp36-cp36m-winX.whl

ここで、Xは、マシンにインストールされているPythonのバージョンと、使用しているwin32または64ビットを表します。

を使用している場合 anaconda 環境の場合は、次のコマンドを使用してOpenCVをインストールします-

conda install -c conda-forge opencv

画像の読み取り、書き込み、表示

ほとんどのCVアプリケーションは、入力として画像を取得し、出力として画像を生成する必要があります。このセクションでは、OpenCVが提供する機能を使用して画像ファイルを読み書きする方法を学習します。

画像ファイルの読み取り、表示、書き込みのためのOpenCV関数

OpenCVは、この目的のために次の機能を提供します-

  • imread() function−画像を読み取る機能です。OpenCV imread()は、PNG、JPEG、JPG、TIFFなどのさまざまな画像形式をサポートしています。

  • imshow() function−ウィンドウに画像を表示する機能です。ウィンドウは自動的に画像サイズに合わせます。OpenCV imshow()は、PNG、JPEG、JPG、TIFFなどのさまざまな画像形式をサポートしています。

  • imwrite() function−画像を書き込む機能です。OpenCV imwrite()は、PNG、JPEG、JPG、TIFFなどのさまざまな画像形式をサポートしています。

この例は、ある形式で画像を読み取り、ウィンドウに表示し、同じ画像を別の形式で書き込むためのPythonコードを示しています。以下に示す手順を検討してください-

図のようにOpenCVパッケージをインポートします-

import cv2

ここで、特定の画像を読み取るには、imread()関数を使用します-

image = cv2.imread('image_flower.jpg')

画像を表示するには、 imshow()関数。画像を見ることができるウィンドウの名前は次のようになりますimage_flower

cv2.imshow('image_flower',image)
cv2.destroyAllwindows()

これで、imwrite()関数を使用して、同じ画像を他の形式、たとえば.pngに書き込むことができます。

cv2.imwrite('image_flower.png',image)

Trueの出力は、画像が同じフォルダーにも.pngファイルとして正常に書き込まれたことを意味します。

True

注-関数destroyallWindows()は、作成したすべてのウィンドウを単に破棄します。

色空間変換

OpenCVでは、画像は従来のRGBカラーを使用して保存されるのではなく、逆の順序、つまりBGRの順序で保存されます。したがって、画像の読み取り中のデフォルトのカラーコードはBGRです。ザ・cvtColor() 画像をあるカラーコードから別のカラーコードに変換するための色変換機能。

この例を検討して、画像をBGRからグレースケールに変換します。

をインポートします OpenCV 示されているパッケージ-

import cv2

ここで、特定の画像を読み取るには、imread()関数を使用します-

image = cv2.imread('image_flower.jpg')

さて、この画像を使用して見ると imshow() 関数を実行すると、この画像がBGRにあることがわかります。

cv2.imshow('BGR_Penguins',image)

今、使用します cvtColor() この画像をグレースケールに変換する関数。

image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',image)

エッジ検出

人間は、ラフスケッチを見た後、多くのオブジェクトタイプとそのポーズを簡単に認識できます。そのため、エッジは人間の生活やコンピュータビジョンのアプリケーションで重要な役割を果たします。OpenCVは、と呼ばれる非常にシンプルで便利な関数を提供しますCanny()エッジを検出するため。

次の例は、エッジの明確な識別を示しています。

図のようにOpenCVパッケージをインポートします-

import cv2
import numpy as np

ここで、特定の画像を読み取るには、 imread() 関数。

image = cv2.imread('Penguins.jpg')

今、使用します Canny () すでに読み取った画像のエッジを検出する機能。

cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(image,200,300))

ここで、エッジのある画像を表示するには、imshow()関数を使用します。

cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’))

このPythonプログラムは、という名前の画像を作成します edges_penguins.jpg エッジ検出付き。

顔検出

顔検出は、コンピュータービジョンの魅力的なアプリケーションの1つであり、より現実的で未来的なものになります。OpenCVには、顔検出を実行するための機能が組み込まれています。を使用しますHaar 顔検出用のカスケード分類器。

Haarカスケードデータ

Haarカスケード分類器を使用するにはデータが必要です。このデータは、OpenCVパッケージに含まれています。OpenCvをインストールすると、フォルダ名が表示されますhaarcascades。さまざまなアプリケーション用の.xmlファイルがあります。次に、それらすべてをさまざまな用途にコピーして、現在のプロジェクトの下の新しいフォルダーに貼り付けます。

Example

以下は、HaarCascadeを使用して次の画像に示すAmitabhBachanの顔を検出するPythonコードです。

をインポートします OpenCV 示されているパッケージ-

import cv2
import numpy as np

今、使用します HaarCascadeClassifier 顔を検出するため-

face_detection=
cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/
haarcascade_frontalface_default.xml')

ここで、特定の画像を読み取るには、 imread() 関数-

img = cv2.imread('AB.jpg')

グレー画像を受け入れるので、グレースケールに変換します-

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

今、を使用して face_detection.detectMultiScale、実際の顔検出を実行します

faces = face_detection.detectMultiScale(gray, 1.3, 5)

次に、顔全体の周りに長方形を描きます-

for (x,y,w,h) in faces:
   img = cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),3)
cv2.imwrite('Face_AB.jpg',img)

このPythonプログラムは、という名前の画像を作成します Face_AB.jpg 示されているように顔検出付き

目の検出

目の検出は、コンピュータビジョンのもう1つの魅力的なアプリケーションであり、より現実的で未来的なものになります。OpenCVには、目の検出を実行するための機能が組み込まれています。を使用しますHaar cascade 目の検出のための分類器。

次の例は、Haar Cascadeを使用して次の画像に示されているAmitabhBachanの顔を検出するPythonコードを示しています。

図のようにOpenCVパッケージをインポートします-

import cv2
import numpy as np

今、使用します HaarCascadeClassifier 顔を検出するため-

eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')

ここで、特定の画像を読み取るには、 imread() 関数

img = cv2.imread('AB_Eye.jpg')

グレー画像を受け入れるので、グレースケールに変換します-

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

今の助けを借りて eye_cascade.detectMultiScale、実際の顔検出を実行します

eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)

次に、顔全体の周りに長方形を描きます-

for (ex,ey,ew,eh) in eyes:
   img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2)
cv2.imwrite('Eye_AB.jpg',img)

このPythonプログラムは、という名前の画像を作成します Eye_AB.jpg 示されているように目の検出で-