## GENERAL * Face matching: - upgrade to face distance per face per file - so we dont get 2 x same face in one file, and if it could match say Cam and Mich for 1 face, take the higher match, not the first one to be over the threshold - allow for threshold/settings to be tweaked from the GUI? ---> at least settings for default value (back to 0.6 / 0.5?) ---> with override table to do per file / per face? - face locations: START FORM SCRATCH so all images have face_locn data - algo: for each face (even known) in image foreach refimg get face_distance sort by face_distance for each face connect lowest score with that face (for this file) this means this face is no longer 'free' for a match if (sorted) face distance > 0.55 stop as no further 'matches' - use cnn model (check ftst.py) for ref images, and potentially as a setting to check images without a face? - or always? -- would CUDA be useful here? (which is faster say an old 730 or the AMD cpu?) * viewer: can we make it preload next/prev images, and only reload the image div when we jump? to make arrow-based nav much faster * remove dirs after the duplicate cleanup removes all its content * could look to remove the hand fixing of json.loads of array data --> seems you can make your own datatype in the ORM, and it can do the conversion every time you use it - https://stackoverflow.com/questions/28143557/sqlalchemy-convert-column-value-back-and-forth-between-internal-and-database-fo * fix up logging in general * comment your code * more OO goodness :) ## DB * Dir can have date in the DB, so we can do Oldest/Newest dirs in Folder view ### BACKEND * revisit SymlinkName() and make it simpler (see comment in shared.py) * if you change paths in settings, then re-run Initialisation checks (for symlinks to new path names) - this actively is crashing, added a file in storage2/ (no symlink), so job mgr crashed, and DB doesnt have the content until you make the symlink (via re-running job mgr) -- started on some basic optimisations (commit logs every 100 logs, not each log) - with debugs: import = 04:11, getfiledetails== 0:35:35 - without debugs: import == 04:03, getfiledetails == 0:35:36 -- not a sig diff - with exifread & debug: import == 04:26 *** Need to use thread-safe sessions per Thread, half-assed version did not work need a manual button to restart a job in the GUI, (based on file-level optims, just run the job as new and it will optim over already done parts and continue) Future: Admin -> reset face_flag AI -> rescan