final_2
This commit is contained in:
parent
0bf91c38a8
commit
1d78becdd4
Binary file not shown.
Binary file not shown.
|
@ -6,6 +6,7 @@ import face_processing as fp
|
|||
from access_control_mqtt import access_control
|
||||
from database import Database, Student, Parent
|
||||
from display import Display
|
||||
from stm32 import stm32_distance
|
||||
|
||||
SERIAL_PORT_DISPLAY = "COM11"
|
||||
CAMERA_INDEX = 0
|
||||
|
@ -69,137 +70,162 @@ def door_open():
|
|||
#display.set_page("scan")
|
||||
|
||||
|
||||
SD = stm32_distance("COM13")
|
||||
#start_time = time.perf_counter()
|
||||
|
||||
flag: bool = False
|
||||
|
||||
"""
|
||||
while True:
|
||||
state = round((perf_counter())%1)
|
||||
if(flag!=state):
|
||||
flag = state
|
||||
print(f"change to : {state}")
|
||||
print(state)
|
||||
delay(0.05)
|
||||
"""
|
||||
|
||||
while True:
|
||||
|
||||
while not frame_ready:
|
||||
time.sleep(1)
|
||||
|
||||
should_restart = True
|
||||
|
||||
|
||||
while should_restart:
|
||||
#Try to identify face
|
||||
should_restart = False
|
||||
#if actrl.get_scan_state():
|
||||
if(True):
|
||||
#print("SCAN ACTIVE!")
|
||||
distance = SD.get_distance()
|
||||
print(distance)
|
||||
state = distance < 800
|
||||
if state!= flag:
|
||||
flag = state
|
||||
if(state):
|
||||
display.set_string("msg.txt","Scanning")
|
||||
faces = fp.identify_face(img, target_condidence=0.6) ## Scan student face
|
||||
if(len(faces)==1):
|
||||
#print("faces == 1")
|
||||
facefile = faces[0]['name'] ## File name
|
||||
print(facefile)
|
||||
student_info = db.get_student_info(facefile)## Check is it student?
|
||||
parent_info = db.get_parent_info(facefile)
|
||||
if(student_info!=None): #is student, request another scan for parent
|
||||
print("Find student info")
|
||||
#db.log_access_student_file()
|
||||
parent_info = None
|
||||
display.set_page("student")
|
||||
#display.set_string("msg.txt",f'Scan parent face ({10-i})')
|
||||
display.set_string("name_std.txt", f'Name: {student_info.name}')
|
||||
display.set_string("surname_std.txt",f'Surname: {student_info.surname}')
|
||||
display.set_string("id_std.txt", f'ID: {str(student_info.id)}')
|
||||
"""
|
||||
parent_face = fp.identify_face(img, target_condidence=0.6)
|
||||
parent_info = db.get_parent_info(parent_face)"""
|
||||
#DONE TODO Fill in student info Resolve
|
||||
|
||||
print(student_info)
|
||||
|
||||
i = 0
|
||||
start_time = time.perf_counter()
|
||||
while(time.perf_counter()-start_time < 10):
|
||||
parent_face = fp.identify_face(img, target_condidence=0.6)
|
||||
|
||||
if (len(parent_face)!= 0):
|
||||
parent_facefile = parent_face[0]['name']
|
||||
parent_info = db.get_parent_info(parent_facefile)
|
||||
if(parent_info != None): # Identified parent
|
||||
if(db.check_relationship(student_info,parent_info)): # Check if the detected parent is right for the detected student.
|
||||
print("Relation is OKAY")
|
||||
#DONE TODO Log Access STDw/P
|
||||
db.log_access_student_with_parent(student_info, student_info)
|
||||
#DONE TODO write parrent info to display
|
||||
|
||||
display.set_string("name_pt.txt", f'Name: {parent_info.name}')
|
||||
display.set_string("surname_pt.txt", f'Surname: {parent_info.surname}')
|
||||
display.set_string("id_pt.txt", f'ID: {parent_info.id}')
|
||||
actrl.unlock_door() # Door open
|
||||
display.set_string("msg.txt","Get your kid")
|
||||
#DONE TODO Send timer to display
|
||||
door_open()
|
||||
"""
|
||||
for i in range(10):
|
||||
display.set_string("msg.txt",f'Door will close in {10-i}')
|
||||
time.sleep(1)
|
||||
|
||||
i = 5
|
||||
#TODO Check if door close, lock
|
||||
alarm_active: bool = False
|
||||
while(i>=0):
|
||||
if (not actrl.get_door_state() and not alarm_active): # False door is left open
|
||||
display.set_string("msg.txt","Door is left open, Alram in {} sec".format(i))
|
||||
time.sleep(1)
|
||||
i -= 1
|
||||
if i == 0:
|
||||
actrl.activate_LED_alarm()
|
||||
alarm_active = True
|
||||
|
||||
elif(actrl.get_door_state()):
|
||||
actrl.lock_door()
|
||||
display.set_page("scan")
|
||||
should_restart = True
|
||||
break
|
||||
display.set_page("scan")
|
||||
|
||||
"""
|
||||
|
||||
|
||||
else:
|
||||
display.set_page("scan")
|
||||
display.set_string("msg.txt","Wrong parent. \t Try Again")
|
||||
time.sleep(1)
|
||||
should_restart = True
|
||||
break
|
||||
#TODO Try again does not try again
|
||||
|
||||
elif(len(parent_face) == 0):
|
||||
time.sleep(1)
|
||||
display.set_string("msg.txt",f'Scan parent face ({10-i})')
|
||||
i += 1
|
||||
|
||||
else:
|
||||
pass
|
||||
display.set_page("scan")
|
||||
|
||||
elif(parent_info!=None): #is parent, open door
|
||||
#parent_facefile = faces[0]['name']
|
||||
#parent_info = db.get_parent_info(parent_facefile)
|
||||
#if(parent_info!= None):
|
||||
display.set_page("prt_wo_stu")
|
||||
display.set_string("name_pt.txt", f'Name: {parent_info.name}')
|
||||
display.set_string("surname_pt.txt", f'Surname: {parent_info.surname}')
|
||||
display.set_string("id_pt.txt", f'ID: {parent_info.id}')
|
||||
|
||||
door_open()
|
||||
pass
|
||||
|
||||
elif (len(faces)>1):
|
||||
#More than one people, error.
|
||||
print("more than one people. \t try again")
|
||||
display.set_string("msg.txt","More than one people. \t try again")
|
||||
time.sleep(2)
|
||||
pass
|
||||
#print("DONE")
|
||||
|
||||
else:
|
||||
display.set_string("msg.txt","Move your face closer to the scanner")
|
||||
print("Scan inactivate!!")
|
||||
display.set_page("scan")
|
||||
|
||||
if (state): # Scan state
|
||||
while should_restart:
|
||||
#Try to identify face
|
||||
should_restart = False
|
||||
#if actrl.get_scan_state():
|
||||
if(True):
|
||||
#print("SCAN ACTIVE!")
|
||||
#display.set_string("msg.txt","Scanning")
|
||||
faces = fp.identify_face(img, target_condidence=0.6) ## Scan student face
|
||||
if(len(faces)==1):
|
||||
#print("faces == 1")
|
||||
facefile = faces[0]['name'] ## File name
|
||||
print(facefile)
|
||||
student_info = db.get_student_info(facefile)## Check is it student?
|
||||
parent_info = db.get_parent_info(facefile)
|
||||
if(student_info!=None): #is student, request another scan for parent
|
||||
print("Find student info")
|
||||
#db.log_access_student_file()
|
||||
parent_info = None
|
||||
display.set_page("student")
|
||||
#display.set_string("msg.txt",f'Scan parent face ({10-i})')
|
||||
display.set_string("name_std.txt", f'Name: {student_info.name}')
|
||||
display.set_string("surname_std.txt",f'Surname: {student_info.surname}')
|
||||
display.set_string("id_std.txt", f'ID: {str(student_info.id)}')
|
||||
"""
|
||||
parent_face = fp.identify_face(img, target_condidence=0.6)
|
||||
parent_info = db.get_parent_info(parent_face)"""
|
||||
#DONE TODO Fill in student info Resolve
|
||||
|
||||
print(student_info)
|
||||
|
||||
i = 0
|
||||
start_time = time.perf_counter()
|
||||
while(time.perf_counter()-start_time < 10):
|
||||
parent_face = fp.identify_face(img, target_condidence=0.6)
|
||||
|
||||
if (len(parent_face)!= 0):
|
||||
parent_facefile = parent_face[0]['name']
|
||||
parent_info = db.get_parent_info(parent_facefile)
|
||||
if(parent_info != None): # Identified parent
|
||||
if(db.check_relationship(student_info,parent_info)): # Check if the detected parent is right for the detected student.
|
||||
print("Relation is OKAY")
|
||||
#DONE TODO Log Access STDw/P
|
||||
db.log_access_student_with_parent(student_info, student_info)
|
||||
#DONE TODO write parrent info to display
|
||||
|
||||
display.set_string("name_pt.txt", f'Name: {parent_info.name}')
|
||||
display.set_string("surname_pt.txt", f'Surname: {parent_info.surname}')
|
||||
display.set_string("id_pt.txt", f'ID: {parent_info.id}')
|
||||
actrl.unlock_door() # Door open
|
||||
display.set_string("msg.txt","Get your kid")
|
||||
#DONE TODO Send timer to display
|
||||
door_open()
|
||||
"""
|
||||
for i in range(10):
|
||||
display.set_string("msg.txt",f'Door will close in {10-i}')
|
||||
time.sleep(1)
|
||||
|
||||
i = 5
|
||||
#TODO Check if door close, lock
|
||||
alarm_active: bool = False
|
||||
while(i>=0):
|
||||
if (not actrl.get_door_state() and not alarm_active): # False door is left open
|
||||
display.set_string("msg.txt","Door is left open, Alram in {} sec".format(i))
|
||||
time.sleep(1)
|
||||
i -= 1
|
||||
if i == 0:
|
||||
actrl.activate_LED_alarm()
|
||||
alarm_active = True
|
||||
|
||||
elif(actrl.get_door_state()):
|
||||
actrl.lock_door()
|
||||
display.set_page("scan")
|
||||
should_restart = True
|
||||
break
|
||||
display.set_page("scan")
|
||||
|
||||
"""
|
||||
|
||||
|
||||
'''
|
||||
else:
|
||||
display.set_page("scan")
|
||||
display.set_string("msg.txt","Wrong parent. \t Try Again")
|
||||
time.sleep(1)
|
||||
should_restart = True
|
||||
break
|
||||
#TODO Try again does not try again
|
||||
|
||||
elif(len(parent_face) == 0):
|
||||
time.sleep(1)
|
||||
display.set_string("msg.txt",f'Scan parent face ({10-i})')
|
||||
i += 1
|
||||
|
||||
else:
|
||||
pass
|
||||
display.set_page("scan")
|
||||
|
||||
elif(parent_info!=None): #is parent, open door
|
||||
#parent_facefile = faces[0]['name']
|
||||
#parent_info = db.get_parent_info(parent_facefile)
|
||||
#if(parent_info!= None):
|
||||
print("Find parent info")
|
||||
display.set_page("prt_wo_stu")
|
||||
display.set_string("name_pt.txt", f'Name: {parent_info.name}')
|
||||
display.set_string("surname_pt.txt", f'Surname: {parent_info.surname}')
|
||||
display.set_string("id_pt.txt", f'ID: {parent_info.id}')
|
||||
|
||||
door_open()
|
||||
pass
|
||||
|
||||
elif (len(faces)>1):
|
||||
#More than one people, error.
|
||||
print("more than one people. \t try again")
|
||||
display.set_string("msg.txt","More than one people. \t try again")
|
||||
time.sleep(2)
|
||||
pass
|
||||
#print("DONE")
|
||||
|
||||
else:
|
||||
display.set_string("msg.txt","Move your face closer to the scanner")
|
||||
print("Scan inactivate!!")
|
||||
|
||||
|
||||
|
||||
'''
|
||||
#is student, request another scan for parent
|
||||
parent_face = fp.identify_face(img, target_condidence=0.6)
|
||||
if(len(faces)==1):
|
||||
|
|
|
@ -85,12 +85,12 @@ while True:
|
|||
i = 10
|
||||
#TODO Check if door close, lock
|
||||
while(i>=0):
|
||||
|
||||
if (not actrl.get_door_state()): # False door is left open
|
||||
display.set_string("msg.txt","Door is left open, Alram in {} sec".format(i))
|
||||
time.sleep(1)
|
||||
i -= 1
|
||||
if i == 0:
|
||||
display.set_string("msg.txt", "Alarm Active!! Please close the door"")
|
||||
actrl.activate_alarm()
|
||||
else:
|
||||
actrl.lock_door()
|
||||
|
|
|
@ -1,13 +1,30 @@
|
|||
import serial
|
||||
import threading
|
||||
|
||||
class stm32_distance():
|
||||
data: int = 0
|
||||
def __init__(self, serial_port: str) -> None:
|
||||
self.serial_port = serial_port
|
||||
self.ser = serial.Serial(self.serial_port, 115200)
|
||||
self.thread = threading.Thread(target=self.__read_data)
|
||||
self.thread.start()
|
||||
|
||||
def __read_data(self):
|
||||
while True:
|
||||
data = b''
|
||||
while True:
|
||||
byte = self.ser.read()
|
||||
if byte == b'\x03':
|
||||
break
|
||||
data += byte
|
||||
data_str = data.decode('utf-8')
|
||||
try:
|
||||
self.data = int(data_str)
|
||||
except:
|
||||
pass
|
||||
|
||||
def get_distance(self):
|
||||
return self.data
|
||||
|
||||
|
||||
ser = serial.Serial('COM13', 115200)
|
||||
while True:
|
||||
data = b''
|
||||
while True:
|
||||
byte = ser.read()
|
||||
if byte == b'\x03':
|
||||
break
|
||||
data += byte
|
||||
|
||||
data_str = data.decode('utf-8')
|
||||
print(data_str)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from stm32 import stm32_distance
|
||||
|
||||
from espmega.espmega_r3 import ESPMega_standalone as ESPMega
|
||||
plc = ESPMega("/facescan","192.168.0.239",1883)
|
||||
SD = stm32_distance("COM13")
|
||||
|
||||
plc.digital_write(2,0)``
|
||||
while True:
|
||||
print(SD.get_distance())
|
|
@ -0,0 +1,13 @@
|
|||
import serial
|
||||
ser = serial.Serial('COM13', 115200)
|
||||
|
||||
data = b''
|
||||
|
||||
while True:
|
||||
byte = ser.read()
|
||||
if byte == b'\x03':
|
||||
break
|
||||
data += byte
|
||||
|
||||
data_str = data.decode('utf-8')
|
||||
print(data_str)
|
|
@ -0,0 +1,11 @@
|
|||
from time import perf_counter
|
||||
from time import sleep as delay
|
||||
|
||||
flag: bool = False
|
||||
while True:
|
||||
state = round((perf_counter())%1)
|
||||
if(flag!=state):
|
||||
flag = state
|
||||
print(f"change to : {state}")
|
||||
print(state)
|
||||
delay(0.05)
|
Loading…
Reference in New Issue