通过 EDSDK 并行控制佳能相机
Parallel control of canon cameras through EDSDK
我有以下问题:我的电脑连接了两个EOS550D摄像头。在我的程序中,我有基于 QThread 的类,用于向摄像机发送命令。区分两个摄像头没有问题,两者都可以控制,但是尽管命令是并行发送的 - 第二个相机仅开始工作之后先对焦并完成拍摄。是 SDK 限制还是我在做出什么事了?我知道,这项任务可以通过使用两台PC和客户端\服务器架构来完成,但我想在一台PC上尝试一下)
EDSDK 和相机在控件类中初始化,相机的会话在线程类对象中进行管理。征集线程:
void CameraController::testShot()
{
//some variable checks and path set-ups
leftCameraThread->setPath(path1);
leftCameraThread->start();
rightCameraThread->setPath(path2);
rightCameraThread->start();
}
线程运行() 函数:
void CameraControlThread::run()
{
EdsSendCommand(_camera, kEdsCameraCommand_TakePicture , 0);
}
EDSDK v2.10
您可以在 SDK 2.11 中控制多个摄像头。 第 26 页
阅读 EDSDK 文档,它声明您一次只能打开一个会话,这是 SDK 限制(2.10,第 25 页)
EDSDK 文档(版本 2.15,EDSDK_API.pdf,第 2.10 节)指出"请注意,EDSDK 不支持同时使用多个摄像机打开会话"
但这可能是不正确的,正如原始海报所述,很有可能使用许多相机打开会话、发出命令、拍照、检索图像等。
OP的问题是关于同时触发多个摄像机。每次调用kEdsCameraCommand_TakePicture都会将触发器发送到单个摄像机,该调用需要一些时间。因此,如果您迭代所有摄像机并向每个摄像机发送kEdsCameraCommand_TakePicture,则摄像机将不会同步触发。例如,以16個EOS 1dx為例,拍攝所有影像需要4秒。我还没有找到将触发器同时发送到 SDK 中的多个相机的方法。(有人吗?除了SDK中的软件限制外,可能无法通过USB连接实现完美同步。在多台摄像机上实现同步的推荐方法是使用带有摄像机触发连接器的外部同步信号。
然而这个问题有点老了,我找到了一次控制多个相机的解决方案,限制只是在单个进程中控制多个相机,但是可以从多个进程控制多个相机(每个进程一个相机)。
- 了解 GLM- openGL 中的相机转换
- 控制允许动态运行c++的并发操作数
- 从控制台中删除最后打印的元素
- OpenGL相机和相机空间转型的困惑
- 是否可以使用if constexpr删除控制流语句
- 无法在windows控制台中为C++程序提供必要的输入
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 控制到达非空函数clang(-Wreturn-type)的末尾
- 查找 GCD:并非所有控制路径都返回值
- 通过 API 控制 DJI 相机
- 将相机数据从服务器实时流式传输到客户端
- 禁止在控制台上记录谷神星
- 是否可以使用一个类来控制 C++ 中另一个类的对象?(阿杜伊诺)
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 使用C 控制IP相机的PTZ功能
- 直接相机旋转的错误控制
- 通过 EDSDK 并行控制佳能相机
- 使用直接显示控制相机,并使用打开的CV捕获图像
- 如何在媒体基金会中控制相机捕获显示
- 如何在用户模式应用程序C++中访问AVStream扩展相机控制属性