如何使用python-opencv在面部识别过程中将识别的面部状态保存在mysql数据库中?

时间:2020-07-27 06:15:58

标签: python mysql opencv

在面部识别系统中识别出人的面部之后,我无法在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()

0 个答案:

没有答案