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 status import st, Status
|
||||||
from flask_login import login_required, current_user
|
from flask_login import login_required, current_user
|
||||||
from werkzeug.utils import secure_filename
|
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 face import Face, FaceRefimgLink, FaceOverrideType, FaceNoMatchOverride, FaceForceMatchOverride
|
||||||
from path import Path, PathType
|
from path import Path, PathType
|
||||||
from job import JobExtra, NewJob
|
from job import JobExtra, NewJob
|
||||||
@@ -34,46 +34,42 @@ import os.path
|
|||||||
# model_used: which AI model (cnn or hog) used to create face
|
# model_used: which AI model (cnn or hog) used to create face
|
||||||
# person: read-only convenience field not in DB, just used in html
|
# 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 )
|
id = db.Column(db.Integer, db.Sequence('refimg_id_seq'), primary_key=True )
|
||||||
fname = db.Column(db.String(256), unique=True, nullable=False)
|
fname = db.Column(db.String(256), unique=True, nullable=False)
|
||||||
face = db.Column(db.LargeBinary, unique=True, nullable=False)
|
face = db.Column(db.LargeBinary, unique=True, nullable=False)
|
||||||
orig_w = db.Column(db.Integer)
|
orig_w = db.Column(db.Integer)
|
||||||
orig_h = db.Column(db.Integer)
|
orig_h = db.Column(db.Integer)
|
||||||
face_locn = db.Column(db.String)
|
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)
|
thumbnail = db.Column(db.String, unique=True, nullable=False)
|
||||||
created_on = db.Column(db.Float)
|
created_on = db.Column(db.Float)
|
||||||
model_used = db.Column(db.Integer, db.ForeignKey("ai_model.id") )
|
model_used = db.Column(db.Integer, db.ForeignKey("ai_model.id") )
|
||||||
person = db.relationship( 'Person', secondary="person_refimg_link", uselist=False, viewonly=True )
|
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 describing Person to Refimg link in DB via sqlalchemy
|
||||||
################################################################################
|
################################################################################
|
||||||
class PersonRefimgLink(db.Model):
|
class PersonRefimgLink(PA,db.Model):
|
||||||
__tablename__ = "person_refimg_link"
|
__tablename__ = "person_refimg_link"
|
||||||
person_id = db.Column(db.Integer, db.ForeignKey('person.id'), unique=True, nullable=False, primary_key=True)
|
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)
|
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 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 )
|
id = db.Column(db.Integer, db.Sequence('person_id_seq'), primary_key=True )
|
||||||
tag = db.Column(db.String(48), unique=False, nullable=False)
|
tag = db.Column(db.String(48), unique=False, nullable=False)
|
||||||
surname = 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)
|
firstname = db.Column(db.String(48), unique=False, nullable=False)
|
||||||
refimg = db.relationship('Refimg', secondary=PersonRefimgLink.__table__, order_by=Refimg.id)
|
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
|
# 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
|
@login_required
|
||||||
def add_no_match_override():
|
def add_no_match_override():
|
||||||
face_id = request.form['face_id']
|
face_id = request.form['face_id']
|
||||||
f = Face.query.get(face_id);
|
f = Face.query.get(face_id)
|
||||||
if not f:
|
if not f:
|
||||||
raise Exception("could not find face to add override too!")
|
raise Exception("could not find face to add override too!")
|
||||||
|
|
||||||
@@ -461,3 +457,29 @@ def add_no_match_override():
|
|||||||
resp={}
|
resp={}
|
||||||
resp['type']=t.name
|
resp['type']=t.name
|
||||||
return resp
|
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