通过 EDSDK 并行控制佳能相机

Parallel control of canon cameras through EDSDK

本文关键字:相机 控制 EDSDK 并行 通过      更新时间:2023-10-16

我有以下问题:我的电脑连接了两个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连接实现完美同步。在多台摄像机上实现同步的推荐方法是使用带有摄像机触发连接器的外部同步信号。

然而这个问题有点老了,我找到了一次控制多个相机的解决方案,限制只是在单个进程中控制多个相机,但是可以从多个进程控制多个相机(每个进程一个相机)。