摄像头调用,汽车移动框选跟随

项目背景

随着科学技术的发展,汽车早已进入千万人户家,汽车的使用感良好给人们出行带来了极大的便利,但是同时也是为交警们带来很多的烦恼,交通事故的发生,肇事者逃逸,这就是促使追踪技术的快速发展,调用摄像头便可以追踪目标对象,给警察解决很多烦恼。追踪技术的实现主要依赖于opencv视觉库,opencv与python或者C++可以轻松实现实时的目标追踪。本次项目主要讲解的是新型的opencv与JavaScript相结合在网页端实现调用本地摄像头框选追踪汽车运动。

关键技术讲解【opencv.js】

一.opencv.js简介

OpenCV 是一个开源跨平台计算机视觉库,由 C 函数和 C++ 类构成,并且提供了多个语言的接口。OpenCV提供了大量图像处理的功能,从图像显示,到像素操作,到目标检测等,大大简化了图形处理以及深度学习应用的开发过程。OpenCV.js 是 JavaScript 开发者与 OpenCV 计算机图形处理库之间的桥梁,起先仅仅是部分 JavaScript 开发者自行开发的 OpenCV 应用接口,其原理是借助一款 LLVM-to-Javascript 的编译器 —— Emscripten 将库底层 C++ 代码编译为可在浏览器运行的 asm.js 或者 WebAssembly ,后来该项目日趋完善,并于 2017 年并入整个 OpenCV 项目。OpenCV.js 的出现使得 JavaScript 开发者可以高效便捷的使用 OpenCV 提供的图形处理算法,也就是说开发者仅凭借浏览器就能快速开发诸如图片风格美化、图像识别、OCR等功能的应用。

二.opencv.js编译大致流程

1.环境的配置:编译脚本需要调用 Java 代码,编译机器需要安装 jdk,下载 1.8 的版本

2.全局安装 CMake ,CMake 是 C/C++ 程序的依赖安装工具

3.编译机器需要安装 LLVM-to-Javascript 的编译器 —— Emscripten

4.编译程序为 Python 脚本,安装 Python 环境

5.下载 OpenCV 源码,我们下载的是3.1.0版本。

最终编译成功的opencv.js会生成三个文件

 关键技术讲解【训练库建立】

一、从网络上下载或者自己找到的图片中裁剪挑选出合适的图片。
图片的大小和格式都要相同,准备好两个文件夹,分别命名为posdata(正样本)和negdata(负样本),所有样本的尺寸必须一致,如果不一致的或者尺寸较大的,可以先将所有样本统一缩放到100*40。posdata中的图片为车辆样本。给分类器展示的是正确的样本。

negdata中的图片为一些背景样本,里面不包含车辆,是用来告诉分类器哪些是错误的样本。虽然负样本就是样本中不存在正样本的内容,但最好是根据不同的项目选择不同的负样本,比如一个项目是做机场的人脸检测,那么就最好从现场拍摄一些图片数据回来,从中采集负样本。

正样本如下:

 负样本如下:

 2.在negdata和posdata文件夹准备好之后,使用命令提示符(win + r),输入cmd,把位置切换到posdata文件夹的位置。

4.然后在里面输入“ dir /b/s/p/w *.jpg > pos.txt ”,将会在posdata文件夹中产生一个pos.txt的文档。打开pos.txt,选择编辑-替换,在查找中搜索jpg,替换为jpg 1 0 0 100 40,之后保存,将pos.txt复制到上一级目录中。

 

 

5. 之后对negdata文件夹进行相同的操作,在cmd中输入的语句为“ dir /b/s/p/w *.jpg > neg.txt ”。

6.找到自己下载的OpenCV文件夹,打开opencv,打开build,打开x64,打开vc14,打开bin文件夹。选择opencv_createsamples.exe和opencv_traincascade.exe两项,将其复制到需要的文件夹中,与negdata、posdata并列。 

 7.打开cmd,在该文件目录下输入“ opencv_createsamples.exe -vec pos.vec -info pos.txt -num 32 -w 100 -h 40 ” 。之后在该文件夹中会出现pos.vec。之后重复该步骤,cmd输入的语句换为“ opencv_createsamples.exe -vec neg.vec -info neg.txt -num 100 -w 100 -h 40 ”,产生neg.vec。

 

 

8.在主文件夹下创建一个txt文档,命名为“traincascade”。在该txt中输入

opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 32 -numNeg 100 -numStages 20 -w 100 -h 40 -mode ALL pause

 

9.对“traincascade.txt”进行重命名,将后缀名改为bat。之后双击“traincascade.bat”。

处理完成之后将会在文件夹下生成一个cascade.xml。

 

核心代码讲解

 

本块js代码通过导入编译好的opencv.js库,应用库中的众多函数(cv.cvColor()函数实现色彩空间转换,cv.Mat()函数为素材视频资源创建RGBA 4通道)其中canvas仅支持具有连续存储的8位RGBA图像,因此cv.Mat类型为cv.CV_8UC4。这里我们通过加载提前训练好的汽车训练库,框选目标样本,这里每秒传输帧数设置我们设置的是30fps。

项目成果展示

 

项目不足分析

本次项目最终虽然实现车辆的框选与追踪,但是精度过低,原因在于汽车训练库的正负样本数量过少,没有考虑天气情况等等一些因素。对于一个真正的汽车追踪项目实现需要采集数以万计的样本素材,才可以达到精准追踪的目的。其次本次项目只能调用本地的一个摄像头进行框选,笔记本摄像头拍摄到的视角范围有限,项目最终的效果不是很明显。

演示视频链接及源代码:

https://pan.baidu.com/s/16_j2hDeVwZtYSCVfkM6Vvg 
提取码:x3q7 

小组成员:张甜甜,刘禹敏,王莎莎,孙文佳

posted @ 2020-12-28 15:15  szmtjs10  阅读(402)  评论(0编辑  收藏  举报