2023-09-24 18:30:29 +00:00
|
|
|
import cv2
|
|
|
|
import threading
|
|
|
|
import time
|
|
|
|
import face_processing as fp
|
2023-11-06 09:10:46 +00:00
|
|
|
from access_control_mqtt import access_control
|
|
|
|
from database import Database, Student, Parent
|
|
|
|
from display import Display
|
2023-09-17 08:27:41 +00:00
|
|
|
|
2023-11-13 12:12:30 +00:00
|
|
|
SERIAL_PORT_DISPLAY = "COM26"
|
2023-09-24 18:30:29 +00:00
|
|
|
CAMERA_INDEX = 0
|
|
|
|
|
|
|
|
cam = cv2.VideoCapture(CAMERA_INDEX)
|
2023-11-06 09:10:46 +00:00
|
|
|
actrl = access_control()
|
|
|
|
display = Display(SERIAL_PORT_DISPLAY)
|
|
|
|
db = Database()
|
2023-09-24 18:30:29 +00:00
|
|
|
|
|
|
|
global img
|
|
|
|
global frame_ready
|
|
|
|
frame_ready = False
|
|
|
|
|
|
|
|
def read_webcam():
|
|
|
|
global img
|
|
|
|
global frame_ready
|
|
|
|
while True:
|
|
|
|
ret, img = cam.read()
|
|
|
|
frame_ready = True
|
|
|
|
|
2023-11-13 12:12:30 +00:00
|
|
|
'''
|
|
|
|
display.set_page("student")
|
|
|
|
display.set_string("msg.txt","Door Open")
|
|
|
|
'''
|
|
|
|
|
2023-09-24 18:30:29 +00:00
|
|
|
threading.Thread(target=read_webcam).start()
|
|
|
|
|
|
|
|
while True:
|
|
|
|
while not frame_ready:
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
#Try to identify face
|
2023-11-06 09:10:46 +00:00
|
|
|
if actrl.get_scan_state():
|
2023-09-30 08:23:10 +00:00
|
|
|
print("SCAN ACTIVE!")
|
2023-11-13 12:12:30 +00:00
|
|
|
faces = fp.identify_face(img, target_condidence=0.6) ## Scan student face
|
2023-11-06 09:10:46 +00:00
|
|
|
if(len(faces)==1):
|
2023-11-13 12:12:30 +00:00
|
|
|
facefile = faces[0]['name'] ## File name
|
|
|
|
student_info = db.get_student_info(facefile)## Check is it student?
|
|
|
|
db.log_access_student(student_info) # Log student data
|
|
|
|
if(student_info!=None): #is student, request another scan for parent
|
|
|
|
#db.log_access_student_file()
|
|
|
|
time.sleep(2)
|
|
|
|
display.set_page("student")
|
|
|
|
display.set_string("msg.txt","Scan parent face")
|
|
|
|
parent_face = fp.identify_face(img, target_condidence=0.6)
|
|
|
|
parent_info = db.get_parent_info(parent_face)
|
|
|
|
#TODO Fill in student info
|
|
|
|
db.log_access_parent(parent_info) # Log student data
|
|
|
|
if(parent_info != None): # Identified parent
|
|
|
|
print(parent_info)
|
|
|
|
if(db.check_relationship(student_info,parent_info)): # Check if the detected parent is right for the detected student.
|
|
|
|
#TODO Log Access
|
|
|
|
display.set_page("Parent")
|
|
|
|
access_control.unlock_door() # Door open
|
|
|
|
time.sleep(10)
|
|
|
|
#display.set_string("msg.txt","Get your kid")
|
|
|
|
else:
|
|
|
|
access_control.lock_door() # Lock Door
|
|
|
|
display.set_page("Scan")
|
|
|
|
display.set_string("msg.txt","Wrong student. \t Try Again")
|
|
|
|
else:
|
|
|
|
display.set_page("student")
|
|
|
|
display.set_string("msg.txt","Cannot find parent data. \t Try Again")
|
2023-11-06 09:10:46 +00:00
|
|
|
else:
|
2023-11-13 12:12:30 +00:00
|
|
|
display.set_page("student")
|
|
|
|
display.set_string("msg.txt","Cannot find student data. \t Try Again")
|
|
|
|
pass
|
|
|
|
|
|
|
|
elif (len(faces)>1):
|
|
|
|
#More than one people, error.
|
|
|
|
print("more than one people. \t try again")
|
|
|
|
display.set_page("Scan")
|
|
|
|
display.set_string("msg.txt","More than one people. \t try again")
|
|
|
|
time.sleep(2)
|
|
|
|
display.set_page("Scan")
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
#No one detected
|
|
|
|
print("No one detected \t try again")\
|
|
|
|
display.set_page("Scan")
|
|
|
|
pass
|
|
|
|
print("DONE")
|
|
|
|
|
|
|
|
else:
|
|
|
|
print("Scan inactivate!!")
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
2023-11-06 09:10:46 +00:00
|
|
|
#is student, request another scan for parent
|
|
|
|
parent_face = fp.identify_face(img, target_condidence=0.6)
|
|
|
|
if(len(faces)==1):
|
2023-11-13 12:12:30 +00:00
|
|
|
parent_info = db.get_parent_info(faces[0]['name'])
|
2023-11-06 09:10:46 +00:00
|
|
|
if(parent_info!=None):
|
|
|
|
if(db.check_relationship(student_info,parent_info)):
|
|
|
|
#Student is under parent, open door.
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
#Wrong Parent, retry.
|
|
|
|
pass
|
|
|
|
else:
|
|
|
|
#Not a parent, retry
|
|
|
|
pass
|
2023-11-13 12:12:30 +00:00
|
|
|
'''
|