LINUX.ORG.RU

Посоветуйте менеджер изображений/фотографий с функцией самостоятельного поиска файлов и индексированием найденного


0

1

Доброго времени суток!

Существуют ли менеджеры изображений/фотографий, которые могут сканировать все доступное дерево каталогов (или только указанную его часть), индексировать метаданные, как-нибудь автоматически строить удобные иерархии изображений и т.д. - и все это с возможностью хранить изображения там, где они находились изначально, а при желании - втянуть в какой-нибудь отдельный каталог?

Помимо этого нужна работа с фотоаппаратами, но это вроде многие умеют.

Редактирование изображений не требуется. Добавление меток весьма желательно.


digiKam наверняка умеет.
По-моему, через kipi-plugins подобный функционал можно прикрутить и к Gwenview

dogbert ★★★★★
()
Ответ на: комментарий от massimus

А разве digikam умеет только индексировать, без копирования файлов в отдельный каталог? Я как-то не понял, как там такое сделать. Да и краткое гугление утверждает, что он это не умеет...

moroz
() автор топика

Итак, провел небольшой эксперимент. Shotwell / F-spot / Digikam для индексирования одного массива данных.

Машина - Core i7-920 12 Гб оперативки, Gentoo. Файловая система, куда приложениям разрешалось складывать метаданные/файлы - XFS.

Тестовые данные - несколько старых винчестеров и бекапов старых винчестеров, как моих, так и не моих. Примерно 250 Гб данных - там и винда, и линукса, много чего.

а) Начал с Shotwell, т.к. у него меньше всего зависимостей (у меня дома xmonad безо всяких там гномов и кде). Порадовал шустрой работой. Интерфейс минималистичный и простой. Поначалу я ему стал скармливать другие данные, на которых он успешно упал, успев однако проиндексировать тысячи 4 картинок. После повторного запуска бодро показал все проиндексированное. Одна беда - по датам он разложил удобно (особенно радует группировка файлов - если перейти на промежуточный уровень дерева, то в окне просмотра будет по одной картинке для каждого потомка данного узла). А вот других полезных вариантов сортировки файлов в какую-нибудь иерархическую структуру я у него не нашел. Метки, судя по всему, не иерархические и работать с ними мне не показалось удобным. Сортировать по рейтингу - абсолютно лишнее. Целевому пользователю хочется разгрести несколько архивов семейных фотографий - какой там рейтинг? Как сделать что-то с поддеревом альбома я тоже не понял. Там вообще понятия альбома нет. Осуществить копирование части проиндексированных файлов в локальное хранилище видимо тоже нельзя.

Далее я напустил его на тестовые данные. Их он осилил, проиндексировав 18 тысяч файлов за каких-нибудь пол-часа.

б) Продолжил F-spot'ом. Интерфейс у него тоже неплохой, умеет иерархические метки. Успешно провел предварительный анализ тестовых данных, но в самом начале индексирования упал, успев обработать лишь 950 изображений. По датам раскладывать не стал, вместо этого у него сомнительной полезности панелька, где можно двигать временное окно, что приводит к сдвигу фокуса на соотв. файлы. После перезапуска упал еще разок, с третьего раза удалось посмотреть на интерфейс просмотра - у Shotwell'а лучше. F-spot вываливает ВЕСЬ массив изображений. Даже для 1000 изображений это слабо пригодно к использованию. По-видимому, по меткам можно фильтровать, но у меня никаких меток из файлов не выделилось. Попытка индексации заняла примерно минут 20.

в) Ну и на последок - digikam. У него, видимо, больше всего наворотов. Интерфейс мне показался не слишком интуитивно-понятным. Я так и не понял, в обязательном ли порядке он копирует к себе индексируемые файлы, или нет. Судя по всему - всегда копирует, что крайне плохо для моей задачи. Указав ему каталог, куда были подмонтированы файловые системы тестовых данных, я оставил его подумать. Винчестеры тарахтели, digikam демонстрировал пустое белое окно, какое-то время все шло хорошо. Потом я с удивлением заметил, что отзывчивость системы резко упала. Заглянув в top я обнаружил, что все 12 Гб оперативной памяти кем-то успешно съедены, система начала вовсю свопится. И top показывает на X-ы. Предполагаю, что где-то потекла память, что и привело к печальному результату - иксы в конце-концов упали. После перезапуска digikam продемонстрировал пустой альбом. Каких-либо данных в его рабочем каталоге, куда он обещал помещать индексы и файлы, я тоже не обнаружил. Такой вот печальный результат. На получение этого результата ушло полтора-два часа.

Вывод: для моей задачи худо-бедно может сойти Shotwell, хотя требования выполнены в лучшем случае наполовину и стабильность оставляет желать лучшего. Печально, печально.

