请选择 进入手机版 | 继续访问电脑版
快捷导航
72 480

基于机器视觉的车辆识别与标记系统

SNOWING_TREE 于 2017-12-23 14:41 发表在 [开源项目] [复制链接]

注册后可查看大图哦

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 SNOWING_TREE 于 2018-1-16 17:29 编辑

项目名:基于机器视觉车辆识别标记系统
|
参与人员:SNOWING_TREE 、w_ch 、周子成 、 袁绪蝶 、陈燕 、huayuan54
|
|
|
|
项目基本功能说明:
|
<将相机拍出的视频同步进行处理,识别出视频中的车辆、车辆的类别以及车牌照(拓展)>
|
|
|
1->识别环境说明:
      1.气象环境:在白天天气晴朗的环境下
      2.拍摄位置:在公路上方大约6米的位置
      3.拍摄角度:水平向下倾斜大约30度的角度
|
|
|
2->识别范围说明:
      1.可以识别可视范围内的所有车辆(同时)
      2.可以识别车辆的正面、斜侧面、尾部
      3.可以对不同车辆类别区分识别
|
|
|
3>识别结果说明:
      1.处理后的视频要清晰流畅
      2.快速识别视频中的车辆
      3.标记出视频中的车辆
      4.标记要能够实时跟随着车辆运动
      5.能够同时识别多个车辆
      6.识别出车辆的类型
      7.在标记中显示出车辆的类型
      10.处理后视频要和源视频做到基本同步
      11.处理得到的车辆信息(类型、数量、通过时间)能够保存
|
|
|
|
|
|
|
设备资金说明:
      摄像头:POE摄像机 (实验室自备)
      图像处理设备:个人PC (个人自备)
      交换机:实验室自备
|
|
|
计划工期:
      2017.12.25 -- 2018.1.14

注:本帖用于保存本项目所有的中间产物、资料。(实时更新)
      参与人员每天需要更新自己的计划、进展
|
|
|
|
|
|
|
|

期末项目结束,此贴已结,现已开源

版权使用信息:
    挂载Mozilla许可证协议,使用时需书写版权信息;
    版权信息:
        第一版权作品:
基于机器视觉车辆识别标记系统
        作者:
SNOWING_TREE 、w_ch 、周子成 、 袁绪蝶 、陈燕 、huayuan54
        发布日期:2018.01.16   17:30
        地点:安徽信息工程学院嵌入式实验室

开源说明:https://www.mozilla.org/en-US/MPL/

联系邮箱:
angzijie@gmail.com
Connecting & Messaging from Any.

共 72 个关于本帖的回复 最后回复于 2018-1-14 22:42

SNOWING_TREE 中级会员 发表于 2018-1-14 22:42:47 | 显示全部楼层
结项演示视频:

      类别1演示:https://pan.baidu.com/s/1jJgCu1K

      类别2演示:https://pan.baidu.com/s/1kXkUqyj
Connecting & Messaging from Any.
举报 使用道具
SNOWING_TREE 中级会员 发表于 2018-1-12 21:38:37 | 显示全部楼层
项目完成
下星期一准备企业评审,在准备着相关文档以及材料

随着本学期结束,项目也接近了尾声,大家也开始考虑自己未来的路。

在这里 祝大家 无论是选择考研、实习或者什么;都可以“平常心”

在属于自己的路上越走越远,越走越强大。
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-12 16:41:33 | 显示全部楼层
2018-1-12
今天:
  今天是项目开发的最后一天,我来总结一下这些天我的收获和不足。
  首先,在项目开发的第一天,我们要求写一份需求分析文档。鉴于高二学过一学期的软件工程和工程写作,而且还写过不少此类文档,我便毛遂自荐,结果,文档被要求重写了好几回,后来,我分析了一下原因,大概有以下几点:1、最主要的原因,对于本组的项目不熟悉。因为不熟悉,甚至是不清楚,以至于很多技术、专有名词、开发环境等都不知道,这也导致我写的文档显得很“通俗易懂”,重点不突出,而且一些话意思上模糊不清;2、可能软件工程和工程写作学习得还不够扎实。虽然文档被打回了很多次,但是,这次我对这类文档的撰写有了更深一步的认识:写项目的文档可不是写散文,废话、不实用的话不要太多,要抓重点。
  其次,是关于opencv、vs2015、sqlite3的安装、配置、学习等。在捯饬它们的过程中,出现了各式各样的问题,一开始,我选择找队友帮忙。不过后来我决定自己亲自面对困难,事实证明,这些困难不算是困难,任何难题都有解决的办法。当然,在后期,我和陈燕需要利用sqlite3在vs2015上建立一个数据库和一张表,在开始的时候,我们也遇到各种各样关于语法、函数、算法上的问题。
  还有,因为项目的需要,我们在一周内,找了大约700张图片,虽然期间是痛苦崩溃的,但是,我知道了,原来百度图片的展示是根据介绍图片的关键字搜索的,而且相同的关键字在搜索时,图片的顺序也是不同的。
  虽然,在这次的项目开发中没有接触到什么核心技术,但我深刻认识到我的基础简直、有点差(曾经我一度怀疑,我有技术吗),而且我还知道了,我的代码敲得果然太少了!

