คือผมจะทำให้มันระบุบุคคลมากกว่า 1 คนทำยังไงครับ และเวลาเทรนเราจะต้องเทรนยังไงครับ ตอนนี้ไม่เข้าใจ Library ของมันครับ
โค้ดตอนนี้ครับระบุได้แค่ 1 ที่เหลือขึ้น Unknow ครับ พยายามที่สุดแล้วครับช่วยหน่อยนะครับ
นี่โค้ดครับ
import cv2
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
def create_dataset(img,id,img_id):
cv2.imwrite("data/pic."+str(id)+"."+str(img_id)+".jpg",img)
def draw_boundary(img,classifier,scaleFactor,minNeighbors,color,clf):
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
features = classifier.detectMultiScale(gray,scaleFactor,minNeighbors)
coords = []
for (x,y,w,h) in features:
cv2.rectangle(img,(x,y),(x+w,y+h),color,2)
id,con = clf.predict(gray[y:y+h,x:x+w])
con = round(100 - con)
if(con >= 10 and con <= 100):
cv2.putText(img,"Mix",(x,y-4),cv2.FONT_HERSHEY_SIMPLEX,0.8,color,2)
else :
cv2.putText(img,"Unknow",(x,y-4),cv2.FONT_HERSHEY_SIMPLEX,0.8,color,2)
print(con,"%")
coords = [x,y,w,h]
return img,coords
def detect(img,faceCascade,img_id,clf):
img,coords = draw_boundary(img,faceCascade,1.1,10,(0,0,255),clf)
if len(coords) == 4 :
id = 1
result = img[coords[1]:coords[1]+coords[3],coords[0]:coords[0]+coords[2]]
create_dataset(result,id,img_id)
return img
img_id = 0
cap = cv2.VideoCapture(0)
clf = cv2.face.LBPHFaceRecognizer_create()
clf.read("classifier.xml")
while(True):
ret,frame = cap.read()
frame = cv2.resize(frame,(640, 360))
frame = cv2.flip(frame,1)
frame = detect(frame,faceCascade,img_id,clf)
cv2.imshow('frame',frame)
img_id+=1
if(cv2.waitKey(1) & 0xFF == 27):
break
cap.release()
cv2.destroyAllWindows()
ใครเก่ง OpenCV Python ช่วยหน่อยครับ
โค้ดตอนนี้ครับระบุได้แค่ 1 ที่เหลือขึ้น Unknow ครับ พยายามที่สุดแล้วครับช่วยหน่อยนะครับ
นี่โค้ดครับ
import cv2
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
def create_dataset(img,id,img_id):
cv2.imwrite("data/pic."+str(id)+"."+str(img_id)+".jpg",img)
def draw_boundary(img,classifier,scaleFactor,minNeighbors,color,clf):
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
features = classifier.detectMultiScale(gray,scaleFactor,minNeighbors)
coords = []
for (x,y,w,h) in features:
cv2.rectangle(img,(x,y),(x+w,y+h),color,2)
id,con = clf.predict(gray[y:y+h,x:x+w])
con = round(100 - con)
if(con >= 10 and con <= 100):
cv2.putText(img,"Mix",(x,y-4),cv2.FONT_HERSHEY_SIMPLEX,0.8,color,2)
else :
cv2.putText(img,"Unknow",(x,y-4),cv2.FONT_HERSHEY_SIMPLEX,0.8,color,2)
print(con,"%")
coords = [x,y,w,h]
return img,coords
def detect(img,faceCascade,img_id,clf):
img,coords = draw_boundary(img,faceCascade,1.1,10,(0,0,255),clf)
if len(coords) == 4 :
id = 1
result = img[coords[1]:coords[1]+coords[3],coords[0]:coords[0]+coords[2]]
create_dataset(result,id,img_id)
return img
img_id = 0
cap = cv2.VideoCapture(0)
clf = cv2.face.LBPHFaceRecognizer_create()
clf.read("classifier.xml")
while(True):
ret,frame = cap.read()
frame = cv2.resize(frame,(640, 360))
frame = cv2.flip(frame,1)
frame = detect(frame,faceCascade,img_id,clf)
cv2.imshow('frame',frame)
img_id+=1
if(cv2.waitKey(1) & 0xFF == 27):
break
cap.release()
cv2.destroyAllWindows()