這篇文章即將開啟我們的計算機視覺之旅的探索
1.首先需要下載一個cv2包,全稱為Open Source Computer Vision Library,縮寫為OpenCV,調用時簡稱cv2
win+R,輸入cmd打開命令窗口,然后輸入命令行:
pip install opencv-python
2.輸入pip list可以查看到是否成功安裝有opencv-python
3.這邊opencv-python包中需要手動添加一個加載分類器haarcascade_frontalface_alt2.xml
(1)一般情況下opencv-python的默認路徑為C:\Users\dell\anaconda3\Lib\site-packages\opencv_python-4.5.1.48.dist-info
(2)打開opencv_python-4.5.1.48.dist-info這個文件夾后把,加載分類器haarcascade_frontalface_alt2.xml放進這個目錄里面
(3)#加載分類器haarcascade_frontalface_alt2.xml下載路徑:
鏈接:https://pan.baidu.com/s/1flgCtnwnWFy7-1OHwkdmbg
提取碼:vicu
復制這段內容后打開百度網盤手機App,操作更方便哦
4.接下來為大家分享一個小編親測有效的opencv人臉識別算法,用的是筆記本電腦外接USB攝像頭,完整代碼如下:
import cv2 def getTrainingData(window_name, camera_id, path_name, max_num): # path_name是圖片存儲目錄,max_num是需要捕捉的圖片數量 cv2.namedWindow(window_name) # 創建窗口 cap = cv2.VideoCapture(camera_id) # 打開攝像頭 classifier = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml') # 加載分類器 classifier.load(r'C:\Users\dell\anaconda3\Lib\site-packages\opencv_python-4.5.1.48.dist-info\haarcascade_frontalface_alt2.xml')#一定要告訴編譯器文件所在的具體位置 color = (0,255,0) # 人臉矩形框的顏色 num = 0 # 記錄存儲的圖片數量 while cap.isOpened(): ok, frame = cap.read() if not ok: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 灰度化 faceRects=classifier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32)) if len(faceRects) > 0: for faceRect in faceRects: x,y,w,h = faceRect # 捕捉到的圖片的名字,這里用到了格式化字符串的輸出 image_name = '%s%d.jpg' % (path_name, num) # 注意這里圖片名一定要加上擴展名,否則后面imwrite的時候會報錯:could not find a writer for the specified extension in function cv::imwrite_ 參考:https://stackoverflow.com/questions/9868963/cvimwrite-could-not-find-a-writer-for-the-specified-extension image = frame[y:y+h, x:x+w] # 將當前幀含人臉部分保存為圖片,注意這里存的還是彩色圖片,前面檢測時灰度化是為了降低計算量;這里訪問的是從y位開始到y+h-1位 cv2.imwrite(image_name, image) num += 1 # 超過指定最大保存數量則退出循環 if num > max_num: break cv2.rectangle(frame, (x,y), (x+w,y+h), color, 2) # 畫出矩形框 font = cv2.FONT_HERSHEY_SIMPLEX # 獲取內置字體 cv2.putText(frame, ('%d'%num), (x+30, y+30), font, 1, (255,0,255), 4) # 調用函數,對人臉坐標位置,添加一個(x+30,y+30)的矩形框用於顯示當前捕捉到了多少人臉圖片 if num > max_num: break cv2.imshow(window_name, frame) c = cv2.waitKey(10) if c & 0xFF == ord('q'): break cap.release()#釋放攝像頭並銷毀所有窗口 cv2.destroyAllWindows() print('Finished.') #主函數 if __name__ =='__main__': print ('catching your face and writting into disk...') getTrainingData('mycamera',0,r'E:\datasets_me\training_data_me',10) # 注意這里的path_name必須是純英文,否則讀取不到存儲路徑;而且最后一個“\”后面是自定義的圖片名稱,之前的全為路徑
5.這邊需要注意的是
(1)# 加載分類器的路徑根據自己的情況修改
(2)注意這里的path_name必須是純英文,否則讀取不到存儲路徑;而且最后一個“\”后面是自定義的圖片名稱,之前的全為路徑
6.后續會陸續更新,如何在搜集的人臉數據的基礎上如何准備數據集,加載數據集,數據集的划分,如何用Keras和Tensorflow構造卷積神經網絡以及訓練神經網絡等。請持續關注。。。
我是小關,關注我,帶你從初級入門編程
希望能幫到大家,問你們要一個贊,你們會給嗎,謝謝大家
版權聲明:本文版權歸作者(@攻城獅小關)和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
大家寫文都不容易,請尊重勞動成果~
交流加Q:1909561302
CSDN地址https://blog.csdn.net/Mumaren6/