powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вторничный фотографЪ
25 сообщений из 69, страница 2 из 3
Вторничный фотографЪ
    #39773520
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изменение тэга это например поворот на 90 градусов (смена ориентации).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773529
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Изменение тэга это например поворот на 90 градусов (смена ориентации).
Интересный кейс. Давайте это я дам чуть позже отдельным топиком. А в этом я хотел-бы просто
продолжить раскладывание фоток по датам?

OK?
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773646
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот любопытная библиотечка Metadata-extractor. Вроде в ней все есть.
https://github.com/drewnoakes/metadata-extractor

По поводу данного шаблона.
Код: sql
1.
/photos/{category}/{year} {album}/{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})


Я думал о реализации его так и эдак и у меня выходит какой-то скриптовый язык программирования
внутри приложения.

Вобщем цена вопроса. Что делать если нужного тега нет? А он входит в шаблон как элемент директории.
Например:
Код: sql
1.
/photos/{YYYY}/{MM}/{DD}/{model}_{YYYY}{MM}{DD}_{width}x{height}.jpeg



В данном шаблоне некоторые алиасы такие как width, height являются mandatory для любого файла.
Я 100% их найду значения. Но как быть если один из атрибутов (YYYYMMDD) будет незаполнен?

Будет такой вот странный path, который скорее всего будет некорректен с точки зрения файловой системы.
Код: sql
1.
/photos////CannonPowerShoot__1280x750.jpeg


Нужно какое-то генерализованное решение и красивое с точки зрения шаблона.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773658
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дата и время у файла есть всегда.
Не в EXIF, так в атрибутах.
Правда может быть так, что они могут различаться, но тут общего решения не существует.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773661
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБудет такой вот странный path, который скорее всего будет некорректен с точки зрения файловой системы.
Код: sql
1.
/photos////CannonPowerShoot__1280x750.jpeg


Для линукса не знаю, а в виндовсе корректен и равнозначен такому
Код: sql
1.
/photos/CannonPowerShoot__1280x750.jpeg
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773702
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton/photos/{YYYY}/{MM}/{DD}/{model}_{YYYY}{MM}{DD}_{width}x{height}.jpeg
Сомнительный шаблон.
Зачем в имени файла размерность изображения?
Почему модель вынесена в начало (сортировка будет по модели)?
Почему нет времени или счетчика? Или в течение дня будет только одна фотография?

Я бы советовал использовать мой шаблон, в нем ничего лишнего и он выверен практикой.
Единственное, что я не указал — если одно и то же событие снималось разными фотографами, то в каталоге альбома я создаю подкаталоги на каждого фотографа и уже внутри них идет "{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})".
Для фотографий важно упорядочивание по хронологии, поэтому дата или счетчик должны быть в начале файла. Модель фотоаппарата является чисто информационным атрибутом, поэтому должна быть в конце или вообще не указываться. Я указываю, потому что по модели можно понять, что следует ожидать на фотографии (какое качество и особенности).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773709
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается даты/времени, то нужно учитывать следующее.
Во-первых, в EXIF есть несколько тэгов для этого: Date/Time, DateOriginal/TimeOriginal, DateDigitized/TimeDigitized, DateTimeStr (это не считая проприетарных и нестандартных полей). И разные вендоры по разному понимают, что и в какие поля нужно записывать.
Во-вторых, кто-то пишет в эти поля локальное время, а кто-то UTC. Кто-то учитывает сдвиг часового пояса, кто-то нет (в зависимости от свежести ПО).
В-третьих, возможны ситуации, когда дата/время в EXIF не совпадает с датой/временем в атрибутах файла (например на устройстве часы выставлены неточно, но имеется GPS, а в EXIF записывается время со спутника).
И для этих моментов нет общего решения. Нужно или принять для себя какой-то общий принцип (например определить приоритеты полей), или для каждой модели обрабатывать данные индивидуально.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773711
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, метаданные есть не только в EXIF.
Есть IPTC, есть расширения JPEG, есть форматы tiff/tga.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Почему нет времени или счетчика? Или в течение дня будет только одна фотография?

