From 818fdaa685724ccbe26173d3b8856000d8d89b96 Mon Sep 17 00:00:00 2001 From: c-d-p Date: Tue, 29 Jun 2021 15:46:04 +1000 Subject: [PATCH] updated job manager to (theoretically) work for ai, but i havent tested the comparison code yet --- pa_job_manager.py | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/pa_job_manager.py b/pa_job_manager.py index b601662..a55e997 100644 --- a/pa_job_manager.py +++ b/pa_job_manager.py @@ -952,8 +952,12 @@ def WrapperForScanFileForPerson(job, entry): ppl=session.query(Person).all() else: ppl=session.query(Person).filter(Person.tag==which_person).all() - for person in ppl: - print( f"(wrapper) call == ScanFileForPerson( {entry.id}, {person.id}, force=False )" ) + + if entry.type.name == 'Image': + print( f"JobRunAIOn: file to process had id: {entry.id}" ) + for person in ppl: + print( f"call == ScanFileForPerson( {entry.id}, {person.id}, force=False )" ) + ScanFileForPerson( entry, person.id, force=False) return def JobRunAIOn(job): @@ -970,7 +974,7 @@ def JobRunAIOn(job): for jex in job.extra: if 'eid-' in jex.name: entry=session.query(Entry).get(jex.value) - print( f'en={entry}' ) + print( f'en={entry.name}, {entry.type.name}' ) if entry.type.name == 'Directory': ProcessFilesInDir( job, entry, WrapperForScanFileForPerson ) elif entry.type.name == 'Image': @@ -978,10 +982,11 @@ def JobRunAIOn(job): print( f"JobRunAIOn: file to process had id: {which_file.id}" ) for person in ppl: print( f"call == ScanFileForPerson( {which_file.id}, {person.id}, force=False )" ) + ScanFileForPerson( which_file, person.id, force=False) else: AddLogForJob( job, f'Not processing Entry: {entry.name} - not an image' ) - print(" HARD EXITING to keep testing " ) - exit( -1 ) + #print(" HARD EXITING to keep testing " ) + #exit( -1 ) FinishJob(job, "Finished Processesing AI") return @@ -1011,7 +1016,7 @@ def ProcessAI(job, e): job.current_file_num+=1 return - file = e.FullPathOnFS() + file = e.FullPathOnFS() stat = os.stat(file) # find if file is newer than when we found faces before (fyi: first time faces_created_on == 0) if stat.st_ctime > e.file_details.faces_created_on: @@ -1101,7 +1106,7 @@ def compareAI(known_encoding, unknown_encoding): def ProcessFilesInDir(job, e, file_func): if DEBUG==1: print( f"???? e={e}" ) - print( f"DEBUG: ProcessFilesInDir: {e.FullPathOnFS()}") + # print( f"DEBUG: ProcessFilesInDir: {e.FullPathOnFS()}") if e.type.name != 'Directory': file_func(job, e) else: @@ -1411,32 +1416,39 @@ def UnmatchedFacesForFile( eid ): return rows ### CAM: something like this -- HAVE NOT TRIED THIS IT WILL FAIL### -def ScanFileForPerson( eid, person_id, force=False ): - file_h = session.query(File).get( eid ) +def ScanFileForPerson( e, person_id, force=False ): + file_h = session.query(File).get( e.id ) # if we are forcing this, delete any old faces (this will also delete linked tables), and reset faces_created_on to None if force: - DelFacesForFile( eid ) + DelFacesForFile( e.id ) file_h.faces_create_on = None # optimise: dont rescan if we already have faces (we are just going to try # to match (maybe?) a refimg if not file_h.faces_created_on: - # CAM: TODO: add Face Rec code to get unknown encodings + print("------------- CAM -----------:\n") + im = face_recognition.load_image_file(e.FullPathOnFS()) + print(im) + face_locations = face_recognition.face_locations(im) + print(f"FACE LOCATIONS: {face_locations}") + unknown_encodings = face_recognition.face_encodings(im, known_face_locations=face_locations) + print("AAAAAAAAAAAAAAAA " + str(len(unknown_encodings))) for face in unknown_encodings: new_face = Face( face_data = face ) session.add(new_face) session.commit() - AddFaceToFile( new_face.id, eid ) + AddFaceToFile( new_face.id, e.id ) now=datetime.now(pytz.utc) file_h.face_created_on = now ## now look for person refimgs = session.query(Refimg).join(PersonRefimgLink).filter(PersonRefimgLink.person_id==person_id).all() - uf = UnmatchedFacesForFile( eid ) + uf = UnmatchedFacesForFile( e.id ) for face in uf: for r in refimgs: - # CAM: TODO: add Face rec code to see if there is match + match = compareAI(r, uf) if match: + print(f'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA WE MATCHED: {r}, {uf}') MatchRefimgToFace( r.id, face.id ) return