Kodomo

Пользователь

Классификатор картинок

Texническое задание

Зачем оно надо

Заказчик в лице Сергея Митрофанова имеет (и может поделиться) несколько комплектов фотографий. Внутри каждого комплекта фотографии относятся к одному мероприятию, но сделаны разными фотоаппаратами (фотографии, сделанные на один фотик и относящиеся к одному комплекту далее называем набором фоток). Время, выставляемое фотоаппаратами на фотографиях не синхронизированно с другими фотоаппаратами. Но для каждого фотоаппарата есть хотя бы одна фотография с одними и теми же часами. Задача: переименовать все фотки таким образом, чтобы в имени каждой фотографии были дата, время, исходное имя файла и идентификатор фотографа. Идентификатор фотографа = имя директории с набором фоток.

Что оно делает

  1. Вычислить смещение времени для каждого набора фоток таким образом, чтобы при сложении времени, записанного в EXIF'е и смещения, результирующее время было синхронизированно между наборами. Для вычисления смещения используется фотография с часами. Фотография с часами всегда имеет в своем имени слово "date". Программа ищет в папке соответствующую фотографию и открывает ее в какой-нибудь смотрелке фотографий. Далее спрашивает пользователя ввести дату и время, изображенные на часах, в определенном формате. Корректность введенных даты и времени проверяется (типа чтобы не было 27 часов стопицот минут).
  2. Переименовать все фотографии. Новое имя фотографии состоит из синхронизированных даты и времени, исходного имени файла и идентификатор фотографа.
  3. Выявлять серии фотографий. Внутри серии каждая фотография сделана в пределах скольких-то секунд от последующей, причем на один и тот же фотоаппарат (нужно придумать, как вводить этот параметр). Фотографиям из одной серии присваивается одно и то же время.

Интерфейс

Интерфейс программы текстовый.

Параметры командной сроки:

  1. Имя папки с комплектом фоток как позиционный параметр

Пользовательские качества

Документации пусть лежит рядом в README.txt.

Программа должна уметь разбирать EXIF фоток с разных фотоаппаратов. Если необходимого поля EXIF'а нет - выводить на stderr идентификатор фотографа.

Платформа - MS Windows или Linux. Необходим питонский модуль EXIF, доступный в пути питона. Модуль можно скачать тут (http://sourceforge.net/projects/exif-py/)...

Программистские качества программы.

Самодокументация в коде должна быть на каждую функцию. Каждая функция должна иметь не менее одной строки, описывающей её. Первая строка – краткое описание сути, это полное предложение, начинается с заглавной буквы, завершается точкой; вторая строка – пустая; далее – подробное описание (если нужно); далее – описание параметров (если нужно); далее – тесты.

Планчик реализации

Модуль у нас один, с пока неопределенным названием

Классы

  1. Image. Конструктор класса принимает путь к фотографии как параметр. Класс имеет поля: path = путь к фотографии, date_time = объект datetime.datetime, возможно, camera = модель фотоаппарата.

Функции

  1. main. Берет параметры комадной строки и запускает функции rename_photos, get_shift и walk_filsystem.
  2. walk_filesystem. Принимает папку с комплектом фотграфий как параметр, возвращает словарь (ключ - идентификатор фотографа, значение - список объектов Image). эта же функция выводит на sdterr идентификатор фотографа, у которого дефектный EXIF.
  3. get_shift. Папку с комплектом фоток, возвращает словарь (ключ - идентификатор фотографа, значение - смещение в виде объекта datetime.timedelta).
  4. rename_photos. Получает словарь от функции walk_filesystem и словарь от фунции get_shift. Переименовывает фотки.
  5. prompt_user. Получает на вход путь к фотке, открывает ее, спрашивает пользователя ввести время на фотке. Возвращает объект datetime.datetime. Используется функцией get_shifts.