Я бы советовал использовать мой шаблон, в нем ничего лишнего и он выверен практикой.
Единственное, что я не указал — если одно и то же событие снималось разными фотографами, то в каталоге альбома я создаю подкаталоги на каждого фотографа и уже внутри них идет "{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})".
Для фотографий важно упорядочивание по хронологии, поэтому дата или счетчик должны быть в начале файла. Модель фотоаппарата является чисто информационным атрибутом, поэтому должна быть в конце или вообще не указываться. Я указываю, потому что по модели можно понять, что следует ожидать на фотографии (какое качество и особенности).
Согласен насчет счетчика. Добавлю. С моделью у меня будет попроще. У меня их просто меньше.
И сам знаю чего ожидать.

Ваш шаблон выверен вашей практикой. Я не фотограф. И нет у меня таких глобальных задач с тегами.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773749
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Во-первых, в EXIF есть несколько тэгов для этого: Date/Time, DateOriginal/TimeOriginal, DateDigitized/TimeDigitized, DateTimeStr (это не считая проприетарных и нестандартных полей). И разные вендоры по разному понимают, что и в какие поля нужно записывать.
Во-вторых, кто-то пишет в эти поля локальное время, а кто-то UTC. Кто-то учитывает сдвиг часового пояса, кто-то нет (в зависимости от свежести ПО).
Я соберу статистику. Скорее всего будет просто система приоритетов. Если есть какой-то тег - я его беру.
Если нет - смотрю другой.

Если вообще не найдены никакие атрибуты времени - возьму за основу дату создания файла.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39774391
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я по поводу дублирования. Более десятка лет назад был самодельный ехе для винды. Название imageduplex.exe (или dupless). Выполняет поиск в файловой системе рисунков, "похожих" на предложенный эскиз или файл.
Автор объяснял работу. Не помню, шла ли речь об ... как это?.. когда сжимают до маленького квадратика. Основное помню в том, что сходство определялось не в геометрическом пространстве (по крайней мере нетолько в геометрическом), а в цветовом, путём разновидности кластеризации. Именно так я бы тоже тогда и делал бы.

Я только несколько раз посмотрел работу проги, ну и показывал ещё. Мы соглашались, что "похожесть" была достаточно обоснованной.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39774401
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Персептивный хеш. Впервые я прочитал про это на хабре.
Кажется этот линк https://habr.com/ru/post/120562/
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39775049
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно взять готовую программу
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39775068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну.. не знаю. Неспортивное это. В топике разработки обсуждать готовые продукты.

Кроме того я вот планировал делать безопасное переименование. Оставлять старый каталог.
И создавать новый в hardlinks.

Опасная эта операция я вам доложу. Ошибёшься - половину фоток потеряешь.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39778354
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UP. Прошу прощения за безделие и праздность. От задачи я не отказываюсь. Буду делать. Фотки по прежнему
лежат и ждут сортировки.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вторничный фотографЪ
    #40091636
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Up. Приложение готово. Всякая ботва с распознаванием образов, html и thumnails отвлекли меня от задачи-прим.
И сегодня эта задача сделана.

Фотки я уже успешно раскладываю по фолдерам. Детектирует exif-tag и верный формат даты.
Утилита имеет внешний вид консоли.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
usage: java -jar photo-time-sort.jar -d <arg> [-f <arg>] [-o <arg>] -s
       <arg> [-t <arg>] [-x <arg>]
 -d,--dest <arg>         Dest folder
 -f,--timeformat <arg>   Comma-separated local date-time format for exif
                         tag. Default = 'yyyy:MM:dd HH:mm:ss'
 -o,--pathformat <arg>   Output folder format. Default =
                         'yyyy/MM/dd/HH-mm-ss'
 -s,--source <arg>       Source jpeg files folder
 -t,--trash <arg>        Unrecognized files
 -x,--exiftags <arg>     Comma-separated exif-tags list. Default =
                         'DateTime,DateTimeOriginal,DateTimeDigitized'



В утилите много хардкода и недостаточно гибкости но главную задачу я уже решил. Дальше дорабатывать буду
по мелочам.