点评

你真可爱: 5.0 赞同: 5.0
SNOWING_TREE 你真可爱: 5 赞同: 5
  发表于 2018-1-12 21:27
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-11 22:44:46 | 显示全部楼层
陈燕 发表于 2018-1-11 10:09
2018-01-11
工作总结:
sqlite3_bind_int   

这个问题,你看看我今天发的回帖,就知道怎么解决了!
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-11 10:09:12 | 显示全部楼层
本帖最后由 陈燕 于 2018-1-11 10:59 编辑

2018-01-11
工作总结:
sqlite3_bind_int   
sqlite3_bind_text


这两个函数给“准备语句”绑定参数。其中函数的第二个参数是绑定参数的编号。
此编号是从1开始,而不是从0开始。
查看sqlite3的源码,可以看到这两个函数都调用了 vdbeUnbind 函数。
查看vdbeUnbind函数,在这个函数中有以下几句
if( i < 1 || i > p->nVar){
      sqlite3Error(p->db, SQLITE_RANGE);
      sqlite3_mutex_leave(p->db->mutex);
      return SQLITE_RANGE;
}
可以看到当参数编号(i)小于1时会报错退出。

sqlite3_step

这个过程用于执行有前面sqlite3_prepare创建的准备语句。

sqlite3_finalize
这个过程销毁前面被sqlite3_prepare创建的准备语句,每个准备语句都必须使用这个函数去销毁以防止内存泄露。


在命令行添加表头


.header on
.mode column

问题:使用多个sqlite3_bind_int()后,它只成功添加了最后一个
把它换成别的sqlite3_bind_double()或sqlite3_bind_int64()后,就可实现,可是变量的类型就是int啊,为什么要这样写呢?还是别的什么问题?

显示结果:

注:只有最后一行的插入正确,前面的都有些问题!
还有怎么传入当前日期还有问题!

工作计划:
明天依据组长要求,对代码封装!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

袁绪蝶 这个问题,你看看我今天发的回帖,就知道怎么解决了!  详情 回复 发表于 2018-1-11 22:44
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-11 08:57:41 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-11 10:51 编辑

2018-1-11
今天:
sqlite3中绑定bind函数用法 (将变量插入到字段中)
代码分析:

显示结果:

注意:

明天:
总结这一阶段的收获和不足!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
SNOWING_TREE 中级会员 发表于 2018-1-10 23:36:44 | 显示全部楼层
近期,数据库整合接近完毕 项目基本成型

目前最终版本为两个版本 并用
2.0 版本 识别速度稍慢 但是最终画面“不抖”
3.0 版本 识别速度较之2.0更快 但是由于快带来的识别结果闪烁问题较为严重
这是由于采用了“跳帧”机制导致的

但为了保证画面流畅 目前必须采用“跳帧”机制

以目前的时间 人力物力 暂时无法做到两者兼具
如再有机会 将重新启用gpu方案 做到完美

期末考试临近 大家都在准备期末考试  祝大家都能考个好分数 Good Luck


点评

赞同: 5.0
chinmel 赞同: 5
  发表于 2018-1-11 09:30
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-10 20:57:48 | 显示全部楼层
本帖最后由 陈燕 于 2018-1-10 21:15 编辑

2018-01-10
工作总结:
1、昨天在创建触发器时候,有些问题,一张表插入动作完成后并不会触发另一张表的动作
创建触发器详情请见此
2、关于如何在sql语句中插入变量的问题·也得到了解决。
有两种办法:
第一、通过字符串与变量拼接的方法
第二、sqlite3中绑定bind函数用法 (将变量插入到字段中)
详情见此

点评

你真可爱: 5.0 赞同: 5.0
袁绪蝶 你真可爱: 5 赞同: 5
  发表于 2018-1-14 20:10
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-10 08:40:25 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-10 21:06 编辑

2018-1-10
今天:
sqlite官网
c++中,怎么在sqlite中动态添加变量值

