摄像头模块调用采用opencv-python读取端口的方式进行,其中Apollo搭载两个单目相机,端口号分别为0/2,可以采用如下的方式调用端口并读取数据
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
# get a frame
ret, frame = cap.read()
# show a frame
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
要注意的是,apollo存在端口占用的问题。 apollo cyber_launch (命令行或dreamviewer开启摄像头后), 本地自定义代码将无法读取到端口信息,需要关闭对应的端口 可以进入 cyber_monitor 查看调用情况
我们的工作主要参考了YOLOv5实时目标检测算法,并在此基础上进行优化 相关的代码部署在 apollo/perception/yolov5 目录
检测模型的训练基于KITTI数据集进行,考虑到该开源数据集历史相对悠久(~10year),且采集自国外场景。当前环境下的一些视觉特征(车辆款式、行人穿搭等)与数据集略有出入,因此检测可能产生误检 -.-
读取摄像头并进行实时检测 & 展示
cd \project_dir\
conda activate base
sh detect.sh
or python detect.py --source 0 --weights xxx
打开Dreamviewer界面
cd apollo
./apollo.sh # 进入docker环境
bash ./scripts/bootstrap.sh
如果需要关闭Dreamviewer
bash./scripts/bootstrap.sh stop
在浏览器打开 http://localhost:8888/
选择 --vehicle-- 和 --map--
启动camera记录
在Module Controller 启动所需要的Camera模块和Recode模块
操控平台运动,此时已经开始记录数据
关闭Recode模块,终止记录,记录的数据会保存至apollo/data下,格式类似于example.record.00000
基于上述生成的记录文件,可以从中提取出图像信息,并用于进一步的离线分析
conda activate base
pip3 install cyber_record record_msg
这里采用了第三方解析模块,项目地址, 该模块在下面具体介绍
保存图片
from record_msg.parser import ImageParser
image_parser = ImageParser(output_path='../test')
for topic, message, t in record.read_messages():
if topic == "/apollo/sensor/camera/front_6mm/image":
image_parser.parse(image)
# or use timestamp as image file name
# image_parser.parse(image, t)
Recode记录的图片将会以逐帧形式保存至output_path,便于进一步分析