FacialRecognition-Demo/application/db.py

78 lines
2.5 KiB
Python
Raw Normal View History

2020-03-15 19:02:37 +00:00
import sqlalchemy as db
from sqlalchemy import Column, String, Integer, Numeric, Table, DateTime, ARRAY, ForeignKey, create_engine, LargeBinary, Enum
from sqlalchemy.orm import sessionmaker, relationship, column_property
from datetime import datetime
from sqlalchemy.ext.declarative import declarative_base
import enum
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
engine = db.create_engine('sqlite:///./test.sqlite', echo=True)
connection = engine.connect()
Base = declarative_base()
Session = sessionmaker(bind=engine)
2020-03-19 16:52:30 +00:00
lastImage = ""
2020-03-15 19:02:37 +00:00
class Gender(enum.Enum):
2020-03-19 16:52:30 +00:00
other = "Other"
male = "Male"
female = "Female"
def __str__(self):
return str(self.value)
2020-03-15 19:02:37 +00:00
class Person(Base):
__tablename__ = "person"
person_id = Column('person_id', Integer, primary_key=True, autoincrement=True)
timestamp = Column('timestamp', DateTime, default=datetime.utcnow)
fname = Column('fname', String(50))
lname = Column('lname', String(50))
yob = Column('yob', Integer)
gender = Column('gender', Enum(Gender))
face = Column('face', LargeBinary)
fingerprints = relationship("Fingerprint", foreign_keys='Fingerprint.person_id')
2020-03-15 22:15:40 +00:00
def serialize(self):
prints = []
for fingerprint in self.fingerprints:
prints.append(fingerprint.serialize())
2020-03-16 12:31:18 +00:00
if self.face is not None:
face = self.face.decode('utf-8')
else:
face = None
2020-03-15 22:15:40 +00:00
data = {
"person_id": self.person_id,
"timestamp": self.timestamp,
"fname": self.fname,
"lname": self.lname,
"yob": self.yob,
2020-03-19 16:52:30 +00:00
"gender": str(self.gender),
2020-03-16 12:31:18 +00:00
"face": face,
2020-03-15 22:15:40 +00:00
"fingerprints": prints
}
return data
2020-03-15 19:02:37 +00:00
class Fingerprint(Base):
__tablename__ = "fingerprint"
person_id = Column('person_id', Integer, ForeignKey('person.person_id'), primary_key=True)
fingerprint_id = Column('fingerprint_id', Integer, primary_key=True) # 0: left pinky; 9: right pinky
timestamp = Column('timestamp', DateTime, default=datetime.utcnow)
fingerprint = Column('fingerprint', LargeBinary)
2020-03-15 22:15:40 +00:00
def serialize(self):
2020-03-16 12:31:18 +00:00
if self.fingerprint is not None:
fp = self.fingerprint.decode('utf-8')
else:
fp = None
2020-03-15 22:15:40 +00:00
data = {
"person_id": self.person_id,
"fingerprint_id": self.fingerprint_id,
"timestamp": self.timestamp,
2020-03-16 12:31:18 +00:00
"fingerprint": fp
2020-03-15 22:15:40 +00:00
}
return data
2020-03-15 19:02:37 +00:00
Base.metadata.create_all(engine)