Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Фотографируем по расписанию с помощью gPhoto и cron

Оригинал: "Schedule Photo Taking With gPhoto and cron "
Автор: Rob Reilly
Дата публикации: 2 October 2009
Перевод: Н.Ромоданов
Дата перевода: 3 апреля 2010 г.

gPhoto является программой, которая управляет цифровой камерой из компьютера с системой Linux. cron является проверенным и надежным планировщиком заданий, который входит в состав Unix и Linux с самого начала существования этих систем. Объедините их вместе со своей цифровой камерой и небольшим компьютером, работающим под Linux, и вы сможете делать любые фотографии с заранее установленной периодичностью.

Может быть, вы строите здание и хотите регулярно в течение нескольких месяцев делать фотоснимки всех этапов строительства. Для того, чтобы каждое утро в 10 часов делать снимок, вы можете воспользоваться недорогой цифровой камерой и старым ноутбуком. Отдельные фотографии могут быть использованы для создания видео или слайд-шоу с целью документирования работ.

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

Пакет gPhoto и планировщик cron позволят вам легко воспользоваться массой различных возможностей.

Обзор пакета gPhoto

gPhoto является программой управления фотокамерой, работающей в командной строке Linux. С ее помощью можно через USB соединение с машиной, работающей под Linux, управлять затвором камеры; указывается, что поддерживается более 1000 различных моделей. В зависимости от того, как камерой вы пользуетесь, вы можете регулировать очень большое количество настроек, имеющихся в самой камере.

Ниже приведен общий вид команды

rreilly> gphoto2 --option

Среди интересных команд есть следующие: --capture-image (сделать снимок), --set-config (установить параметры настройки) и --interval (задать интервал съемки). Получить снимок сравнительно просто:

rreilly> gphoto2 --capture-image

С помощью этой команды управление будет передано на затвор камеры и новое изображение будет сохранено на карте памяти, находящейся в камере. Фотографии будут накапливаться на карте памяти, а затем их можно будет выгрузить на машину с системой Linux. На рис.1 показано совместное использование команд --capture-image и --get-all-files.

Параметры пакета gPhoto

Рис.1: Параметры пакета gPhoto

Планирование заданий с помощью Cron

Теперь перейдем к краткому обзору cron. Cron является таблично управляемым планировщиком заданий Linux. В файл добавляется запись, в которой указывается, когда должна исполняться команда. Время исполнения указывается с точностью до минуты. Вы можете использовать следующую команду для того, чтобы отредактировать таблицу, которая управляет работой cron.

rreilly> crontab -e

С помощью следующей команды вы можете сменить редактор, который по умолчанию используется для редактирования таблицы cron. Мне нравится редактор vi, но вы можете использовать любой редактор, который вам нравится. Я даже пытался использовать OpenOffice.org. Это интересно.

rreilly> export EDITOR=vi

Вы должны увидеть текст, похожий на следующий:

PATH=/usr/sbin:/usr/bin:/sbin:
/bin
# m h  dom mon dow   command

Обозначения m и h указывают минуты и часы, когда должна быть исполнена команда. Как и следовало ожидать, dom, mon и dow указывают соответственно день месяца (1-31), месяц (1-12) и день недели (1-7).

Использовать пакет gphoto вместе с cron очень просто. В приведенном ниже промере снимки делаются на 50-ой, 52-ой, 54-ой и 56-ой минутах каждого часа.

PATH=/usr/sbin:/usr/bin:/sbin:/bin
# m h  dom mon dow   command
50,52,54,56 * * * * gphoto2 --capture-image

Фотографии сохраняются на карте камеры, для этого по умолчанию используется специальная система последовательной нумерации. На моей камере Nikon, файлы могут иметь названия, например, похожие на DSC_0000.JPG или DSC_0003.JPG. cron будет использовать отредактированную таблицу только после того, как она будет сохранена. Поэтому вам нужно спланировать все действия заранее и не редактировать таблицу во время исполнения запланированных действий.

Если время автоматической съемки длится дни, недели или месяцы, то для камеры потребуется внешний блок питания, поскольку батареи просто не будут работать в течение столь долгого периода времени.

Также с помощью cron просто выгружать из камеры все файлы. Добавьте в конце таблицы следующую строку:

01 01 * * * gphoto2 --get-all-files

С помощью этой команды каждый день в 01:01:00 все файлы будут выгружаться в ваш домашний директорий.

Подробности смотрите в Ubuntu cron "how-to", где дано исчерпывающее описание использования cron.

Дополнительные возможности

Я использовал gphoto и cron, чтобы сделать снимки с помощью моего ноутбука Asus. Все прекрасно, но недостаток в том, что ноутбуки занимают много места. Смонтируйте ноутбук на небольшой подставке и укрепите камеру на штативе, особенно если съемка осуществляется в студийной обстановке. Я видел, что некоторые профессионалы делают именно таким образом. С другой стороны, маленький нетбук, на котором работает система eeeBuntu, был бы удобнее в случае, если нужно обеспечить портативность и регулярную автоматическую съемку на мероприятиях и конференциях.

Gphoto, cron и моя камера Nikon также работают на специальном одноплатном компьютере, хотя нужна дополнительная машина для удаленного доступа к этому одноплатному компьютеру. Понятно, как делать фотографии и в этом случае, но я лишь чуть чуть попробовал использовать подобную схему. То, что компьютер одноплатный, важно, поскольку он дешевый (99 долларов США), имеет небольшой размер, есть сетевое подключение и он работает под Ubuntu Linux. У меня есть множество проектов по использованию такой нано машины.

Еще один интересный, но менее гибкий способ делать фотографии с определенной периодичностью состоит в использовании пакета gphoto с параметром --interval. Этот способ можно объединить с cron и делать короткие серии фотографий в определенное время суток, возможно, для того, чтобы "поймать кадр". Например, в качестве базовой с параметром --interval можно использовать следующую команду:

rreilly> gphoto2 --capture-image --interval=5 --frames=5

Здесь делается пять фотографий с интервалом в 5 секунд. Фотографии сгружаются в домашний директорий ноутбука, причем файлы фотографий именуются по определенной последовательной схеме. Когда я использовал эту настройку с моей камерой Nikon, файлы имели названия capt0000.jpg - capt0004.jpg.

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

Другой аспект касается срока службы батарей. Уровень заряда батареи существенно различен в различных марках и моделях камер. На количество изображений, которые вы можете сделать, также влияет использование вспышки. Штатного аккумулятора в моей камере Nikon достаточно для того, чтобы сделать примерно от 40 и до 50 кадров с использованием вспышки. Очевидно, что если вы хотите сделать 300 фотографии, то существенным будет наличие внешнего источника питания камеры.

Заключение

Объединение gphoto и cron даст возможность автоматически делать снимки, причем с минимальным количеством аппаратуры и с несложной настройкой. Мне ясно, как студенты, ученые, астрономы или фотографы могли бы с пользой применять этот подход. Возможность запускать программы в многозадачной, многопользовательской системе – это одна из отличительных особенностей Linux. Хотя многозадачность есть и в других системах, но в Linux все это происходит достаточно просто и логично.

Возмите gphoto и cron и поэкспериментируйте. Используйте все, что вы обнаружите интересного.