一、导入Maven依赖包

    <dependencies>
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv-platform -->
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv-platform</artifactId>
<version>3.4.1-1.4.1</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency> </dependencies>

二、查看前文了解基础

  https://www.cnblogs.com/songxingzhu/p/9088204.html

  

三、使用JavaCV播放视频的多种测试

import org.bytedeco.javacpp.*;
import org.bytedeco.javacv.*;
import org.junit.Test; import javax.swing.*;
import java.io.File;
import java.math.RoundingMode;
import java.net.MalformedURLException;
import java.util.Map;
import java.util.concurrent.TimeUnit; import static org.bytedeco.javacpp.opencv_core.Mat;
import static org.bytedeco.javacpp.opencv_imgproc.COLOR_BGRA2GRAY; public class JavaCVTest { private void showFrames(String winTitle, FrameGrabber grabber) throws FrameGrabber.Exception, InterruptedException {
CanvasFrame canvas = new CanvasFrame(winTitle,1);//新建一个窗口
canvas.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
canvas.setAlwaysOnTop(true);
while (true) {
if (!canvas.isVisible()) {
break;
}
Frame frame = grabber.grab();
canvas.showImage(frame);
Thread.sleep(50);//50毫秒刷新一次图像
}
} private void showFramesWithFace(String winTitle, FrameGrabber grabber) throws FrameGrabber.Exception, InterruptedException {
OpenCVFrameConverter.ToMat convertToMat = new OpenCVFrameConverter.ToMat();
File fileAbsolutePath = new File(ClassLoader.getSystemClassLoader().getResource("data/lbpcascade_frontalface_improved.xml").getFile());
//opencv_objdetect.CvHaarClassifierCascade face_cascade=opencv_objdetect.cvLoadHaarClassifierCascade(fileAbsolutePath.getAbsolutePath(),new opencv_core.CvSize(0,0));
opencv_objdetect.CascadeClassifier face_cascade = new opencv_objdetect.CascadeClassifier(fileAbsolutePath.getAbsolutePath());
opencv_core.RectVector faces = new opencv_core.RectVector();
CanvasFrame canvas = new CanvasFrame(winTitle,1);//新建一个窗口
canvas.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
canvas.setAlwaysOnTop(true);
while (true) {
if (!canvas.isVisible()) {
break;
}
Frame frame = grabber.grab();
Mat mat = convertToMat.convert(frame);
if (mat.empty())
continue;
Mat videoMatGray = new Mat();
opencv_imgproc.cvtColor(mat, videoMatGray, COLOR_BGRA2GRAY);
opencv_imgproc.equalizeHist(videoMatGray, videoMatGray);
//int[] rejectLevels = new int[0];
//double[] levelWeights = new double[0];
face_cascade.detectMultiScale(videoMatGray, faces);
for (int i = 0; i < faces.size(); i++) {
opencv_core.Rect face = faces.get(i);
opencv_imgproc.rectangle(mat, face, opencv_core.Scalar.RED, 4, 8, 0);
} //opencv_highgui.imshow(winTitle, mat);
//opencv_highgui.waitKey(30);
canvas.showImage(convertToMat.convert(mat));
Thread.sleep(30);//50毫秒刷新一次图像
}
} @Test
public void testCamera() throws InterruptedException, FrameGrabber.Exception {
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.setImageWidth(1280);
grabber.setImageHeight(720);
grabber.start(); //开始获取摄像头数据
showFrames("Camera", grabber);
grabber.stop();
grabber.close();
} @Test
public void testCamera1() throws FrameGrabber.Exception, InterruptedException {
VideoInputFrameGrabber grabber = new VideoInputFrameGrabber(0);
grabber.start(); //开始获取摄像头数据
showFrames("Camera", grabber);
grabber.stop();
grabber.close();
} @Test
public void testCamera2() throws FrameGrabber.Exception, InterruptedException, MalformedURLException {
IPCameraFrameGrabber grabber = new IPCameraFrameGrabber("http://admin:12345@192.0.0.64:554/MPEG-4/ch1/main/av_stream", 30, 30, TimeUnit.SECONDS);
grabber.start();
showFrames("IPCamera", grabber);
grabber.stop();
grabber.close();
} @Test
public void testVideo() throws FrameGrabber.Exception, InterruptedException, MalformedURLException {
FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault("rtmp://127.0.0.1:12580/live/app"); //这里也可以是本地文件,也可以网络文件。如:rtmp://127.0.0.1:12580/live/app
grabber.setImageWidth(1366);
grabber.setImageHeight(768);
grabber.start();
showFrames("Video", grabber);
grabber.stop();
grabber.close();
} @Test
public void testFaceRecognize() throws FrameGrabber.Exception, InterruptedException, MalformedURLException, FrameRecorder.Exception {
OpenCVFrameGrabber grabber = OpenCVFrameGrabber.createDefault(0);
grabber.start();
showFramesWithFace("Video", grabber);
grabber.stop();
grabber.close();
} }
import org.bytedeco.javacpp.Loader;
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacpp.opencv_objdetect;
import org.bytedeco.javacv.*; public class Test {
public static void main(String[] args) throws FrameGrabber.Exception, FrameRecorder.Exception, InterruptedException {
// Preload the opencv_objdetect module to work around a known bug.
String str = Loader.load(opencv_objdetect.class);
System.out.println(str); FrameGrabber grabber = FrameGrabber.createDefault(0);
grabber.start();
Frame grabbedImage = grabber.grab();//抓取一帧视频并将其转换为图像,至于用这个图像用来做什么?加水印,人脸识别等等自行添加
int width = grabbedImage.imageWidth;
int height = grabbedImage.imageHeight; String outputFile = "d:\\record.mp4";
//String outputFile = "rtmp://127.0.0.1:1935/rtmplive/picamera";
FrameRecorder recorder = FrameRecorder.createDefault(outputFile, width, height); //org.bytedeco.javacv.FFmpegFrameRecorder
System.out.println(recorder.getClass().getName());//org.bytedeco.javacv.FFmpegFrameRecorder
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// avcodec.AV_CODEC_ID_H264,编码
recorder.setFormat("flv");//封装格式,如果是推送到rtmp就必须是flv封装格式
recorder.setFrameRate(25);
recorder.start();//开启录制器
long startTime = 0;
long videoTS;
CanvasFrame frame = new CanvasFrame("camera", CanvasFrame.getDefaultGamma() / grabber.getGamma()); //2.2/2.2=1
//frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setAlwaysOnTop(true);
Frame rotatedFrame;
while (frame.isVisible() && (rotatedFrame = grabber.grab()) != null) {
frame.showImage(rotatedFrame);
if (startTime == 0) {
startTime = System.currentTimeMillis();
}
videoTS = (System.currentTimeMillis() - startTime) * 1000;//这里要注意,注意位
recorder.setTimestamp(videoTS);
recorder.record(rotatedFrame);
Thread.sleep(40);
}
recorder.stop();
recorder.release();
frame.dispose();
grabber.stop();
grabber.close();
}
}

