在面部识别系统中识别出人的面部之后,我无法在mysql数据库中保存面部状态值(真或假)。当我认识到使用opencv的人的脸时,我只想在mysql中保存该人的脸的状态一次。
当我编写此代码时,它将不断向mysql写入人的识别状态,直到我不终止opencv程序。
def getStatus(status, id):
con = mysql.connector.connect(host='localhost', database='sms', user='root', password='password')
cursor = con.cursor()
insert_face_query = ('insert into face(Status, Date, Time, Student_ID) values (%s, CURDATE(), CURTIME(), %s)') %(status,id)
cursor.execute(insert_face_query)
con.commit()
con.close()
def draw_boundary(image, classifier,scalefactor, minNeighbours, color, classifier1, text):
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
face_feature = classifier.detectMultiScale(gray, scalefactor, minNeighbours)
for x,y,w,h in face_feature:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 3)
id, predict_value = classifier1.predict(gray[y:y+h, x:x+w])
confidence_level = int(100*(1-predict_value/300))
if confidence_level >= 80:
con = mysql.connector.connect(host='localhost', database='sms', user='root', password='password')
cursor = con.cursor()
query = 'select Student_ID, Name from sms_table'
cursor.execute(query)
column = cursor.fetchall()
status=false
for i in column:
if id == i[0]:
status =True
cv2.putText(image, i[1], (x, y-5), cv2.FONT_HERSHEY_COMPLEX, 0.9, (0,255,0), cv2.LINE_4)
getStatus(status, id)
con.commit()
con.close()
else:
cv2.putText(image, 'unknown', (x, y - 5), cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.7, (0, 0, 255), cv2.LINE_4)
return image
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
classifier2 = cv2.face.LBPHFaceRecognizer_create()
classifier2.read('classifier.yml')
cam = cv2.VideoCapture(0)
while True:
_, frame = cam.read()
frame = draw_boundary(frame, faceCascade, 1.05, 3, (0,255,0), classifier2, 'face')
cv2.imshow('Face Detecting Start', frame)
if cv2.waitKey(0) & 0xFF == ord('q'):
break
cam.release()
cv2.destroyAllWindows()