moroz
() автор топика
Ответ на: комментарий от moroz

>Интерфейс мне показался не слишком интуитивно-понятным.

Жаль.

Я так и не понял, в обязательном ли порядке он копирует к себе индексируемые файлы, или нет. Судя по всему - всегда копирует, что крайне плохо для моей задачи.


Не знаю, что он у вас там куда копирует, у меня он индексирует локальную коллекцию, указанную ему в настройках. Настройка > Настроить digiKam > Коллекции > Локальные коллекции.

Заглянув в top я обнаружил, что все 12 Гб оперативной памяти кем-то успешно съедены

digikam продемонстрировал пустой альбом.



УМВР. Для сравнения:
✓ Athlon64 3200
✓ 1 Гб RAM
✓ Ext4
✓ 25000 файлов в коллекции

massimus ★★★
()

Боюсь, как это ни печально, пока лучше пикасы ничего не придумано.

dumal ★★
()
Ответ на: комментарий от massimus

Да, теперь разобрался. Я использовал Import/Add images, а в при этом digikam строит представление всех файлов в виде набора маленьких картинок - видимо, там где-то память потекла. Да и подготовить уменьшенные копии для ~20 тысяч изображений, наверное, не быстрая операция.

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

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

moroz
() автор топика
Ответ на: комментарий от KRoN73

Посмотрел творение гугла. Действительно, по совокупности характеристик, это лучший выбор, несмотря на работу через wine.

Шустрая, работает без лишних вопросов, простой интерфейс. Правда, представление распределения по датам мне больше в shotwell понравилось. Но пикасовский вариант имеет свои достоинства. В идеале нужно оба режима.

Не понял только, можно ли там выбрать подмножество файлов и скопировать его в какое-нибудь локальное хранилище.

moroz
() автор топика
Ответ на: комментарий от moroz

>Действительно, по совокупности характеристик, это лучший выбор, несмотря на работу через wine.

Если ты linux-версию щупал, то лучше забей. Она неимоверно старая. Там даже узнавания лиц нету. Синхронизация ужасная. И т.п. Мне сейчас приходится использовать на основной базе 3.8 под настоящей виндой в VMPlayer и на вспомогательных на работе и т.п. - ту же 3.8 под Wine. Не все функции работают, в частности - геопривязка, но в целом жить можно.

Не понял только, можно ли там выбрать подмножество файлов и скопировать его в какое-нибудь локальное хранилище.


Отдельный каталог == альбом. Если выбрать файлы и перетащить их в другой альбом, то они перенесутся физически.

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

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Я пробовал 3.8 из-под wine. Вроде работает, причем быстрее всех остальных (shotwell, f-spot, digikam).

Отдельный каталог == альбом. Если выбрать файлы и перетащить их в другой альбом, то они перенесутся физически

Да, точно. Я бы предпочел единый индекс по датам/меткам с возможностью копировать что-то в какой-нибудь один указанный каталог, но так тоже можно.

Жаль, разбиение по времени только по годам - в Shotwell уж очень удобно группировались фотографии, скинутые с фотоаппарата в один каталог - на последнем уровне группировки в каждую группу попадали фотографии, сделанных в один день.

moroz
() автор топика
Ответ на: комментарий от moroz

Shotwell уж очень удобно группировались фотографии, скинутые с фотоаппарата в один каталог

Я давно написал скрипт, который раскидывает мне по каталогам по дням :) Кидаю пачку фоток в один каталог, он мне вращает фотки по EXIF, переименовывает в определённый формат (дата в имени: ГГГГММДД-ЧЧММ-оригинальное_имя.jpg - чтобы сортировка в неприспособленном к этому софте корретной была) и раскидывает по каталогам ГГГГ/ММДД/

Вот, только тут пути хардкодовые, под себя на коленке лепилось:

#!/usr/bin/perl -w

use warnings;
use strict;
use Time::Local;
use Image::ExifTool qw(:Public);
use POSIX qw(strftime);
use File::Basename;
use File::Path qw(make_path);

`sudo chown balancer: *`;
`sudo chown balancer: "\$(pwd)"`;
`chmod a-x,go-w *`;

my @uppers = glob("*.MOV *.JPG *.AVI *.THM *.CR2");
foreach my $name (@uppers)
{
	rename $name, lc($name) or die $!;
}

`exifautotran *.jpg`;

my $exif = new Image::ExifTool;