Вот как выглядел фолдер с фотками до.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
|   |-- IMG_0043.JPG
|   |-- IMG_0044.JPG
|   `-- Thumbs.db
|-- 109_1309
|   |-- IMG_0045.JPG
|   `-- Thumbs.db
|-- 110_1409
|   |-- IMG_0046.JPG
|   |-- IMG_0047.JPG
|   `-- Thumbs.db
|-- 111_1609
|   |-- IMG_0049.JPG
|   |-- IMG_0050.JPG
|   `-- Thumbs.db
|-- 112_1909
|-- 113_2409
|   |-- IMG_0053.JPG
|   `-- Thumbs.db
|-- 114_3009
|   |-- IMG_0054.JPG
|   |-- IMG_0055.JPG
|   |-- IMG_0056.JPG
|   |-- IMG_0058.JPG



И вот как после.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
|-- 2008
|   |-- 06
|   |   `-- 27
|   |       |-- 17-49-43.JPG
|   |       `-- 17-50-27.JPG
|   `-- 07
|       `-- 01
|           `-- 15-54-27.JPG
|-- 2011
|   |-- 03
|   |   `-- 06
|   |       `-- 13-54-28.JPG
|   |-- 07
|   |   |-- 01
|   |   |   |-- 01-02-55.JPG
|   |   |   |-- 03-46-52.JPG
|   |   |   |-- 03-47-26.JPG
|   |   |   |-- 03-47-44.JPG
|   |   |   |-- 05-51-58.JPG
|   |   |   |-- 05-52-24.JPG
|   |   |   |-- 05-53-38.JPG
|   |   |   `-- 05-54-17.JPG
|   |   |-- 14
|   |   |   |-- 04-59-51.JPG
|   |   |   `-- 05-36-43.JPG


Формат и глубину можно менять. Можно сцепить год+месяц или сделать квартальные группы фоток.

В отличие от html-индексатора данная утилита работает аккуратно и не трогает оригинал. Он в принципе может
лежать на DVD диске или в сетевом диске в readonly а каталог получатель - будет просто копировать в
себя фотки с новыми названиями. Я решил что это более безопасно даже для моего дев-тестинга.
Мало-ли какая ошибка может быть с фолдерами....

Можно вытащить из тегов название и модель цифровика. И тогда каталог может иметь структуру
разного качества снимков. Что-то снято мыльницей. И что-то зеркалкой. Это еще не реализовано
но реализация будет элементарной на базе того что уже есть.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091637
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2) Unrecognized - или trash. Это отдельный опциональный фолдер куда будут падать фотки снятые
без соотв. тега с датой. В настоящий момент у меня таких мало. Меньше процента. Но все таки терять
их не будем и они будут к сведению лежать в отдельной структуре сохраняя имена и папки как было.

3) TimeFormat - это набор шаблонов которые мы будем пытаться применить к дате. Некоторые цифровики
делают не совсем корректную дату типа 2012:10:18 1:54:45 где час стоит без ведущего нуля. Она не парсится
единым паттерном (в инструментарии Java8/time). Нужно делать 2 чтобы последовательно применяя
найти нужную рабочую подстановку.

4) Я попробую релизнуть это в 3х форматах бинарников.
- java (jar)
- Linux x64 (Graal compiler)
- Win x64 (Graal compiler)

Эксперименты с Graal я провел успешно. По крайней мере под Linux все работает. Думаю что Graal компиллятор
под Windows не будет капризным и я тоже его релизну. Но чуть позже чем остальные.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091716
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нужен ли в линуксах скомпилированный файл?
Там по-моему java-машина есть всегда.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091719
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За все линуксы не скажу. Насчет всегда - не знаю. В моём варианте jdk доустанавливалась
с помощью apt-get install ...
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091722
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, в выходном имени файла я бы советовал не разделять дефисом часы-минуты-секунды.
Лучше их писать подряд, а разделитель приберечь для чего-то более полезного, хоть для модели аппарата.

И как я вижу, CRC в имени файла отсутствует.
Я все же советую его добавить.
Файлы в течение долгого времени могут незначительно модифицироваться, причем изменяться может даже не содержимое, а метаинформация (например тэг ориентации). CRC позволит искать оригиналы/дубликаты, не проводя анализ и распознавание образов, это будет просто на порядки быстрее и проще.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091727
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет модели аппарата - я подумаю. Идея хорошая. Как вариант - добавить ее к формату

