使用JavaCV播放视频、摄像头、人脸识别
一、导入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播放视频、摄像头、人脸识别的更多相关文章
- Python3利用Dlib19.7实现摄像头人脸识别的方法
0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地,然后提取构建 ...
- Python 3 利用 Dlib 19.7 实现摄像头人脸识别
0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地: 根据抠取的 ...
- OpenCV摄像头人脸识别
注: 从外设摄像装置中获取图像帧,把每帧的图片与人脸特征进行匹配,用方框框住识别出来的人脸 需要用到的函数: CvHaarClassifierCascade* cvLoadHaarClassifier ...
- matlab-调用摄像头人脸识别
----------------------------边学边写边学习------------------------------------- 版本:2014a 调用摄像头 a = imaqhwin ...
- C# 视频多人脸识别
上一篇内容的调整,并按 @轮回 的说法,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一.识别线程 1.获取当前图片 2.识别当 ...
- C# 视频多人脸识别的实现过程
整个项目是用虹软技术完成开发 上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一.识别线程 1.获取当前图片 2 ...
- C# 视频多人脸识别的实现
上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo基本思路如下:一.识别线程1.获取当前图片2.识别当前图片的人脸位置,并将结果存入 ...
- matlab使用摄像头人脸识别
#关于matlab如何读取图片.视频.摄像头设备数据# 参见:http://blog.csdn.net/u010177286/article/details/45646173 但是,关于摄像头读取,上 ...
- Github开源人脸识别项目face_recognition
Github开源人脸识别项目face_recognition 原文:https://www.jianshu.com/p/0b37452be63e 译者注: 本项目face_recognition是一个 ...
随机推荐
- python 全栈开发,Day77(图书管理系统)
一.图书管理系统 完整代码链接: https://github.com/py3study/bms_multi 本项目使用session来实现一个简单的图书管理系统 未登录不允许访问后台: 直接访问后台 ...
- python 全栈开发,Day6(is,小数据池,编码转换)
一.is a = 100 b = 100 print(a == b) print(a is b) 执行输出: TrueTrue 查看内存地址,使用id函数 print(id(a)) print(id( ...
- [HAOI2016]放棋子
题解: 刚开始没有仔细看题目.. 后来发现障碍是每行每列有且只有一个 那么其实会发现这就是一道错排的题目 f[i]=(n-1)*(f[i-1]+f[i-2])
- python导包踩过的坑之包名和模块名同名
- Storm通信机制(了解)
Worker间的通信:经常需要通过网络跨节点进行,Storm使用ZeroMQ或Netty(0.9以后默认使用)作为进程间通信的消息框架. Worker进程内部通信:不同worker的thread通信使 ...
- BZOJ3626 [LNOI2014]LCA 树链剖分 线段树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3626 题意概括 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节 ...
- 2.Django|简介与静态文件| URL控制器
1.简介 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务对象与数 ...
- ApplicationListener<ContextRefreshedEvent>接口,Spring启动后获取所有拥有特定注解的Bean
最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的是ApplicationContextAware,在setApplicationCon ...
- Nutch源码阅读进程4
前面依次看了nutch的准备工作inject和generate部分,抓取的fetch部分的代码,趁热打铁,我们下面来一睹parse即页面解析部分的代码,这块代码主要是集中在ParseSegment类里 ...
- JS-最全的创建对象的方式
JS最全创建对象方式汇总 1.最简单的方式--创建一个Object实例 var person = new Object(); //创建实例 person.name = "BlueBeginn ...