From da93c80d4aa96221c1204f595b330a1169dc816b Mon Sep 17 00:00:00 2001 From: Damien De Paoli Date: Sun, 31 Jan 2021 14:48:53 +1100 Subject: [PATCH] exif for dates added --- pa_job_manager.py | 47 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/pa_job_manager.py b/pa_job_manager.py index 9f8feae..cc5c7b3 100644 --- a/pa_job_manager.py +++ b/pa_job_manager.py @@ -34,7 +34,7 @@ import glob from PIL import Image, ImageOps from pymediainfo import MediaInfo import hashlib -#import exifread +import exifread import base64 import numpy import cv2 @@ -44,6 +44,7 @@ import io import face_recognition import re + DEBUG=1 # an Manager, which the Session will use for connection resources @@ -473,6 +474,39 @@ def HandleAnyFSDeletions(job): rm_cnt+=1 return rm_cnt +def GetDateFromFile(file, stat): + # try exif + try: + print(f"trying exif read of {file}") + f = open(file, 'rb') + tags = exifread.process_file(f) + date_str, time_str = str(tags["EXIF DateTimeOriginal"]).split(" ") + print(date_str) + year, month, day = date_str.split(":") + year=int(year) + month=int(month) + day=int(day) + print(year) + check = datetime( year, month, day ) + print( f"check={check}" ) + except: + # try parsing filename + try: + m=re.search( '(\d{4})(\d{2})(\d{2})', file) + year=int(m[1]) + month=int(m[2]) + day=int(m[3]) + check2 = datetime( year, month, day ) + print( f"check2={check2}" ) + # give up and use file sys date + except: + year, month, day, _, _, _, _, _, _ = datetime.fromtimestamp(stat.st_ctime).timetuple() + c=date(year, month, day).isocalendar() + woy=c[1] + print(f"DEL ME: year={year}, month={month}, day={day}") + return year, month, day, woy + + def JobImportDir(job): JobProgressState( job, "In Progress" ) settings = session.query(Settings).first() @@ -521,17 +555,8 @@ def JobImportDir(job): else: type_str = 'Unknown' fsize = round(stat.st_size/(1024*1024)) - m=re.search( '(\d{4})(\d{2})(\d{2})', fname) - if m: - year=int(m[1]) - month=int(m[2]) - day=int(m[3]) - else: - year, month, day, _, _, _, _, _, _ = datetime.fromtimestamp(stat.st_ctime).timetuple() - print(f"year={year}, month={month}, day={day}") - c=date(year, month, day).isocalendar() - woy=c[1] + year, month, day, woy = GetDateFromFile(fname, stat) e=AddFile( job, basename, type_str, fsize, dir, year, month, day, woy ) else: e=session.query(Entry).filter(Entry.name==basename).first()