【发布时间】:2017-05-06 11:33:21
【问题描述】:
我正在尝试使用 opencv2 运行一些 python 2.7 代码。目前,如果一个对象进入框架,代码会将其标记为它在照片数据库中看起来最像的那个。而不是这个,我希望它将未经训练的面孔标记为“未知”,这是我到目前为止的代码:
import cv2
import numpy as np
faceDetect=cv2.CascadeClassifier('haarcascade_frontalface_default.xml');
cam=cv2.VideoCapture(0);
rec=cv2.createLBPHFaceRecognizer();
rec.load("recognizer\\trainingData.yml")
id=0
font=cv2.cv.InitFont(cv2.cv.CV_FONT_HERSHEY_SIMPLEX,1,1,0,0)
#font=cv2.cv.InitFont(cv2.cv.CV_FONT_HERSHEY_COMPLEX_SMALL,3,1,0,1)
while (True):
ret, img=cam.read();
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces=faceDetect.detectMultiScale(gray,1.3,5);
for (x,y,w,h) in faces:
#cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)
id,conf=rec.predict(gray[y:y+h, x:x+w])
if(id==1):
id="Admin"
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)
elif(id==2):
id="Sonja"
cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,255),2)
cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,255),2)
cv2.cv.PutText(cv2.cv.fromarray(img),str(id),(x,y+h),font,(255,255,255));
cv2.imshow("Image",img);
if(cv2.waitKey(1)==ord('q')):
break;
cam.release()
cv2.destroyAllWindows()
并且训练器是通过这段代码运行的:
import os
import cv2
import numpy as np
from PIL import Image
recognizer=cv2.createLBPHFaceRecognizer();
path='dataSet'
def getImagesWithID(path):
imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
faces=[]
IDs=[]
for imagePath in imagePaths:
faceImg=Image.open(imagePath).convert('L');
faceNp=np.array(faceImg,'uint8')
ID=int(os.path.split(imagePath)[-1].split('.')[1])
faces.append(faceNp)
print ID
IDs.append(ID)
cv2.imshow("training",faceNp)
cv2.waitKey(10)
return np.array(IDs), faces
Ids, faces= getImagesWithID(path)
recognizer.train(faces, Ids)
recognizer.save('recognizer/trainingData.yml')
cv2.destroyAllWindows()
【问题讨论】:
标签: python-2.7 opencv numpy webcam image-recognition