interim commit - person now has a fix_faces route that will be used as part of the conversion to get locn -> top, right, bottom, left and using PA class for __repr() instead

This commit is contained in:
2022-12-23 12:02:22 +11:00
parent 4f80ea947a
commit a89063d366

View File

@@ -8,7 +8,7 @@ from sqlalchemy.exc import SQLAlchemyError
from status import st, Status
from flask_login import login_required, current_user
from werkzeug.utils import secure_filename
from shared import GenFace, GenThumb
from shared import GenFace, GenThumb, PA
from face import Face, FaceRefimgLink, FaceOverrideType, FaceNoMatchOverride, FaceForceMatchOverride
from path import Path, PathType
from job import JobExtra, NewJob
@@ -34,46 +34,42 @@ import os.path
# model_used: which AI model (cnn or hog) used to create face
# person: read-only convenience field not in DB, just used in html
################################################################################
class Refimg(db.Model):
class Refimg(PA,db.Model):
id = db.Column(db.Integer, db.Sequence('refimg_id_seq'), primary_key=True )
fname = db.Column(db.String(256), unique=True, nullable=False)
face = db.Column(db.LargeBinary, unique=True, nullable=False)
orig_w = db.Column(db.Integer)
orig_h = db.Column(db.Integer)
face_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)
thumbnail = db.Column(db.String, unique=True, nullable=False)
created_on = db.Column(db.Float)
model_used = db.Column(db.Integer, db.ForeignKey("ai_model.id") )
person = db.relationship( 'Person', secondary="person_refimg_link", uselist=False, viewonly=True )
def __repr__(self):
return "<id: {}, fname: {}>".format(self.id, self.fname )
################################################################################
# Class describing Person to Refimg link in DB via sqlalchemy
################################################################################
class PersonRefimgLink(db.Model):
class PersonRefimgLink(PA,db.Model):
__tablename__ = "person_refimg_link"
person_id = db.Column(db.Integer, db.ForeignKey('person.id'), unique=True, nullable=False, primary_key=True)
refimg_id = db.Column(db.Integer, db.ForeignKey('refimg.id'), unique=True, nullable=False, primary_key=True)
def __repr__(self):
return f"<person_id: {self.person_id}, refimg_id: {self.refimg_id}>"
################################################################################
# Class describing Person in DB via sqlalchemy
################################################################################
class Person(db.Model):
class Person(PA,db.Model):
id = db.Column(db.Integer, db.Sequence('person_id_seq'), primary_key=True )
tag = db.Column(db.String(48), unique=False, nullable=False)
surname = db.Column(db.String(48), unique=False, nullable=False)
firstname = db.Column(db.String(48), unique=False, nullable=False)
refimg = db.relationship('Refimg', secondary=PersonRefimgLink.__table__, order_by=Refimg.id)
def __repr__(self):
return "<tag: {}, firstname: {}, surname: {}, refimg: {}>".format(self.tag,self.firstname, self.surname, self.refimg)
################################################################################
# Helper class that inherits a .dump() method to turn class Person into json / useful in jinja2
################################################################################
@@ -436,7 +432,7 @@ def remove_no_match_override():
@login_required
def add_no_match_override():
face_id = request.form['face_id']
f = Face.query.get(face_id);
f = Face.query.get(face_id)
if not f:
raise Exception("could not find face to add override too!")
@@ -461,3 +457,29 @@ def add_no_match_override():
resp={}
resp['type']=t.name
return resp
@app.route('/fix_faces')
@login_required
def fix_faces():
for r in Refimg.query.all():
print( f"BEFORE: ref# {r.id}, face_locn = {r.face_locn}, top={r.face_top}, right={r.face_right}, bottom={r.face_bottom}, left={r.face_left}" )
tmp=json.loads(r.face_locn)
r.face_top = tmp[0]
r.face_right = tmp[1]
r.face_bottom = tmp[2]
r.face_left = tmp[3]
db.session.add(r)
print( f" FIXED: ref# {r.id}, face_locn = {r.face_locn}, top={r.face_top}, right={r.face_right}, bottom={r.face_bottom}, left={r.face_left}" )
for f in Face.query.all():
print( f"BEFORE: face# {f.id}, locn = {f.locn}, top={f.face_top}, right={f.face_right}, bottom={f.face_bottom}, left={f.face_left}" )
tmp=json.loads(f.locn)
f.face_top = tmp[0]
f.face_right = tmp[1]
f.face_bottom = tmp[2]
f.face_left = tmp[3]
db.session.add(f)
print( f" FIXED: ref# {f.id}, locn = {f.locn}, top={f.face_top}, right={f.face_right}, bottom={f.face_bottom}, left={f.face_left}" )
db.session.commit()
print("faces should be fixed")
return render_template("base.html" )