在vs2015中利用sqlite3插入变量:
方法一:
int a=1,b=99;
std::stringstream sql;
sql << "INSERT  INTO  ONE_ (ID,NUM) VALUES (" << a << "," << b << ");";
char *sqliteInsert = const_cast<char*>(sql.str().c_str());
rc = sqlite3_exec(db, sqliteInsert, callback, (void*)data, &zErrMsg);
方法二:
int a=1,b=99;
std::string sql = "insert into ONE_ values(" + std::to_string(a) + "," + std::to_string(b) + ")";
char *sqliteInsert = const_cast<char*>(sql.c_str());

rc = sqlite3_exec(db, sqliteInsert, callback, (void*)data, &zErrMsg);

经过实践,方法二可行,方法一在分析sql语句时会发生错误,但是具体什么原因,还在分析中。
我猜想,可能是因为在方法一中sql语句在转换过程中,类型发生了变化,不再是char型。


问题:
如图:

length=5,也就是说,a,b输入了5组,(100,100)(200,200)(300,300)(400,400)(500,500),
但是,在表中实际上只插入了最后一组(500,500),如图:


明天:
再把一些细节优化一下!
解决"历史遗留问题”!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-9 21:04:09 | 显示全部楼层
2018-01-09
工作总结:
创建了 TIME表和NUMBER表
在TIME表上创建触发器,触发NUMER表
问题:不知道怎么插入变量
工作计划:
解决上述问题

点评

你真可爱: 5.0 赞同: 5.0
袁绪蝶 你真可爱: 5 赞同: 5
  发表于 2018-1-14 20:10
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-9 08:54:41 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-10 20:59 编辑

2018-1-9
今天:


问题:
1.sqlite3通过传参插入记录或者对记录进行操作?
两种方法:
1)拼接字符串常量
int _tmain(int argc, _TCHAR* argv[])
{
char* STR1 = "ABCD"
"1234"
"abcd";
char*STR2 = "ABCD" "1234" "abcd";
char* STR3 = "ABCD"
"1234"
"abcd";
//用了“\”这就一定要换行
char* STR4 = "ABCD"\
"1234"\
"abcd";

//这种写法错误
//char* STR5 = "ABCD"\"1234"\"abcd";
return 0;
}

明天:
解决以上问题!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-9 08:29:02 | 显示全部楼层
2017-01-08
工作总结:
今天又找了100张大车背面,公交车背面尽量避免找带广告的,否则影响训练效果,用组长的话说,看见字便以为是车了。哈哈
工作计划:
创建有关数据库

点评

你真可爱: 5.0 赞同: 5.0
袁绪蝶 你真可爱: 5 赞同: 5
  发表于 2018-1-14 20:11
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-8 15:40:04 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-8 20:55 编辑

2017-1-8
今天:
因为大车尾部的图片数量不够,所以又找了100大车尾部图片。
因为公交车后面花花绿绿的广告可能会影响到识别效果,所以在找图时尽可能得避免广告的出现,所以这也就缩小了找图范围。

明天:
对sqlite3,有些地方不是很熟悉,所以要复习复习!

Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-7 23:26:07 from Mobile | 显示全部楼层
2018―01-07
注:虽然只是简单的找图片任务,但还是总结一下吧!
工作总结:今天截了300张小车图片,因为事先把图片找好了,所以今天的效率还是很高的。
快速找图片技巧:按照车的品牌搜索再批量下载,不要命名,因为后期还要具体命名,这样效率很高。
下载好的图片再一起批量截图,会很快哦!
工作计划:明天按照组长需求,建立sqlite3数据库。

点评

你真可爱: 5.0 赞同: 4.0
袁绪蝶 你真可爱: 5 赞同: 4
  发表于 2018-1-14 20:11
Connecting & Messaging from Any.
举报 使用道具
wch 注册会员 发表于 2018-1-7 20:14:24 | 显示全部楼层
大小车的级联分类器v1.0已结结束,图片测试效果良好;等待测试视频,查看训练效果
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-7 18:29:16 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-7 19:14 编辑

2018-1-7
今天:
经过周末两天的奋斗,我终于把300张小车的图片整理完了!

在这几天找图的过程中我发现,利用百度图片盲目地找图片其实很不靠谱。最初我只在搜索框内打上大车或者小车这个关键字,这样的结果是很容易找到重复的图片,而且可能还不易发现,后来,我使用了分类的方法,把关键字缩小范围,比如,宝马、江淮、违章车辆等,这样子果然好多了,看似是把范围限制了,但实际上,找不同类型车辆的范围扩大了。
明天:
计划sqlite3在vs2015上的运用在复习一下,以便后面更好地配合队友们!
Connecting & Messaging from Any.
举报 使用道具
SNOWING_TREE 中级会员 发表于 2018-1-6 00:15:53 | 显示全部楼层
本帖最后由 SNOWING_TREE 于 2018-1-10 00:50 编辑

