识别处理图像中人脸,人体是图像识别的一个重要分支,在很多场合都需要对人进行查找和处理,在拍照,自动驾驶,机器人,医学,安防等上都有广泛 的用途。opencv 有众多的级联分类器,可以进行简单的人脸,眼,鼻子,嘴,上体,全身,腿的分类。这些分类器还可以通过训练或者组合进一步强化识别能力,从而把几个弱分类器变成一个强分类器使用。

分类器都是一个概率问题,精确度高了,会有遗露,精确度低了,会有错选,通过更多的训练可以使用识别库日渐完善。使用OPENCV自带的训练有很多不尽如人意,不过在特定情况下或者某些要求不高的场合,使用一些手段还是可以使用的的。在查找人眼的过程中,会找到很多非人眼的信息,和人脸结合,人眼查找就精确了很多。

import org.opencv.core.*;
import org.opencv.imgcodecs.*;
import org.opencv.objdetect.*;
import org.opencv.imgproc.*;public class DetectBody {public static void main(String[] args) {try {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);Mat src = Imgcodecs.imread("E:/work/qqq/b5.jpg");Imgcodecs.imwrite("E:/work/qqq/hh81.jpg", getUpperBody(src));Imgcodecs.imwrite("E:/work/qqq/hh82.jpg", getLefteye(src));Imgcodecs.imwrite("E:/work/qqq/hh83.jpg", getRighteye(src));// Imgcodecs.imwrite("E:/work/qqq/hh8.jpg", getLeftear(src));// Imgcodecs.imwrite("E:/work/qqq/hh8.jpg", getRightear(src));Imgcodecs.imwrite("E:/work/qqq/hh84.jpg", getMouth(src));Imgcodecs.imwrite("E:/work/qqq/hh85.jpg", getNose(src));// Imgcodecs.imwrite("E:/work/qqq/hh8.jpg", getSmile(src));// Imgcodecs.imwrite("E:/work/qqq/hh8.jpg", getLowerBody(src));// Imgcodecs.imwrite("E:/work/qqq/hh8.jpg", getFullBody(src));Imgcodecs.imwrite("E:/work/qqq/hh86.jpg", getFace(src));Imgcodecs.imwrite("E:/work/qqq/hh87.jpg", getProfileFace(getFace(src)));CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_frontalface_alt2.xml");MatOfRect objDetections2 = new MatOfRect();faceDetector.detectMultiScale(src, objDetections2);for (Rect rect : objDetections2.toArray()) {Imgproc.rectangle(src, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);Mat s = src.submat(rect);getLefteye(s).copyTo(s);}Imgcodecs.imwrite("E:/work/qqq/hh88.jpg", src);} catch (Exception e) {System.out.println("例外:" + e);}}public static Mat getUpperBody(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_mcs_upperbody.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getLefteye(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_mcs_lefteye.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getRighteye(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_mcs_righteye.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getLeftear(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_mcs_leftear.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getRightear(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_mcs_rightear.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getMouth(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_mcs_mouth.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getNose(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_mcs_nose.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getSmile(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_smile.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getLowerBody(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_lowerbody.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getFullBody(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_fullbody.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getFace(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_frontalface_alt2.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}public static Mat getProfileFace(Mat src) {Mat result = src.clone();if (src.cols() > 1000 || src.rows() > 1000) {Imgproc.resize(src, result, new Size(src.cols() / 3, src.rows() / 3));}CascadeClassifier faceDetector = new CascadeClassifier("./resource/haarcascade_profileface.xml");MatOfRect objDetections = new MatOfRect();faceDetector.detectMultiScale(result, objDetections);for (Rect rect : objDetections.toArray()) {Imgproc.rectangle(result, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 0, 255), 2);}return result;}
}

上半身的查找,感觉还是比较准确的,特别是在自拍相机中。由于距离人数固定,可以通过大小和人脸结合,很容易过滤掉不准确的分类

对人眼的查找,单纯查找人眼,这是左眼,有很多误选,最后结合人脸,就准确了。

右眼

嘴的选择,也需要结合人脸查找

鼻子

人脸

结合人脸的眼睛选择就变得准确了

opencv人体识别技术汇总相关推荐

  1. Android端基于OpenCV边缘识别技术

    本文所采用的技术大体来源于网络上另一作者的开源项目,https://pqpo.me/2017/09/11/opencv-border-recognition/#reward,只是对其智能裁剪部分做了优 ...

  2. P2P流量识别技术汇总(原理、优缺点介绍)

    随着P2P技术不断地发展演进,P2P技术及架构的演进经历了集中式.全分布式.混合式三个阶段.P2P常规流量检测一般通过常用的端口来进行识别,然而随着架构的演进,P2P流量识别也因此从简单的端口匹配到复 ...

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

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

  4. 使用OPENCV进行人体识别

    使用OPENCV进行人体识别 使用OpenCV人体识别,可以点官网示例链接,也可以往下看. 安装OpenCV 具体步骤有点...各位可以参考官网的安装 教程. 代码部分 如果帧数极低, 可以在代码中修 ...

  5. java人体识别_用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍...

    items = results.getAnalyseList(); // 开发者根据需要处理识别结果,例如,在此方法中进行相似度计算,从而在检测到特定姿势后进行拍照等操作. // 需要注意,这里只对检 ...

  6. python opencv 人体/人脸识别 简易demo

    前言 参考文章: pythonopencv检测行人_[图像处理]使用OpenCV实现人脸和行人检测 Python如何实现行人识别-人体识别 本文主要讲述关于opencv官方提供的现成模型,采取Hog特 ...

  7. 用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍

    用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍 你有没有过这种体验,拍照时对着镜头,脑子一片空白.表情僵硬.手和脚无处安放,最后拍出来的照片很是奇怪.拍照软件中的固 ...

  8. opencv车牌识别入门资料汇总

    使用OpenCV和C++实现的车牌识别系统. http://download.csdn.net/detail/u014743238/7204477 使用VC++6.0做开发工具, 采用简单的SDI框架 ...

  9. JS的人体或某个部位识别技术

    JS越来越强大,看到牛人写的JS各个实际应用,转载一下, JavaScript人脸识别技术 http://www.webhek.com/face-detection/ 关于nude.js裸体识别脚本 ...

最新文章

  1. leetcode-215 数组中的第K个最大元素
  2. 深入浅出JVM的锁优化案例
  3. qt dll 1% 不是有效的win32应用程序
  4. python画图代码turtle-使用Python的turtle模块画图的方法
  5. 如何让区块链连接外面的世界
  6. POJ 1380 坐标旋转
  7. mock 生成在线图片
  8. 【OS学习笔记】十三 保护模式一:全局描述符表(GDT)
  9. jsp+javabean实现购物车
  10. linux下 udf提权_mysql——udf提权
  11. Canny边缘检测及C++实现
  12. 小小c语言贪吃蛇思路,【图片】C语言小游戏~贪吃蛇【c语言吧】_百度贴吧
  13. pytorch代码阅读、代码学习
  14. 在国外当程序员爽吗?
  15. Java开发环境安裝教程
  16. 华为防火墙IPSec详解与配置实验
  17. linux鼠标怎么取出来,浅析linux中鼠标数据读取
  18. 谷歌浏览器提示“喔唷,崩溃啦!”
  19. 实践任务1:利用 HBuilderX制作产品展示模块+实践任务2:利用 HBuilderX制作公司网站首页+实践任务3: 利用 HBuilderX制作公司网站首页实现固定侧边菜单
  20. 对标美国Lifelock公司,真我要做个人和企业身份信息保护的防火墙

热门文章

  1. 【C语言】练习函数调用
  2. 找一个传奇服务端,斗破苍穹斗气化翼版本
  3. 深入分析:代理游戏真的可以赚钱吗?
  4. Winmail安装及服务启动失败问题
  5. 传智播客_急先锋_html、css、js_郝强勇老师
  6. 深度学习新贵?经验不限,月薪6万!
  7. mybais-plus出现Invalid bound statement (not found)的解决方案
  8. 服务器部署邮件功能_真正连续部署的功能标志
  9. 手动挡/自动挡/手自一体/CVT/双离合——变速箱扫盲
  10. 【图像加密】 Logistic混沌+Arnold置乱图像加密解密【含Matlab源码 1281期】