Копирование фото через Picture Transfer Protocol (PTP) в Linux, FreeBSD

Всем привет!

Мне посчастливилось стать обладателем чудесного фотоаппарата Canon EOS 400d.
Сам фотик в качестве накопителя использует карты CompactFlash (CF) формата.
И всё было хорошо, пока я подключил его к ПК.
Оказывает в данной модели для передачи изображений используется протокол PTP

Вот небольшая выдержка из энциклопедии
PTP (Picture Transfer Protocol) – это широко распространенный протокол передачи изображений, который позволяет передавать снимки с фотоаппарата на компьютер, а так же на другие внешние устройства без установки дополнительных драйверов

Для пользователей ОС Widnows проблем нет, подключил и пользуйся как обычным Flash накопителем.
Под Linux такие устройства в качестве накопителя не отображаются.
Пришлось лезть в Google и узнавать способы передачи файлов по PTP протоколу.

К счастью я довольно быстро вышел на проект, который как раз занимается развитием PTP в linux.

Для копирования фото предлагается 2 решения:
    1) С использование утилиты gphoto2

    2) С использование FUSE и gphotofs

Давайте рассмотрим каждый из них.

Способ 1. С использование утилиты gphoto2
Всё очень просто, подключаем камеру, даём команду на копирование всех файлов
Для моего фотоаппарата команда выглядит так:
gphoto2 --camera "Canon EOS 400D (PTP mode)" --get-all-files

Посмотреть поддержку своей камеры можно с помощью ключа --list-cameras
За остальными командами идём в man ghoto2

Способ 2. С использование FUSE и gphotofs
На мой взгляд этот способ намного лучше и легче первого.
Мы просто примонтируем камеру с помощью FUSE и gphotofs в качестве обычного накопителя.

Возможности gphotofs:
You can:
- Traverse directories
- Read the contents of files
- Delete files
- Move files (Read + delete)
- Use 'du' to measure file size
- Mount the filesystem before plugging in a camera.
- Add/Remove directories
- Add (upload) files.
- Get free space information
- This one seems to be very much at the mercy of the camera
manufacturer. I don't know if it'll ever be possible in a
general way.
(Depends on gp_camera_get_storageinfo()).

You cannot:
- Modify files still has some problems.
- Rename files/directories
- Unplug and replug a camera and expect things to keep working.
- The backend gets confused and you'll just get errors when
you try to do anything. Unmount and remount the filesystem
and you'll be back in business.

Для использования FUSE у Вас в ядре должна быть включена поддержка Filesystem in Userspace support

Дальше всё очень просто:
Установив FUSE и gphotofs мы просто даём команду монтирования:
gphotofs <точка монттирования>

И работаем с камерой как с обычным накопителем.
После окончания работы размонтируем девайс командой:
fusermount -u <точка монтирования>

Всё очень просто, быстро и эффективно.
blog comments powered by Disqus