use PA class for face classes, added comments
This commit is contained in:
47
face.py
47
face.py
@@ -20,19 +20,21 @@ import json
|
|||||||
# - refimg is a real link to the refimg used for this face (its is only used in
|
# - refimg is a real link to the refimg used for this face (its is only used in
|
||||||
# viewer, and is either set when there is a matched face, or None if no match
|
# viewer, and is either set when there is a matched face, or None if no match
|
||||||
################################################################################
|
################################################################################
|
||||||
class Face(db.Model):
|
class Face(PA,db.Model):
|
||||||
__tablename__ = "face"
|
__tablename__ = "face"
|
||||||
id = db.Column(db.Integer, db.Sequence('face_id_seq'), primary_key=True )
|
id = db.Column(db.Integer, db.Sequence('face_id_seq'), primary_key=True )
|
||||||
face = db.Column( db.LargeBinary )
|
face = db.Column( db.LargeBinary )
|
||||||
locn = db.Column( db.String )
|
locn = db.Column( db.String )
|
||||||
|
face_top = db.Column( db.Integer )
|
||||||
|
face_right = db.Column( db.Integer )
|
||||||
|
face_bottom = db.Column( db.Integer )
|
||||||
|
face_left = db.Column( db.Integer )
|
||||||
w = db.Column( db.Integer )
|
w = db.Column( db.Integer )
|
||||||
h = db.Column( db.Integer )
|
h = db.Column( db.Integer )
|
||||||
refimg_lnk = db.relationship("FaceRefimgLink", uselist=False, viewonly=True)
|
refimg_lnk = db.relationship("FaceRefimgLink", uselist=False, viewonly=True)
|
||||||
facefile_lnk = db.relationship("FaceFileLink", uselist=False, viewonly=True)
|
facefile_lnk = db.relationship("FaceFileLink", uselist=False, viewonly=True)
|
||||||
refimg =db.relationship("Refimg", secondary="face_refimg_link", uselist=False)
|
refimg =db.relationship("Refimg", secondary="face_refimg_link", uselist=False)
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return f"<id: {self.id}, face={self.face}, locn={self.locn}"
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Class describing FaceFileLink in the database and DB via sqlalchemy
|
# Class describing FaceFileLink in the database and DB via sqlalchemy
|
||||||
@@ -41,60 +43,63 @@ class Face(db.Model):
|
|||||||
# model - so really should have ModelFileLink or something, in the long run
|
# model - so really should have ModelFileLink or something, in the long run
|
||||||
# this might even be better as ScanDetailsFileLink and ScanDetails
|
# this might even be better as ScanDetailsFileLink and ScanDetails
|
||||||
################################################################################
|
################################################################################
|
||||||
class FaceFileLink(db.Model):
|
class FaceFileLink(PA, db.Model):
|
||||||
__tablename__ = "face_file_link"
|
__tablename__ = "face_file_link"
|
||||||
face_id = db.Column(db.Integer, db.ForeignKey("face.id"), primary_key=True )
|
face_id = db.Column(db.Integer, db.ForeignKey("face.id"), primary_key=True )
|
||||||
file_eid = db.Column(db.Integer, db.ForeignKey("file.eid"), primary_key=True )
|
file_eid = db.Column(db.Integer, db.ForeignKey("file.eid"), primary_key=True )
|
||||||
model_used = db.Column(db.Integer, db.ForeignKey("ai_model.id"), primary_key=True )
|
model_used = db.Column(db.Integer, db.ForeignKey("ai_model.id"), primary_key=True )
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return f"<face_id: {self.face_id}, file_eid={self.file_eid}, model_used: {self.model_used}"
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Class describing FaceRefimgLink in the database and DB via sqlalchemy
|
# Class describing FaceRefimgLink in the database and DB via sqlalchemy
|
||||||
# connects / implies a face has matched a refimg and we keep the distance too
|
# connects / implies a face has matched a refimg and we keep the distance too
|
||||||
# distance is mainly for debugging for now and shown in viewer
|
# distance is mainly for debugging for now and shown in viewer
|
||||||
################################################################################
|
################################################################################
|
||||||
class FaceRefimgLink(db.Model):
|
class FaceRefimgLink(PA, db.Model):
|
||||||
__tablename__ = "face_refimg_link"
|
__tablename__ = "face_refimg_link"
|
||||||
face_id = db.Column(db.Integer, db.ForeignKey("face.id"), primary_key=True )
|
face_id = db.Column(db.Integer, db.ForeignKey("face.id"), primary_key=True )
|
||||||
refimg_id = db.Column(db.Integer, db.ForeignKey("refimg.id"), primary_key=True )
|
refimg_id = db.Column(db.Integer, db.ForeignKey("refimg.id"), primary_key=True )
|
||||||
face_distance = db.Column(db.Integer)
|
face_distance = db.Column(db.Integer)
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return f"<face_id: {self.face_id}, refimg_id={self.refimg_id}, face_distance: {self.face_distance}"
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
class FaceOverrideType(db.Model):
|
# Class describing FaceOverrideType in the database and DB via sqlalchemy
|
||||||
|
# when a face has an override, it will be a simple list of different types
|
||||||
|
# eg (forced match, no match, not a face, etc)
|
||||||
|
################################################################################
|
||||||
|
class FaceOverrideType(PA, db.Model):
|
||||||
__tablename__ = "face_override_type"
|
__tablename__ = "face_override_type"
|
||||||
id = db.Column(db.Integer, db.Sequence('face_override_type_id_seq'), primary_key=True )
|
id = db.Column(db.Integer, db.Sequence('face_override_type_id_seq'), primary_key=True )
|
||||||
name = db.Column( db.String )
|
name = db.Column( db.String )
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return f"<id: {self.id}, name={self.name}>"
|
|
||||||
|
|
||||||
class FaceNoMatchOverride(db.Model):
|
################################################################################
|
||||||
|
# Class describing FaceNoMatchOverride in the database and DB via sqlalchemy
|
||||||
|
# used when a face does not match for some reason (type and face id connected)
|
||||||
|
################################################################################
|
||||||
|
class FaceNoMatchOverride(PA, db.Model):
|
||||||
__tablename__ = "face_no_match_override"
|
__tablename__ = "face_no_match_override"
|
||||||
id = db.Column(db.Integer, db.Sequence('face_override_id_seq'), primary_key=True )
|
id = db.Column(db.Integer, db.Sequence('face_override_id_seq'), primary_key=True )
|
||||||
face_id = db.Column(db.Integer, db.ForeignKey("face.id"), primary_key=True )
|
face_id = db.Column(db.Integer, db.ForeignKey("face.id"), primary_key=True )
|
||||||
type_id = db.Column(db.Integer, db.ForeignKey("face_override_type.id"))
|
type_id = db.Column(db.Integer, db.ForeignKey("face_override_type.id"))
|
||||||
type = db.relationship("FaceOverrideType")
|
type = db.relationship("FaceOverrideType")
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return f"<id: {self.id}, face_id={self.face_id}, type: {self.type}>"
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
class FaceForceMatchOverride(db.Model):
|
# Class describing FaceForceMatchOverride in the database and DB via sqlalchemy
|
||||||
|
# used when a face is forced to match for some reason (who and face id connected)
|
||||||
|
################################################################################
|
||||||
|
class FaceForceMatchOverride(PA, db.Model):
|
||||||
__tablename__ = "face_force_match_override"
|
__tablename__ = "face_force_match_override"
|
||||||
id = db.Column(db.Integer, db.Sequence('face_override_id_seq'), primary_key=True )
|
id = db.Column(db.Integer, db.Sequence('face_override_id_seq'), primary_key=True )
|
||||||
face_id = db.Column(db.Integer, db.ForeignKey("face.id"), primary_key=True )
|
face_id = db.Column(db.Integer, db.ForeignKey("face.id"), primary_key=True )
|
||||||
person_id = db.Column(db.Integer, db.ForeignKey("person.id"), primary_key=True )
|
person_id = db.Column(db.Integer, db.ForeignKey("person.id"), primary_key=True )
|
||||||
person = db.relationship("Person")
|
person = db.relationship("Person")
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return f"<id: {self.id}, face_id={self.face_id}, person_id={self.person_id}>"
|
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# TO BE REMOVED ONCE BUG 108 IS COMPLETE
|
||||||
|
################################################################################
|
||||||
def fix_face_locn(face):
|
def fix_face_locn(face):
|
||||||
# just fix any data issues in DB (happens with some bugs in code)
|
# just fix any data issues in DB (happens with some bugs in code)
|
||||||
if face.locn[0]=='{':
|
if face.locn[0]=='{':
|
||||||
|
|||||||
Reference in New Issue
Block a user