完成:
   1昨天的bug确定了为坐标向量集越界
    解决方法为 中转赋值 用完后重新指定
    外加 在标记的时候 判断坐标是否越界
   2优化了跳帧机制 使最终画面流畅度不受识别速度影响
    为合成画面
至此整个 画面获取部分 识别部分 结果画面输出部分 框架基本定型 后期小改动实时更新

接下来为数据返回以及存储部分

计划:
   准备整合数据库
Connecting & Messaging from Any.
举报 使用道具
huanyuan54 注册会员 发表于 2018-1-5 22:08:11 | 显示全部楼层
今日:提供样本素材

计划:继续提供素材
Connecting & Messaging from Any.
举报 使用道具
w_ch 注册会员 发表于 2018-1-5 19:48:29 | 显示全部楼层
今天拿1000张大车正样本进行训练,得出来的级联分类器可以使用,但是效果不太好,有的大车车尾无法识别,猜测应该是正样本中大车尾部图片可能有点少,打算周末把大车正样本中的车尾图片增加,今天晚上训练1600张大车正样本,提供周末测试使用,并着手准备小车样本素材。
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-5 19:11:31 | 显示全部楼层
2018-01-05
工作总结:
今天我找了210张图片,虽然这是一件没啥技术含量的事情,但是真的很需要耐心。
注:主要找的是大车,截图最好不要留太多背景,否则影响opencv的训练结果。
工作计划:
还需要找300张小车图片

点评

你真可爱: 5.0
袁绪蝶 你真可爱: 5
  发表于 2018-1-14 20:11
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-5 18:01:46 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-5 18:09 编辑

2018-1-5
今天:
主要的任务是找大车图片,这里的大车,我只理解为三种:货车、客车、消防车,
在昨天的基础上,今天找的的图很快,这就叫熟能生巧!

明天:
开始找小车的图片!



Connecting & Messaging from Any.
举报 使用道具
SNOWING_TREE 中级会员 发表于 2018-1-4 22:21:56 | 显示全部楼层
完成:
      1.之前的第一问题 通过 分离图像预处理 和 图像检测部分(分线程)解决了
      2.第二个问题 使用了  互斥锁  解决了图像读取的异常  
      3.完成了 多个级联分类器并行工作的多线程框架搭建
         (对一张图片用不同的分类器并行检测  返回坐标向量集)
      4.在3的基础上完成了  跳帧处理(有新的处理结果(坐标向量集)就启用   没有新的处理结果  就使用上一次的结果图像代替)
计划:
      1.上文第四不有 bug 向量集方面的错误  有待处理  后期更新
      2.更新技术框架  见二楼
Connecting & Messaging from Any.
举报 使用道具
SNOWING_TREE 中级会员 发表于 2018-1-4 22:10:09 | 显示全部楼层
chinmel 发表于 2018-1-4 02:38
注意把握项目进度 本次项目周期不长 所以可能部分内容不能够完整铺开 另可能尽快有一个可用的框架雏形,然 ...

基本框架早就有了  在不断的更新和优化中
Connecting & Messaging from Any.
举报 使用道具
w_ch 注册会员 发表于 2018-1-4 21:31:19 | 显示全部楼层
训练小车级联分类器,用7542张负样本,1840张小车正样本。这三个不能丢失,否则opencv_traincascade训练会报错



numpos网上有的人说是正样本数,也有人说是负样本的1/2或者1/4倍,所以我用的1/3倍,其中numPOS的数值表示负样本数,但是负样本数量越大,训练越慢,所以只是用3000





这两个bufsize网上说内存给的越大,训练所需时间越短,但是给了4G之后,发现训练速度时间更慢,所以直接使用默认值1024M

训练效果:

训练速度有点慢,暂时还不知道怎么解决

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
huanyuan54 注册会员 发表于 2018-1-4 20:54:07 | 显示全部楼层
今天:对样本的采集(正样本:大车400多张,小车100多张,负样本:100多张(备用))

计划:对采集样本进行训练(训练速度较慢,对训练方法进行新的探索)
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-4 11:11:45 | 显示全部楼层
本帖最后由 陈燕 于 2018-1-4 11:19 编辑

2018-01-04
SQLite - C/C++

工作总结:
1、解决了昨天的问题。
昨天在给字符串赋值的时候,用的是sprintf( )函数,一直报错,后来发现VS2015用不了这个函数,之后看提示改成了sprintf_s( );还是有问题。
2、实现了增删改查
注意点:



注:第一次创建表后,使用sqlite3_exec();可以建一张表。之后再执行sqlite3_exec(),则会出现表已存在的问题,所以表存在后就最后在写sqlite3_exec();
3、找100张小车图片,比例1:1

