python - 经过训练的 SVM 在测试集上的准确率接近 100%,但是当使用“cv2.VideoCapture(0)”中的帧时,它每次都会给出肯定的结果
问题描述
我已经使用 Python 中的定向梯度直方图训练了一个用于面部检测的 SVM。我在一个由网络摄像头中的图片组成的数据集上对其进行了训练。这是我导入和规范化图像的方法:
for theImage in arr:
face_img = cv2.imread(url + theImage)
bicubic = cv2.resize(np.float32(face_img), dsize=(64,32), interpolation=cv2.INTER_CUBIC)
data = asarray(bicubic)
data = data.astype(np.uint8)
posImages.append(data)
我这样设置 SVM:
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
svm.setKernel(cv2.ml.SVM_RBF)
即使训练集只占整个图片集的 20%,它仍然可以达到 98.8% 的准确率,在正常的训练/测试分割上,它可以达到 100% 的准确率。
我的问题是,当我尝试使用我的网络摄像头使用“cv2.VideoCapture(0)”对其进行测试时,无论输入如何,它每次都会给出 1(有一张脸)的结果。这是我如何实现的:
我已经使用 Python 中的定向梯度直方图训练了一个用于面部检测的 SVM。我在一个由网络摄像头中的图片组成的数据集上对其进行了训练。这是我导入和规范化图像的方法:
for theImage in arr:
face_img = cv2.imread(url + theImage)
bicubic = cv2.resize(np.float32(face_img), dsize=(64,32), interpolation=cv2.INTER_CUBIC)
data = asarray(bicubic)
data = data.astype(np.uint8)
posImages.append(data)
我这样设置 SVM:
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
svm.setKernel(cv2.ml.SVM_RBF)
即使训练集只占整个图片集的 20%,它仍然可以达到 98.8% 的准确率,在正常的训练/测试分割上,它可以达到 100% 的准确率。
我的问题是,当我尝试使用我的网络摄像头使用“cv2.VideoCapture(0)”对其进行测试时,无论输入如何,它每次都会给出 1(有一张脸)的结果。这是我如何实现的:
svm = cv2.ml.SVM_load('model.xml')
print("svm loaded")
vc = cv2.VideoCapture(0)
if vc.isOpened():
while True:
ret, img = vc.read()
bicubic = cv2.resize(np.float32(img), dsize=dim, interpolation=cv2.INTER_CUBIC)
data = asarray(bicubic)
data = data.astype(np.uint8)
cv2.imshow('test', data)
hogfeature = [hog.compute(data)]
y_val = svm.predict(np.array(hogfeature))
print(y_val)
if y_val[1][0] == 1:
print("FACE")
else:
print("NOT FACE")
cv2.waitKey(0)
vc.release()
cv2.destroyAllWindows()
我猜这是因为出于某种原因 cv2.imread() 的输出与 vc.read() 不同,如果这是问题所在,我该如何将网络摄像头图像转换为该格式。
我相信准确度结果是有效的,因为当我创建一个新数据集并测试它提供类似准确度的模型时。
任何帮助表示赞赏。
解决方案
推荐阅读
- timezone - 谷歌日历在日历的时区中包含 timeMin 的事件列表
- c++ - C++中移动赋值运算符的继承
- c++ - 使用 gcc 解决模棱两可的函数重载问题。为什么?
- reactjs - 如何使用 OnsenUI 和 react-router 进行导航?
- angularjs - Microsoft Edge 问题 - 请求的资源需要用户身份验证
- c# - 实体框架。添加到任何集合类型的通用实体方法
- ruby-on-rails - form_with 客户端验证
- apache - 如何在 Apache 中仅重定向子页面/子目录?
- python - Pandas groupby多列,求和并将答案作为新列附加到原始数据框
- sql - 查询以计算字段的每周明智数据