update adding refimg to new or existing person via right-click on a face to use new data structures
This commit is contained in:
49
person.py
49
person.py
@@ -3,8 +3,9 @@ from flask_wtf import FlaskForm
|
||||
from flask import request, render_template, redirect, url_for, make_response, jsonify
|
||||
from main import db, app, ma
|
||||
from settings import Settings, AIModel
|
||||
from sqlalchemy import Sequence, func
|
||||
from sqlalchemy import Sequence, func, select
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from sqlalchemy.orm import joinedload
|
||||
from flask_login import login_required, current_user
|
||||
from werkzeug.utils import secure_filename
|
||||
from shared import GenFace, GenThumb, PA
|
||||
@@ -114,7 +115,7 @@ def AddRefimgToPerson( filename, person ):
|
||||
SetFELog( f"<b>Failed to add Refimg:</b> {e.orig}", "danger" )
|
||||
except Exception as e:
|
||||
SetFELog( f"<b>Failed to modify Refimg:</b> {e}", "danger" )
|
||||
return
|
||||
return refimg
|
||||
|
||||
################################################################################
|
||||
# TempRefimgFile: helper function that takes data POST'd (from dialog box to
|
||||
@@ -182,9 +183,12 @@ def match_with_create_person():
|
||||
p = Person( tag=request.form["tag"], surname=request.form["surname"], firstname=request.form["firstname"] )
|
||||
# add this fname (of temp refimg) to person
|
||||
fname=TempRefimgFile( request.form['refimg_data'], p.tag )
|
||||
AddRefimgToPerson( fname, p )
|
||||
r=AddRefimgToPerson( fname, p )
|
||||
SetFELog( f"Created person: {p.tag}" )
|
||||
return make_response( jsonify( who=p.tag, distance='0.0' ) )
|
||||
refimg_schema=RefimgSchema(many=False)
|
||||
r_data=refimg_schema.dump(r)
|
||||
|
||||
return make_response( jsonify( refimg=r_data, who=p.tag, distance='0.0' ) )
|
||||
|
||||
################################################################################
|
||||
# /person/<id> -> GET/POST(save or delete) -> shows/edits/delets a single person
|
||||
@@ -267,7 +271,7 @@ def add_refimg():
|
||||
except Exception as e:
|
||||
SetFELog( f"<b>Failed to load reference image:</b> {e}", "danger" )
|
||||
|
||||
AddRefimgToPerson( fname, person )
|
||||
r=AddRefimgToPerson( fname, person )
|
||||
return redirect( url_for( 'person', id=person.id) )
|
||||
|
||||
################################################################################
|
||||
@@ -289,6 +293,28 @@ def find_persons(who):
|
||||
|
||||
return make_response( resp )
|
||||
|
||||
class FaceRefimgLinkSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta: model = FaceRefimgLink
|
||||
load_instance = True
|
||||
|
||||
class PersonSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta: model=Person
|
||||
load_instance = True
|
||||
|
||||
class RefimgSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta:
|
||||
model = Refimg
|
||||
exclude = ('face',)
|
||||
load_instance = True
|
||||
person = ma.Nested(PersonSchema)
|
||||
|
||||
class FaceSchema(ma.SQLAlchemyAutoSchema):
|
||||
class Meta:
|
||||
model=Face
|
||||
exclude = ('face',)
|
||||
load_instance = True
|
||||
refimg = ma.Nested(RefimgSchema,allow_none=True)
|
||||
refimg_lnk = ma.Nested(FaceRefimgLinkSchema,allow_none=True)
|
||||
|
||||
################################################################################
|
||||
# /add_refimg_to_person/ -> POST
|
||||
@@ -296,12 +322,14 @@ def find_persons(who):
|
||||
@app.route("/add_refimg_to_person", methods=["POST"])
|
||||
@login_required
|
||||
def add_refimg_to_person():
|
||||
f = Face.query.get( request.form['face_id'] )
|
||||
p = Person.query.get( request.form['person_id'] )
|
||||
stmt = select(Face).options( joinedload(Face.refimg_lnk) ).where(Face.id == request.form['face_id'])
|
||||
f=db.session.execute(stmt).scalars().first()
|
||||
stmt = select(Person).options( joinedload(Person.refimg) ).where(Person.id == request.form['person_id'])
|
||||
p=db.session.execute(stmt).scalars().first()
|
||||
|
||||
# add this fname (of temp refimg) to person
|
||||
fname=TempRefimgFile( request.form['refimg_data'], p.tag )
|
||||
AddRefimgToPerson( fname, p )
|
||||
r=AddRefimgToPerson( fname, p )
|
||||
|
||||
if request.form['search'] == "true":
|
||||
jex=[]
|
||||
@@ -316,7 +344,10 @@ def add_refimg_to_person():
|
||||
jex.append( JobExtra( name=f"path_type", value=str(ptype.id) ) )
|
||||
job=NewJob( name="run_ai_on_path", num_files=0, wait_for=None, jex=jex, desc="Look for face(s) in storage path(s)" )
|
||||
|
||||
return make_response( jsonify( who=p.tag, distance='0.0' ) )
|
||||
refimg_schema=RefimgSchema(many=False)
|
||||
r_data=refimg_schema.dump(r)
|
||||
|
||||
return make_response( jsonify( refimg=r_data, who=p.tag, distance='0.0' ) )
|
||||
|
||||
################################################################################
|
||||
# /add_force_match_override -> POST
|
||||
|
||||
Reference in New Issue
Block a user