【发布时间】:2020-06-29 07:38:31
【问题描述】:
这是一个关于并发/并行性的更普遍的问题,但由于我在这些主题上没有太多经验,所以我专门针对我的用例提出问题。
我的 PC 中插入了两个摄像头。我可以通过 SDK(在我的例子中为 PySpin)控制它们。我使用这个简化的循环获取并保存图像duration 秒:
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
这里有两个问题:
- 摄像头相互遮挡。假设第一台相机的曝光时间很长。其他相机需要等待这台相机拍摄图像。
- 保存图像会减慢处理速度,理论上可能会减慢相机的帧速率。
我想做以下事情:相机应该并行拍摄图像,并且无论何时拍摄图像都应该保存图像,即当相机已经在获取下一张图像时。
正如我所说,我不熟悉并发/并行性,因此我真的不知道如何解决它。但是,我认为要解决第一个问题,我需要多处理/线程(并行),例如使用multiprocessing。但对于第二个问题,我需要一个使用 asyncio 的异步进程。
我在正确的道路上吗?如果是这样,我该如何实现?
【问题讨论】:
-
您是连续数月/数年拍摄照片,还是一个相对较短的实验?您是否计算过每台相机获取图像所需的时间?您是否计算了保存图像需要多长时间?您是否考虑过另存为通常比 PNG 更快的 JPEG?每个图像的像素大小是多少?它们是彩色图像还是灰度图像?您是否考虑过保存为视频而不是静止图像?两个相机是独立的还是它们之间必须有一些同步?
标签: python asynchronous parallel-processing