基于智能视觉物联网的道路车辆监控系统的设计与研究
基于智能视觉物联网的道路车辆监控系统的设计与研究
(1)根据智能视觉传感节点的特点,分析和选取了合适的ARM处理器、摄像机和无线路由器等硬件设备,设计出处理器的外围接口,并搭建了智能道路车辆监控系统的硬件平台。 20190816170344
(2)研究嵌入式Linux上的算法和摄像机UVC驱动的移植,稳定地实现了论文中的图像处理算法。在Linux开源视频流传输项目的基础上,完成了将ARM上采集的视频流通过WIFI网络传输到PC客户端显示。PC客户端采用MFC进行用户界面设计,并提供了数据库查询管理功能。具有良好的人机交互界面。(3)研究车辆视觉标签提取算法。通过摄像机标定、中值滤波和线性灰度拉伸等经典算法对车辆图像进行了良好的预处理。在车牌定位中,提出了通过膨胀裁剪和颜色统计算法分别对车牌区域进行粗选和精选。在字符识别中,提出了通过Hu不变矩和模板匹配算法分别对车牌字符进行粗识别和精识别。取得了很好的识别效果,具有较高的鲁棒性。
关键词:智能视觉物联网;智能交通;嵌入式Linux;视觉标签;Hu不变矩
MJPG-streamer是用于从摄像机采集图像,把它们以流的形式通过基于ip的网络传输到浏览器如Firehox,Cambozola,VLC播放器,Windows的移动设备或者其他拥有浏览器的移动设备。它可以利用某些摄像机的硬件压缩功能来降低服务器CPU的开销。它为嵌入式设备和一些常规服务器提供了一个轻量且更少CPU消耗的方案,因为它无需为视频帧压缩浪费大量的计算效率。MJPG-streamer包含许多Input-Plugins和Output-Plugins,它就像一个粘合剂,可以根据需要将输入输出插件连在一起,剩下的工作就交由插件来搞定了。
MJPG-streamer是一个很好的Linux下开源项目,论文需要使用的两个重要插件分别是input_uvc和output_http。可以将摄像机采集到的视频流通过网络发送到web浏览器。这两个插件的核心也正是前面介绍的V4L2接口、Socket编程和多线程编程。下面分别介绍一下论文使用的两个重要插件:
(1)input_uvc
如其名,此插件可从兼容Linux-UVC V4L2标准的设备中获取视频流。它的源码是基于开源项目luvcview,当然做了很多方面的修改。现在很流行这种输入插件,得益于它能够在不增加CPU负载的情况下以大于15fps速率来将视频编码成960x720像素以上大小。
(2)output_http
这个插件绝对是个全版本的符合HTTP1.0标准的webserver。它能够将input_uvc插件获取的视频流通过http协议发送出去。更重要的是,可以允许多个客户端同时访问。它的原理是一旦有客户端连接请求,马上又创建一个新的线程,用来专门处理该连接请求,从而实现了服务器可以一直监听客户端请求,即构成了并发服务器。
但是在论文系统特定的情况下这个工程不能达到所要的需求,所以需要对源码进行修改,即给MJPG-streamer的输出发送线程中添加基于OpenCV的图像处理算法,这样使得在客户端可以收到车辆的视觉标签数据并写入数据库。经过修改后的软件运行流程图如图3.11所示。
3.3.1 WebBrowser控件的使用
(一)WebBrowser控件概述
WebBrowser控件是微软公司提供的COM组件之一,使用可以WebBrowser控件可以在 Windows 窗体客户端应用程序中显示网页。此外,可以使用该控件将基于 DHTML 的用户界面元素添加到窗体中,还可以隐瞒这些元素在 WebBrowser 控件中承载的事实。通过这种方法,可以将 Web 控件和 Windows 窗体控件无缝地整合到一个应用程序中。
(二)WebBrowser控件使用方法
编写此客户端需要使用到WebBrowser控件的两个主要功能分别是:浏览网页、缩放网页。具体方法如下:
(1)在COM组件中添加Microsoft Web Browser控件。
(2)添加一个ActiveX控件中的MFC类,然后还是选择Microsoft Web Browser控件。
(3)添加一个和Webbrowser控件相关联的成员变量,以便于操作控件,比如变量名字定为m_web。
(4)执行一下语句即可浏览指定网页:
m_web.Navigate("www.baidu.com", NULL, NULL, NULL, NULL);
(5)因为网页的大小和客户端上所需要显示大小不一定相同,所以需要
缩放网页以适应客户端窗口大小。在这里需要给控件添加一个网页加载完毕事件,待网页加载完毕后在事件中执行缩放命令即可。具体实现代码如下:
BEGIN_EVENTSINK_MAP(CwebDlg, CDialog)
ON_EVENT(CwebDlg,IDC_EXPLORER1,259,CwebDlg::DocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT)
END_EVENTSINK_MAP()
void CwebDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
{
// TODO: 在此处添加消息处理程序代码
int zoom = 30;
CComVariant varZoom((int)zoom); // nZoom是要设置的缩放比例
m_web.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DODEFAULT, &varZoom, NULL);
}
3.3.2 视觉标签库的建立
本系统需要建立道路车辆的视觉标签数据库,同一车辆在不同时刻不同卡口的图片对应同一个视觉标签。视觉标签库的建立对相关部门进行实时监控车辆行踪和事后查询具有非常重要的意义。下面介绍了数据库技术和使用方法:
(一)数据库技术概述
在现代软件开发中,数据库技术被越来越广泛地应用。很多项目都存在着大量的数据需要存储,通常都会采用数据库来存储这些数据。最初,厂商推出一个新的数据库产品时,都会相应地提供一套API,但都不尽相同,当然这就加大了开发数据库的难度,也不利于数据库在软件开发过程中的应用。因此,后来Microsoft就退出了一些标准的访问数据库技术。
(1)ODBC(Open Database Connectivity,开放数据库互联)
ODBC是20实际80年代末90年代初出现的技术,它为编写关系数据库的客户软件提供一种统一的接口。ODBC提供一个单一的API,可用于处理不同数据库的客户应用程序。现在绝大数主流关系数据库都提供了ODBC驱动程序。那么即可使用ODBC API就可以访问这些数据库。
(2)DAO(Data Access Object,数据访问对象)
DAO就是一组Microsoft Access/Jet数据库引擎的COM自动化接口。DAO不像ODBC那样是面向C/C++程序员的,它是微软提供给Visual Basic开发人员的一种简单的数据访问方法,用于操纵Access数据库。
(3)RDO(Remote Data Object,远程数据对象)
由于RDO直接调用ODBC API(而不是像DAO那样通过Jet引擎),因此,可以为使用关系数据库的应用程序提供更好的性能。
(4)OLE DB(对象链接与嵌入数据库)
OLE DB在两个方面对ODBC进行了扩展。首先,OLE DB提供了一个数据库编程的COM接口;第二,OLE DB提供了一个可用于关系型和非关系型数据源的接口,而ODBC只能访问关系型数据库。OLE DB的两个基本结构是OLE DB提供程序(Provider)和OLE DB用户程序(Consumer)。
(5)ADO(ActiveX Data Object,ActiveX数据对象)
ADO建立在OLE DB之上。ADO是一个OLE DB用户程序。即它本身也是一个Consumer。使用ADO的应用程序都要间接地使用OLE DB。ADO简化了OLE DB,提供了对自动化的支持,使得像VBScript这样的脚本语言也能够使用ADO访问数据库。
上述的几种数据库访问技术中,DAO和RDO这两种技术已经很少使用了,已逐渐退出历史的舞台。而OLE DB和ADO这两种是比较新的技术。OLE DB的功能非常强大,但是它对自动化的支持不是很好。ADO则便于VBScript这样的脚本语言,以及像VB、Delphi、VC++这样的语言很方便地利用ADO去访问数据库[29-31]。
因此,出于开发方便、周期短等原因,论文选用了使用ADO数据库访问技术。
摘 要 I
ABSTRACT II
目 录 IV
第1章 绪论 1
1.1 研究的背景和意义 1
1.2 国内外车辆监控研究现状 2
1.3 智能视觉物联网 2
1.3.1 物联网技术的发展现状 2
1.3.2 智能视觉物联网的概念和应用前景 4
1.4 智能视觉物联网在车辆监控中的应用 5
1.5 本文所做的工作 7
第2章 系统硬件分析与设计 9
2.1 系统总体规划 9
2.1 系统硬件平台概述 10
2.1.1 Cortex-A8处理器的硬件平台 10
2.1.2 其他方案概述 10
2.2 系统主要硬件电路介绍 11
2.2.1 Cotex-A8处理器核心板 11
2.2.2 USB HUB电路 14
2.2.3 以太网控制器电路 15
2.2.4 UART串口电路 16
2.3 摄像机的选择 17
第3章 系统软件分析与设计 20
3.1 嵌入式Linux开发环境搭建 20
3.1.1 交叉编译器的介绍与配置方法 20
3.1.2 USB摄像机驱动的移植 22
3.1.3 OpenCV视觉库介绍和移植方法 25
3.2 嵌入式平台软件设计 32
3.2.1 V4L2视频采集 33
3.2.2 Socket网络编程 36
3.2.3 多线程编程 37
3.2.4 MJPG-streamer开源项目 38
3.3 PC客户端设计 40
3.3.1 WebBrowser控件的使用 41
3.3.2 视觉标签库的建立 42
第4章 交通图像预处理算法 47
4.1 摄像机的标定 47
4.1.1 摄像机模型 47
4.1.2 基本投影几何 49
4.1.3 透镜畸变 49
4.1.4 基于OpenCV的摄像机标定 51
4.2 车牌图片的预处理 55
4.2.1 车牌图片的权值灰度化 56
4.2.2 车牌图片的中值滤波 57
4.2.3 车牌图片的线性灰度拉伸 59
第5章 视觉标签提取算法 63
5.1 车牌定位 63
5.1.1 车牌图片的锐化 63
5.1.2 车牌图片的二值化 65
5.1.3 车牌图片的膨胀和裁剪 67
5.1.4 车牌区域的选择 71
5.2 车牌识别 74
5.2.1 车牌字符的切割 74
5.2.2 Hu矩字符轮廓匹配 75
5.2.3 字符模板匹配 79
第6章 总结与展望 81
6.1 总结 81
6.2 展望 81
参考文献 83
致谢 87
外文文献翻译 91
一、英文原文 91
二、中文翻译 100
(1)根据智能视觉传感节点的特点,分析和选取了合适的ARM处理器、摄像机和无线路由器等硬件设备,设计出处理器的外围接口,并搭建了智能道路车辆监控系统的硬件平台。 20190816170344
(2)研究嵌入式Linux上的算法和摄像机UVC驱动的移植,稳定地实现了论文中的图像处理算法。在Linux开源视频流传输项目的基础上,完成了将ARM上采集的视频流通过WIFI网络传输到PC客户端显示。PC客户端采用MFC进行用户界面设计,并提供了数据库查询管理功能。具有良好的人机交互界面。(3)研究车辆视觉标签提取算法。通过摄像机标定、中值滤波和线性灰度拉伸等经典算法对车辆图像进行了良好的预处理。在车牌定位中,提出了通过膨胀裁剪和颜色统计算法分别对车牌区域进行粗选和精选。在字符识别中,提出了通过Hu不变矩和模板匹配算法分别对车牌字符进行粗识别和精识别。取得了很好的识别效果,具有较高的鲁棒性。
关键词:智能视觉物联网;智能交通;嵌入式Linux;视觉标签;Hu不变矩
MJPG-streamer是用于从摄像机采集图像,把它们以流的形式通过基于ip的网络传输到浏览器如Firehox,Cambozola,VLC播放器,Windows的移动设备或者其他拥有浏览器的移动设备。它可以利用某些摄像机的硬件压缩功能来降低服务器CPU的开销。它为嵌入式设备和一些常规服务器提供了一个轻量且更少CPU消耗的方案,因为它无需为视频帧压缩浪费大量的计算效率。MJPG-streamer包含许多Input-Plugins和Output-Plugins,它就像一个粘合剂,可以根据需要将输入输出插件连在一起,剩下的工作就交由插件来搞定了。
MJPG-streamer是一个很好的Linux下开源项目,论文需要使用的两个重要插件分别是input_uvc和output_http。可以将摄像机采集到的视频流通过网络发送到web浏览器。这两个插件的核心也正是前面介绍的V4L2接口、Socket编程和多线程编程。下面分别介绍一下论文使用的两个重要插件:
(1)input_uvc
如其名,此插件可从兼容Linux-UVC V4L2标准的设备中获取视频流。它的源码是基于开源项目luvcview,当然做了很多方面的修改。现在很流行这种输入插件,得益于它能够在不增加CPU负载的情况下以大于15fps速率来将视频编码成960x720像素以上大小。
(2)output_http
这个插件绝对是个全版本的符合HTTP1.0标准的webserver。它能够将input_uvc插件获取的视频流通过http协议发送出去。更重要的是,可以允许多个客户端同时访问。它的原理是一旦有客户端连接请求,马上又创建一个新的线程,用来专门处理该连接请求,从而实现了服务器可以一直监听客户端请求,即构成了并发服务器。
但是在论文系统特定的情况下这个工程不能达到所要的需求,所以需要对源码进行修改,即给MJPG-streamer的输出发送线程中添加基于OpenCV的图像处理算法,这样使得在客户端可以收到车辆的视觉标签数据并写入数据库。经过修改后的软件运行流程图如图3.11所示。
3.3.1 WebBrowser控件的使用
(一)WebBrowser控件概述
WebBrowser控件是微软公司提供的COM组件之一,使用可以WebBrowser控件可以在 Windows 窗体客户端应用程序中显示网页。此外,可以使用该控件将基于 DHTML 的用户界面元素添加到窗体中,还可以隐瞒这些元素在 WebBrowser 控件中承载的事实。通过这种方法,可以将 Web 控件和 Windows 窗体控件无缝地整合到一个应用程序中。
(二)WebBrowser控件使用方法
编写此客户端需要使用到WebBrowser控件的两个主要功能分别是:浏览网页、缩放网页。具体方法如下:
(1)在COM组件中添加Microsoft Web Browser控件。
(2)添加一个ActiveX控件中的MFC类,然后还是选择Microsoft Web Browser控件。
(3)添加一个和Webbrowser控件相关联的成员变量,以便于操作控件,比如变量名字定为m_web。
(4)执行一下语句即可浏览指定网页:
m_web.Navigate("www.baidu.com", NULL, NULL, NULL, NULL);
(5)因为网页的大小和客户端上所需要显示大小不一定相同,所以需要
缩放网页以适应客户端窗口大小。在这里需要给控件添加一个网页加载完毕事件,待网页加载完毕后在事件中执行缩放命令即可。具体实现代码如下:
BEGIN_EVENTSINK_MAP(CwebDlg, CDialog)
ON_EVENT(CwebDlg,IDC_EXPLORER1,259,CwebDlg::DocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT)
END_EVENTSINK_MAP()
void CwebDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
{
// TODO: 在此处添加消息处理程序代码
int zoom = 30;
CComVariant varZoom((int)zoom); // nZoom是要设置的缩放比例
m_web.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DODEFAULT, &varZoom, NULL);
}
3.3.2 视觉标签库的建立
本系统需要建立道路车辆的视觉标签数据库,同一车辆在不同时刻不同卡口的图片对应同一个视觉标签。视觉标签库的建立对相关部门进行实时监控车辆行踪和事后查询具有非常重要的意义。下面介绍了数据库技术和使用方法:
(一)数据库技术概述
在现代软件开发中,数据库技术被越来越广泛地应用。很多项目都存在着大量的数据需要存储,通常都会采用数据库来存储这些数据。最初,厂商推出一个新的数据库产品时,都会相应地提供一套API,但都不尽相同,当然这就加大了开发数据库的难度,也不利于数据库在软件开发过程中的应用。因此,后来Microsoft就退出了一些标准的访问数据库技术。
(1)ODBC(Open Database Connectivity,开放数据库互联)
ODBC是20实际80年代末90年代初出现的技术,它为编写关系数据库的客户软件提供一种统一的接口。ODBC提供一个单一的API,可用于处理不同数据库的客户应用程序。现在绝大数主流关系数据库都提供了ODBC驱动程序。那么即可使用ODBC API就可以访问这些数据库。
(2)DAO(Data Access Object,数据访问对象)
DAO就是一组Microsoft Access/Jet数据库引擎的COM自动化接口。DAO不像ODBC那样是面向C/C++程序员的,它是微软提供给Visual Basic开发人员的一种简单的数据访问方法,用于操纵Access数据库。
(3)RDO(Remote Data Object,远程数据对象)
由于RDO直接调用ODBC API(而不是像DAO那样通过Jet引擎),因此,可以为使用关系数据库的应用程序提供更好的性能。
(4)OLE DB(对象链接与嵌入数据库)
OLE DB在两个方面对ODBC进行了扩展。首先,OLE DB提供了一个数据库编程的COM接口;第二,OLE DB提供了一个可用于关系型和非关系型数据源的接口,而ODBC只能访问关系型数据库。OLE DB的两个基本结构是OLE DB提供程序(Provider)和OLE DB用户程序(Consumer)。
(5)ADO(ActiveX Data Object,ActiveX数据对象)
ADO建立在OLE DB之上。ADO是一个OLE DB用户程序。即它本身也是一个Consumer。使用ADO的应用程序都要间接地使用OLE DB。ADO简化了OLE DB,提供了对自动化的支持,使得像VBScript这样的脚本语言也能够使用ADO访问数据库。
上述的几种数据库访问技术中,DAO和RDO这两种技术已经很少使用了,已逐渐退出历史的舞台。而OLE DB和ADO这两种是比较新的技术。OLE DB的功能非常强大,但是它对自动化的支持不是很好。ADO则便于VBScript这样的脚本语言,以及像VB、Delphi、VC++这样的语言很方便地利用ADO去访问数据库[29-31]。
因此,出于开发方便、周期短等原因,论文选用了使用ADO数据库访问技术。
摘 要 I
ABSTRACT II
目 录 IV
第1章 绪论 1
1.1 研究的背景和意义 1
1.2 国内外车辆监控研究现状 2
1.3 智能视觉物联网 2
1.3.1 物联网技术的发展现状 2
1.3.2 智能视觉物联网的概念和应用前景 4
1.4 智能视觉物联网在车辆监控中的应用 5
1.5 本文所做的工作 7
第2章 系统硬件分析与设计 9
2.1 系统总体规划 9
2.1 系统硬件平台概述 10
2.1.1 Cortex-A8处理器的硬件平台 10
2.1.2 其他方案概述 10
2.2 系统主要硬件电路介绍 11
2.2.1 Cotex-A8处理器核心板 11
2.2.2 USB HUB电路 14
2.2.3 以太网控制器电路 15
2.2.4 UART串口电路 16
2.3 摄像机的选择 17
第3章 系统软件分析与设计 20
3.1 嵌入式Linux开发环境搭建 20
3.1.1 交叉编译器的介绍与配置方法 20
3.1.2 USB摄像机驱动的移植 22
3.1.3 OpenCV视觉库介绍和移植方法 25
3.2 嵌入式平台软件设计 32
3.2.1 V4L2视频采集 33
3.2.2 Socket网络编程 36
3.2.3 多线程编程 37
3.2.4 MJPG-streamer开源项目 38
3.3 PC客户端设计 40
3.3.1 WebBrowser控件的使用 41
3.3.2 视觉标签库的建立 42
第4章 交通图像预处理算法 47
4.1 摄像机的标定 47
4.1.1 摄像机模型 47
4.1.2 基本投影几何 49
4.1.3 透镜畸变 49
4.1.4 基于OpenCV的摄像机标定 51
4.2 车牌图片的预处理 55
4.2.1 车牌图片的权值灰度化 56
4.2.2 车牌图片的中值滤波 57
4.2.3 车牌图片的线性灰度拉伸 59
第5章 视觉标签提取算法 63
5.1 车牌定位 63
5.1.1 车牌图片的锐化 63
5.1.2 车牌图片的二值化 65
5.1.3 车牌图片的膨胀和裁剪 67
5.1.4 车牌区域的选择 71
5.2 车牌识别 74
5.2.1 车牌字符的切割 74
5.2.2 Hu矩字符轮廓匹配 75
5.2.3 字符模板匹配 79
第6章 总结与展望 81
6.1 总结 81
6.2 展望 81
参考文献 83
致谢 87
外文文献翻译 91
一、英文原文 91
二、中文翻译 100
版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/dzxx/txgc/2161.html