Java版人脸跟踪三部曲之一:极速体验

java,人脸,跟踪,三部曲,之一,极速,体验 · 浏览次数 : 291

小编点评

**欣宸的《Java版人脸跟踪三部曲》系列** **简介:** 《Java版人脸跟踪三部曲》系列是一套由欣宸原创的 Java 应用程序,包含三个部分:极速体验、编码设计与实现和结果验证。 **主要内容:** * **极速体验:**介绍 CamShift 算法及其在 Java 中的应用。 * **编码设计与实现:**详细介绍了 Java 代码的编写过程,包括模型加载、检测和预览。 * **结果验证:**展示了在 Windows 命令行中执行代码以预览人脸追踪的效果。 **使用方法:** 1. 下载并安装 Java 1.8.0_291。 2. 下载并安装 OpenCV 库。 3. 下载人脸检测模型文件。 4. 将模型文件放在 `C:\study\javacv\model` 目录下。 5. 将 Java 应用文件、动态链接库和模型文件放在 `C:\study\javacv\simple-grab-push-1.0-SNAPSHOT` 目录下。 6. 在 Windows 命令行中运行 `java -Djava.library.path=C:\study\javacv\lib -Dmodel.file.path=C:\study\javacv\model\haarcascade_frontalface_alt.xml -jar C:\study\javacv\simple-grab-push-1.0-SNAPSHOT.jar` 命令。 **结果:** 运行代码后,会在控制台输出以下信息: * 模型文件加载完毕,初始化完成。 * 捕获并预览摄像头拍摄到的内容。 * 人脸在镜头前出现和消失的演示。 **结论:** 《Java版人脸跟踪三部曲》是一个使用 Java 和 OpenCV 框架开发的人脸跟踪应用程序,它展示了 CamShift 算法在 Java 中的应用。

正文

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

关于《Java版人脸跟踪三部曲》系列

-《Java版人脸跟踪三部曲》系列是欣宸的又一原创,目标是通过理论加实战,与大家一同了解CamShift(连续自适应均值漂移)算法在Java领域的实际应用,整个系列由以下三篇文章组成:

  1. 极速体验:这是欣宸原创的一大特色,先动手,用最短时间和最小代价了解CamShift能做什么
  2. 开发设计:这是编码前的准备工作,包含:要做什么?需要那些知识点?逻辑和流程梳理
  3. 编码实战:在本篇咱们正式开始编码并运行验证,经历了前面的充分准备,真正开始编码的时候不但顺畅,您还会迸发有很多与欣宸不一样的想法,例如不仅检测人脸,还能带上年龄性别,却不用多次做深度学习推理,又或者,检测出多个人脸,但是只跟踪某人,甚至多人同时跟踪
  • 另外,整个《Java版人脸跟踪三部曲》系列也是《JavaCV的摄像头实战》系列的一部分,分别是《JavaCV的摄像头实战》系列的的第十五、第十六、第十七篇

本篇概览

  • 本文的目标是快速体验Java版人脸跟踪的功能,不涉及理论知识,不涉及编码,全是动手操作,由以下步骤组成:
  1. 准备本地环境
  2. 下载三个文件:java应用,动态链接库,人脸检测模型文件
  3. 运行java应用,验证效果

准备本地环境

  1. 准备一台可上网的windows系统的电脑,我这里是64位win10
  2. 一个USB摄像头,与电脑连接正常
  3. 安装JDK:1.8.0_291
  • 作为参考,我用的电脑是Surface Pro4,前置摄像头正常

下载文件

  • 一共要下载三个文件,前两个可以在CSDN下载(不需要积分),地址分别是:
  1. 打包成jar的java应用:https://download.csdn.net/download/boling_cavalry/76015782
  2. opencv在windows环境的动态链接库:https://download.csdn.net/download/boling_cavalry/75121158
  1. java应用:C:\study\javacv\simple-grab-push-1.0-SNAPSHOT.jar
  2. 动态链接库:C:\study\javacv\lib\opencv_java453.dll
  3. 模型文件:C:\study\javacv\model\haarcascade_frontalface_alt.xml

运行java应用,验证效果

  • 进入windows命令行,执行以下命令在(注意两个参数和前面下载的文件路径有关,请您根据自己情况调整):
java ^
-Djava.library.path=C:\study\javacv\lib ^
-Dmodel.file.path=C:\study\javacv\model\haarcascade_frontalface_alt.xml ^
-jar C:\study\javacv\simple-grab-push-1.0-SNAPSHOT.jar
  • 此时,控制台会输出以下信息:
