Ответ на пост «Сортировка фотографий на компьютере»
В прицнипе реализуемо , но есть нюансы. В конце есть ссылки на удобное копирование скриптов.
Понадобится:
Компьютер с Windows 10 или Windows 11 и видеокартой Nvidia RTX 3000 или 4000 серии, теоретически можно и младше, но я не гарантирую как оно будет работать.
Powershell 7 - https://aka.ms/powershell-release?tag=stable дефолтный файл для обычных Windows x64. Скачиваем + устанавливаем
PowerShell-7.5.0-win-x64.exe
Но можно и любым другим способом zip/msi, пакетный менеджер и т.д
Ollama - клиент для нейросетей https://ollama.com/download жмём Download. Скачиваем + устанавливаем.
Модель для распознавания объектов на фото и тегирования jpg файлов llama3.2-vision:11b которую можно скачать через powershell командой.
ollama pull llama3.2-vision:11b


Программа exiftool для Windows бинарик которой нужно положить в папку, либо любую другую, но тогда правиьте скрипт сооветствующий образом
C:\ExifTool\exiftool.exe
Качаем сайта https://exiftool.org/ Типовой файл 64-bit:
Программа XNview, доставайте сами знаете где, либо любой другой каталогизатор изображений и фото. В jpeg есть теги, нейросеть проставляет теги в зависимости от того, что изображено на фото, по ним сможете посортировать и найти нужные объекты на фото, в XNView есть поиск по тегам, мне подошло именно так.
Собственно код, который нужно вставить в терминал Powershell с текущей папкой в папке с фотографиями формата jpg/jpeg.
Powershell cкрипт (использует GPU)
Здесь мы попросим нейросеть создать нам описание изображения, теги, комментарий и записатить всё это в EXIF самой картинки.
ВНИМАНИЕ!: скрипт обходит все подпапки!
$exifToolPath = 'C:\ExifTool\exiftool.exe'
Get-ChildItem -Recurse $dir | Where-Object {$_.Extension -in @(".jpg", ".jpeg")} | ForEach-Object {
$imagePath = $_.FullName
$comment = ollama run llama3.2-vision:11b "description in 5-10 words $($_.FullName)"
$description = ollama run llama3.1:8b "description in 3-5 words $($comment)"
$theme = ollama run llama3.1:8b "theme in 2-3 words $($comment)"
$tags = ollama run llama3.1:8b "3 tags from $($comment) separated with comma, write only tags"
$description = $description.Trim().Replace("`"","")
$comment = $comment.Trim().Replace("`"","")
$theme = $theme.Trim().Replace("`"","")
& $exifToolPath -Description="$description" -charset latin -Comment="$comment" -charset latin -XPSubject="$theme" -XPComment="$description" -Keywords="$tags" -overwrite_original "$imagePath" -charset latin
}




Во время отработки скрипта побегут странные символы, видимо консольный интерфейс не предполагал, что его будут так использовать. В конце в файл будут записано описание, теги, и комментарий.
Бонус:
Можно сжать фото (до 70%) с помощью jpegoptim в несколько потоков (гораздо быстрее по сравению с обычным использованием jpegoptim *.jpg)
Jpegoptim для Windows - https://github.com/tjko/jpegoptim/releases бинарик которой нужно положить в папку C:\Jpegoptim\jpegoptim.exe.
Файл
Powershell cкрипт (использует CPU)
ВНИМАНИЕ!: скрипт обходит все подпапки!
Get-ChildItem $dir | ForEach-Object -Parallel { C:\Jpegoptim\jpegoptim.exe -m85 $_.Name } -ThrottleLimit 15
ThrottleLimit ставьте по количеству ядер CPU минус 1 ядро, чтобы не повесить ПК
Если неудобно копировать из статьи, можно взять отсюда.
1. Описание фото с помощью нейросети
https://gist.github.com/FaustineD/e637d19f738ce8eea42cd497c17ab52b
2. Оптимизация jpg
UPD: Небольшой Дисклеймер, некоторые фото нейросеть может отказаться обрабатывать из-за присутствия политиков, клубнички, мата, и т.д, Это законодательные ограничения создателей нейросети.
Вместо тегов она впишет в файл, что не может обработать данные.