一. 引入

opencv人脸识别大家应该都听说过,本篇目的是利用opencv从视频帧中识别指定的物体,并框出来,且可以保存截取到的物体图片,会将整个流程都讲一下,包括训练自己的分类器,使用训练好的分类器进行识别。这里以识别舌头为例。

二.  环境:

1.  python 3.6.3
2. opencv 3.4.0

三. 训练自己的分类器

1. 注意点:训练集分为正样本,负样本,样本全部为灰度图片,正样本图片尺寸需要固定,一般40*40左右即可,大了电脑跑不动,负样本尺寸不固定,负样本数量要比正样本多才行,少了有问题。
图片批量缩小工具下载:链接:https://pan.baidu.com/s/1pMAp19p 密码:vpp1
图片批量灰度处理:使用美图秀秀
2. 正样本制作,使用美图秀秀将舌头的图片全部裁剪出来(尺寸一致为:40*40的),保存到一个文件夹pos中,当然可以先用大尺寸正方形框进行裁剪,然后再用图片缩小工具进行制定尺寸缩小。最后再用美图秀秀批量灰度化。
附上名字自动有序化Java代码:
[java] view plaincopy
  1. String path = "C:\\Users\\Administrator\\Desktop\\pos\\";
  2. File f = new File(path);
  3. File[] files = f.listFiles();
  4. for (File file : files) {
  5. i++;
  6. file.renameTo(new File(path+i+"."+file.getName().split("\\.")[1]));
  7. }
处理后得到如下所示图片:
3. 负样本制作:如上操作类似,不过这里不要求尺寸一样,但是负样本图片中一定不要包含待识别的区域(如这里的:舌头)
如下所示:

4. 生成样本资源记录文件:

a. 正样本资源记录文件
新建pos文件夹,将正样本的灰度图拷贝进去
使用JAVA代码生成正样本资源记录文件:
[java] view plaincopy
  1. String path = "E:\\tools\\python\\eclipse\\work\\pythonTest\\demo\\0202\\img\\train\\tongue\\pos\\";
  2. File txtfile = new File(path+"pos.txt");
  3. FileOutputStream fos = new FileOutputStream(txtfile);
  4. PrintWriter pw = new PrintWriter(fos,true);
  5. String s = "";
  6. File[] files = new File(path).listFiles();
  7. for (File file : files) {
  8. pw.println("pos/"+file.getName()+" 1 0 0 40 40");
  9. }

生成后删除最后一行的带有(pos.txt)的内容,让正样本资源记录文件内容如下类似所示:


(1 0 0 40 40)分别指代: 数量  左上方的坐标位置(x,y)  右下方的坐标位置(x,y)
处理好后,将pos.txt 移动到上一级文件夹
b. 负样本资源记录文件
新建neg文件夹,将负样本的灰度图拷贝进去
使用JAVA代码生成负样本资源记录文件:
[java] view plaincopy
  1. String path = "E:\\tools\\python\\eclipse\\work\\pythonTest\\demo\\0202\\img\\train\\tongue\\neg\\";
  2. File txtfile = new File(path+"neg.txt");
  3. FileOutputStream fos = new FileOutputStream(txtfile);
  4. PrintWriter pw = new PrintWriter(fos,true);
  5. String s = "";
  6. File[] files = new File(path).listFiles();
  7. for (File file : files) {
  8. pw.println("neg/"+file.getName());
  9. }

生成后删除最后一行的带有(neg.txt)的内容,让负样本资源记录文件内容如下类似所示:

处理好后,将negtxt 移动到上一级文件夹
得到如图所示文件夹结构:
5. 使用opencv提供的opencv_createsamples.exe程序生成样本vec文件,新建批处理文件:createsamples.bat
内容如下:
[python] view plaincopy
  1. opencv_createsamples.exe -vec pos.vec -info pos.txt -num 25 -w 40 -h 40
  2. pause
说明:25是正样本图片的数量   40 40 是正样本图片的宽高
这些参数的详细解释:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html
运行后会生成 pos.vec文件
6. 使用opencv提供的opencv_traincascade.exe程序训练分类器,新建xml文件夹,再新建批处理文件:LBP_train.bat
内容如下:
[python] view plaincopy
  1. opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 25 -numNeg 666 -numStages 10 -w 40 -h 40 -minHitRate 0.999 -maxFalseAlarmRate 0.2 -weightTrimRate 0.95 -featureType LBP
  2. pause

说明: 25是正样本图片的数量   666是负样本图片的数量   numNeg是层级数  40 40是训练样本的宽高 .....

具体参数解释请查看文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html
运行后会在xml文件夹生成如下文件:

其中cascade.xml是我们需要使用的分类器

四 . 测试训练好的分类器

