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:
48
person.py
48
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 "<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" )
|
||||
|
||||
Reference in New Issue
Block a user