虚怀若谷 发表于 2024-4-18 16:22:32

基于行空板的opencv车辆检测装置

本帖最后由 虚怀若谷 于 2024-4-18 17:04 编辑

##基于行空板的opencv车辆检测装置
车辆检测技术作为物体检测中的一个重要内容,被用于自动驾驶、交通安全等各种领域,让车牌识别,交警线上智能判罚成为可能,为智慧交通系统奠定了基础。本教程我们就来学习如何利用现成的模型,结合行空板、USB摄像头检测并拍摄车辆。

![](https://files.mdnice.com/user/56048/f58ee435-7eb0-4a04-b230-ffc80530e5b5.png)

## 任务目标
摄像头模拟电子眼,检测车辆。当检测到有车驶来时,就对该画面进行抓拍,并将抓拍的照片保存到行空板的系统文件里。

## 知识点
1. 掌握USB摄像头的使用方法。
2. 了解物体检测技术。
3. 了解OpenCV。





## 材料清单
**硬件清单:**


| 硬件 | 图片 | 链接 |
| :---: | :----: | :----: |
| 行空板x1 | ![](https://files.mdnice.com/user/56048/d1347a1f-ad7d-4680-bb38-2fe67d360089.png) | [链接](https://www.dfrobot.com.cn/goods-3404.html) |
| USB摄像头 x1 | ![](https://files.mdnice.com/user/56048/f2e4098c-d0cf-4106-9c12-fb1dfb12e7ad.png) | [链接](https://www.dfrobot.com.cn/goods-2996.html) |
| 白色硅胶绞线 x1 | ![](https://files.mdnice.com/user/56048/c428cc71-65f6-4457-919a-5f6f54e756bd.png)| [链接](https://ws.dfrobot.com.cn/FuI-rrCyXIhly7chLYGnK5TTaqHV?imageView2/1/w/227/h/227) |      
| Type-C USB线x1 | ![](https://files.mdnice.com/user/56048/c7b1bbe7-d630-48e2-8bd4-b16e7cc3e59c.png) | [链接](https://www.dfrobot.com.cn/goods-2977.html) |

      


**软件使用:**Mind+编程软件 x1

下载地址:(https://mindplus.cc/)

## 动手实践
车辆检测装置主要用于抓拍车辆,即如果摄像头检测到车辆就对该画面进行抓拍,然后将抓拍的照片保存在行空板的系统文件里,后期可以调取里面的照片筛选违规车辆。接下来,通过两个简单的小任务来学习如何制作项目。

**任务一:显示实时视频**

在此项任务中,打开摄像头,并将摄像头检测到的画面显示在行空板屏幕上。

**任务二:完成车辆检测并拍摄功能**

在任务一的基础上,加上车辆检测功能,当检测到汽车时,就在终端区域输出“检测到车辆”的信息,对该画面进行抓拍,并将抓拍的照片保存到行空板的系统文件里。

### 任务一:显示实时视频
#### 1.硬件连接
将USB摄像头连接到行空板上,如下图。硬件连接成功后,使用USB线将行空板连接到计算机。

![](https://files.mdnice.com/user/56048/14a46bd4-52e1-41d7-9989-76e49596f2fe.png)

#### 2.软件准备
1. 打开Mind+,按照下面图示完成软件准备过程。


![](https://files.mdnice.com/user/56048/349a3744-bbaf-424b-b492-1672f8f8d5b6.png)

2. 点击“扩展”,在用户库的搜索框输入地址“(https://gitee.com/chenqi1233/ext-object_recognition)”然后按下回车按键搜索“物体检测”的库,搜索完成后点击“物体检测”库完成添加。


![](https://files.mdnice.com/user/56048/ae0a950a-9a2e-4ca1-ab74-45e6cc6cc6d9.png)

#### 3.编写程序
首先观察一下,任务一的界面上都包含哪些元素?标题,显示框,视频内容显示区域,效果如下图。

![](https://files.mdnice.com/user/56048/2ee5d540-f99b-4ed7-ba2f-763e62ef7397.png)

1. UI界面设置,首先利用**“显示文字”**指令将对象“标题”的内容显示在行空板屏幕上方。并添加视频显示区域。


![](https://files.mdnice.com/user/56048/55e4f09d-c9b3-4d23-941e-a42b83de8ca6.png)

2. 想要显示实时的视频画面,就需要使用**“初始化摄像头”**指令打开摄像头,并设置该摄像头的设备号为0。

![](https://files.mdnice.com/user/56048/c84f339f-93ac-484b-87f2-5a37a2b57168.png)

3. 现在摄像头已经打开了,接下来我们可以使用**“从VideoCapture对象(vd)中抓取下一帧(img)以及状态(ret)”**指令将捕获到的画面存入到 ‘img’ 这个变量中,然后使用**“对象名(img_src)将图片(img)裁剪为宽()高()”**指令将‘img’变量里的图像裁剪成宽为240,高为270的新图像,并新图像保存在 ‘img_src’ 变量中,以供后续处理和分析使用。

![](https://files.mdnice.com/user/56048/a8466115-ef26-42e0-9ccd-f928114cc9f5.png)
4. 上面我们已经学习了如何捕获画面和裁剪画面,接下来,我们将完成画面实时显示功能。首先导入一张白底的背景图到文件系统中,然后在(0,50)的坐标位置显示这张背景图。

![](https://files.mdnice.com/user/56048/7ebb98a6-4686-470f-8fbb-80cca45adadb.png)



5. 因为OpenCV图像中的默认颜色格式是BGR,想要在行空板屏幕上显示画面,就需要将颜色格式转换成RGB,使用**“对象名(imgROI)将图片(img_src)使用BGR和RGB之间进行转换”**指令将‘img_src’ 变量中的图像转换成RGB,并将转换后的图像保存到‘imgROI’变量中。


![](https://files.mdnice.com/user/56048/f819d628-9401-471b-8722-7dce5799b82a.png)

6. 通过上面步骤,我们已经完成了图像颜色格式转换、图像尺寸剪裁和图像捕获。现在,只要利用**“更新图片”**就可以将捕获到的图像显示在显示框区域内。

![](https://files.mdnice.com/user/56048/22ecc87e-06cc-4834-8890-666b733e7506.png)

#### 4.程序运行
检查行空板是否已连接到mind+,无误后,点击右上角的运行按钮,程序运行成功后,行空板屏幕上会显示实时画面。
![](https://files.mdnice.com/user/56048/0f074cd9-526e-405e-8697-57662377b4fc.png)

## 任务二:完成车辆检测功能
前面我们讲过,在任务一的基础上,加上车辆检测的功能,当检测到汽车就在终端区域输出“检测到车辆”的信息,并抓拍车辆图片保存到行空板的系统文件里。

### 1.准备工作
按照任务一的**“硬件连接”**与**“软件准备”**连接好行空板并准备好mind+软件。

### 2.编写程序
(1)要实现车辆检测的功能,需要提前加载车辆数据模型。提前将汽车数据模型导入到文件系统中的“项目中的文件”,步骤如下:

![](https://files.mdnice.com/user/56048/89f05337-dcf1-4f6f-a848-2a3fafd9972c.png)

注意:可直接使用教程提供或者去网上查询下载汽车数据模型(后缀为 .xml 的文件),下载成功后,注意记录模型名称,如“haarcascade_car.xml”。

(2)如何通过程序加载模型?利用**“创建级联分类器(casecadeCar)”**指令创建一个空的级联分类器对象。由于创建的级联分类器对象是空的,无法进行物体检测。需要通过**“对象名(casecadeCar)加载 [汽车数据模型] 模型”**指令加载一个训练好的汽车检测模型文件。

![](https://files.mdnice.com/user/56048/9276454c-6d66-4108-b4f2-d943398afaf3.png)

(3)如何确保模型加载成功呢?利用“对象名(casecadeCar)是否加载完成”指令来检查分类器是否已经加载了一个训练好的分类器模型。

![](https://files.mdnice.com/user/56048/be8fb85a-058c-45a9-94be-b9d05d914b83.png)

(4)获得识别结果,使用“对象名(casecade)输入检测图像(img)返回检测结果信息”指令完成对‘img’变量里的图像中的物体检测。为了方便后续处理和分析,我们需要创建变量“ car ”用来存储检测结果。

![](https://files.mdnice.com/user/56048/a75cccd1-7f73-4098-bdf0-ee3c0b232289.png)

(5)运行步骤(4)的代码,观察终端区域的运行结果你会发现,当摄像头检测到汽车时,会输出一串数字类型的数据,未检测到汽车时,输出的是一个“()”。因为检测到汽车,输出的是一串数字,所以我们可以通过判断**变量car**数据的长度,来判断画面中是否有汽车。当**变量car**数据的长度>0时,说明画面中检测到汽车了,这时终端区域就输出“检测到车辆”。

![](https://files.mdnice.com/user/56048/f79f6298-16cc-4ae0-8bb0-0e39a22376e2.png)

(6)如何抓拍并保存图片?利用 保存图片(img_src)到(“Mind+.png”)指令就可以将图片保存下来,当然我们也可以使用变量,给不同的图片起不同的名字。完整参考程序如下:

![](https://files.mdnice.com/user/56048/00b5281c-07b1-4dd0-aa43-5a823c1b0808.png)

### 3.程序运行
点击右上角的运行按钮,程序运行成功后,你会看见,当摄像头检测到是汽车时,终端区域输出“检测到有车辆”。

| 情况 | 摄像头 | 终端 |
| :---: | :----: | :----: |
|检测到车辆| ![](https://files.mdnice.com/user/56048/13552ace-0fec-455e-9ffe-dc42495ad606.png) | ![](https://files.mdnice.com/user/56048/b992cf98-4789-4336-b55a-186e7c83aec4.png) |
      
如何查看行空板中存的图片呢?

连接行空板10.1.2.3远程终端后,可以看到在文件系统的文件目录下,会多出一个名为“行空板中的文件”。

![](https://files.mdnice.com/user/56048/efafb72a-013e-41ad-8729-55a761273f0b.png)

点击目录中的mindplus文件夹,然后再点击cache文件夹,找到对应的Mind+文件,如“车辆检测.mp”文件的保存位置。点击“车辆检测.mp”,可以看到抓拍的图片文件分别为:1.png、2.png、3.png......。

![](https://files.mdnice.com/user/56048/0d8673d9-27e0-4b28-bad0-89d438c6db09.png)

其中1.png、2.png、3.png......就是从摄像头中获取的图片。右击“xx.png”,选择“下载文件到电脑”,将图片下载到电脑上。记住保存的路径,通过电脑就可以查看摄像头拍摄的图片了。


![](https://files.mdnice.com/user/56048/72a44d57-b3e5-463d-9224-6510b4614409.png)





罗罗罗 发表于 2024-4-24 21:20:02

easy猿 发表于 6 天前

666

535763863 发表于 4 天前

理论上是不是改一下代码区的 xml文件,可以实现任意模型的物体检测?
页: [1]
查看完整版本: 基于行空板的opencv车辆检测装置