Import dlib報錯:
git
但是已經安裝了dlib庫:
github
嘗試卸載在安裝:
conda uninstall dlib命令失敗:
安全
改用pip uninstall dlib命令成功卸載:
ide
從新安裝:pip install dlib失敗,報錯,又試了幾遍仍是一樣的錯:
函數
後來嘗試:從 https://pypi.org/ 將dlib庫下載到本地安裝以下圖,安裝成功:
測試
然而任然不能import:
ui
經查,說是py36沒有dlib庫的穩定版本,通常裝19.6.1就能夠用,結果也報錯:
code
將dlib-19.6.1版本的whl文件下載到本地安裝,安裝成功,import可行:
視頻
報錯截圖:
xml
提示代碼:
success, img = camera.read() \#灰度化 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
後來得知:除了路徑問題還有多是攝像頭ID沒對!
打開攝像頭代碼以下:
camera = cv2.VideoCapture(0) success,frame = camera.read()
以上代碼裏:
VideoCapture()中參數是0,表示打開筆記本的內置攝像頭,其餘數字則表明其餘設備;參數是視頻文件路徑則打開視頻,如cap = cv2.VideoCapture(「../demo.mp4」)
cap.read()按幀讀取視頻,ret,frame是獲cap.read()方法的兩個返回值。其中ret是布爾值,若是讀取幀是正確的則返回True,若是文件讀取到結尾,它的返回值就爲False。frame就是每一幀的圖像,是個三維矩陣。 然而:默認攝像頭是自帶的那個攝像頭,索引號爲0,但是若是外接USB攝像頭,它的索引號就不必定是0 ;另外,像個人筆記本自帶攝像頭索引傳0一直報錯,因此我先暴力破解一下攝像頭的索引號,確認一下究竟是不是0!代碼以下:
import cv2 ID = 0 while(1): camera = cv2.VideoCapture(ID) success,frame = camera.read() if success==False: ID += 1 else: print(ID) break
打印的結果是700!!
將原來代碼裏的索引號替換後果真OK!
importcv2 ID=700 camera=cv2.VideoCapture(ID) while(1): success,frame=camera.read() cv2.imshow("hello",frame) if cv2.waitKey(1)&0xFF==ord('q'): break camera.release() cv2.destroyAllWindows()
攝像頭的索引號改爲了700,代碼能打開攝像頭了,可是窗口一片漆黑!以下:
——重啓解決了問題,不過此後又出現了這個狀況,後來才發現是我在某軟件中設置了關於攝像頭的安全規則——不容許非法打開攝像頭,我先扶牆緩緩。
""" 經過攝像頭檢測並標記人臉 """ import cv2 # 加載人臉特徵庫 face_engine = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # 加載人眼特徵庫 eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml') # 打開攝像頭,700是攝像頭索引號(0表示默認攝像頭) camera = cv2.VideoCapture(700) while(True): # 讀取一幀的圖像 success, img = camera.read() # 灰度化 # img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 檢測人臉:1.3是放大比例(此參數必須大於1);13是重複識別次數(此參數用來調整精確度,越大則越精確) faces = face_engine.detectMultiScale(img, scaleFactor=1.3, minNeighbors=13) # 對每一張臉,進行如下操做 for (x, y, w, h) in faces: # 用矩形框出人臉:BGR色彩體系;2表示畫筆寬度 cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) # 用矩形圈出人臉 # 記錄下臉部位置,做爲識別眼睛的區域範圍 face_area = img[y:y + h, x:x + w] # 在記錄下的臉部區域識別人眼 eyes = eye_engine.detectMultiScale(face_area) # 對每個識別出的人眼,進行如下操做 for (xe, ye, we, he) in eyes: cv2.rectangle(face_area, (xe, ye), (xe + we, ye + he), (0, 255, 0), 1) cv2.imshow('Face Recognition', img) if cv2.waitKey(1) & 0xFF == ord('q'): break # 關閉攝像頭 camera.release() # 關閉全部窗口 cv2.destroyAllWindows()
項目詳見GitHub地址。具體功能:支持從照片、視頻文件、攝像頭獲取人臉數據;支持本身訓練模型;支持識別照片、視頻文件、攝像頭中的人臉。
項目環境:詳見requirements.txt文件;
項目結構如圖:
注:
1. dataset文件夾是數據集; 2. MyModel文件夾存放訓練的模型問價; 3. model_test文件夾是測試模型時,存放待測照片、視頻所用; 4. my_faces 和 MySource_faces文件夾是測試採集人臉數據集時所用的。 5. 採集人臉數據集: 從照片採集:faces_from_Photo.py 從視頻文件採集:faces_from_Video.py 從攝像頭採集:faces_from_Camera.py 加載照片的函數:read_img.py 6. 處理照片並加載標籤:load_dataset.py 7. 構建並訓練模型:train_model.py 處理數據集的函數:dataSet.py 8. 模型測試 識別照片中的人臉:Recognize_From_Photo.py、Recognize_From_Photo(2).py 識別視頻文件中的人臉:Recognize_From_Vedio.py 識別攝像頭中的人臉:Recognize_From_Camera.py