[python] view plaincopy
  1. '''''
  2. Created on 2018年2月2日
  3. 实时人脸检测
  4. @author: nuohy
  5. '''
  6. import cv2
  7. # 加载opencv自带的人脸分类器
  8. # faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
  9. # faceCascade.load('E:/python/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
  10. faceCascade = cv2.CascadeClassifier("cascade.xml")
  11. faceCascade.load('E:/tools/python/eclipse/work/pythonTest/demo/0202/img/train/tongue/xml/cascade.xml')
  12. cap = cv2.VideoCapture(0)
  13. flag = 0
  14. timeF = 10
  15. while True:
  16. flag+=1
  17. ret, frame = cap.read()
  18. img = frame.copy()
  19. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  20. rect = faceCascade.detectMultiScale(
  21. gray,
  22. scaleFactor=1.15,
  23. minNeighbors=3,
  24. minSize=(3,3),
  25. flags = cv2.IMREAD_GRAYSCALE
  26. )
  27. for (x, y, w, h) in rect:
  28. cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
  29. #识别到物体后进行裁剪保存
  30. #jiequ = img[x:(x+w), y:(y+h)]
  31. #cv2.imwrite('E://tools//python//eclipse//work//pythonTest//demo//0202//img//save//'+str(flag) + '.jpg',jiequ) #save as jpg
  32. #读取到保存图片
  33. #     if(flag%timeF==0):
  34. #         cv2.imwrite('E://tools//python//eclipse//work//pythonTest//demo//0202//img//save//'+str(flag) + '.jpg',frame) #save as jpg
  35. cv2.imshow('frame', frame)
  36. if cv2.waitKey(1) & 0xFF == ord('q'):
  37. break
  38. cap.release()
  39. cv2.destroyAllWindows()
 效果图如下所示:

opencv实时识别指定物体相关推荐

  1. opencv人脸识别以及自定义物体识别系统

    目录 一.简介: 二.软硬件应用: 三.模块介绍: (一)人脸识别: (二).自定义物体识别: (三).图片展示: (四).python框架: (五).执行器--单片机: 四.效果展示: 五.总结 : ...

  2. opencv+python+OpenPose姿态实时识别

    opencv+python+OpenPose 姿态实时识别 1.姿态识别 标记 颈.肩.肘.腕.腰.膝.踝 等特征点进行姿态识别,这些关节都有一定程度的自由度. 2.OPenPose OpenPose ...

  3. opencv 识别黄色物体的程序代码

    识别黄色物体的完整程序代码     import cv2     cap = cv2.VideoCapture(0) #开始读取摄像头信号     while cap.isOpened(): #当读取 ...

  4. 【UE4教程】Unreal 4.22 UI显示指定物体-实时渲染

    UE4教程 UI显示指定物体-实时渲染 介绍一下实时渲染,对指定物体显示到UI上面的教程 效果图 教程部分 创建第三人称模板 添加渲染摄像机组件(可以添加在场景中,也可以添加在人物蓝图内)组件1 组件 ...

  5. C++ 纯 OpenCV 实现扑克牌实时识别

    C++ 纯 OpenCV 实现扑克牌实时识别 网上有很多用OpenCV或其他工具实现扑克牌或者简单的数字识别demo,但都讲的不够简洁清晰或者提供的代码太混乱,所以我自己用OpenCV实现了一下这个d ...

  6. 数字图像处理二维码识别 python+opencv实现二维码实时识别

    数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...

  7. python摄像头识别二维码_python使用pyzbar+opencv实现实时识别二维码--李渣渣(lizaza.cn)...

    写东西就要写全面,前两天写了如何用python生成二维码,今天博主就给大家介绍一个识别二维码的方法. 1.安装本次开发所需要的库opencv 和pyzbar pip install pyzbar pi ...

  8. python人脸照片分类_Python OpenCV 人脸识别(一)

    前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...

  9. 基于python opencv人脸识别的签到系统

    基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...

最新文章

  1. ios中的自动释放池
  2. 刮奖的实现;(刮开上层图层蒙版,露出底部的视图)
  3. linux vim卸载安装包_Linux下卸载安装mysql
  4. 【数据字典】国标数据字典
  5. ftp 追加远程文件_远程办公彻底火了,高效办公,拒绝卡顿,远程利器你选对了么?...
  6. Android学习--还有一些小技巧
  7. 【Angular专题】——(2)【译】Angular中的ForwardRef
  8. 牛逼!java反射创建类实例的三种方式
  9. C++之unique_ptr
  10. Firefox的下载处理器:FlashGot v1.0 Final颁发
  11. 粗谈全息投影与裸眼3D
  12. web期末复习---老师划重点!!
  13. BLUES吉他学习笔记004 bluesrv[8]
  14. 成功解决ThinkPad T14 高负载下CPU降频问题
  15. 数值分析-题目3-龙贝格和高斯求解牛顿迭代节点
  16. diyUpload - jQuery多张图片批量上传插件
  17. 银河麒麟服务器系统ip可ping通,但是tongweb的默认端口9060、8088不能访问,访问提示404
  18. Trojan客户端使用教程
  19. Linux定时清除缓存脚本与清除命令
  20. grafana+alertmanager实现微信报警

热门文章

  1. 有测试智商的软件不,测试智商的软件有哪些
  2. 解决VS Community“无法刷新此账户的凭证”和“无法添加此账户”的问题
  3. 【ES8系列】String 补白、格式化
  4. 使用openssl将pfx格式证书转换成key和crt
  5. 猿辅导2017 笔试题
  6. 测坐标天幕靶软件设计_测速天幕靶检定装置与检定方法
  7. python爬虫一:爬虫简介
  8. python模拟登录12306_python模拟登录12306缺少cookies
  9. 零知识证明 - 从QSP到QAP
  10. 字和词语联合训练的词向量模型