使用國內源來安裝速度更快,參考教程:知乎教程
下載了whl文件之後,按win+R鍵輸入cmd回車,使用命令將當前路徑轉移到文件夾下,然後使用pip install命令安裝。
安裝完畢之後,先測試一下openCV是否可以使用,所以可以先輸入一些簡單的代碼來測試一下。
import cv2
#打開項目文件夾下面的photo子文件夾下的圖片文件
img = cv2.imread(r'photo\lena.png')
cv2.imshow("lena",img)
cv2.waitKey()
然後運行,就可以看到彈出的一個圖片窗口。
檢測人臉的步驟一共有三步:
1.打開圖片
2.檢測人臉
3.顯示圖片
沒錯,就是這麼簡單。
接下來上代碼:
import cv2
#國際慣例,先打開圖片
img = cv2.imread(r'photo\lena.png')
#圖像灰度化
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#導入已經儲存好人臉數據的文件來識別人臉
face_img = cv2.CascadeClassifier(r'haarcascade_frontalface_default.xml')
#這裡scaleFactor參數是圖像縮小比例,minNeighbors是制定目標的重復檢測次數
faces = face_img.detectMultiScale(gray_img,scaleFactor=1.05,minNeighbors=5)
#使用rectangle方法來畫個綠框框
for x,y,w,h in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
#顯示圖片
cv2.imshow("lena",img)
cv2.waitKey()
完成
視頻的本質就是圖片流,每一幀都是一張圖片,60幀的視頻意思就是一秒有60張圖片。
所以使用攝像頭進行人臉檢測完全可以基於上面的代碼進行修改,只需要將攝像頭捕獲的圖片逐個進行人臉檢測再輸出就可以了。
import cv2
#把原先打開圖片的語句注釋掉,改為使用從攝像頭獲取圖片
#img = cv2.imread(r'photo\lena.png')
#打開攝像頭。這裡的0是指要打開的攝像頭,有多個攝像頭可以改為1或者2等等
cap = cv2.VideoCapture(0)
while True:
#讀取信息
ret,img = cap.read()
#檢測是否有捕獲到幀
if ret == True:
#灰度化
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#人臉檢測
#導入人臉數據
face_img = cv2.CascadeClassifier(r'first/haarcascade_frontalface_default.xml')
#把圖片進行處理
faces = face_img.detectMultiScale(gray_img,scaleFactor=1.05,minNeighbors=5)
#判斷是否有獲取到人臉,有則畫個框
if len(faces)>0:
for x,y,w,h in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
#輸出
cv2.imshow('capture',img)
#等待鍵盤輸入,如果輸入為q,則跳出循環,結束
if cv2.waitKey(30) & 0xFF == ord('q'):
break
else:
break
#釋放資源,關閉窗口
cap.release()
cv2.destroyAllWindows()