0

我以前使用过 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

后者捕获的预览图像要小得多,并且对于某些应用程序来说很棒;您基本上可以用数码单反相机制作网络摄像头。

但是,在为 python 安装 gphoto2 库之后,这(应该是等效的)失败:

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

带有消息“gphoto2.GPhoto2Error:[-6] 不支持的操作”

如果你选择

file_path = camera.capture(gp.GP_CAPTURE_IMAGE)

但是,这行得通。为什么我们可以从命令行而不是 Python 版本中获得工作预览的任何原因?

gp.__version__返回 2.2.2 ,并匹配https://github.com/jim-easterbrook/python-gphoto2上的最新版本

4

2 回答 2

1

看看 gphoto2 程序源。您可能能够找出--capture-preview命令调用的 libgphoto2 函数的序列。然后,您应该能够在 Python 中重现它。

于 2020-05-07T07:58:17.720 回答
0

我深入研究了 libgphoto2 源代码。我拥有的相机属于 PTP 世界;我相信这是在camlibs/ptp2/library.c 中,camera_capture_preview 函数所在的位置。尼康和索尼的 Python 代码都失败了。代码中似乎确实有两件事指出了可能的问题;在尼康部分,它会尝试20次以获得预览;在索尼部分,有关于时间的评论。但是,命令行有效,因此问题可能不存在。

我也查看了 Python 中的 gphoto2 实现。好消息是https://github.com/jim-easterbrook/python-gphoto2/blob/master/examples/preview-image.py的代码可以工作,所以如果有人想用 Python 做这个,他们可以替换这

file_path = camera.capture(gp.GP_OPERATION_CAPTURE_PREVIEW) 行

与那里的代码。

请注意,这适用于带有 gphoto2 (2.5.20) 的 rPi;在 Ubuntu 16.04 LTS 系统上,此操作失败(gphoto2 为 2.5.9)。

于 2020-05-07T15:34:23.850 回答