gphoto2 в Python против командной строки; невозможно сделать предварительный просмотр в Python - PullRequest
0 голосов
/ 07 мая 2020

Раньше я работал с gphoto2 (2.5.20, на RPi) и мог выполнять основы из командной строки:

/ usr / bin / gphoto2 --capture-image -and-download --filename = zzz.jpg --force-overwrite

/ usr / bin / gphoto2 --capture-preview --filename = zzz.jpg --force-overwrite

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

Однако после установки библиотеки gphoto2 для python это (что должно быть эквивалентно) не работает:

import gphoto2 as gp
camera = gp.Camera()
camera.init()
file_path = camera.capture(gp.GP_OPERATION_CAPTURE_PREVIEW)

с message «gphoto2.GPhoto2Error: [-6] Unsupported operation»

Однако, если вы выберете

file_path = camera.capture(gp.GP_CAPTURE_IMAGE)

, это сработает. Есть ли причины, по которым мы можем получить рабочий предварительный просмотр из командной строки, а не в версии Python?

gp.__version__ возвращает 2.2.2 и соответствует последней версии https://github.com/jim-easterbrook/python-gphoto2

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Посмотрите исходники программы gphoto2. Возможно, вы сможете узнать, какую последовательность функций libgphoto2 вызывает команда --capture-preview. После этого вы сможете воспроизвести это в Python.

0 голосов
/ 07 мая 2020

Я изучил исходный код libgphoto2. Камеры, которые у меня есть, подпадают под мир PTP; Я считаю, что это находится в camlibs / ptp2 / library. c, где находится функция camera_capture_preview. Код Python не работает как с Nikon, так и с Sony. Похоже, что в коде есть две вещи, указывающие на возможные проблемы; в разделе Nikon будет 20 попыток получить превью; в разделе Sony есть комментарии по таймингу. Однако командная строка работает, так что проблемы могло и не быть.

Я также посмотрел на реализацию gphoto2 в Python. Хорошей новостью является то, что код на https://github.com/jim-easterbrook/python-gphoto2/blob/master/examples/preview-image.py работает, поэтому, если кто-то захочет сделать это в Python, они могут заменить

file_path = camera.capture (gp.GP_OPERATION_CAPTURE_PREVIEW ) строка

с кодом.

Обратите внимание, что это сработало на rPi с gphoto2 (2.5.20); в системе Ubuntu 16.04 LTS это не работает (gphoto2 - 2.5.9).

...