寫在前面:

有沒有想過使用Python + OpenCV來實現人臉識別?

想想就有點小興奮吧。

小強也是不久前才了解到可以使用Python + OpenCV進行圖像處理。覺得有趣就想學習一下。

在這裡,把我學到的小知識記錄一下,也為了自己以後方便查看。

也希望有相同興趣的同學搭個伴,一起學習。更希望得到大牛們的指點和鼓勵。

完成此課後,我設置的終極目標有下面幾個:

1. 實現停車場的車牌識別系統,併到天橋上去做實驗

2. 手勢識別?

3. 道路標線識別?自動駕駛?

4. 標誌圖形識別?跟蹤?四軸飛行器?

5. ……發揮想像,一切和圖像識別有關的東東

6. Deep learning?


下面進入正題。

編輯一個python腳本,取名為face_detect.py

鍵入以下內容並保存。

# 導入opencv庫
import cv2
# 載入圖像
image = cv2.imread("messi.jpg")
# 顯示我們的原始圖像到屏幕上
cv2.imshow("Faces", image)
# 等待鍵盤輸出
cv2.waitKey(0)
# 將圖像轉成灰度圖像
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# 載入人臉分類檢測器(這個分類檢測器可以在opencv的安裝路徑xxx/OpenCV/haarcascade下找到)
detector =cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# 識別人臉,得到人臉所在的矩形區域(可能會得到多個人臉,所以這裡是一個list)
rects = detector.detectMultiScale(gray,scaleFactor=1.05, minNeighbors=7,
minSize=(30,30), flags=cv2.cv.CV_HAAR_SCALE_IMAGE)
# 遍歷list中每個識別到的人臉區域,並在原始圖像上沿該區域的邊界畫一個顏色為綠色、線寬為2個像素的邊框
for (x, y, w, h) in rects:
cv2.rectangle(image,(x, y), (x + w, y + h), (0, 255, 0), 2)
# 將圖像顯示在屏幕上,
cv2.imshow("Faces", image)
# 等待鍵盤輸出
cv2.waitKey(0)

保存之後,在終端中執行

python detect_faces.py

首先顯示的是我們的原始圖像。

此時,按上鍵盤上的任意按鍵。

奇蹟發生了。人臉識別出來了

是不是覺得很有趣?

話說回來。我們的路還長。這裡只是給大家一個印象-好玩兒。畢竟興趣才是最好的老師。

下面我會按部就班,完成以下內容(會慢慢補充):

1.1. 圖像的載入,顯示和保存

1.2. 圖像知識基礎

1.3. 繪圖

1.4. 基本圖像處理

1.4.1 平移、旋轉、縮放、翻轉-之理論

1.4.2 裁剪

1.4.3 算術運算

1.4.4 掩膜(mask)及位運算

1.4.5 通道分離及合併

1.5. 內核(kernel)

1.6. 形態學圖像處理(morphological operations)

1.7. 平滑模糊(smoothing and blurring)

1.8. 照明和顏色空間

1.9. 閾值

1.10. 梯度和邊緣檢測

a) 漸變

b) 邊緣檢測

1.11. 輪廓

a) 查找和繪製輪廓

b) 簡單輪廓特性

c) 高級輪廓特性

d) 輪廓逼近

e) 輪廓排序

1.2. 柱狀圖

1.3. 連通區域標記

2.1. 什麼是物體探測

a) 物體探測介紹

b) 模板匹配

2.2 物體探測

a) 安裝dlib

b) 物體探測

2.3 ……

推薦閱讀:

相关文章