'''
opencv_机器学习-Hog特征+SVM(支持向量机)完成识别
1.什么是SVM
本质是分类器,寻找一个最优的超平面完成分类
可以使用若干条直线,也可以使用若干条曲线完成分类
SVM的核是 line
'''
import cv2
import numpy as np
import matplotlib.pyplot as pit
#准备data(身高和体重)
rand1 = np.array([[155,48],[159,50],[164,53],[168,56],[172,60]])#女生数据
rand2 = np.array([[152,53],[156,55],[160,56],[172,64],[176,65]])#男生数据
#准备label标签
label = np.array([[0],[0],[0],[0],[0],[1],[1],[1],[1],[1]])
#准备训练数据
data = np.vstack((rand1,rand2))#将两组数据加合在一块
data = np.array(data,dtype='float32')#
#在进行SVM训练时,所有的数据必须要有标签,标签是描述当前一组数据唯一的属性
#example:[155,48]->标签0 女生,[152,53]->标签1 男生
#监督学习
#标签0是负样本即rand1是负样本数据,标签1是正样本数据即rand2是正样本数据
#训练和预测
#完成SVM支持向量机的创建,ml描述的是机器学习模块(machine learning),SVM_create方法完成当前支持向量机的创建
svm = cv2.ml.SVM_create()
#属性设置
svm.setType(cv2.ml.SVM_C_SVC)#设置SVM的类型type
svm.setKernel(cv2.ml.SVM_LINEAR)#设置SVM的线性分类器,这一行最重要
svm.setC(0.01)
#训练
result = svm.train(data,cv2.ml.ROW_SAMPLE,label)
#完成数据的预测
pt_data = np.vstack([[167,55],[162,57]])#第一组数据label标签是0,表明是女生,第二组数据标签是1,表明是男生
pt_data = np.array(pt_data,dtype = 'float32')
print(pt_data)
#预测
(par1,par2) = svm.predict(pt_data)
print(par2)
OpenCV_机器学习-Hog特征+SVM(支持向量机)完成数据识别
最新推荐文章于 2022-05-13 22:30:32 发布