繁体   English   中英

OPENCV - 在opencv c ++中训练的python中使用svm文件是可能的吗?

[英]OPENCV - Use svm file in python that was trainned in opencv c++ is possible?

我使用c ++ opencv训练了一个人脸识别系统。 我做了一些测试,识别在c ++代码中工作得非常好,所以我用这个训练保存了一个文件。 当我尝试在python上加载此文件时,预测始终为0.0。 我是python和numpy数组的新手。 下面我将用c ++(可行)编写代码,并在python中加载图像并应用预测。

C ++(工作得很好)

Mat face;
face = frame( faceRect );
// Convert to grayscale
cvtColor( face, face, COLOR_BGR2GRAY );
// Equalize hist
equalizeHist( face, face );
// Resize to 60x60
resize( face, face, samplesSize );
// Convert to CV_32FC1
face.convertTo( face, CV_32FC1 );
// Reshape to a row vector, 1x3600
face = face.reshape( 1, 1 );
// Make prediction
float prediction = svm.predict( face, true );
cout << "Predicao: " << prediction << endl;    

蟒蛇:

def faceRecogntion( self, faceRoi):
    # 1- Convert to grayscale
    grayface = cv2.cvtColor(faceRoi, cv2.COLOR_BGR2GRAY)
    # 2- Equalize hist
    cv2.equalizeHist( grayface, grayface)
    # 3 - Resize it to 60x60
    dim = ( 60, 60)
    grayface = cv2.resize(grayface, dim, interpolation = cv2.INTER_AREA)
    print 'Image size: ' + str(grayface.shape)
    # 4 - Convert to 32F
    faceFloat = np.array(grayface, dtype=np.float32);
    faceFloat = faceFloat.reshape( -1, 3600)
    # 5- Apply prediction
    result = self.svm.predict( faceFloat )
    print result
    cv2.waitKey(0)
    return

谢谢 ;)

在C ++中,你在predict()函数中将returnDFVal设置为true ,在这种情况下,如果你的问题是2级分类,那么该方法返回与边距签名距离的决策函数值,你应该尝试修改predict:

faceFloat = np.float32(grayface).reshape(-1, 3600)
result = self.svm.predict(faceFloat, True)

ps:C ++中的face是否包含与python中faceFloat相同的元素(以相同的顺序)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM