一、导入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. Django项目部署在Linux下以进程方式启动

    Django项目部署在Linux下以进程方式启动 这是一篇关于如何在linux下,以后台进程的方式运行服务,命令改改基本上就通用了. 开发完Django项目后,需要把项目部署到linux环境下.当然, ...

  2. WebApi的调用-3.Basic验证

    webapi里的特性 /// <summary> /// Basic验证 /// </summary> /// <remarks> /// /// </rem ...

  3. 使用拷贝文件测试(BufferedInputStream,FileInputStream)

    package com.demo; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  4. thinkphp实现附件上传

    先需要制定图片上传的目录 然后用uploadOne方法保存 有的时候需要缩略图,比如文章的封面图片 $config=array( 'rootPath' => './Application/Pub ...

  5. 【AtCoder】ARC078

    C - Splitting Pile 枚举从哪里开始分的即可 #include <bits/stdc++.h> #define fi first #define se second #de ...

  6. Shell 错误输出重定向

    转自:https://www.cnblogs.com/vijayfly/p/6234575.html shell将标准错误输出重定向到 其他地方 经常可以在一些脚本,尤其是在crontab调用时发现如 ...

  7. P3144 关闭农场 并查集 反向

    FJ和他的奶牛们正在计划离开小镇做一次长的旅行,同时FJ想临时地关掉他的农场以节省一些金钱. 这个农场一共有被用M条双向道路连接的N个谷仓(1<=N,M<=3000).为了关闭整个农场,F ...

  8. 077 Apache的HBase与cdh的hue集成(不建议不同版本之间的集成)

    1.修改hue的配置文件hue.ini [hbase] # Use full hostname with security. hbase_clusters=(Cluster|linux-hadoop3 ...

  9. hdu 1251:统计难题[【trie树】||【map】

    <题目链接> 统计难题                        Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131 ...

  10. AeroSpike踩坑手记1:Architecture of a Real Time Operational DBMS论文导读

    又开了一个新的坑,笔者工作之后维护着一个 NoSQL 数据库.而笔者维护的数据库正是基于社区版本的 Aerospike打造而来.所以这个踩坑系列的文章属于工作总结型的内容,会将使用开发 Aerospi ...