HOG+SVM图像识别

匿名 (未验证) 提交于 2019-12-02 23:03:14
 # 训练 # 1.参数 2. hog  3. SVM  4 computer Hog  5.label 6.train 7.pred  8 draw import os import numpy as np import matplotlib as plt import cv2 PosNum = 61 NegNum = 244 winSize = (64,128) blockSize = (16,16) blockStride = (8,8) cellSize = (8,8) nBin = 9  # print(os.getcwd()) # print(len(os.listdir("pos"))) # print(len(os.listdir("neg"))) # 2.creat hog   1 win 窗体的大小   2.  hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nBin) # 3.svm svm = cv2.ml.SVM_create() #  4. computer hog featureNum = int(((128-16)/8+1)*((64-16)/8+1)*4*9) # 3780 featureArray = np.zeros(((PosNum+NegNum),featureNum),np.float32) labelArray = np.zeros(((PosNum+NegNum),1),np.int32) # svm 监督学习    样本    标签  svm=> image hog # 遍历正样本文件 for i in range(0,PosNum):     filenName = "pos\\1 ("+str(i+1)+").jpg"     img = cv2.imread(filenName)     hist = hog.compute(img,(8,8))     for j in range(0,featureNum):         featureArray[i,j]=hist[j]     labelArray[i,0] = 1     # 正样本 label 1  # 遍历负样本文件 for i in range(0,NegNum):     fileName =  "neg\\trainimg"+str(i+1)+".jpg"     img = cv2.imread(filenName)     hist = hog.compute(img,(8,8))     for j in range(0,featureNum):         featureArray[i+PosNum,j]=hist[j]     labelArray[i+PosNum,0] = -1     # 负样本 label -1 svm.setType(cv2.ml.SVM_C_SVC) svm.setKernel(cv2.ml.SVM_LINEAR) svm.setC(0.01) # 6,train ret = svm.train(featureArray,cv2.ml.ROW_SAMPLE,labelArray) svm.save("svmtest.mat") # 7.  检测 alpha = np.zeros((1),np.float32) rho = svm.getDecisionFunction(0,alpha) print(rho) print(alpha) alphaArray  = np.zeros((1,1),np.float32) supportVArray = np.zeros((1,featureNum),np.float32) resultArray = np.zeros((1,featureNum),np.float32) alphaArray[0,0] = alpha resultArray = -1*alphaArray*supportVArray # detect  myDetect = np.zeros((3781),np.float32) for i in range(0,3780):     myDetect[i] = resultArray[0,i] myDetect[3780] = rho[0] # 构建hog myHog = cv2.HOGDescriptor()  myHog.setSVMDetector(myDetect) # load imageSrc = cv2.imread("Test1.jpg",1) # (part1,part2) = svm.predict(imageSrc) # 预测 objs = myHog.detectMultiScale(imageSrc,0,(4,4),(8,8),1.05,2) print(objs) x = int(objs[0][0][0]) y = int(objs[0][0][1]) w = int(objs[0][0][2]) h = int(objs[0][0][3]) print(x) print(y) print(w) print(h) # 画出区域 cv2.rectangle(imageSrc,(x,y),(x+w,y+h),(255,0,0),2) # 展示图片 cv2.imshow("dst",imageSrc) # 延迟 cv2.waitKey(0)

文章来源: HOG+SVM图像识别
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!