From 8b9ab3f6d293ff22d693c9201ec69ce1be28593e Mon Sep 17 00:00:00 2001 From: "Antonio J. Delgado" Date: Mon, 6 Sep 2021 23:41:35 +0300 Subject: [PATCH] Fix path and update requirements --- image_classifier/image_classifier.py | 48 +++++++++++++++++----------- requirements.txt | 3 +- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/image_classifier/image_classifier.py b/image_classifier/image_classifier.py index 05fba24..5779c94 100755 --- a/image_classifier/image_classifier.py +++ b/image_classifier/image_classifier.py @@ -9,6 +9,7 @@ import sys import os import logging import json +import shutil import click import click_config_file from logging.handlers import SysLogHandler @@ -59,30 +60,41 @@ class image_classifier: with os.scandir(directory) as directory_item: for entry in directory_item: if not entry.name.startswith('.') and entry.is_file(): - self.process_file(directory + os.sep + entry.name) + self.process_file(os.path.joing(directory, entry.name)) def process_file(self, file): ''' Process a file, find faces, add EXIF information and move it to the folder of the day''' self._log.debug(f"Looking for faces in file '{file}'...") - people = self.find_faces(file) - if people: - self._log.debug(f"Found {len(people)} known people in the image.") - self._log.debug(json.dumps(people, indent=2)) - self.metadata = pyexiv2.ImageMetadata(file) - self.metadata.read() - #self.print_metadata() - if 'Xmp.iptcExt.PersonInImage' in self.metadata.xmp_keys: - print(f"People (before): {self.metadata['Xmp.iptcExt.PersonInImage'].raw_value} (type: {type(self.metadata['Xmp.iptcExt.PersonInImage'].raw_value)})") - self.append_people(people) - print(f"People (after): {self.metadata['Xmp.iptcExt.PersonInImage'].raw_value} (type: {type(self.metadata['Xmp.iptcExt.PersonInImage'].raw_value)})") - self.metadata.write() - self._log.debug(f"Updated file '{file}'.") - if 'Exif.Photo.DateTimeOriginal' in self.metadata.exif_keys: - self._log.debug(f"File time stamp: {self.metadata['Exif.Photo.DateTimeOriginal'].raw_value} (type: {type(self.metadata['Exif.Photo.DateTimeOriginal'].raw_value)})") - # move to destination + if not os.access(file, os.R_OK): + self._log.error(f"The file '{file}' is not readable.") else: - self._log.debug("Doesn't seem to be an image.") + people = self.find_faces(file) + if people: + self._log.debug(f"Found {len(people)} known people in the image.") + self._log.debug(json.dumps(people, indent=2)) + self.metadata = pyexiv2.ImageMetadata(file) + self.metadata.read() + #self.print_metadata() + if 'Xmp.iptcExt.PersonInImage' in self.metadata.xmp_keys: + self._log.debug(f"People (before): {self.metadata['Xmp.iptcExt.PersonInImage'].raw_value} (type: {type(self.metadata['Xmp.iptcExt.PersonInImage'].raw_value)})") + self.append_people(people) + self._log.debug(f"People (after): {self.metadata['Xmp.iptcExt.PersonInImage'].raw_value} (type: {type(self.metadata['Xmp.iptcExt.PersonInImage'].raw_value)})") + self.metadata.write() + self._log.debug(f"Updated file '{file}'.") + if 'Exif.Photo.DateTimeOriginal' in self.metadata.exif_keys: + original_date = self.metadata['Exif.Photo.DateTimeOriginal'].value + self._log.debug(f"File creation time: {original_date} (type: {type(original_date)})") + dirname = os.path.dirname(os.path.realpath(file)) + filename = os.path.basename(file) + new_path = os.path.join(dirname, original_date.strftime('%Y/%m/%d'), filename) + self._log.debug(f"New path: {new_path}") + os.makedirs(os.path.dirname(new_path), exist_ok=True) + # if new_path: + # shutil.move(file, new_path) + # move to destination + else: + self._log.debug("Doesn't seem to be an image.") def print_metadata(self): print("IPTC keys:") diff --git a/requirements.txt b/requirements.txt index 69f846a..4db8e03 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ click click_config_file face_recognition -exif -iptcinfo3 \ No newline at end of file +py3exiv2 \ No newline at end of file