分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

高帧率扑克牌识别技术详解一(可用于车牌识别,字符识别,人脸检测,验证码识别等等成熟领域)

分类: 扑克牌识别系统2013-10-06 13:32 283人阅读 评论(1) 收藏 举报
扑克牌识别人脸检测车牌识别OCR验证码识别

本文主要介绍目前主流的adaboost目标检测算法,和CNN卷积神经网络字符识别算法。以扑克牌识别技术为题介绍相关的开发流程和经验。

整个系统包括,

1、摄像头采集,这里以USB摄像头通过directShow采集为例进行介绍。一个线程做采集,一个线程做检测识别。

2、字符检测正负样本得取。后面会详细介绍怎么在只有视频的情况下,

(1)自己写个鼠标拉框手工割取样本的软件,采用OpenCV的鼠标相应控件很容易实现。

(2)或者通过灰度化,自适应二值化,ROI找轮廓,轮廓筛选,ROI轮廓分割,自动割取样本;

(3)以及通过pictureRelate进行重复高样本自动剔除等等筛选。

3、adaboost字符检测:

(1)用adaboost+haar特征训练第2步中得取的样本。

(2)进一步将测试分割出的误识别样本,进行筛选,重复2,3两步。直到获得满意的检测率。

4、识别样本得取

(1)字符识别样本读取,分为0-10,JQK,共14个类别。

(2)花色样本得取,共桃杏梅方四个类。

5、采用CNN组进行样本训练识别。这里为了提高识别率,采用两个CNN分别识别4.1和4.2,采用两个CNN并行思路提升识别速度。

(1)针对4.1的14各类,训练一个CNN分类器;

(2)针对4.2的4各类训练一个CNN分类器。

在介绍系统之前先对本文涉及的两大算法做简要的介绍:

1、adaboost算法实例介绍,这里不上理论,直接来实例对照着学boosting的思路。

http://www.sigvc.org/bbs/thread-727-1-1.html

2、CNN算法详细介绍。

http://www.cnblogs.com/tornadomeet/archive/2013/05/05/3061457.html

分享到: 
  • 上一篇:JDI工作室系列项目介绍--JDI工作室介绍

高帧率扑克牌识别技术详解三--字符检测的正负样本得取(利用鼠标画框抠图)
分类: 扑克牌识别系统2013-10-06 14:02 193人阅读 评论(0) 收藏 举报
OpenCV鼠标控件抠图ROI轮廓pictureRelate

第二部分主要讲解做目标检测时候,怎么得取正负样本以及如何对正负样本进行筛选。

(1)自己写个鼠标拉框手工割取样本的软件,采用OpenCV的鼠标相应控件很容易实现。

前面已经通过directShow实现了视频采集和保存了,下面将用OpenCV实现一个手动拉框,自动保存ROI区域的工具来获取样本。

OpenCV里面采用setMouseCallback(window_name,mouse_function,&mouse); 来回调mouse_function,其中mouse_function里面通过CV_EVENT_LBUTTONDOWN等事件判断相应不同的操作。比如以下代码,可以在窗口画框,这时候你只要将框CvRect坐标保存,就可以实现cvSetImageROI截取区域咯:

[cpp] view plaincopyprint?
  1. #include <cv.h>
  2. #include <highgui.h>
  3. // Define our callback which we will install for
  4. // mouse events.
  5. //
  6. void my_mouse_callback(
  7. int event, int x, int y, int flags, void* param
  8. );
  9. CvRect box;
  10. bool drawing_box = false;
  11. // A litte subroutine to draw a box onto an image
  12. //
  13. void draw_box( IplImage* img, CvRect rect ) {
  14. cvRectangle (
  15. img,
  16. cvPoint(box.x,box.y),
  17. cvPoint(box.x+box.width,box.y+box.height),
  18. cvScalar(0xff,0x00,0x00)    /* red */
  19. );
  20. }
  21. int main( int argc, char* argv[] ) {
  22. box = cvRect(-1,-1,0,0);
  23. IplImage* image = cvCreateImage(
  24. cvSize(200,200),
  25. IPL_DEPTH_8U,
  26. 3
  27. );
  28. cvZero( image );
  29. IplImage* temp = cvCloneImage( image );
  30. cvNamedWindow( "Box Example" );
  31. // Here is the crucial moment that we actually install
  32. // the callback.  Note that we set the value ‘param’ to
  33. // be the image we are working with so that the callback
  34. // will have the image to edit.
  35. //
  36. cvSetMouseCallback(
  37. "Box Example",
  38. my_mouse_callback,
  39. (void*) image
  40. );
  41. // The main program loop.  Here we copy the working image
  42. // to the ‘temp’ image, and if the user is drawing, then
  43. // put the currently contemplated box onto that temp image.
  44. // display the temp image, and wait 15ms for a keystroke,
  45. // then repeat…
  46. //
  47. while( 1 ) {
  48. cvCopyImage( image, temp );
  49. if( drawing_box ) draw_box( temp, box );
  50. cvShowImage( "Box Example", temp );
  51. if( cvWaitKey( 15 )==27 ) break;
  52. }
  53. // Be tidy
  54. //
  55. cvReleaseImage( &image );
  56. cvReleaseImage( &temp );
  57. cvDestroyWindow( "Box Example" );
  58. }
  59. // This is our mouse callback.  If the user
  60. // presses the left button, we start a box.
  61. // when the user releases that button, then we
  62. // add the box to the current image.  When the
  63. // mouse is dragged (with the button down) we
  64. // resize the box.
  65. //
  66. void my_mouse_callback(
  67. int event, int x, int y, int flags, void* param )
  68. {
  69. IplImage* image = (IplImage*) param;
  70. switch( event ) {
  71. case CV_EVENT_MOUSEMOVE: {
  72. if( drawing_box ) {
  73. box.width  = x-box.x;
  74. box.height = y-box.y;
  75. }
  76. }
  77. break;
  78. case CV_EVENT_LBUTTONDOWN: {
  79. drawing_box = true;
  80. box = cvRect( x, y, 0, 0 );
  81. }
  82. break;
  83. case CV_EVENT_LBUTTONUP: {
  84. drawing_box = false;
  85. if( box.width<0  ) {
  86. box.x+=box.width;
  87. box.width *=-1;
  88. }
  89. if( box.height<0 ) {
  90. box.y+=box.height;
  91. box.height*=-1;
  92. }
  93. draw_box( image, box );
  94. }
  95. break;
  96. }
  97. }

