使用单个雷达和单个相机进行了雷视数据融合,雷达具备目标检测、目标类型识别、车流量统计、车速检测、目标跟踪等能力,将雷达采集的车辆位置坐标、车速、车辆的唯一ID号等信息,在道路地图上进行叠加展示,实现行车轨迹的实时动态展示。同时,利用高清卡口相机可获取每辆车的车牌、车型、车辆颜色等信息,将车辆轨迹数据与车牌信息进行匹配叠加,从而获取了单部雷达和视频检测范围内车辆的行驶轨迹以及对应的车牌、车型等信息。使用雷达航迹中所包含的时间与车道号信息与相机抓拍的车辆特征信息中的抓拍时间以及抓拍时车辆所处的车道号进行比对若时间差小于某一阈值且车道号相等,则进行雷视数据关联,实现将车牌抓拍摄像机获取的车辆特征信息(车牌、车型、车辆颜色等)叠加在车辆的动态航迹上,对目标进行实时跟踪定位。
关键代码如下:
void RealDataHandler::real_fusion(){
QVariantMap newData;
//QString radartime;
qDebug()<<"vecRadar.size()"<<vecRadar.size();
if(!listRealTimeCamera.isEmpty())//如果相机拍到数据进行关联
{
listRealTimeradar.append(radartime);
listRealTimeradar.append(radar_px);
listRealTimeradar.append(radar_py);
listRealTimeradar.append(radar_road);
listRealTimeradar.append(radar_vx);
listRealTimeradar.append(radar_vy);
listRealTimeradar.append(radar_carID);
// qDebug()<<cameraYear.toInt()<<cameraMonth.toInt()<<cameraDay.toInt()<<cameraHour.toInt()<<cameraMinute.toInt()<<cameraSecond.toInt() << cameraMillisecond.toInt();
// qDebug()<<radarYear.toInt()<<radarMonth.toInt()<<radarDay.toInt()<<radarHour.toInt()<<radarMinute.toInt()<<radarSecond.toInt() << radarMillisecond.toInt();
if(cameraYear.toInt() == radarYear.toInt() && cameraMonth.toInt() == radarMonth.toInt() && cameraDay.toInt() == radarDay.toInt()) {
if (cameraHour.toInt() == radarHour.toInt()) {
int tempCameraTime = cameraMinute.toInt() * 60000 + cameraSecond.toInt() * 1000 + cameraMillisecond.toInt();
int tempRadarTime = radarMinute.toInt() * 60000 + radarSecond.toInt() * 1000 + radarMillisecond.toInt();
int k = abs(tempCameraTime - tempRadarTime); //时间差值
qDebug() << "k = " << k << endl;
if (k < kTimeValue) {
int tempRoadId = radar_road.toInt();
qDebug() << "tempRoadId = " << tempRoadId << endl;
int tempdriveChan = camera_driveChan.toInt();
qDebug() << "tempdriveChan = " << tempdriveChan << endl;
if( (cameraLine - radar_px.toInt() >= 0) && (cameraLine - radar_px.toInt() < distanceValue) ) {
if (tempRoadId == tempdriveChan) {
listRealTimeFusion.append(listRealTimeradar);
listRealTimeFusion.append(listRealTimeCamera);
qDebug()<<"real_m_carsInfo.count()"<<listRealTimeFusion;
listRealTimeradar.clear();
listRealTimeCamera.clear();
//使用map格式存储融合信息
newData.insert("CarID", listRealTimeFusion[6]);
newData.insert("Px", listRealTimeFusion[1]);
newData.insert("Py", listRealTimeFusion[2]);
newData.insert("Vx", listRealTimeFusion[4]);
newData.insert("Vy", listRealTimeFusion[5]);
newData.insert("RoadId", listRealTimeFusion[3]);
newData.insert("recordTime", listRealTimeFusion[0]);
newData.insert("snapFirstPicTime", listRealTimeFusion[7]);
newData.insert("carNum", listRealTimeFusion[8]);
newData.insert("carType", listRealTimeFusion[9]);
newData.insert("driveChan", listRealTimeFusion[10]);
newData.insert("carDirectiontype", listRealTimeFusion[11]);
newData.insert("carSpeed", listRealTimeFusion[12]);
newData.insert("PilotSafebelt", listRealTimeFusion[13]);
newData.insert("IllegalType", listRealTimeFusion[14]);
newData.insert("byPendant", listRealTimeFusion[15]);
newData.insert("CopilotSafebelt", listRealTimeFusion[16]);
newData.insert("PilotCall", listRealTimeFusion[17]);
newData.insert("CarColor", listRealTimeFusion[18]);
newData.insert("VehicleLogoRecog", listRealTimeFusion[19]);
real_m_carsInfo.append(newData);
//qDebug()<<"real_m_carsInfo.count()"<<real_m_carsInfo.count();
//qDebug()<<real_m_carsInfo;
listRealTimeFusion.clear();
}
}
}
}
}
}
}
雷达检测到目标的动态信息和相机检测到目标的特征信息存放在QVariantMap
中,最后进行实时读取并在界面显示。