使用JavaCV播放视频、摄像头、人脸识别的更多相关文章

  1. Python3利用Dlib19.7实现摄像头人脸识别的方法

    0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地,然后提取构建 ...

  2. Python 3 利用 Dlib 19.7 实现摄像头人脸识别

    0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地: 根据抠取的 ...

  3. OpenCV摄像头人脸识别

    注: 从外设摄像装置中获取图像帧,把每帧的图片与人脸特征进行匹配,用方框框住识别出来的人脸 需要用到的函数: CvHaarClassifierCascade* cvLoadHaarClassifier ...

  4. matlab-调用摄像头人脸识别

    ----------------------------边学边写边学习------------------------------------- 版本:2014a 调用摄像头 a = imaqhwin ...

  5. C# 视频多人脸识别

    上一篇内容的调整,并按 @轮回 的说法,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一.识别线程 1.获取当前图片 2.识别当 ...

  6. C# 视频多人脸识别的实现过程

    整个项目是用虹软技术完成开发 上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一.识别线程 1.获取当前图片 2 ...

  7. C# 视频多人脸识别的实现

    上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo基本思路如下:一.识别线程1.获取当前图片2.识别当前图片的人脸位置,并将结果存入 ...

  8. matlab使用摄像头人脸识别

    #关于matlab如何读取图片.视频.摄像头设备数据# 参见:http://blog.csdn.net/u010177286/article/details/45646173 但是,关于摄像头读取,上 ...

  9. Github开源人脸识别项目face_recognition

    Github开源人脸识别项目face_recognition 原文:https://www.jianshu.com/p/0b37452be63e 译者注: 本项目face_recognition是一个 ...

随机推荐

  1. PyCharm 新建文件时默认添加作者时间等

    将内容添加到Python Script 右侧的文本框中: 路径: File → Setting → Editor → File and Code Templates → Python Script # ...

  2. Visual Studio强大的帮助工具--Resharper安装与使用

    ReSharper是一个JetBrains公司出品的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.使用ReSharper,你可以进行深度代码分析,智能代码协 ...

  3. poj 3461 (模式串T在主串S中出现的次数)

    求模式串在主串中出现的次数Sample Input 3BAPCBAPCAZAAZAZAZAVERDIAVERDXIVYERDIANSample Output 130 #include <iost ...

  4. hdu 2066 多起点 多终点

    多起点 多终点 无向图 结点的个数要自己求 Sample Input6 2 3 //边数 起点数 终点数1 3 5 //u v w1 4 72 8 123 8 44 9 129 10 21 2 //起 ...

  5. java利用Jsch实现在windows平台远程操作linux服务器

    说明:exec用于执行命令:sftp用于文件处理 package com.wyg.simple; import java.io.BufferedReader; import java.io.File; ...

  6. AOJ 2170 Marked Ancestor[并查集][离线]

    题意: 给你一颗N个节点的树,节点编号1到N.1总是节点的根.现在有两种操作: M v: 标记节点v Q v: 求出离v最近的标记的相邻节点.根节点一开始就标记好了. 现在给一系列操作,求出所有Q操作 ...

  7. 030.Zabbix分布式部署

    一 分布式Zabbix介绍 zabbix proxy 可以代替 zabbix server 收集性能和可用性数据,然后把数据汇报给 zabbix server,并且在一定程度上分担了zabbix se ...

  8. spring的i o c简单回顾

    1.springIOC是一个创建对象的容器,他负责将我们需要的对象帮我们创建出来,创建时间是:当我们从上下文环境中读取此对象时就会帮我们创建,严格意义上来讲它是一种编程思想不是一种技术. 2.依赖注入 ...

  9. [软件研究]对wdcp v3的一次小研究#1

    0x00 前言 好久没有更新了,已经长草无疑. 之前团队要搞个测验的系统,用来安全培训考核,团队内又没啥人搞开发的,自己又想学一下vue,就用vue+ci 撸了一个. 搞了一个星期基本搞完(开发能力真 ...

  10. iOS 11开发教程(十八)iOS11应用视图之使用代码添加按钮

    iOS 11开发教程(十八)iOS11应用视图之使用代码添加按钮 由于使用编辑界面添加视图的方式比较简单,所以不在介绍.这里,直接讲解代码中如何添加.使用代码为主视图添加一个按钮的方式和在1.3.3节 ...