实现yolov3网络调用含有驱动程序的双目相机,实现实时目标检测和距离输出

最终目标:实现百米内的目标检测和深度测量(计划使用在道路的目标检测)

前段时间一直在调试yolov3和相机接口问题.如果使用普通的相机,yolov3可以直接调用,实现物体识别的功能.这个我也写了一篇文章. 但是不能实现测距的功能, 我购买的这个双目相机,公司声称可以测100m以内的物体,所以买来打算调试一番.对于一个车辆工程的算法小白,这两个代码中既有c语言,又有c++,调试过程是痛苦的,结果是满意的,最后经过自己将近一个月的努力,最终实现了所有预想的功能,但是,效果目前还需验证.
目前还没有去道路上测试,只是在实验室试了一下,下面是效果图,视频回头补上.
目前还存在的两个问题:
1)相机快速抖动时,无法识别出物体.(后来通过代码优化基本解决了)
2)距离精度有时候不太好.
下面这一个效果就是不太好,明显有一些错误.
相机实例代码功能:通过鼠标框出想要测距的物体,然后返回物体对应的距离
yolov3功能:识别出预训练包含类别的物体,并框选出来.
调试整体思路
1)找到双目相机基础代码中的数据输出代码段,主要包括深度信息和RGB信息。
2)找到目标识别源代码中接收RGB图像的代码段,我使用的目标识别代码是yolov3,可以直接搜索Darknet官网下载目标识别代码,现在出来yolov5了,可以试一试。
3)将1中找到的双目相机RGB数据输入到2中找到的目标识别代码中接收RGB的代码,两者结合。
4)找到目标识别源代码中输出障碍物坐标框的代码段。
5)找到双目测距代码中计算障碍物深度的代码段。
6)将4中得到的障碍物框依次输入到5中的代码段中,得到目标框中障碍物的深度。
7)找到目标识别网络中显示障碍物种类的额代码段,将深度值添加到里面,一起显示出来。

注释:最近需要代码的人有点多,其实这个代码是我当时哪里有问题就改哪里,所以里面会有很多地方很乱,有些地方也比较多余,今天大致将修改思路整理一下,后续有时间会一点一点将过程写出来。
有需要代码的留下邮箱,我看到的话会给你们发过去。
附件1.代码中双目测距代码的流程图,有问题的地方欢迎大家交流学习。
在这里插入图片描述
附件2(整个过程的流程图)
在这里插入图片描述代码链接自取:
链接: https://pan.baidu.com/s/1h15pL0-xn__L8pnJYrlbEQ
密码: 9b8l

  • 20
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 130
    评论
您可以使用以下步骤来实现使用 Python 调用 YOLOv5 权重进行实时相机检测: 1. 首先,您需要安装 YOLOv5。您可以在 https://github.com/ultralytics/yolov5 上找到 YOLOv5 的源代码和安装说明。 2. 安装所需的依赖项。在终端或命令提示符中,导航到 YOLOv5 的根目录,并运行以下命令: ``` pip install -r requirements.txt ``` 3. 下载预训练的权重文件。您可以从 https://github.com/ultralytics/yolov5/releases 下载 YOLOv5 的预训练权重文件。将权重文件保存到 YOLOv5 的根目录下。 4. 创建一个 Python 脚本,并导入所需的库: ```python import cv2 import torch from models.experimental import attempt_load from utils.general import non_max_suppression, scale_coords, plot_one_box from utils.torch_utils import select_device ``` 5. 加载模型和权重: ```python device = select_device('') model = attempt_load('yolov5s.pt', map_location=device) stride = int(model.stride.max()) names = model.module.names if hasattr(model, 'module') else model.names ``` 6. 设置输入图像大小并打开相机: ```python img_size = 640 cam = cv2.VideoCapture(0) cam.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cam.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) ``` 7. 循环读取相机帧并进行检测: ```python while True: ret, frame = cam.read() if not ret: break img = torch.from_numpy(frame).to(device) img = img.permute(2, 0, 1).float().unsqueeze(0) / 255.0 pred = model(img, augment=False)[0] pred = non_max_suppression(pred, 0.4, 0.5) for det in pred[0]: if det is not None: det[:, :4] = scale_coords(img.shape[2:], det[:, :4], frame.shape).round() for *xyxy, conf, cls_id in reversed(det): label = f'{names[int(cls_id)]} {conf:.2f}' plot_one_box(xyxy, frame, label=label) cv2.imshow('YOLOv5', frame) if cv2.waitKey(1) == ord('q'): break cv2.destroyAllWindows() ``` 8. 运行脚本并查看实时检测结果。 请注意,上述代码仅为示例代码,您可能需要根据您的具体情况进行调整。此外,确保已经安装了所需的库和依赖项,并且摄像头可以正常工作。
评论 130
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值