Python AI – 計算機視覺



計算機視覺關注的是利用計算機軟體和硬體模擬和複製人類視覺。在本章中,您將詳細瞭解這一點。

計算機視覺

計算機視覺是一門研究如何從二維影像重建、解釋和理解三維場景的學科,它關注的是場景中存在的結構屬性。

計算機視覺層次結構

計算機視覺可以分為以下三個基本類別:

  • 低階視覺 - 包括進行影像處理以提取特徵。

  • 中級視覺 - 包括物體識別和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() 函式 - 這是用於讀取影像的函式。OpenCV imread() 支援各種影像格式,例如 PNG、JPEG、JPG、TIFF 等。

  • imshow() 函式 - 這是用於在視窗中顯示影像的函式。視窗會自動適應影像大小。OpenCV imshow() 支援各種影像格式,例如 PNG、JPEG、JPG、TIFF 等。

  • imwrite() 函式 - 這是用於寫入影像的函式。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()
image flower

現在,我們可以使用 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)
penguine

現在,使用cvtColor()函式將此影像轉換為灰度。

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

邊緣檢測

人類在看到草圖後,可以輕鬆識別許多物體型別及其姿態。這就是為什麼邊緣在人類生活中以及計算機視覺應用中發揮著重要作用的原因。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的影像,其中包含邊緣檢測結果。

edges penguins

人臉檢測

人臉檢測是計算機視覺中一個令人著迷的應用,它使計算機視覺更加逼真和未來化。OpenCV 具有內建的人臉檢測功能。我們將使用Haar級聯分類器進行人臉檢測。

Haar 級聯資料

我們需要資料才能使用 Haar 級聯分類器。您可以在我們的 OpenCV 包中找到此資料。安裝 OpenCv 後,您可以看到名為haarcascades的資料夾。其中將包含用於不同應用的 .xml 檔案。現在,複製所有這些檔案以供不同用途使用,並將它們貼上到當前專案下的新資料夾中。

示例

以下是使用 Haar 級聯檢測以下影像中所示的 Amitabh Bachan 人臉的 Python 程式碼:

ab face

匯入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的影像,其中包含人臉檢測結果,如下所示

Face AB

眼睛檢測

眼睛檢測是計算機視覺中另一個令人著迷的應用,它使計算機視覺更加逼真和未來化。OpenCV 具有內建的眼睛檢測功能。我們將使用Haar 級聯分類器進行眼睛檢測。

示例

以下示例提供了使用 Haar 級聯檢測以下影像中給出的 Amitabh Bachan 人臉的 Python 程式碼:

Haar AB Face

匯入 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的影像,其中包含眼睛檢測結果,如下所示:

Eye AB
廣告

© . All rights reserved.