Canon EDSDK - Несколько камер - Одновременная фотосъемка

Я использую эту библиотеку: https://www.codeproject.com/Articles/688276/Canon-EDSDK-Tutorial-in-Csharp

У меня несколько камер (Canon EOS 1300D). Я загружаю их с помощью API:

CanonAPI canonAPI = new CanonAPI();
List<Camera> cameras = canonAPI.GetCameraList();

затем я делаю некоторые настройки (сохранять файлы на ПК, а не в камерах и открывать сеанс). После этого я хочу сделать сразу несколько фотографий. Вроде максимально близко друг к другу. Сейчас все, о чем я могу думать, это:

foreach (Camera camera in cameras)
{
    camera.TakePhotoAsync();
}

К сожалению, этот подход имеет небольшую задержку. Но у нескольких камер (5) эта задержка составляет несколько 200-300 мс (кажется, не помню), и это слишком много.

Еще информация: для фотосъемки я использую WPF и кнопку. Камеры подключены через USB-концентратор, у них нет SD-карты, и я сохраняю фотографии прямо на компьютер. Все работает, нужно сразу фоткать.


person Stepan    schedule 08.04.2018    source источник


Ответы (2)


Попробуйте использовать параллельный цикл

Parallel.ForEach(cameras , camera =>
{
     //Your stuff
});

будьте осторожны при использовании параллельных циклов при работе с файлами и потоками. вы можете прочитать о Параллельные циклы

person Dor Lugasi    schedule 08.04.2018
comment
Ну не слышал о таком - попробую. Подключение камер и т. д. занимает некоторое время. Спасибо! - person Stepan; 08.04.2018
comment
Спасибо, это работает намного лучше. Есть еще небольшая задержка. Я полагаю, что никогда не будет лучше. Я попробую с несколькими камерами (сейчас у меня только две для тестирования). - person Stepan; 08.04.2018
comment
@Степан, всегда будет задержка из-за того, как работает Canon SDK. Команды должны выполняться последовательно, даже с несколькими камерами. Я работаю над преемником используемой вами библиотеки, которая может помочь в вашем случае. Если вы хотите попробовать это, используйте контактную форму на моей домашней странице, вы можете найти ссылку в моем профиле stackoverflow. - person Johannes Bildstein; 09.04.2018
comment
Спасибо, сегодня я хотел сказать вам, что это не помогло. Параллельно просто делал фото в хаотичном порядке, да еще и по одному. Я посмотрю на это. - person Stepan; 09.04.2018

Чтобы обойти проблему задержки последовательного выполнения в моем проекте, я подключил провода удаленного затвора параллельно между несколькими камерами. Затем я использовал реле USB для срабатывания проводов удаленного затвора для одновременной съемки изображений и использовал событие downloadReady для загрузки изображений.

person B. P. Gleghorn    schedule 24.07.2020