我們現在已經知道 OpenCV 可以拿來處理影像,這樣的成效又適用在什麼領域? 或是能對生活有什麼幫助嗎?
像是近兩年新型冠狀病毒的疫情越演越烈,出入各個場所人人都必須戴著口罩,如果單靠人力控管,一定會有所疏失,我們這時就能配合 AI 的使用
→ 辨識
物件的系統,自動偵測到未戴口罩的民眾,並增加辨識上的精確度。
我們之所以能夠辨別物體的不同,是因為我們可以透過學習該物體的特徵,例如貓&狗:
因此在圖形辨識很重要的步驟是必須建立特徵分類器
→ cv2.CascadeClassifier
記得要先下載 haarcascade 的模型 .xml 檔 !
faceClassi = cv2.CascadeClassifier(cascPath)
再來是偵測
圖片 → 用detectMultiScale
函數檢測,調整函數的參數使檢測結果更加精確!
faces = faceCascade.detectMultiScale( gray, scaleFactor=1.12 , minNeighbors=5,
minSize=(30, 30), flags = cv2.cv.CV_HAAR_SCALE_IMAGE )
- gray代表是灰階圖片
- scaleFactor是圖像的縮放比例
- minNeighbors針對目標進行檢測的次數
- minSize檢測目標的最小尺寸
scaleFactor,minNeighbors,minSize數值大小將影響辨識結果,須依狀況進行調整
接下來將檢測到的人臉(或物體)框出來
~!
以下使用 cv2.rectangle
函數畫方框。
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
x, y, w, h 是圖像物件要被框出時很重要的座標
(x,y)是左上角的座標, w 是寬度, h 則是高度
最後再顯示圖片就大功告成了!
cv2.imshow('My Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
實際執行結果: