OpenCV3 计算机视觉 Python语言实现 7.2 汽车检测

代码:

import cv2
import numpy as np
from os.path import join


# placeholder path
datapath = r"G:\Python_work\face_detect\CarData\TrainImages"
def path(cls,i):
  return "%s/%s%d.pgm"  % (datapath,cls,i+1)


pos, neg = "pos-", "neg-"


detect = cv2.xfeatures2d.SIFT_create()
extract = cv2.xfeatures2d.SIFT_create()


flann_params = dict(algorithm = 1, trees = 5)
matcher = cv2.FlannBasedMatcher(flann_params, {})


bow_kmeans_trainer = cv2.BOWKMeansTrainer(40)
extract_bow = cv2.BOWImgDescriptorExtractor(extract, matcher)


def extract_sift(fn):
  im = cv2.imread(fn,0)
  #print(extract.compute(im, detect.detect(im))[1])
  return extract.compute(im, detect.detect(im))[1]
  
  
for i in range(8):
  bow_kmeans_trainer.add(extract_sift(path(pos,i)))
  bow_kmeans_trainer.add(extract_sift(path(neg,i)))
  
voc = bow_kmeans_trainer.cluster()


extract_bow.setVocabulary( voc )


def bow_features(fn):
  im = cv2.imread(fn,0)
  #print(extract_bow.compute(im, detect.detect(im)))
  return extract_bow.compute(im, detect.detect(im))


traindata, trainlabels = [],[]
for i in range(20): 
  traindata.extend(bow_features(path(pos, i))); trainlabels.append(1)
  traindata.extend(bow_features(path(neg, i))); trainlabels.append(-1)


svm = cv2.ml.SVM_create()
svm.train(np.array(traindata), cv2.ml.ROW_SAMPLE, np.array(trainlabels))


def predict(fn):
  f = bow_features(fn);
  #print(f)
  p = svm.predict(f)


  print (fn, "\t",p[1][0][0])
  return p


# again placeholder paths
car, notcar = r"./car.jpg", r"./sing.jpg"
car_img = cv2.imread(car)
notcar_img = cv2.imread(notcar)
car_predict = predict(car)
not_car_predict = predict(notcar)


font = cv2.FONT_HERSHEY_SIMPLEX


if (car_predict[1][0][0] == 1.0):
  cv2.putText(car_img,'Car Detected',(10,30), font, 1,(0,255,0),2,cv2.LINE_AA)


if (not_car_predict[1][0][0] == -1.0):
  cv2.putText(notcar_img,'Car Not Detected',(10,30), font, 1,(0,0, 255),2,cv2.LINE_AA)


cv2.imshow('BOW + SVM Success', car_img)
cv2.imshow('BOW + SVM Failure', notcar_img)
cv2.waitKey(0)

cv2.destroyAllWindows()

汽车训练数据集下载地址:http://cogcomp.org/Data/Car/

运行结果:

OpenCV3 计算机视觉 Python语言实现 7.2 汽车检测_第1张图片

OpenCV3 计算机视觉 Python语言实现 7.2 汽车检测_第2张图片

你可能感兴趣的:(OpenCV3 计算机视觉 Python语言实现 7.2 汽车检测)