diff --git a/person.py b/person.py index deb2e43..2931071 100644 --- a/person.py +++ b/person.py @@ -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 "".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"" - ################################################################################ # 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 "".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" )