Artificial-intelligence-with-python-computer-vision
PythonとAI –コンピュータービジョン
コンピュータービジョンは、コンピューターソフトウェアとハードウェアを使用して人間の視覚をモデリングおよび複製することに関するものです。 この章では、これについて詳しく学習します。
コンピュータビジョン
コンピュータービジョンは、2D画像から3Dシーンを再構築、中断、理解する方法を、シーンに存在する構造の特性の観点から研究する分野です。
コンピュータービジョン階層
コンピュータビジョンは、次の3つの基本的なカテゴリに分かれています-
- 低レベルビジョン-特徴抽出のためのプロセス画像が含まれています。
- 中級レベルのビジョン-オブジェクト認識と3Dシーンの解釈が含まれます
- ハイレベルビジョン-活動、意図、行動などのシーンの概念的な説明が含まれています。
コンピュータビジョンと画像処理
画像処理は、画像から画像への変換を研究します。 画像処理の入力と出力は両方とも画像です。
コンピュータービジョンは、画像から物理オブジェクトの明示的で意味のある記述を作成することです。 コンピュータービジョンの出力は、3Dシーンの構造の説明または解釈です。
アプリケーション
コンピュータビジョンは、次の分野でアプリケーションを見つけます-
ロボティクス
- ローカリゼーションでロボットの位置を自動的に決定
- ナビゲーション
- 障害物回避
- 組み立て(ペグインホール、溶接、塗装)
- 操作(例: PUMAロボットマニピュレーター)
- ヒューマンロボットインタラクション(HRI):人々と対話し、サービスを提供するインテリジェントロボット工学
医学
- 分類と検出(例: 病変または細胞の分類および腫瘍の検出)
- 2D/3Dセグメンテーション
- 3Dヒト臓器再建(MRIまたは超音波)
- 視覚誘導ロボット手術
セキュリティ
- 生体認証(虹彩、指紋、顔認識)
- 監視-特定の不審な活動または行動の検出
交通手段
- 自律走行車
- 安全性、例:ドライバーの警戒監視
産業オートメーションアプリケーション
- 産業検査(欠陥検出)
- アセンブリ
- バーコードおよびパッケージラベルの読み取り
- オブジェクトの並べ替え
- ドキュメントの理解(例: 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()関数*-これはウィンドウに画像を表示するための関数です。 ウィンドウは自動的に画像サイズに適合します。 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 Cascadeデータ
Haarカスケード分類器を使用するにはデータが必要です。 このデータはOpenCVパッケージにあります。 OpenCvをインストールすると、フォルダー名 haarcascades が表示されます。 さまざまなアプリケーションの.xmlファイルがあります。 ここで、すべてを異なる用途にコピーして、現在のプロジェクトの下の新しいフォルダーに貼り付けます。
例
以下は、Haar Cascadeを使用して次の画像に示すAmitabh Bachanの顔を検出する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カスケード*分類器を使用します。
例
次の例では、Haar Cascadeを使用してPythonコードを提供し、次の画像に示すAmitabh Bachanの顔を検出します-
図のように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 という名前の画像を作成します-