工作计划:找50张小车和150张大车

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-4 08:23:05 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-4 20:40 编辑

2018-1-4
今天:
主要任务是找到大车的不同图片。
图片要求:大小约为1:1,车的图像最好铺满图片,图片为bmp类型,车的外形主要是矩形。
如下:

虽然找图片的过程很无聊,但我从中至少得到两点收获:
1.有种图片格式为bmp,也叫位图,
优点(无损压缩,图质最好),缺点(文件太大,不利于网络传输) ,细节可以找找资料。

2.怎么样获取符合上述要求的图片?

如果单单使用QQ截屏的话,那也只是大概1:1,所以接下来我使用了ppt来获取标准的1:1图片,将图片设为背景,再设置ppt版式的大小规格,但保存出现了问题,
最后,我在电脑上找到了可以按比例截图的软件。
所以,在有些情况下,问题的解决方法是可以慢慢优化的,直到最后出现了较为完美的方法!!
明天:
接着找图片,如果有时间,复习opencv!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
chinmel 版主 发表于 2018-1-4 02:38:03 | 显示全部楼层
注意把握项目进度 本次项目周期不长 所以可能部分内容不能够完整铺开 另可能尽快有一个可用的框架雏形,然后再优化。先解决有的问题,再解决好的问题。
Connecting & Messaging from Any.
举报 使用道具
huanyuan54 注册会员 发表于 2018-1-3 21:44:13 | 显示全部楼层
今天:样本获取(针对车辆训练采集正负样本的图片,正样本的格式需要统一)

计划:继续样本的获取
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-3 20:43:43 | 显示全部楼层
本帖最后由 陈燕 于 2018-1-3 20:54 编辑

C使用SQLite3的例子
vs2010调用sqlite3
工作总结:
1、学习了如何在VS2015中给数据库添加数据(有点问题)在数据库中创建表并插入数据。在open和close的之间写入如下代码:
// 执行SQL
sprintf(sql, "CREATE TABLE test_for_cpp \
    (id int, name varchar(20), age int)");
if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK)
{
    printf("操作失败,错误代码: %s", err_msg);
    exit(-1);
}


问题1: sqlite3_exec( );调用一直有问题!!!(待解决)



工作计划:解决上述问题,并且实现表的增删改查
Connecting & Messaging from Any.
举报 使用道具
w_ch 注册会员 发表于 2018-1-3 19:38:34 | 显示全部楼层
今天一直在找样本及负样本图片,然后再电脑上面继续训练,opencv_traincascade的-numPos参数大小需要根据正负样本的数量进行计算,按1:2计算,尽量小于2倍的,这样不会报错
明天继续找图片进行训练
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-3 17:03:46 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-3 20:42 编辑

2017-1-3
今天:
1.sqlite保存图片
使用sqlite保存图片和导出图片 _代码
问题及解决方法:
1.This function or variable may be unsafe:

_CRT_SECURE_NO_WARNINGS
2.怎么才能显示图片,而不是像下面那样?

有待解决…………
明天:
继续深入学习sqlite3在vs2015上的操作!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
SNOWING_TREE 中级会员 发表于 2018-1-2 22:45:41 | 显示全部楼层
经过一系列资料参考 请教刚哥以及讨论之后
最后确定不采用gpu  (研发时间限制)
准备采用图片前期处理和检测做多线程 并跳帧处理  空闲帧用原画面代替
并在这个基础之上做图片切割 再加上多线程(可能要求更高  等后期测试看效果)

已完成检测多线程框架搭建

1.还有很多内存bug 。。。 动不动就gg  由于vs的调试机制问题
暂时不知道问题在哪  猜测是 iplimage转mat的 carrToMat() 函数问题

2.发现了一个新的问题 相机到检测线程中间存在一个读写冲突问题
导致检测线程可能读到异常数据
(人脸的项目中采用了同样的机制 没有问题
不知道这个为什么不行 或者是其他地方的问题 正在处理)
或者考虑用一下信号量标记 这个问题也许就是导致问题1的根本原因

接下来要着手处理以上问题 然后再写跳帧的机制(具体一秒跳多少帧的问题)


Connecting & Messaging from Any.
举报 使用道具
huanyuan54 注册会员 发表于 2018-1-2 21:26:26 | 显示全部楼层
本帖最后由 huanyuan54 于 2018-1-2 21:27 编辑

车辆训练:本文用的是haar+adaboost的方法。
目标检测分为三个步骤:
1、 样本的创建
2、 训练分类器
3、 利用训练好的分类器进行目标检测。

一、 样本的创建
正样本:E:\image\aa.jpg
负样本:E:\image\bb.png