Код: sql
1.
'yyyy/MM/dd/HH-mm-ss'



К сожалению exif-теги не гарантируют наличия модели аппарата. Или они могли быть обработаны
какой-то утилитой-анонимайзером. Или будучи скачаны с соц-сетей аналогично.

Тоесть если мы хотим добавить модель цифровика то нужна опция замены на тот случай когда тега нет.

Например

Код: sql
1.
'yyyy/MM/dd/${model(default=Unknown)}-HHmmss'



Насчет CRC я не очень понял полезность этого атрибута. Если вы слегка потрогали размеры или покрутили
тон-яркость-насыщенность то CRC меняется кардинально а фотка субъективно - одна и таже.

Но в принципе сделать не сложно. Так на 1 story-point :)
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091747
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например у меня на жестком диске есть куча фотографий.
В этой куче множество дубликатов разного рода.
Где-то я создавал подкаталог по дате и копировал в него каталоги со смартфона — соответственно в разных подкаталогах часть фотографий будет дублироваться. Впрочем это самый простой сценарий, потому что тут файлы-дубликаты одинаковые, они легко находятся по имени и размеру.
Какие-то фотографии передавались другим пользователям (на другие телефоны) по Bluetooth, соц.сети или мессенджеры, и бэкапились уже другие телефоны. Тут будут дубли будут в бэкапах разных устройств. К тому же при передаче фотографий могли меняться размеры, изменяться или удаляться тэги (EXIF) и т.п., то есть по со содержимому файлы уже будут различаться.
Еще фотографии могут редактироваться, например обрезаться или корректироваться по освещению/тону/кривым. Тут уже и само изображение будет изменено, и имя файла как правило изменяется. Но обычно оригинальное имя файла все же сохраняется, просто к нему дописывается суффикс.
Фотографии могут масштабироваться под разные разрешения (подготавливаются заранее, чтобы на разных платформах они не масштабировались автоматически с потерей качества) — аналогично предыдущему, изменяется все, но оригинальное имя файла обычно сохраняется.

Если имя файла будет состоять только из счетчика или таймштампа, то оригинал по имени файла не найти, поскольку такое имя будет неуникально.
А вот если в имени файла будет присутствовать CRC, то он конечно не гарантирует отсутствие коллизий, но на практике коллизии крайне редки и он почти гарантировано будет уникальным.
А с именами файлов работать намного проще, чем с парсерами изображений — хоть в Total Commander (Multi-Rename Tool, поддерживает регулярные выражения), хоть в множестве готовых утилит по массовому переименованию файлов, хоть сохранив имена файлов в текстовый файл.

Например в Total Commander есть два таких крайне полезных инструмента, как мультипереименование и поиск дубликатов.
И оба поддерживают файловые плагины, в том числе такие полезные, как exif (тэги EXIF) и wdhash (разные хеши, в том числе CRC32).
При поиске дубликатов я просто сравниваю CRC в имени файла с рассчитанным CRC — и все изменения/дубли/оригиналы как на ладони.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091756
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уговорил. Добавлю CRC как опцию. Могу и MD5 добавить.

Для себя проблему дедубликации решил утилитой fdupes

https://ru.wikipedia.org/wiki/Fdupes

Она находила не то что файлы а целые каталоги фоток которые я по ошибке скопировал
не туда (рука на мышке дрогнула).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091760
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сценарий бэкапов следующий.

Время от времени я скидываю фотографии с источников (смартфон, фотоаппарат) на диск.
Затем делаю массовое переименование по шаблону "{album, location, event}/{ymd}{hm}_{crc32} [{tag}] ({device} {model})".
Затем ищу дубли между обработанным каталогом (с новыми фотографиями) и основным каталогом (с бэкапом).
Дубли в новом каталоге убираю, а оставшиеся фотографии перемещаю в основной каталог с бэкапами.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091762
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я выбрал CRC, а не MD5, потому что он слишком длинный и сложно считается.
Если помещать его в начало имени файла, то остаток (с датой, временем и прочим) не будет виден, да и сортировка слетит.
Если помещать его в конец имени файла, то остаток не будет виден и визуально его будет не сравнить.
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 2 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вторничный фотографЪ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]