首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行地获取图像,并使用Python异步保存它们

并行地获取图像,并使用Python异步保存它们
EN

Stack Overflow用户
提问于 2020-06-29 07:38:31
回答 2查看 719关注 0票数 2

这是一个关于并发/并行性的更普遍的问题,但是由于我在这些主题上没有太多的经验,所以我专门要求我的用例。

我的电脑里插了两个摄像头。我可以通过SDK来控制它们(在我的例子中是PySpin)。我使用这个简化的循环获取并保存图像,保存时间为duration秒:

代码语言:javascript
复制
count = 0
t_end = time.time() + duration
while time.time() < t_end:
    for cam in cameras:
        img_raw = cam.GetNextImage()
        img = img_raw.GetNDArray()
        cv2.imwrite('{}_img_{}.png'.format(device_name, count), img)
        img_raw.Release()
        count += 0

这里有两个问题:

  1. ,摄像机互相遮挡。假设第一台相机的曝光时间很长。其他相机将需要等待这台相机拍摄图像。
  2. 保存图像的速度正在减慢,理论上可能会减慢摄像机的帧速率。

我想做的是:相机应该并行地拍摄图像,当拍摄到图像时,也就是相机已经在获取下一个图像时,图像应该保存在图像中。

正如我所说的,我不熟悉并发/并行,因此我不知道如何处理它。但是,我认为要解决第一个问题,我需要多进程/线程(并行性),例如使用multiprocessing。但是对于第二个问题,我需要一个使用asyncio的异步进程。

我在正确的道路上吗?如果是这样的话,我如何实现这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-24 20:12:59

我可能会迟到,但我正在开发一个Python包,允许您这样做。它仍在开发中,但如果您感兴趣,请查看它:

https://github.com/jbhunt/parallel-pyspin

TLDR是指每台摄像机都在自己的进程上运行(通过多处理)。有些类处理设置初级和二级摄像机的所有棘手问题。您只需要知道摄像机的序列号,还要按照以下说明设置物理触发器:

https://www.flir.com/support-center/iis/machine-vision/application-note/configuring-synchronized-capture-with-multiple-cameras

请随时作出贡献:)

票数 1
EN

Stack Overflow用户

发布于 2020-06-29 08:27:31

非常通用的建议,没有任何代码,但可能值得一试:

实现三个线程的建议

线程1:从照相机1获取原始图像,并将(raw_image, filename_to_save_as)的元组添加到线程安全队列(from queue import Queue)中。

线程2:从照相机2获取原始图像,并将(raw_image, filename_to_save_as)的元组添加到线程安全队列(from queue import Queue)中。

线程3:处理队列并将每个原始图像保存在传递的文件名下。

请注意:您可能希望在队列中添加一个最大大小,以避免内存溢出,以防文件被压缩成为您设置中的瓶颈。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62633346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档