[英]OpenCV 4.0.0 SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set
你好,我正在嘗試創建一個面部識別程序,但我有一個奇怪的錯誤:這是我的代碼:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier("lbpcascade_frontalface.xml")
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5);
這個錯誤是輸出
SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set
我在工作目錄中有“lbpcascade_frontalface.xml”,所以這應該不是問題
如果我輸入時有幫助
cv2.__version__
我得到
'4.0.0'
新答案OpenCV 現在似乎有一個專用於級聯的目錄,它們被放置在data
,我現在在教程中看到類似這樣的東西haar_cascade_face = cv2.CascadeClassifier('data/haarcascade/haarcascade_frontalface_default.xml')
你可能必須查找data
在您的機器上或以上我的工作中的位置。 自從我在 2019 年初完成這個項目以來,我一直沒有接觸過這個項目。請記住,這僅適用於正面,如果您想將 Haar's Cascade 用於眼睛,這是一個單獨的文件。
舊答案原來我不需要下載另一個文件並使用它,因為 opencv 附帶了這一點代碼工作
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
好吧,我遇到了同樣的問題,因為@TylerStrouth 提到此代碼片段不起作用:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
因為如果您剛剛以pip install opencv-python
或sudo apt-get install python3-opencv
的標准格式安裝了opencv ,則數據目錄中沒有 haarcascades 文件
您將收到類似於此 stackoverflow question的錯誤,其中提到的解決方案對我有用,也就是說,如果您使用的是 python3,那么您還需要在運行上述代碼片段之前安裝opencv-contrib-python 。
pip install opencv-contrib-python
它有完整的包(包含主要模塊和 contrib/extra 模塊)
如下更改您的代碼,這對我有用
har_cascade = cv2.CascadeClassifier(cv2.data.haarcascades +'har.xml')
正如上面@TylerStrouth 所解釋的,opencv 有一個級聯目錄,其中級聯文件可用,我在 Ubuntu 16.04 上運行人臉檢測代碼時也遇到了同樣的問題,解決方法如下
使用獲取opencv的位置
哪里有opencv
我的在 /usr/share/opencv
檢查級聯是否存在於該位置,並將該位置與所需的 haarcascade 復制粘貼到 cv2.CascadeClassifier 中
我以不同的方式遇到了同樣的問題。 我在這里使用 Jupiter notebook 執行代碼
我從這里復制了 XML 文件並在當前的 Jupiter 目錄中創建了一個 XML 文件,當使用以下方法加載此文件時:
classifier = CascadeClassifier('haarcascade_frontalface_default.xml')
它返回了我的錯誤:
SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set
所以,我嘗試了其他方式,刪除了這個文件,並在當前目錄中以 XML 格式下載了實際文件,這解決了我的問題。
當我使用hogcascade_pedestrians.xml
從本地視頻中檢測行人時,我遇到了同樣的錯誤,我正在閱讀hogcascade_pedestrians.xml
,如下所示:
pedestrainsClassifier = cv2.CascadeClassifier("hogcascade_pedestrians.xml")
其中你應該閱讀如下:
pedestrainsClassifier = cv2.CascadeClassifier(f"{cv2.data.haarcascades}hogcascade_pedestrians.xml")
或者,您可以按如下方式進行:
pedestrainsClassifier = cv2.CascadeClassifier(cv2.data.haarcascades +"hogcascade_pedestrians.xml")
祝你好運
在 opencv-python 的3.4.9.33
版( pip show opencv-python
,Windows)上,以下行工作正常: trained_face_data = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.