Python 中的 gphoto2 vs 命令行;无法在 Python 中捕捉预览
gphoto2 in Python vs command line; not able to capture preview in Python
我之前使用过 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 制作网络摄像头。
但是,在为 python 安装 gphoto2 库后,这个(应该是等效的)失败了:
import gphoto2 as gp
camera = gp.Camera()
camera.init()
file_path = camera.capture(gp.GP_OPERATION_CAPTURE_PREVIEW)
与消息 "gphoto2.GPhoto2Error: [-6] Unsupported operation"
如果你选择
file_path = camera.capture(gp.GP_CAPTURE_IMAGE)
但是,这有效。我们可能从命令行而不是 Python 版本中获得工作预览的任何原因?
gp.__version__
returns 2.2.2 ,并匹配 https://github.com/jim-easterbrook/python-gphoto2
的最新版本
查看 gphoto2 程序源。您也许能够找出 --capture-preview
命令调用的 libgphoto2 函数序列。然后您应该能够在 Python.
中重现它
我深入研究了 libgphoto2 源代码。我拥有的相机属于 PTP 世界;我相信这是在 camlibs/ptp2/library.c 中,camera_capture_preview 函数所在的位置。 Python 代码在 Nikon 和 Sony 上均失败。代码中似乎确实有两件事指向可能的问题;在尼康部分,它将尝试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)。
我之前使用过 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 制作网络摄像头。
但是,在为 python 安装 gphoto2 库后,这个(应该是等效的)失败了:
import gphoto2 as gp
camera = gp.Camera()
camera.init()
file_path = camera.capture(gp.GP_OPERATION_CAPTURE_PREVIEW)
与消息 "gphoto2.GPhoto2Error: [-6] Unsupported operation"
如果你选择
file_path = camera.capture(gp.GP_CAPTURE_IMAGE)
但是,这有效。我们可能从命令行而不是 Python 版本中获得工作预览的任何原因?
gp.__version__
returns 2.2.2 ,并匹配 https://github.com/jim-easterbrook/python-gphoto2
查看 gphoto2 程序源。您也许能够找出 --capture-preview
命令调用的 libgphoto2 函数序列。然后您应该能够在 Python.
我深入研究了 libgphoto2 源代码。我拥有的相机属于 PTP 世界;我相信这是在 camlibs/ptp2/library.c 中,camera_capture_preview 函数所在的位置。 Python 代码在 Nikon 和 Sony 上均失败。代码中似乎确实有两件事指向可能的问题;在尼康部分,它将尝试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)。