我尝试使用简单的级联分类器来检测图像上给出的停车标志,图像如下所示:
我已经实现了代码,也发现了以下xml文件:
stopsign_classifier_haar.xml
但返回以下错误:cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\core\src\persistence.cpp:682: error: (-5:Bad argument) Input file is invalid in function 'cv::FileStorage::Impl::open'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\AI_Project\stop_sign_detection.py", line 6, in <module>
stop_data = cv2.CascadeClassifier('stopsign_classifier_haar.xml')
SystemError: <class 'cv2.CascadeClassifier'> returned a result with an exception set
我已经尝试了很多研究,包括stackoverflow、githubs、此链接以及haarcascade file issue。我还在www.example.com的默认目录中找到了xml文件cv2.data,但根本没有解决方案。我尝试了从不同目录下载的不同级联文件,但0结果
下面是我代码解决方案
import cv2
import matplotlib.pyplot as plt
image =cv2.imread("stop.jpg")
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
img_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
stop_data = cv2.CascadeClassifier('stopsign_classifier_haar.xml')
found =stop_data.detectMultiScale(img_gray,minSize=(20,20),scaleFactor=1.2)
amount_found = len(found)
if amount_found !=0:
for (x,y,width,height) in found :
cv2.rectangle(img_rgb,(x,y),(x+height,y+width),(0,255,0),5)
plt.subplot(1, 1, 1)
plt.imshow(img_rgb)
plt.show()
#plt.subplot(1, 1, 1)
#plt.imshow(img_rgb)
#plt.show()
此代码片段取自给定链接:geeks for geeks for haar
当我试图从这个网站上显示的链接下载-链接被打破,因此我试图从不同的来源下载,但得到这样的错误,请告诉我什么是错误的代码?
1条答案
按热度按时间s3fp2yjn1#
因为这是以前的情况下,经过大量的研究,我发现以下kaggle网站,其中适当的xml文件位于working cascade for stop sign
下面是我的代码:
结果:
因此,如果有人可能需要帮助,在未来,你可以使用我的答案作为参考。谢谢提前