通过dir /b > pos.txt
pause加以修改得到
E:\image\cc.png
E:\image\dd.png

二.进入训练阶段:
opencv_createsamples.exe+opencv_traincascade.exe

由opencv_createsamples.exe -info pos.txt -vec pos.vec -num 528 -w 24 -h 24
pause生成pos.vec文件
由opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 11 -numNeg 520 -numStages 1090 -precalcValbufSize 200 -precalcdxBufSize 1000 -featureType LBP -w 24 -h 24 -minHitRate 0.9999 -maxFalseAlarmRate 0.5 -mode All
pause生成xml文件

E:\image\gg.png
E:\image\hh.png
E:\image\ee.png
E:\image\ff.png

至此,训练阶段结束,接下来就可以进行训练检测。。。。介于训练数目过少取材也不够准确,就先不进行检测了。

计划:大量的图片搜集进行训练

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
w_ch 注册会员 发表于 2018-1-2 21:12:51 | 显示全部楼层
本帖最后由 w_ch 于 2018-1-2 21:30 编辑

1.路径问题,修改路径
2.
file:///C:\Users\w\Documents\Tencent Files\1612144754\Image\C2C\)G68XD8PQB6G}@H_6HH65~I.jpgfile:///C:\Users\w\Documents\Tencent Files\1612144754\Image\C2C\)G68XD8PQB6G}@H_6HH65~I.jpg
file:///C:\Users\w\Documents\Tencent Files\1612144754\Image\C2C\)G68XD8PQB6G}@H_6HH65~I.jpg

3.正样本的图片大小和命名需要统一,还需要注意路径


4.负样本只需要注意路径以及命名问题,负样本大小需要比正样本大3倍左右
5.正常训练,训练未完成,继续训练中

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-2 09:21:50 | 显示全部楼层
本帖最后由 陈燕 于 2018-1-2 20:51 编辑

2018-01-02
工作小结:
一、修改表结构
alter table stuinfo add column score blob;
注:允许用户重命名或添加(末尾)新的字段到已有表中,不能从表中删除字段。