C:\Users\12167>java ^-Djava.library.path=C:\study\javacv\lib ^-Dmodel.file.path=C:\study\javacv\model\haarcascade_frontalface_alt.xml ^-jar C:\study\javacv\simple-grab-push-1.0-SNAPSHOT.jar
17:40:54.987 [main] INFO com.bolingcavalry.grabpush.camera.PreviewCameraWithCamShift - 模型文件本地路径:C:\study\javacv\model\haarcascade_frontalface_alt.xml
17:40:57.704 [main] INFO com.bolingcavalry.grabpush.extend.CamShiftDetectService - 开始加载模型文件
17:40:58.364 [main] INFO com.bolingcavalry.grabpush.extend.CamShiftDetectService - 模型文件加载完毕,初始化完成
17:40:58.364 [main] INFO com.bolingcavalry.grabpush.camera.AbstractCameraApplication - 初始化完成,耗时[2257]毫秒,帧率[30.0],图像宽度[1280],图像高度[720]
  • 然后会弹出预览窗口,显示摄像头拍摄到的内容

  • 现在,把那个为了盒饭跑来露脸的群众演员拉到镜头面前,预览窗口中,群众演员的脸部立即出现红框,如下图所示:
    在这里插入图片描述

  • 让群众演员在镜头前移动,可以看到红框会紧随面部移动(截图看不出效果,实际上视频是动态跟随的):
    在这里插入图片描述

  • 让群众演员在摄像头面前消失,红框也随之消失

  • 让群众演员再次回到摄像头面前,红框再次出现并跟随:
    在这里插入图片描述

  • 至此,体验结束,《Java版人脸跟踪三部曲》的第一部就完成了,简简单单三个文件一行命令就完成人脸跟踪的效果,此刻的您一定充满各种疑惑:

  1. 为什么叫跟踪,这是什么原理?
  2. 如果把每一帧都做人脸检测,然后绘制矩形,也能实现同样效果,这两者有区别吗?
  3. 追踪的逻辑是什么,一开始目标如何确定,追踪过程中,如果目标消失在镜头面前,程序如何处理,过一会儿再出现,程序会如何处理?
  • 这些就留待三部曲的第二篇讲清楚吧,算是正式编码前的设计工作,欣宸原创,不会辜负您的期待

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

与Java版人脸跟踪三部曲之一:极速体验相似的内容:

Java版人脸跟踪三部曲之一:极速体验

Java程序员也能做出实时效果的人脸跟踪,咱们花几分钟感受一下实际效果

Java版人脸跟踪三部曲之二:开发设计

如何开发Java版人脸跟踪应用?本篇给出了设计大纲,并解释了相关的重要知识点

Java版人脸跟踪三部曲之三:编码实战

经过之前的充分准备,现在就来一起编码实现完整的人脸跟踪功能

聊聊基于Alink库的决策树模型算法实现

示例代码及相关内容来源于《Alink权威指南(Java版)》 概述 决策树模型再现了人们做决策的过程,该过程由一系列的判断构成,后面的判断基于前面的判断结果,不断缩小范围,最终推出结果。 如下,基于决策树模型预测天气,是最常见的示例。天气的整个预测过程,就是不断地判断推测的过程。 特征分类 特征数据

[转帖]Core dump实战分析之Java版

https://www.jianshu.com/p/2cdf71f99209 Core dump实战分析(Java版) 背景 项目中的battleserver进程在某一段时间总是crash,无法找到具体Crash原因 Java通过JNI调用Luajit 那么进程Crash如何找到JNI的堆栈(C层)

heygen模型接口 简单使用 java版

HeyGen - AI Spokesperson Video Creator 官网地址 Create a video (heygen.com) api地址 简介: 公司最近对ai方面业务比较感兴趣了,特别是aigc合成式人工智能方面。国内现在都还处于试用阶段,真正面向的c端,b端的产品还不够完善。

LeetCode297:hard级别中最简单的存在,java版,用时击败98%,内存击败百分之九十九

LeetCode的hard题都很难吗?不一定,297就非常简单,随本文一起,用最基础的知识写代码,执行用时能击败98.46%,与此同时,内存消耗击败99.73%

Semantic Kernel Java SDK,为Java应用程序提供AI功能集成

美国时间 2023 年 7 月 19 日,Semantic Kernel 团队在其官方博客[1]上宣布发布 Java 版Semantic Kernel。 Samantic Kernel系列的源代码可在GitHub上 [2]找到,但Java的0.2.6-alpha版本可从[3]Maven Centra

三十分钟入门基础Go(Java小子版)

本篇文章适用于学习过其他面向对象语言(Java、Php),但没有学过Go语言的初学者。文章主要从Go与Java功能上的对比来阐述Go语言的基础语法、面向对象编程、并发与错误四个方面。

精选版:用Java扩展Nginx(nginx-clojure 入门)

让 Java 代码直接在 Nginx 上运行?这么有趣的功能,随本文一起来实战体验吧,图文并茂,一定能成功的那种实战