Python人工智能之opencv--python實現計算機視覺


這篇文章即將開啟我們的計算機視覺之旅的探索

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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM