不太确定我哪里出错了 - 我正在尝试使用我自己拍摄的 +/- 图像训练 OpenCV 进行对象检测。所有步骤都正常,但最终我的 Python 脚本不会读取我的 XML 级联文件(但会加载内置的人脸检测文件之一)。
对于它的价值,我在运行 Python 2.7.3 的 Mac Lion 上。
我的过程:
- 在正图像上创建带有边界框的集合文件
- 创建负面图像列表
- 使用
opencv_createsamples
以下命令:opencv_createsamples -info collection.txt -bg negativeImages.txt -vec positiveVectorFile.vec -num 20 -w 32 -h 24
- 检查矢量文件:图像有点挤压但看起来还可以
traincascade
使用以下命令运行程序:opencv_traincascade -data directoryToStoreFiles -vec positiveVectorFile.vec -bg negativeImageList.txt -numPos 16 -numNeg 20 -numStages 5 -mem 1000 -maxHitRate 0.95 -w 32 -h 24
然后我运行以下 Python 脚本(它适用于通常的面部检测 XML):
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()
结果是错误:
cv2.error: The node does not represent a user object (unknown type?)
我在这里上传了级联文件:http: //pastebin.com/w7uRjyN7。不确定这是我的级联文件,还是其他问题,还是明显的问题?