Python OpenCV traincascade XML文件错误
我不太确定哪里出了问题——我正在尝试用自己拍摄的+/-图像训练OpenCV进行目标检测。所有步骤都正常,但最终我的Python脚本不会读取XML级联文件(但会加载一个内置的人脸检测文件) 值得一提的是,我在Mac Lion上运行Python2.7.3 我的过程:Python OpenCV traincascade XML文件错误,python,xml,opencv,Python,Xml,Opencv,我不太确定哪里出了问题——我正在尝试用自己拍摄的+/-图像训练OpenCV进行目标检测。所有步骤都正常,但最终我的Python脚本不会读取XML级联文件(但会加载一个内置的人脸检测文件) 值得一提的是,我在Mac Lion上运行Python2.7.3 我的过程: 创建一个集合文件,正面图像上有边界框 创建负面图像列表 使用以下命令使用opencv\u createsamples:opencv\u createsamples-info collection.txt-bg negativeImage
opencv\u createsamples
:opencv\u createsamples-info collection.txt-bg negativeImages.txt-vec positivectorfile.vec-num 20-w 32-h 24
traincascade
程序:opencv\u traincascade-data directoryToStoreFiles-vec positivectorfile.vec-bg negativemagelist.txt-numPos 16-numNeg 20-numStages 5-mem 1000-maxHitRate 0.95-w 32-h 24
cv2.error:节点不代表用户对象(未知类型?)
我已将级联文件上载到此处:。不确定这是我的级联文件,一路上有其他问题,还是很明显的? < P>我不确定,因为我不使用Python OpenCV,只使用C++部分。您确定使用了正确的包装函数来检测MultiScale而不是旧的C cvHaarDetect吗?因为您的级联是使用traincascade进行训练的,traincascade生成的级联只适用于函数CascadeClassifier::detectMultiScale。它不适用于cvHaarDetect
我认为Python中需要使用的函数是
我认为在python中需要使用的函数是cv2.CascadeClassifier.detectMultiScale,请查看文档。好吧,cyberdecker的建议似乎是几个问题之一:cv2对所有东西都有完全不同的命令,并且在使用
opencv\u traincascade
时需要使用。我的代码现在可以工作了(尽管我的级联还没有完全工作):
嗯,cyberdecker的建议似乎是几个问题中的一个:cv2对所有东西都有完全不同的命令,并且在使用
opencv\u traincascade
时是必需的。我的代码现在可以工作了(尽管我的级联还没有完全工作):
嗯,谢谢你的建议(我认为这可能会引起问题)。这个错误实际上似乎来自cv.Load——在它可能在CascadeClassifier上出现错误之前抛出。编辑:更进一步,cv2似乎要求将Cascade加载为
cv2.CascadeClassifier(“filename.xml”)
Yes,当您切换到cv2和traincascade时,函数会发生很大变化。关于您的级联,培训是否正确终止?你说你的代码现在可以运行了,很好!您是否使用一些opencv级联进行了测试,以确保它成功加载级联?是的!该代码适用于所有cv2函数和(最后)我的级联。这种困惑主要来自于网上大量不太好的旧教程。cv2/traincascade问题只是我认为大部分已经解决的问题之一。例如:看似“假叶率”的错误实际上是程序在说“一切都很好,我们完成了!”谢谢你让我走上正轨!嗯,谢谢你的建议(我认为这可能会引起问题)。这个错误实际上似乎来自cv.Load——在它可能在CascadeClassifier上出现错误之前抛出。编辑:更进一步,cv2似乎要求将Cascade加载为cv2.CascadeClassifier(“filename.xml”)
Yes,当您切换到cv2和traincascade时,函数会发生很大变化。关于您的级联,培训是否正确终止?你说你的代码现在可以运行了,很好!您是否使用一些opencv级联进行了测试,以确保它成功加载级联?是的!该代码适用于所有cv2函数和(最后)我的级联。这种困惑主要来自于网上大量不太好的旧教程。cv2/traincascade问题只是我认为大部分已经解决的问题之一。例如:看似“假叶率”的错误实际上是程序在说“一切都很好,我们完成了!”谢谢你让我走上正轨!
import cv
img = cv.LoadImage("test.jpg", 0)
# load detection file (various files for different views and uses)
cascade = cv.Load("cascade.xml") # doesn't work
#cascade = cv.Load("frontalface.xml") # works
# detect faces, return as list
detected = cv.HaarDetectObjects(img, cascade, cv.CreateMemStorage())
# iterate detected objects, drawing a rectangle around each
for (x,y, w,h), n in detected:
cv.Rectangle(img, (x,y), (x+w, y+h), 255)
# create a window to display the results
windowTitle = "Test Cascade"
cv.NamedWindow(windowTitle, cv.CV_WINDOW_AUTOSIZE)
# display tested image until the escape key is pressed
while True:
cv.ShowImage(windowTitle, img)
# watch for escape key (ASCII 20)
key = cv.WaitKey(20)
if key == 27:
# save the image to file is specified
if saveIt == True:
cv.SaveImage("detected.png", img)
# ... and quit
exit()
#import library - MUST use cv2 if using opencv_traincascade
import cv2
# rectangle color and stroke
color = (0,0,255) # reverse of RGB (B,G,R) - weird
strokeWeight = 1 # thickness of outline
# set window name
windowName = "Object Detection"
# load an image to search for faces
img = cv2.imread("test.jpg")
# load detection file (various files for different views and uses)
cascade = cv2.CascadeClassifier("cascade.xml")
# preprocessing, as suggested by: http://www.bytefish.de/wiki/opencv/object_detection
# img_copy = cv2.resize(img, (img.shape[1]/2, img.shape[0]/2))
# gray = cv2.cvtColor(img_copy, cv2.COLOR_BGR2GRAY)
# gray = cv2.equalizeHist(gray)
# detect objects, return as list
rects = cascade.detectMultiScale(img)
# display until escape key is hit
while True:
# get a list of rectangles
for x,y, width,height in rects:
cv2.rectangle(img, (x,y), (x+width, y+height), color, strokeWeight)
# display!
cv2.imshow(windowName, img)
# escape key (ASCII 27) closes window
if cv2.waitKey(20) == 27:
break
# if esc key is hit, quit!
exit()