一、导入Maven依赖包

  1. <dependencies>
  2. <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform -->
  3. <dependency>
  4. <groupId>org.bytedeco</groupId>
  5. <artifactId>javacv-platform</artifactId>
  6. <version>1.4.1</version>
  7. </dependency>
  8. <!-- https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv-platform -->
  9. <dependency>
  10. <groupId>org.bytedeco.javacpp-presets</groupId>
  11. <artifactId>opencv-platform</artifactId>
  12. <version>3.4.1-1.4.1</version>
  13. </dependency>
  14.  
  15. <dependency>
  16. <groupId>junit</groupId>
  17. <artifactId>junit</artifactId>
  18. <version>4.12</version>
  19. <scope>test</scope>
  20. </dependency>
  21.  
  22. </dependencies>

二、查看前文了解基础

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

  

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

  1. import org.bytedeco.javacpp.*;
  2. import org.bytedeco.javacv.*;
  3. import org.junit.Test;
  4.  
  5. import javax.swing.*;
  6. import java.io.File;
  7. import java.math.RoundingMode;
  8. import java.net.MalformedURLException;
  9. import java.util.Map;
  10. import java.util.concurrent.TimeUnit;
  11.  
  12. import static org.bytedeco.javacpp.opencv_core.Mat;
  13. import static org.bytedeco.javacpp.opencv_imgproc.COLOR_BGRA2GRAY;
  14.  
  15. public class JavaCVTest {
  16.  
  17. private void showFrames(String winTitle, FrameGrabber grabber) throws FrameGrabber.Exception, InterruptedException {
  18. CanvasFrame canvas = new CanvasFrame(winTitle,1);//新建一个窗口
  19. canvas.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  20. canvas.setAlwaysOnTop(true);
  21. while (true) {
  22. if (!canvas.isVisible()) {
  23. break;
  24. }
  25. Frame frame = grabber.grab();
  26. canvas.showImage(frame);
  27. Thread.sleep(50);//50毫秒刷新一次图像
  28. }
  29. }
  30.  
  31. private void showFramesWithFace(String winTitle, FrameGrabber grabber) throws FrameGrabber.Exception, InterruptedException {
  32. OpenCVFrameConverter.ToMat convertToMat = new OpenCVFrameConverter.ToMat();
  33. File fileAbsolutePath = new File(ClassLoader.getSystemClassLoader().getResource("data/lbpcascade_frontalface_improved.xml").getFile());
  34. //opencv_objdetect.CvHaarClassifierCascade face_cascade=opencv_objdetect.cvLoadHaarClassifierCascade(fileAbsolutePath.getAbsolutePath(),new opencv_core.CvSize(0,0));
  35. opencv_objdetect.CascadeClassifier face_cascade = new opencv_objdetect.CascadeClassifier(fileAbsolutePath.getAbsolutePath());
  36. opencv_core.RectVector faces = new opencv_core.RectVector();
  37. CanvasFrame canvas = new CanvasFrame(winTitle,1);//新建一个窗口
  38. canvas.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  39. canvas.setAlwaysOnTop(true);
  40. while (true) {
  41. if (!canvas.isVisible()) {
  42. break;
  43. }
  44. Frame frame = grabber.grab();
  45. Mat mat = convertToMat.convert(frame);
  46. if (mat.empty())
  47. continue;
  48. Mat videoMatGray = new Mat();
  49. opencv_imgproc.cvtColor(mat, videoMatGray, COLOR_BGRA2GRAY);
  50. opencv_imgproc.equalizeHist(videoMatGray, videoMatGray);
  51. //int[] rejectLevels = new int[0];
  52. //double[] levelWeights = new double[0];
  53. face_cascade.detectMultiScale(videoMatGray, faces);
  54. for (int i = 0; i < faces.size(); i++) {
  55. opencv_core.Rect face = faces.get(i);
  56. opencv_imgproc.rectangle(mat, face, opencv_core.Scalar.RED, 4, 8, 0);
  57. }
  58.  
  59. //opencv_highgui.imshow(winTitle, mat);
  60. //opencv_highgui.waitKey(30);
  61. canvas.showImage(convertToMat.convert(mat));
  62. Thread.sleep(30);//50毫秒刷新一次图像
  63. }
  64. }
  65.  
  66. @Test
  67. public void testCamera() throws InterruptedException, FrameGrabber.Exception {
  68. OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
  69. grabber.setImageWidth(1280);
  70. grabber.setImageHeight(720);
  71. grabber.start(); //开始获取摄像头数据
  72. showFrames("Camera", grabber);
  73. grabber.stop();
  74. grabber.close();
  75. }
  76.  
  77. @Test
  78. public void testCamera1() throws FrameGrabber.Exception, InterruptedException {
  79. VideoInputFrameGrabber grabber = new VideoInputFrameGrabber(0);
  80. grabber.start(); //开始获取摄像头数据
  81. showFrames("Camera", grabber);
  82. grabber.stop();
  83. grabber.close();
  84. }
  85.  
  86. @Test
  87. public void testCamera2() throws FrameGrabber.Exception, InterruptedException, MalformedURLException {
  88. IPCameraFrameGrabber grabber = new IPCameraFrameGrabber("http://admin:12345@192.0.0.64:554/MPEG-4/ch1/main/av_stream", 30, 30, TimeUnit.SECONDS);
  89. grabber.start();
  90. showFrames("IPCamera", grabber);
  91. grabber.stop();
  92. grabber.close();
  93. }
  94.  
  95. @Test
  96. public void testVideo() throws FrameGrabber.Exception, InterruptedException, MalformedURLException {
  97. FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault("rtmp://127.0.0.1:12580/live/app"); //这里也可以是本地文件,也可以网络文件。如:rtmp://127.0.0.1:12580/live/app
  98. grabber.setImageWidth(1366);
  99. grabber.setImageHeight(768);
  100. grabber.start();
  101. showFrames("Video", grabber);
  102. grabber.stop();
  103. grabber.close();
  104. }
  105.  
  106. @Test
  107. public void testFaceRecognize() throws FrameGrabber.Exception, InterruptedException, MalformedURLException, FrameRecorder.Exception {
  108. OpenCVFrameGrabber grabber = OpenCVFrameGrabber.createDefault(0);
  109. grabber.start();
  110. showFramesWithFace("Video", grabber);
  111. grabber.stop();
  112. grabber.close();
  113. }
  114.  
  115. }
  1. import org.bytedeco.javacpp.Loader;
  2. import org.bytedeco.javacpp.avcodec;
  3. import org.bytedeco.javacpp.opencv_core;
  4. import org.bytedeco.javacpp.opencv_objdetect;
  5. import org.bytedeco.javacv.*;
  6.  
  7. public class Test {
  8. public static void main(String[] args) throws FrameGrabber.Exception, FrameRecorder.Exception, InterruptedException {
  9. // Preload the opencv_objdetect module to work around a known bug.
  10. String str = Loader.load(opencv_objdetect.class);
  11. System.out.println(str);
  12.  
  13. FrameGrabber grabber = FrameGrabber.createDefault(0);
  14. grabber.start();
  15. Frame grabbedImage = grabber.grab();//抓取一帧视频并将其转换为图像,至于用这个图像用来做什么?加水印,人脸识别等等自行添加
  16. int width = grabbedImage.imageWidth;
  17. int height = grabbedImage.imageHeight;
  18.  
  19. String outputFile = "d:\\record.mp4";
  20. //String outputFile = "rtmp://127.0.0.1:1935/rtmplive/picamera";
  21. FrameRecorder recorder = FrameRecorder.createDefault(outputFile, width, height); //org.bytedeco.javacv.FFmpegFrameRecorder
  22. System.out.println(recorder.getClass().getName());//org.bytedeco.javacv.FFmpegFrameRecorder
  23. recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// avcodec.AV_CODEC_ID_H264,编码
  24. recorder.setFormat("flv");//封装格式,如果是推送到rtmp就必须是flv封装格式
  25. recorder.setFrameRate(25);
  26. recorder.start();//开启录制器
  27. long startTime = 0;
  28. long videoTS;
  29. CanvasFrame frame = new CanvasFrame("camera", CanvasFrame.getDefaultGamma() / grabber.getGamma()); //2.2/2.2=1
  30. //frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  31. frame.setAlwaysOnTop(true);
  32. Frame rotatedFrame;
  33. while (frame.isVisible() && (rotatedFrame = grabber.grab()) != null) {
  34. frame.showImage(rotatedFrame);
  35. if (startTime == 0) {
  36. startTime = System.currentTimeMillis();
  37. }
  38. videoTS = (System.currentTimeMillis() - startTime) * 1000;//这里要注意,注意位
  39. recorder.setTimestamp(videoTS);
  40. recorder.record(rotatedFrame);
  41. Thread.sleep(40);
  42. }
  43. recorder.stop();
  44. recorder.release();
  45. frame.dispose();
  46. grabber.stop();
  47. grabber.close();
  48. }
  49. }