二、表内容的增删改
insert into stuinfo values(1,'孙迪','','1990-8-15');
delete from stuinfo where id=2;
update stuinfo set address='上海' where id=3;
注:如果id已经存在 update stuinfo set score=80 where id=1;
如果id不存在insert into 表名 (id,addressvalues (1,'柳州')
只要执行insert操作id就会增加一个

三、查询语句
185上下取记录
select * from stuinfo where score <>85;
select * from stuinfo where score !=80; = select * from stuinfo where not score =80;
注意not 的位置!!!

2and 与  or
select * from stuinfo where sex='' and score>80; // 查询条件多个的情况

3between and
select * from stuinfo where score between 80 and 99; = select * from stuinfo where score >=80 and score <=99;

4in
select * from stuinfo where score in(80,99); = select * from stuinfo where score =80 or score = 99;

5null
select * from stuinfo where score is null;
注:不是score=null,而是is null!!!

6、max();min();sum();avg();count()
select name,max(score)from stuinfo;
select sum(score) from stuinfo;
select avg(score) from stuinfo;
注:avg()若一个字段中的数据为null,则不参与计算;若为0,则参与计算。
select count(*)from stuinfo where sex='';

7、order by;group by;having
select * from stuinfo order by score desc;
select * from stuinfo group by sex;
注:group by 字段, 分组进行查询, select *只显示第一条满足分组条件的第一条数据
select sex,avg(score) from stuinfo group by sex;
select sex,avg(score) from stuinfo group by sex having avg(score)>=80;
注:分组之后再筛选记录必须用having
select * from stuinfo where score>(select avg(score) from stuinfo); //嵌套子查询
select * from stuinfo order by score desc limit 3; //限制查询结果记录条数

四、多表连接查询
问题一、如何删除某一张表的某一列
create table teacher as select id,name,sex,address from stuinfo;
drop table if exists stuinfo;
alter table teacher rename to stuinfo;

问题二、如何解除外键约束
pragma foreign_keys = off; //关上就好了

1、内连接
select name,address,score from stuinfo join stuscore on stuinfo.id=stuscore.stunum;
2、左外连接
select name,address,score from stuinfo left join stuscore on stuinfo.id = stuscore.stunum;
注:左外连接会显示Null

工作计划
实现vs2015与SQLite3的对接
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-2 08:18:12 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-2 21:45 编辑

2018-1-2
今天:
一、继续深入学习sqlite3
详细情况请看《SQLITE3》

菜鸟教程
注意:
1.创建以及操作表的时候,;和,不要忘加和混淆(这很重要,不能忘!)
2.可以使用.tables 命令来判断表是否建成功
3.sqlite> select id
   ...> from c_one
   ...> where color like '%红%';
  由此可知sqlite> 和...> 的关系,...> 补充sqlite>未说完的“话“
4. select …… from  table    where color like  '_';
   不需要加“=”,你就认为like就是“=”
错误及问题:
1.

2.like子句和GLOB子句有什么本质上的区别吗?他们的作用感觉很像。
二、vs怎么连接到一个现有的数据库
开始需要对vs2015,进行配置。
相关的操作:
注意:
1."C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\lib.exe" /MACHINE:X64 /DEF:C:\sqlite\sqlite3.def /OUT:C:\sqlite\sqlite3.lib

明天:
继续学习sqlite在vs2015上的操作!
sqlite3最小的资源实现功能.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
huanyuan54 注册会员 发表于 2018-1-1 22:00:10 | 显示全部楼层
这几天看了一些关于adaboost haar训练 车辆分类检测,并通过opencv3.3.1 adaboost haar训练实践了一下,一些资料还未来及整理···
计划:继续adaboost haar训练 车辆分类检测
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2018-1-1 20:38:38 | 显示全部楼层
本帖最后由 陈燕 于 2018-1-1 21:51 编辑

2018-01-01
工作总结
1、安装了SQLite3
在Windows上的安装教程   

2、学会使用常见命令
基本命令(比如创建数据库)

3、一些错误操作截图

请在命令行打开,如在当前sqlite文件夹中打开就直接创建了一个默认数据库,该数据库就在当前目录下。

在命令行记得在你想保存数据库的文件夹下操作



创建表格的时候一定要注意格式规范,别少逗号什么的否则表创建失败。
如果ID忘了加主键约束就 drop table 表名

注:update别拼错了!!!如果进了...>里面,打 ;(分号) 就出来了

4、正确操作流程截图



工作计划   
1、继续学习sqlite
2、了解sqlite与本项目的对接方式













本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2018-1-1 20:35:17 | 显示全部楼层
本帖最后由 袁绪蝶 于 2018-1-2 19:59 编辑

2018-1-1:
今天:
安装SQLITE3
Windows、Linux 和 Mac OS X 上的安装设置
windows下如何安装sqlite3
使用SQLITE3
如果我没有搞错的,打开sqliste3有两种方式
1.打开命令行,输入sqlite3
2.点击sqlite3.exe应用程序
打开的方式不同,那么建立的数据库等文件位置也会不同。
(经实践,我没有搞错!)
例子创建一个数据库:

注意:
1.每一行命令末尾的符号是什么?
2.分清sqlite>和...>的区别是什么?
3.建立数据库的相关数据保存在其目录下的.db文件中

sqlite3命令语句, 文档小记
SQLite3命令操作大全
问题:

事实上,到底用不用加”;“这个问题上,我很迷茫啊!!
解答:(个人猜想)
sqlite>时以.开头的命令不需要加;,但类似对数据库等的操作需要加;
在...>时需要加;或者,


明天:
1.继续学习sqlite3
2.搞清楚数据库对接是怎么操作的






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
w_ch 注册会员 发表于 2018-1-1 19:45:37 | 显示全部楼层
明日继续adaboost haar训练大车和小车的分类,解决之前的问题
Connecting & Messaging from Any.
举报 使用道具
SNOWING_TREE 中级会员 发表于 2017-12-30 00:55:54 | 显示全部楼层
大家的opencv 基础学习 基本上告一段落  接下来 大家准备投入到 个人的分工中去 大家加油

昨天:(由于某些原因 昨天没来得及写  今天补充)
      搭建好了 基于adaboost 的 haar 特征检测框架 (协调工业相机的驱动程序 opencv调用)
      基于神经网络 和机器学习 初步训练了一个简单的 级联特征(车辆)并测试了 检测框架
今天:
      经过前一天的初步测试 效果不好  输出的视频很卡  基本上只有几帧  没有办法应用
      今天尝试了在获取图像 进行检测之前  对图像进行 位数压缩 颜色深度压缩 以及通过线性直插对尺寸进行压缩 的方法
      来提高检测速度  最终结果为 检测速度提高到 十帧左右 (效果不明显)而且遇到了检测精确度下降的问题
      目前这个算法还存在 内存泄漏的问题 需要解决
      图像检测速度问题  初步定为  通过调用GPU来加速运算(可能由于时间问题  没办法实现)  或者  通过切割图片  多线程并行处理检测(这里还存在另一个问题:假如切割处正好切到了车辆  后期检测不到怎么办。。。)  具体的方法确定明天和学长(刚哥)  请教  希望能找到合适的方法来解决  最终实现 实时视频的检测 显示  
Connecting & Messaging from Any.
举报 使用道具
SNOWING_TREE 中级会员 发表于 2017-12-30 00:37:41 | 显示全部楼层
huanyuan54 发表于 2017-12-29 22:38
今天:
   通过对车辆逻辑追踪算法研究:本组初步打算通过利用训练好的分类器进行目标检测。(具体实现将在 ...

注意 opencv 一定要是基于 3.3.1 的  防止最后整合中出现 版本兼容性问题
Connecting & Messaging from Any.
举报 使用道具
huanyuan54 注册会员 发表于 2017-12-29 22:38:14 | 显示全部楼层
本帖最后由 huanyuan54 于 2017-12-29 22:39 编辑

今天:
   通过对车辆逻辑追踪算法研究:本组初步打算通过利用训练好的分类器进行目标检测。(具体实现将在后面更新)
   
   完成详细设计处理结果显示模块见附件
计划:通过opencv3.0 adaboost haar训练 车辆分类检测



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2017-12-29 22:27:07 | 显示全部楼层
本帖最后由 陈燕 于 2017-12-29 22:46 编辑

工作总结:
1、编写了详细设计文档的数据收集模块
2、了解了Mat 类的内存管理机制
3、通过设置不同的参数,输出格式也不同


注:当fmt的值为1时,输出比较奇怪;当>5时输出与0时保持一致。2、3、4、5与PDF的运行图片一致
4、Mat 与 IplImage 和 CvMat 的转换
  1. Mat image = imread("C:\\picture\\1.jpg", IMREAD_COLOR);
  2. Mat M(3, 2, CV_8UC3);
  3. if (!image.data) // Check for invalid input  
  4. {
  5.         cout << "Could not open or find the image" << std::endl;
  6.         return -1;
  7. }
  8. //convert to IplImage  
  9. IplImage ipl_img(image);  //(1)  
  10. //IplImage ipl_img = image; //(2)  
  11. cvShowImage("ipl_img", &ipl_img);
  12. cout << "M1 = " << endl << &img << endl << endl;
  13. cvWaitKey(0);
复制代码

工作计划:完成openCV最后一章的学习


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
w_ch 注册会员 发表于 2017-12-29 22:10:25 | 显示全部楼层
本帖最后由 w_ch 于 2017-12-29 23:00 编辑

今日:
1.编写详细设计的图像识别模块;opencv车牌定位;
2.opencv3.0 adaboost haar训练 车辆分类分为大车和小车;(未完成)
https://www.cnblogs.com/easymind ... /07/03/2574826.html

目标检测分为三个步骤:

1、 样本的创建

2、 训练分类器

3、 利用训练好的分类器进行目标检测。


file:///C:\Users\w\Documents\Tencent Files\1612144754\Image\C2C\{VH}IL((_}8)ZM`43~8(C(5.jpg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
袁绪蝶 中级会员 发表于 2017-12-29 09:38:34 | 显示全部楼层
本帖最后由 袁绪蝶 于 2017-12-29 22:41 编辑

2017-12-29
今天:
1.cout << "R (python) = "  << endl << format(R, "python") << endl << endl;//Python 格式输出
  这行代码显示:没有和参数列表匹配的format实例。
  解决方法:文档是12年的,vs是15的,初步怀疑是vs版本太高,文档不适用了,证据如下:
                    opencv格式化输出
                    Ptr<Formatted> format(InputArray mtx, int fmt),第二个参数为int型,所以应该是不同数字代表不同的输出格式。
                        
2.整体流程


明天:
周六周日的主要任务:opencv的图像的基本操作和数据获取与存储 还有一些不懂的地方,这两天弄明白,尤其是数据获取与存储。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
huanyuan54 注册会员 发表于 2017-12-28 22:53:25 | 显示全部楼层
本帖最后由 huanyuan54 于 2017-12-28 22:55 编辑

今日完成:
对opencv初步学习告一段落。。。
计划:针对逻辑追踪算法进行研究

Connecting & Messaging from Any.
举报 使用道具
陈燕 注册会员 发表于 2017-12-28 22:07:36 | 显示全部楼层
本帖最后由 陈燕 于 2017-12-28 22:10 编辑

2017-12-28
工作总结:
1、学习如何取对角线元素,对矩阵的某行某列赋值
2、了解了Mat 表达式与Mat_类
注:Mat_<uchar> M1 = (Mat_<uchar>&)M;
     //声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,
     //T可以被任何字母或者数字代替。
工作计划
完成剩下的内容学习

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

推荐板块

精彩推荐

热门排行

明星用户

手机版|小黑屋|AnyMSG ( ©AnyMSG 2009 - 2017 · ICP备16009991号 )

GMT+8, 2018-10-21 12:35