当前位置: 首页 > news >正文

工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程

一.背景

      公司是非煤采矿业,核心业务是采选,大型设备多,安全风险因素多。当下政府重视安全,头部技术企业的安全解决方案先进但价格不低,作为民营企业对安全投入的成本很敏感。利用我本身所学,准备搭建公司的安全管理技术平台,从视觉、传感等多方面配合,逐步将公司的生产安全管理技术平台搭建起来。也许在不久的未来,公司各层级都看到了技术的价值,会逐步过渡到一线品牌的安全产品上来,逐步推动生产安全技术在公司的应用。

      本文是安全帽的第二篇,用java简单调用OpenCV自带的面部检测器找到面部图片区域,了解整体java调用OpenCV的过程。

      本文建立在第一篇上面,请先阅读第一篇。工业生产安全-安全帽第一篇-opencv及java开发环境搭建-CSDN博客

二.思路分析

        我之前有一些目标检测、图像算法(大学时,全专业图形学数一数二,不过和专业的比起来,是菜鸟哈!!!)的粗浅经验。这里就先说说程序执行的思路。其实,很简单,就是图片准备=》检测器准备=》执行检测器=》拿结果后处理。

       图片准备,准确说是输入准备,一般都是图片,看具体的场景嘛!有的会处理成灰度图片或者二值化,具体的就看检测器的要求。

     检测器准备,形态说就是一个文件,一般是xml文件。这个文件从哪里来呢?这个就是我们平时说的模型训练的产物。不管是大模型、小模型,简单来说就是一堆数据(图片、文字、语音、文档等)丢进去,让训练器运行,得到一个结果文件。这个训练器的核心算法就决定了产物的水平,反正我个人不相信它们有智慧,我个人认为今天的人工智能发展虽然取得了很多成绩,但是与真正的智慧还有很远。当然,这并不影响我们使用它来解决一些问题。扯远了,拉回来。简单理解,检测器就是模型训练出来的产物,可以说是一个规则集,用来判断目标是否符合规则集,符合就找到了目标。

    执行检测器,这个就是一个语句,没有啥特别说的。

    结果后处理,一般来说,图片这种结果目标检测是给你一堆像素点,你自己想改个颜色、加个框框、涂个蒙版都可以,反正表示你检测到了结果嘛!

三.上代码

package com.scantt.opencv.demos.eyes;import java.net.URL;import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;public class FaceDetection {static {String path1 = ClassLoader.getSystemResource(Core.NATIVE_LIBRARY_NAME + ".dll").getPath();if (path1.startsWith("/")) {path1 = path1.substring(1);// windows系统有毒...jar包不认识 /开头这样的形式,如/c:/xx}System.load(path1);}public static void main(String[] args) {// 读取图像URL url = ClassLoader.getSystemResource("eyes/dongfang.jpg");String path = url.getPath();if (path.startsWith("/")) {path = path.substring(1);// windows系统有毒...jar包不认识 /开头这样的形式,如/c:/xx}Mat image = Imgcodecs.imread(path);// 转换为灰度图像Mat gray = new Mat();Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY);// 加载面部检测器URL url2 = ClassLoader.getSystemResource("eyes/haarcascade_frontalface_default.xml");String path2 = url2.getPath();if (path2.startsWith("/")) {path2 = path2.substring(1);// windows系统有毒...jar包不认识 /开头这样的形式,如/c:/xx}CascadeClassifier faceDetector = new CascadeClassifier(path2);// 检测面部MatOfRect faceDetections = new MatOfRect();faceDetector.detectMultiScale(gray, faceDetections);// 遍历每个检测到的面部for (Rect rect : faceDetections.toArray()) {// 面部画个框
//			Imgproc.rectangle(image, rect, new Scalar(255, 0, 0), 2);// 面部画个圆Imgproc.circle(image, new Point(rect.x + rect.width / 2, rect.y + rect.height / 2), rect.width / 2,new Scalar(255, 0, 0));}// 显示结果HighGui.imshow("Eye Detection", image);HighGui.waitKey(0);}
}

图片dongfang.jpg,你随便找个包含人头像的,我是放到src/main/resources/eyes目录下的哦。

检测器文件haarcascade_frontalface_default.xml, 去OpenCV安装目录去找opencv\build\etc\haarcascades,我还是放到src/main/resources/eyes目录下的哦。

      我的检测结果是

    

四.后面干什么

      知道怎么调用检测器了,当然就是去找一个或者做一个安全帽的检测咯,先拿个别人的试试吧!!!

http://www.lryc.cn/news/489691.html

相关文章:

  • 人工智能(AI)与机器学习(ML)基础知识
  • 得物彩虹桥架构演进之路-负载均衡篇
  • Jmeter中的断言(四)
  • vue2 src_Todolist编辑($nextTick)
  • driver.js实现页面操作指引
  • ffmpeg区域颜色覆盖
  • 【Python TensorFlow】进阶指南(续篇三)
  • QT 实现仿制 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-31
  • 面试题---深入源码理解MQ长轮询优化机制
  • stable diffusion生成模型
  • 分治法的魅力:高效解决复杂问题的利器
  • Spring IOC实战指南:从零到一的构建过程
  • 3.langchain中的prompt模板 (few shot examples in chat models)
  • 量子感知机
  • VM虚拟机装MAC后无法联网,如何解决?
  • IDEA 基本设置
  • Chrome 浏览器 131 版本新特性
  • 使用php和Xunsearch提升音乐网站的歌曲搜索效果
  • 计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)
  • STL关联式容器之map
  • 【HarmonyOS】鸿蒙应用唤起系统相机拍照
  • Linux系统使用valgrind分析C++程序内存资源使用情况
  • Java基础夯实——2.7 线程上下文切换
  • 死锁相关习题 10道 附详解
  • VisionPro 机器视觉案例 之 彩色保险丝个数统计
  • go-zero(七) RPC服务和ETCD
  • Jenkins + gitee 自动触发项目拉取部署(Webhook配置)
  • 043 商品详情
  • 【人工智能】Python与Scikit-learn的模型选择与调参:用GridSearchCV和RandomizedSearchCV提升模型性能