(2)或者通过灰度化,自适应二值化,ROI找轮廓,轮廓筛选,ROI轮廓分割,自动割取样本;

(3)以及通过pictureRelate进行重复高样本自动剔除等等筛选。

高帧率扑克牌识别技术详解五--采用LBP+HOG SVM做目标分类,车牌检测,字符检测等

分类: 扑克牌识别系统2013-10-06 14:45 164人阅读 评论(0) 收藏 举报
行人检测目标检测分类

在样本数量比较少的情况下,可以采用HOG、SVM对样本进行初步的筛选出,正负样本,本文接着上一节二值化出来部分样本后,用pictureRelate做初步筛选出正负样本各500,准确训练。

1、pictureRelate使用http://www.walthelm.net/picture-relate/

   可以用来比较图片的相似程度,或找出类似的图片文件的图像处理工具。在同一个视窗里浏览不同文件夹和硬盘驱动器中的图片文件#支持查看,改名,删除,剪贴,拖动,切换至文件管理器等操作#可处理多达50000多张图片!支持JPG, BMP, PNG, TIFF, PPM, PGM, PBM, RAS等格式#可以通过导入过滤命令行读取任何其它格式。


这里HOG LBP特征可以采用VLfeat(http://www.vlfeat.org/)这个开源库里面的特征,或者用OpenCV里面的也可以,分类器SVM采用的是OpenCV里面的。

2、下面介绍下VLfeat里面的HOG特征

左图是原图,右图是HOG变化后的可视化效果。可以仔细对比,房子的轮廓还是可见的。

3、HOG+SVM训练目标检测的流程(OpenCV自带):

http://blog.csdn.net/carson2005/article/details/7841443

(1)准备训练样本集合;包括正样本集和负样本集;

(2)收集到足够的训练样本之后,你需要手动裁剪样本。例如,你想用Hog+SVM来对商业步行街的监控画面中进行行人检测,那么,你就应该用收集到的训练样本集合,手动裁剪画面中的行人(可以写个简单程序,只需要鼠标框选一下,就将框选区域保存下来--这一步在上一节有介绍)。

(3)裁剪得到训练样本之后,将所有正样本放在一个文件夹中;将所有负样本放在另一个文件夹中;并将所有训练样本缩放到同样的尺寸大小。本文是采用90*24的区域训练的。

(4)提取所有正样本的Hog特征;

(5)提取所有负样本的Hog特征;

(6)对所有正负样本赋予样本标签;例如,所有正样本标记为1,所有负样本标记为0;

(7)将正负样本的Hog特征,正负样本的标签,都输入到SVM中进行训练;Dalal在论文中考虑到速度问题,建议采用线性SVM进行训练。这里,不妨也采用线性SVM;

(8)SVM训练之后,将结果保存为文本文件。

(9)线性SVM进行训练之后得到的文本文件里面,有一个数组,叫做support vector,还有一个数组,叫做alpha,有一个浮点数,叫做rho;将alpha矩阵同support vector相乘,注意,alpha*supportVector,将得到一个列向量。之后,再该列向量的最后添加一个元素rho。如此,变得到了一个分类器,利用该分类器,直接替换opencv中行人检测默认的那个分类器(cv::HOGDescriptor::setSVMDetector()),就可以利用你的训练样本训练出来的分类器进行检测了。

效果显示:

高帧率扑克牌识别技术详解一(可用于车牌识别,字符识别,人脸检测,验证码识别等等成熟领域)相关推荐

  1. 聊聊自动驾驶必须解决哪些感知问题?交通标志识别技术详解

    交通标志识别系统是智能交通系统与先进辅助驾驶系统的重要组成部分,由于道路交通较为复杂,提高交通检测与识别算法的准确率和实时性是走向实际应用进程中需要解决的关键问题. 算法的准确率是交通标志识别研究中一 ...

  2. Apollo星火计划学习笔记——Apollo决策规划技术详解及实现(以交通灯场景检测为例)

    文章目录 前言 1. Apollo决策技术详解 1.1 Planing模块运行机制 1.2 Apollo决策功能的设计与实现 1.2.1参考路径 Reference Line 1.2.2 交规决策 T ...

  3. 车牌识别技术详解一(可用于车牌识别,字符识别,人脸检测,验证码识别等等成熟领域)

    本文主要介绍目前主流的adaboost目标检测算法,和CNN卷积神经网络字符识别算法.以扑克牌识别技术为题介绍相关的开发流程和经验. 整个系统包括, 1.摄像头采集,这里以USB摄像头通过direct ...

  4. Python+OpenCV人脸识别技术详解

    总在科幻电影里看到人脸识别,现在我们也可以编程来实现啦.哈哈~~ OpenCV是Intel®开源计算机视觉库.它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. ...

  5. asterisk zap模拟卡的技术详解和疑难杂症以及拟线FXO的主叫号码识别(来电显示):

    zap模拟卡的疑难杂症: http://www.asteriskcn.com/index.php?q=content/%E6%A8%A1%E6%8B%9F%E5%8D%A1%E7%9A%84%E7%9 ...

  6. 车牌识别技术详解五--采用LBP+HOG SVM做目标分类,车牌检测,字符检测等

    在样本数量比较少的情况下,可以采用HOG.SVM对样本进行初步的筛选出,正负样本,本文接着上一节二值化出来部分样本后,用pictureRelate做初步筛选出正负样本各500,准确训练. 1.pict ...

  7. 目标人脸检测与识别(计算机视觉)

    一.实验目的 通过python 语言编程设计人脸检测算法,以此人脸作为训练样本,训练目标人脸模型,进一步实现目标人脸的识别.通过上述编程促进学生理解并掌握人脸检测及识别的相关原理,同时培养学生的编程能 ...

  8. python开发技术详解pdf下载_python开发技术详解附源码-python开发技术详解电子书pdf下载高清去水印版-精品下载...

    Python开发技术详解适合Python爱好者.大中专院校的学生.社会培训班的学生以及用Python语言进行系统管理.GUI开发.Web开发.数据库编程.网络编程的人员使用. 内容提要 Python是 ...

  9. 技术详解:基于人脸识别的 AI 弹幕

    --------点击屏幕右侧或者屏幕底部"+订阅",关注我,随时分享机器智能最新行业动态及技术干货---------- 有时候,弹幕比剧情还精彩,那些脑洞大开.观点鲜明的弹幕,可以 ...

最新文章

  1. html怎么使用伪类清除浮动,JS中使用 after 伪类清除浮动实例
  2. 第五章 Mininet常用命令参数介绍
  3. python数据表_第1关:了解python数据表操作
  4. css网页布局兼容性有哪些要点与诀窍
  5. 轻量级分布式任务调度平台 XXL-JOB
  6. Asp.net Boilerplate 源码无法打开——找不到.net core sdk
  7. bootstratp图标的使用
  8. 餐饮后厨计算机应用,美萍餐饮管理系统,餐饮管理软件,餐饮软件,酒店收银系统,饭店点菜系统 --- 管理软件 美萍是专家!...
  9. PDF连接服务器信息,远程连接服务器.pdf
  10. hadoop集群搭建-(三台机器)
  11. BMI体重指数计算器
  12. matplotlib 绘图可视化知识点整理
  13. 《孙子兵法》帮你找到合格的管理者
  14. 【ES 笔记】 ElasticSearch 基本的查询语句介绍
  15. Xmanager的xbrowser登陆图形界面
  16. 漫步者和南卡蓝牙耳机哪个好?高性价比蓝牙耳机测评
  17. 【实验五 一维数组】7-9 sdut-C语言实验- 排序
  18. 熵值法的信息熵值、效用值如何计算?
  19. linux的常用备份方法,Linux系统下常用的数据备份方法
  20. 秘技·真·一键卸载JDK,刷新你的的世界观!

热门文章

  1. CSS---padding详解
  2. 液化石油气采样钢瓶标准取样流程
  3. 如何从0到1搭建一个个人网站
  4. Python:pandas.DataFrame.describe(df.describe(include='all'))
  5. 【EI会议|检索稳定】2021信息、控制及自动化国际学术会议(ICICA 2021)
  6. html css 清除 button 选中时的边框样式 CSS outline属性
  7. JAVA实现本月国际国内节日
  8. 疫情相关的api文档
  9. 【VScode】搜索栏语法
  10. watermark-removal: 一款超赞的开源图片去水印解决方案