我正在寻找有关在我的计算机视觉项目中管理大量数据的概念性建议。我遇到了麻烦a)概念化和b)实现协调这个大数据流的概念,既作为摄像机的输入,也来自摄像机。
所以我必须处理的数据可分为五个独立的“流”,我称之为:
原始帧(从相机直接输入) 目标图像(从前一图像流中获取的子帧) 时间戳(原始帧) 车辆姿态数据(GPS,车身角度等从无线串口连接到车辆) 态度数据时间戳
如果按顺序完成这一步骤,一般流程将是:
Frame = grabInputFrame();
TargetsVector = searchForTargets(Frame);
VehicleData = getDataFromVehicle();
for each Target in TargetVector (
targetData = processData(Target, VehicleData);
updateTargetLog(targetData);
}
所以这是交易:我试图通过线程来做到这一点,因为算法是处理器密集型而且没有顺序相关(我的意思是我不需要颜色数据来获得GPS的coords目标)。但是,我确实需要协调带有目标的图像和带有这些图像的时间戳,这样我就可以将正确的车辆数据用于正确的图像等。
我的一位朋友建议采用关系数据库方法,但我使用的是C ++。我想知道的是,有没有办法在C ++中模仿关系数据库(将密钥与数据相关联,如时间戳或与数据或目标图像关联的目标ID)?连接到SQL DB会使这更容易管理吗?这样做会带来显着的性能损失吗?这里最重要的一点是,无论我做什么,我都必须能够锁定共享数据,以便我可以安全地多线程。
我希望那些在这种分层数据结构方面有一定经验的人可以对我的情况有所了解。我提前感谢你的想法和批评。
答案 0 :(得分:0)
OpenMP可能对此类问题有所帮助,为锁和原子操作提供了内置函数。由于您有5个并行操作,因此可以创建5个线程并基于threadId执行不同的操作。