使用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. python 全栈开发,Day77(图书管理系统)

    一.图书管理系统 完整代码链接: https://github.com/py3study/bms_multi 本项目使用session来实现一个简单的图书管理系统 未登录不允许访问后台: 直接访问后台 ...

  2. python 全栈开发,Day6(is,小数据池,编码转换)

    一.is a = 100 b = 100 print(a == b) print(a is b) 执行输出: TrueTrue 查看内存地址,使用id函数 print(id(a)) print(id( ...

  3. [HAOI2016]放棋子

    题解: 刚开始没有仔细看题目.. 后来发现障碍是每行每列有且只有一个 那么其实会发现这就是一道错排的题目 f[i]=(n-1)*(f[i-1]+f[i-2])

  4. python导包踩过的坑之包名和模块名同名

  5. Storm通信机制(了解)

    Worker间的通信:经常需要通过网络跨节点进行,Storm使用ZeroMQ或Netty(0.9以后默认使用)作为进程间通信的消息框架. Worker进程内部通信:不同worker的thread通信使 ...

  6. BZOJ3626 [LNOI2014]LCA 树链剖分 线段树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3626 题意概括 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节 ...

  7. 2.Django|简介与静态文件| URL控制器

    1.简介  MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务对象与数 ...

  8. ApplicationListener<ContextRefreshedEvent>接口,Spring启动后获取所有拥有特定注解的Bean

    最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的是ApplicationContextAware,在setApplicationCon ...

  9. Nutch源码阅读进程4

    前面依次看了nutch的准备工作inject和generate部分,抓取的fetch部分的代码,趁热打铁,我们下面来一睹parse即页面解析部分的代码,这块代码主要是集中在ParseSegment类里 ...

  10. JS-最全的创建对象的方式

    JS最全创建对象方式汇总 1.最简单的方式--创建一个Object实例 var person = new Object(); //创建实例 person.name = "BlueBeginn ...