OpenCV 實作
講者:ㄇㄒ
日期:2020/12/27
臉部位置標示
Outline
- 前置作業
- 正式實作
- 參考資料
前置作業
安裝OpenCV
$ pip install opencv-python上次有安裝過的就可以不用裝了~
找到安裝位置
不熟悉安裝位置的話下面指令幫助您
$ pip show opencv-python依序打開cv2 → data資料夾

選擇等等要用的模組
- 人臉:haarcascade_frontalface_default.xml
- 貓臉:haarcascade_frontalcatface.xml


把整個路徑記下來
尋找、下載想要辨識的圖片
But 不要太刁難他找側臉的


正式實作
開啟特徵檔
import cv2
face_cascade = cv2.CascadeClassifier('檔案路徑')開啟圖片、啟用辨識
img = cv2.imread('圖片路徑')
faces = face_cascade.detectMultiScale(img, scaleFactor=1.05, minNeighbors=3, minSize=(10, 10))- scaleFactor:預設為1.1,前後兩次相繼的掃描中,搜索範圍的比例係數
- minNeighbors:預設為3,控制誤檢率的參數
- minSize:設定最小辨識區塊大小
- maxSize:設定最大辨識區塊大小
- flags:設定檢測模式
進行標示 ( 畫框框 )
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 255), 2)cv2.rectangle(圖片, 起始座標, 結束座標,
顏色(B,G,R), 粗細)
結果顯示
cv2.imshow('結果顯示', img)
cv2.waitKey(0)完整程式碼
import cv2
face_cascade = cv2.CascadeClassifier('特徵檔路徑')
img = cv2.imread('圖片路徑')
faces = face_cascade.detectMultiScale(img, scaleFactor=1.08, minNeighbors=5, minSize=(15, 15))
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 255), 2)
cv2.imshow('img', img)
cv2.waitKey(0)補充:臉部儲存圖片
Text
from PIL import Image
count = 1
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 255), 2) # (Blue,Green,Red)
filename = "find" + str(count) + ".jpg"
i1 = Image.open('原始圖片名稱')
i2 = i1.crop((x, y, x + w, y + h))
i3 = i2.resize((200, 200), Image.ANTIALIAS)
i3.save(filename)
count += 1補充:比較圖片差異
import math, operator
from PIL import Image
from functools import reduce
# 以i1為基準比較
i1 = Image.open('圖片路徑')
i2 = Image.open('圖片路徑')
h1 = i1.histogram()
h2 = i2.histogram()
diff = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1))
print(diff) # 數值越大差異越大非連貫程式
Reference
- 文淵閣工作室(2019). Python初學特訓班(第四版):從快速入門到主流應用全面實戰. 台北市: 碁峰.
- Old Siao(2020). [2020鐵人賽Day30]糊裡糊塗Python就上手-體驗 OpenCV 人臉辨識. Retrieved from: https://reurl.cc/9XMGRO.
- Neil Ye(2017). [ OpenCV ] 利用 OpenCV抓取相片中的臉部數據. Retrieved from: https://ppt.cc/fgY2ox.
感謝聆聽(ノ◕ヮ◕)ノ*:・゚✧
OPENCV again
By sandy-tsai
OPENCV again
- 89