首页 > 解决方案 > 错误:错误:(-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)
   

标签: pythonimage-processingsvmopencv3.0

解决方案


推荐阅读