Содержание
Классификатор картинок
Texническое задание
Зачем оно надо
Заказчик в лице Сергея Митрофанова имеет (и может поделиться) несколько комплектов фотографий. Внутри каждого комплекта фотографии относятся к одному мероприятию, но сделаны разными фотоаппаратами (фотографии, сделанные на один фотик и относящиеся к одному комплекту далее называем набором фоток). Время, выставляемое фотоаппаратами на фотографиях не синхронизированно с другими фотоаппаратами. Но для каждого фотоаппарата есть хотя бы одна фотография с одними и теми же часами. Задача: переименовать все фотки таким образом, чтобы в имени каждой фотографии были дата, время, исходное имя файла и идентификатор фотографа. Идентификатор фотографа = имя директории с набором фоток.
Что оно делает
- Вычислить смещение времени для каждого набора фоток таким образом, чтобы при сложении времени, записанного в EXIF'е и смещения, результирующее время было синхронизированно между наборами. Для вычисления смещения используется фотография с часами. Фотография с часами всегда имеет в своем имени слово "date". Программа ищет в папке соответствующую фотографию и открывает ее в какой-нибудь смотрелке фотографий. Далее спрашивает пользователя ввести дату и время, изображенные на часах, в определенном формате. Корректность введенных даты и времени проверяется (типа чтобы не было 27 часов стопицот минут).
- Переименовать все фотографии. Новое имя фотографии состоит из синхронизированных даты и времени, исходного имени файла и идентификатор фотографа.
- Выявлять серии фотографий. Внутри серии каждая фотография сделана в пределах скольких-то секунд от последующей, причем на один и тот же фотоаппарат (нужно придумать, как вводить этот параметр). Фотографиям из одной серии присваивается одно и то же время.
Интерфейс
Интерфейс программы текстовый.
Параметры командной сроки:
- Имя папки с комплектом фоток как позиционный параметр
Пользовательские качества
Документации пусть лежит рядом в README.txt.
Программа должна уметь разбирать EXIF фоток с разных фотоаппаратов. Если необходимого поля EXIF'а нет - выводить на stderr идентификатор фотографа.
Платформа - MS Windows или Linux. Необходим питонский модуль EXIF, доступный в пути питона. Модуль можно скачать тут (http://sourceforge.net/projects/exif-py/)...
Программистские качества программы.
Самодокументация в коде должна быть на каждую функцию. Каждая функция должна иметь не менее одной строки, описывающей её. Первая строка – краткое описание сути, это полное предложение, начинается с заглавной буквы, завершается точкой; вторая строка – пустая; далее – подробное описание (если нужно); далее – описание параметров (если нужно); далее – тесты.
Планчик реализации
Модуль у нас один, с пока неопределенным названием
Классы
- Image. Конструктор класса принимает путь к фотографии как параметр. Класс имеет поля: path = путь к фотографии, date_time = объект datetime.datetime, возможно, camera = модель фотоаппарата.
Функции
- main. Берет параметры комадной строки и запускает функции rename_photos, get_shift и walk_filsystem.
- walk_filesystem. Принимает папку с комплектом фотграфий как параметр, возвращает словарь (ключ - идентификатор фотографа, значение - список объектов Image). эта же функция выводит на sdterr идентификатор фотографа, у которого дефектный EXIF.
- get_shift. Папку с комплектом фоток, возвращает словарь (ключ - идентификатор фотографа, значение - смещение в виде объекта datetime.timedelta).
- rename_photos. Получает словарь от функции walk_filesystem и словарь от фунции get_shift. Переименовывает фотки.
- prompt_user. Получает на вход путь к фотке, открывает ее, спрашивает пользователя ввести время на фотке. Возвращает объект datetime.datetime. Используется функцией get_shifts.