can now do an AI search if we add refimg to new/existing person, cleaned up that dialog to look better with buttons for those options rather than a link. Noticed BUG-100, 2 x mich in one image

This commit is contained in:
2022-07-28 18:16:10 +10:00
parent 6135481395
commit 96810fa1e3
4 changed files with 36 additions and 8 deletions

1
BUGs
View File

@@ -1 +1,2 @@
### Next: 100 ### Next: 100
BUG-100: I managed to get 2 photos matching mich in the NOT_WORKING photo (probably dif refimgs but same p.tag?)

2
TODO
View File

@@ -3,7 +3,7 @@
- allow face to be used to: - allow face to be used to:
[DONE] - create person [DONE] - create person
[DONE] - add to existing person [DONE] - add to existing person
--> still need to consider whether we trigger an AI search immediately (for these 2 options) [DONE] --> can choose to do AI search (for these 2 options)
[DONE] - ignore/not a face/too young [DONE] - ignore/not a face/too young
[DONE] - redraw 'ignore's as a greyed out box? [DONE] - redraw 'ignore's as a greyed out box?
[DONE] - menu should only allow override IF we have put override on... [DONE] - menu should only allow override IF we have put override on...

View File

@@ -309,9 +309,9 @@ function CreatePersonAndRefimg( key )
}) })
} }
function AddRefImgTo( person_id, key ) function AddRefimgTo( person_id, key, search )
{ {
d='&face_id='+item[key].id+'&person_id='+person_id+'&refimg_data='+item[key].refimg_data d='&face_id='+item[key].id+'&person_id='+person_id+'&refimg_data='+item[key].refimg_data+'&search='+search
$.ajax({ type: 'POST', data: d, url: '/add_refimg_to_person', $.ajax({ type: 'POST', data: d, url: '/add_refimg_to_person',
success: function(data) { success: function(data) {
objs[current].faces[item[key].which_face].who=data.who objs[current].faces[item[key].which_face].who=data.who
@@ -328,21 +328,30 @@ function AddRefImgTo( person_id, key )
// and displays results in #search_person_results // and displays results in #search_person_results
function SearchForPerson(content, key, face_id, face_pos, type_id) function SearchForPerson(content, key, face_id, face_pos, type_id)
{ {
console.log( 'type_id=' + item[key].type_id )
// make URI safe // make URI safe
who = encodeURIComponent( $('#stext').val() ) who = encodeURIComponent( $('#stext').val() )
// call ajax to find ppl // call ajax to find ppl
$.ajax({ type: 'POST', data: null, url: '/find_persons/'+ who, $.ajax({ type: 'POST', data: null, url: '/find_persons/'+ who,
success: function(data) { success: function(data) {
for( var el in data ) { for( var el in data ) {
content+='<div class="row">'
var person = data[el]; var person = data[el];
// NMO_1 is a non-match-override type_id==1 (or force match to existing person) // NMO_1 is a non-match-override type_id==1 (or force match to existing person)
if( key == "NMO_1" ) if( key == "NMO_1" )
content+= '<a role=button class="link link-primary" onClick="OverrideForceMatch('+person.id+',\''+key+'\')">' {
+person.firstname+' '+person.surname+' ('+person.tag+')</a><br>' func='OverrideForceMatch('+person.id+',\''+key+'\' )'
func_sn=func_func_ao=func
}
if( key == 'no_match_new_refimg' ) if( key == 'no_match_new_refimg' )
content+= '<a role=button class="link link-primary" onClick="AddRefImgTo('+person.id+',\''+key+'\')">' {
+person.firstname+' '+person.surname+' ('+person.tag+')</a><br>' func='AddRefimgTo('+person.id+',\''+key+'\''
func_sn=func+ ', true )'
func_ao=func+ ', false )'
}
content+= '<div class="col">' + person.tag + ' (' + person.firstname+' '+person.surname+ ') </div><div class="col input-group">'
content+= '<button onClick="'+func_sn+'" class="btn btn-success py-1 input-group-prepend">Add & search now</a>&nbsp;'
content+= '<button onClick="'+func_ao+'" class="btn btn-outline-success py-1 input-group-append">Add only</a></div>'
content+='</div class="row">'
} }
$('#search_person_results').html( content ) $('#search_person_results').html( content )
} }

View File

@@ -10,6 +10,9 @@ 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
from face import Face, FaceRefimgLink, FaceOverrideType, FaceNoMatchOverride, FaceManualOverride from face import Face, FaceRefimgLink, FaceOverrideType, FaceNoMatchOverride, FaceManualOverride
from path import Path, PathType
from job import JobExtra, NewJob
import os import os
import json import json
import time import time
@@ -310,6 +313,21 @@ def add_refimg_to_person():
fname=TempRefimgFile( request.form['refimg_data'], p.tag ) fname=TempRefimgFile( request.form['refimg_data'], p.tag )
AddRefimgToPerson( fname, p ) AddRefimgToPerson( fname, p )
if request.form['search'] == "true":
jex=[]
ptype=PathType.query.filter(PathType.name=='Import').first()
jex.append( JobExtra( name=f"person", value="all" ) )
jex.append( JobExtra( name=f"path_type", value=ptype.id ) )
job=NewJob( "run_ai_on_path", 0, None, jex )
st.SetMessage( f"Created&nbsp;<a href=/job/{job.id}>Job #{job.id}</a>&nbsp;to Look for face(s) in import path(s)")
jex=[]
ptype=PathType.query.filter(PathType.name=='Storage').first()
jex.append( JobExtra( name=f"person", value="all" ) )
jex.append( JobExtra( name=f"path_type", value=ptype.id ) )
job=NewJob( "run_ai_on_path", 0, None, jex )
st.SetMessage( f"Created&nbsp;<a href=/job/{job.id}>Job #{job.id}</a>&nbsp;to Look for face(s) in storage path(s)")
resp['who']=p.tag resp['who']=p.tag
resp['distance']='0.0' resp['distance']='0.0'
return resp return resp