# Картинки
my @images = glob("*.jpg *.cr2");
foreach my $img (@images)
{
	print "$img .. ";
	my $info = $exif->ImageInfo($img, 'DateTimeOriginal');

	if(defined $exif->GetValue('Error'))
	{
		print "ERROR: Skipping '$img': " . $exif->GetValue('Error') . "\n";
		next;
	}
	if(not exists $info->{'DateTimeOriginal'})
	{
		warn "File '$img' has no EXIF 'DateTimeOriginal' tag. Skipping it\n";
		next;
	}
	if(defined $exif->GetValue('Warning'))
	{
		print "Warn: Processing '$img': " . $exif->GetValue('Warning') . "\n";
	}

	my @date = reverse(split(/[: ]/, $info->{'DateTimeOriginal'}));
	$date[4]--;

	my $time = timelocal(@date);

	my $date = $info->{'DateTimeOriginal'};

	my $status = utime($time, $time, $img);
	if ($status != 1)
	{
    	print "Warn: utime() on '$img' returned $status instead of 1.\n";
	}

	my $dir = '/home/family/Our'.strftime('/%Y/%m%d/', localtime($time));
	my $new_name = basename($img);
	$new_name =~ s/^([\d\-]+)(img_.+?)$/$2/;
	$new_name = strftime('%Y%m%d-%H%M-', localtime($time)).$new_name;
	make_path($dir);

	print "$date -> $dir$new_name .. "; # после тестов убрать \n

	my $picasa_ini = '';
	$picasa_ini = "Picasa.ini" if(-e "Picasa.ini");
	$picasa_ini = ".picasa.ini" if(-e ".picasa.ini");

	if($picasa_ini)
	{
		open INI, $picasa_ini or die "Couldn't open file $picasa_ini: $!";
		my $old_ini = '';
		my $new_ini = '';
		my $found = 0;
		while(my $s = <INI>)
		{
			$s =~ s/\r//g;
			chomp $s;
			if(lc($s) eq lc("[$img]"))
			{
				$found = 1;
				$new_ini .= "[$new_name]\r\n";
			}
			else
			{
				$found = 0 if($s =~ m/^\[.+\]$/);

				if($found)
				{
					$new_ini .= $s."\r\n";
				}
				else
				{
					$old_ini .= $s."\r\n";
				}
			}
		}
		close INI or die $!;

		open NEW_INI, ">>$dir.picasa.ini" or die $!;
		print NEW_INI $new_ini;
		close NEW_INI or die $!;

		open OLD_INI, ">$picasa_ini" or die ">$picasa_ini: $!";
		print OLD_INI $old_ini;
		close OLD_INI or die $!;
	}

	`mv -u $img $dir$new_name`;
	print "ok!\n";
}

# Видео
my @videos = glob("*.avi *.mov");
foreach my $video (@videos)
{
	my $thm = fileparse($video, qr/.\w+$/).'.thm';
	print "$video [$thm] .. ";
	next if !-e $thm;

	my $info = $exif->ImageInfo($thm, 'DateTimeOriginal');

	if(defined $exif->GetValue('Error'))
	{
		print "ERROR: Skipping '$video' [$thm]: " . $exif->GetValue('Error') . "\n";
		next;
	}
	if(not exists $info->{'DateTimeOriginal'})
	{
		warn "File '$video' [$thm] has no EXIF 'DateTimeOriginal' tag. Skipping it\n";
		next;
	}
	if(defined $exif->GetValue('Warning'))
	{
		print "Warn: Processing '$video' [$thm]: " . $exif->GetValue('Warning') . "\n";
	}

	my @date = reverse(split(/[: ]/, $info->{'DateTimeOriginal'}));
	$date[4]--;

	my $time = timelocal(@date);

	my $date = $info->{'DateTimeOriginal'};

	my $status = utime($time, $time, $video);
	if ($status != 1)
	{
    	print "Warn: utime() on '$video' returned $status instead of 1.\n";
	}

	$status = utime($time, $time, $thm);
	if ($status != 1)
	{
    	print "Warn: utime() on '$thm' returned $status instead of 1.\n";
	}

	my $dir = '/home/family/Our'.strftime('/%Y/%m%d/', localtime($time));

	my $new_name = basename($video);
	$new_name =~ s/^([\d\-]+)(mvi_.+?)$/$2/;
	$new_name = strftime('%Y%m%d-%H%M-', localtime($time)).$new_name;
	my $new_name_thm = basename($thm);
	$new_name_thm =~ s/^([\d\-]+)(mvi_.+?)$/$2/;
	$new_name_thm = strftime('%Y%m%d-%H%M-', localtime($time)).$new_name_thm;

	make_path($dir);

	print "$date -> $dir$new_name .. ";
	`mv -u $video $dir$new_name`;
	`mv -u $thm $dir$new_name_thm`;
	print "ok!\n";
}

До кучи переносит в том же формате видео-ролики вместе с сопровождающими *.thm и переносит записи по файлам в picasa.ini файлах.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.