python - 错误:错误:(-215:断言失败)samples.cols == var_count && samples.type() == 5 in function 'cv::ml::SVMImpl::predict'
问题描述
我想预测和提取“眼部区域/眼部区域”
我在眼睛(正面图像)和其他(负面图像)的数据集上训练了我的 SVM
现在我添加(haarcascde_eye.xml)文件来检测眼睛和预测结果我想使用我自己的训练有素的 SVM.xml 文件,但它不断显示这个错误
如果我删除这行代码
res = svm.predict(sample)
print (res)
代码的其余部分工作正常。我搜索与该问题相关的每个链接将不胜感激以正确的方式指导我。
培训代码
import cv2
import glob
import numpy as np
samples = []
labels = []
i=0
# Get positive samples
for filename in glob.glob("C:\\Users\\ATech\\AppData\\Local\\Programs\\Python\\Python37-32\\interface\\images\\iphone_day_light_short\\eyes\\*.png"):
img = cv2.imread(filename, 1)
#img = cv2.resize(img, (240, 160))
hog = cv2.HOGDescriptor()
hist = hog.compute(img)
samples.append(hist)
labels.append(1)
i+=1
if i > 50:
break
print(hist)
# Get negative samples
for file in glob.glob("C:\\Users\\ATech\\AppData\\Local\\Programs\\Python\\Python37-32\\interface\\images\\iphone_day_light_short\\ng_images\\*.png"):
img = cv2.imread(
file, 1)
img = cv2.resize(img, (240, 160))
hog = cv2.HOGDescriptor()
hist = hog.compute(img)
samples.append(hist)
labels.append(0)
print(hist)
print('done****')
# Convert objects to Numpy Objects
samples = np.float32(samples)
labels = np.array(labels)
# Shuffle Samples
rand = np.random.RandomState(321)
shuffle = rand.permutation(len(samples))
samples = samples[shuffle]
labels = labels[shuffle]
# Create SVM classifier
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
svm.setKernel(cv2.ml.SVM_LINEAR) # cv2.ml.SVM_LINEAR
# svm.setDegree(0.0)
svm.setGamma(5.383)
# svm.setCoef0(0.0)
svm.setC(2.67)
# svm.setNu(0.0)
# svm.setP(0.0)
# svm.setClassWeights(None)
# Train
svm.train(samples, cv2.ml.ROW_SAMPLE, labels)
svm.save('svmdata.xml')
测试代码/预测代码
import cv2
import numpy as np
svm = cv2.ml.SVM_load("C:\\Users\\ATech\\AppData\\Local\\Programs\\Python\\Python37-32\\interface\\images\\svmdata.xml")
sample = []
img = cv2.imread("C:\\Users\\ATech\\AppData\\Local\\Programs\\Python\\Python37-32\\interface\\images\\face.jpg",0)
#img2 = cv2.resize(img1, (240, 160))
eye_cascade=cv2.CascadeClassifier("C:\\Users\\ATech\\AppData\\Local\\Programs\\Python\\Python37-32\\interface\\images\\haarcascade_eye.xml")
hog = cv2.HOGDescriptor()
hist = hog.compute(img)
sample.append(hist)
print(hist)
sample = np.float32(sample)
#hist = cv2.resize(hist, (1, 1))
eyes=eye_cascade.detectMultiScale(img,scaleFactor=2.0,minNeighbors=5)
list_x=[]
list_y=[]
for (x, y, w, h) in eyes:
roi=cv2.rectangle(img, (x,y), ( x+w,y+h), (0, 0, 255), 4)
list_x.append(x)
list_y.append(y)
roi1=roi[list_y[0]:list_y[0]+80,list_x[0]:list_x[1]+80]
cv2.imshow("eyes detected",roi1)
解决方案
推荐阅读
- javascript - 我的代码有什么问题使它重复 5 次
- linux - linux & windows socket编程(linux服务器、windows客户端)
- mysql - Mysql创建触发器语法错误使用DELIMITER $$
- android - 软键盘将内容推送到屏幕外
- c# - 如何使用实体框架在 WPF c# 中的两个表之间插入一对多关系的数据?
- c - 如果打开文件,fopen() 会返回文件指针什么?
- android - 无法在领域中初始化列表
- django - JSON:带有 django-rest-framework-json-api 和 JWT 的 API
- mysql - 使用 .NET 执行 MySQL 的 SQL 文件
- r - ggplot2:添加 geom_smooth() 会破坏点图例