Bootstrap

自动驾驶ADAS算法--后视碰撞预警算法实现和测试demo的exe

下载测试工程后可以根据《自动驾驶ADAS算法--测试工程环境搭建-CSDN博客》完成环境的搭建。

测试的exe程序,无需解压码就可以体验算法测试效果(代码原工程非免费介意无下载)

通过网盘分享的文件:后视碰撞预警
链接: https://pan.baidu.com/s/1j6FZKLPLN2RN9SdwZso0uA 提取码: vdh3
1、压缩包解压后显示如下所示

测试文件包括:可执行的exe文件、测试的视频等。

2.双击exe就可以运行测试程序,测试程序界面显示如下所示:

测试效果如下所示:

虚拟视频测试效果图片

实车测试效果图片

虚拟视频测试效果视频

自动驾驶ADAS算法--基于yolo的后视图像碰撞预警虚拟测试结果

实车测试效果视频

自动驾驶ADAS算法--基于yolo的后视图像碰撞预警实车测试结果

部分代码实现如下所示:

// TODO: 在此添加控件通知处理程序代码
int c = 0;
int frameRate = 10;
Mat frame;
namedWindow("video-demo", WINDOW_AUTOSIZE); 
VideoCapture capture;
//连接视频
capture.open("晴天后视碰撞.avi");
if (!capture.isOpened()) {
	printf("could not load video data...\n");
}

int frames = capture.get(CAP_PROP_FRAME_COUNT);//获取视频针数目(一帧就是一张图片)
double fps = capture.get(CAP_PROP_FPS);//获取每针视频的频率
// 获取帧的视频宽度,视频高度
Size size = Size(capture.get(CAP_PROP_FRAME_WIDTH), capture.get(CAP_PROP_FRAME_HEIGHT));
cout << frames << endl;
cout << fps << endl;
cout << size << endl;
VideoWriter writer("result.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, Size(JS_IMG_W, JS_IMG_H));

int alarmFalg = 0;
int alarmIndex = 0;
//step2:load labels
js_yolo_loadLabels("coco.names");
int FrameNum = 0;
//step-3:load onnx model
std::string onnxpath = "yolo11n.onnx";
js_yolo_loadModes(onnxpath);
js_initObjList(&g_ttc_objlist_B);
js_initMultObjList(&g_ttc_objlist_Mult_B);
for (;;)
{
	//将视频转给每一张张图进行处理
	capture >> frame;
		//step-5:get infer result
		int64 start = cv::getTickCount();
		int w = frame.cols;
		int h = frame.rows;

		if (w > 0 && h > 0)
		{		
			//运行函数
			js_yolo_run(frame, w, h);
			// NMS
			js_yolo_NMS(); //js_yolo_NMS(frame);
			
			//初始化算法结构体 
			js_yolo_initObj(&g_ttc_objlist_B);


			float data_TOP_A[9], data_TOP_A_T[9];
			js_3Dpointf Pdst;
			js_pointf PsrcLF3, PsrcRF3, PsrcLF1, PsrcRF1, PsrcLF2, PsrcRF2;
			JS_Parameter para;
			js_fc fc;
			js_init_Parameter(&para);
			js_initfc(&fc);
			js_initAngle(data_TOP_A, para.rx, para.ry, para.rz);
			js_initAngleT(data_TOP_A, data_TOP_A_T);
			for (int i = 0; i < 9; i++)printf("%f ", data_TOP_A_T[i]);

			//多帧跟踪 g_ttc_objlist_Mult_B
			int ttflag = 0;
			js_MultTrack(g_ttc_objlist_B, &g_ttc_objlist_Mult_B, 0.2);
			js_getSpeed_ttc_wordp(&g_ttc_objlist_Mult_B, data_TOP_A_T, para, fc, 33);
			
			
			putTextZH(frame, "      金书世界      \nwww.jinshushijie.com", cv::Point(10, 20), Scalar(255, 0, 0), 40, "楷体", false, false);			//输出文字到图像上
			FrameNum++;
			writer << frame;
			//视频播放完退出
			if (frame.empty())break;
			imshow("video-demo", frame);
			//在视频播放期间按键退出
			if (waitKey(33) >= 0) break;
		}

}
//释放
capture.release();
g_yolo_session_options.release();
js_yolo_release();

;