在執行
import cv2
import os
camema = cv2.VideoCapture(0) #對應/dev/video0的攝影機
camema.set(3, 640) # 設定影片寬度
camema.set(4, 480) # 設定影片高度
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
id = input('\n請輸入id?')
print("\n 初始化錄影機,請等待")
count = 0
while(True):
ret, img = camema.read()
img = cv2.flip(img, 1) #設定影像左右互換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉換成灰階
faces = detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5) #辨識影像
for (x,y,w,h) in faces:
cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2) #加上綠框
count += 1
cv2.imwrite("images/User." + str(id) + '.' + str(count) + ".jpg", gray[y:y+h,x:x+w]) #儲存影像到dataset資料夾
cv2.imshow('image', img)
k = cv2.waitKey(100) & 0xff #等待0.1秒,偵測鍵盤按鍵是否按下
if k == 27:#按下ESC按鍵,中斷while迴圈
break
elif count >= 30: # 偵測30張臉後,中斷while迴圈
break
print("\n 偵測完成")
camema.release()
cv2.destroyAllWindows()
時最終結果跑出
Traceback (most recent call last):
File "C:/Users/ADMIN/PycharmProjects/pythonProject2/images/1.py", line 13, in
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉換成灰階
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
想請問要怎麼解決
錯誤13行往前一行加
print(img.shape)
如果是空或是錯誤,代表沒讀到圖,甚至是鏡頭沒抓到(沒開?)
請再往前找問題
沒讀到圖 鏡頭有開 但是沒跳出來
for i in range(1,31):
# 依序開啟每一張蔡英文的照片
img = cv2.imread(r"C:\Users\ADMIN\PycharmProjects\pythonProject2\opencv\faces")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 色彩轉換成黑白
img_np = np.array(gray,'uint8') # 轉換成指定編碼的 numpy 陣列
face = detector.detectMultiScale(gray)
for(x,y,w,h) in face:
faces.append(img_np[y:y+h,x:x+w]) # 記錄蔡英文人臉的位置和大小內像素的數值
ids.append(1) # 記錄蔡英文人臉對應的 id,只能是整數,都是 1 表示蔡英文的 id 為 1
是這段沒辦法讀到圖片
Traceback (most recent call last):
File "C:/Users/ADMIN/PycharmProjects/pythonProject2/opencv/as.py", line 11, in
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 色彩轉換成黑白
cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
我把圖片位置改成絕對位置 這樣還是沒辦法
img = cv2.imread(r"C:\Users\ADMIN\PycharmProjects\pythonProject2\opencv\faces")
這個路徑看起來是一個資料夾,不是一張圖,所以讀不到
我的圖片都放在這個資料夾裡面 那我該如打才會讀到圖片
如果要依序開啟圖片的話我程式該如何打
img = cv2.imread(r'C:\Users\ADMIN\PycharmProjects\pythonProject2\opencv\faces\1.png')
目前改成這樣
cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
有些資訊不足,只能推測(猜)
跑 for 迴圈讀圖應該代表你的圖片名稱應該是 1.png~30.png
所以你要在路徑那邊加入變數 i
路徑那邊怕解讀錯誤,所以反斜線 \
我改成 \\
for i in range(1,31):
img = cv2.imread(f'C:\\Users\\ADMIN\\PycharmProjects\\pythonProject2\\opencv\\faces\\{i}.png')
另外建議程式碼要包起來(</>
),不然 python 是靠空格,會解讀困難
照著你的方式跑一次了
Traceback (most recent call last):
File "C:/Users/ADMIN/PycharmProjects/pythonProject2/opencv/as.py", line 12, in
face = detector.detectMultiScale(gray) # 擷取人臉區域
cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
目前是這行出問題
其實以你這樣的資訊提供是有點問題的
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# detector = cv2.CascadeClassifier('xml檔案所在路徑')
確認一下這個 haarcascade_frontalface_default.xml 檔案所放的放的路徑吧
https://steam.oxxostudio.tw/category/python/ai/ai-face-dectection.html
可以看到需要下載人臉特徵模型,然後放到跟你的py檔同一個資料夾內
就可以用以下讀取
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')