1,基于ffmpeg封装类

     <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform --><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.7</version></dependency>

获取帧图像buff

 private BufferedImage FrameToBufferedImage(Frame frame) {Java2DFrameConverter converter = new Java2DFrameConverter();BufferedImage bufferedImage = converter.getBufferedImage(frame);converter.close();return bufferedImage;}

长时间连接可能中断,单独封个初始化摄像头连接的函数以便中断时再次初始化

 private FFmpegFrameGrabber getGrabber() throws org.bytedeco.javacv.FFmpegFrameGrabber.Exception {FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(m_rtspURL);grabber.setOption("rtsp_transport", "tcp"); grabber.setImageWidth(960);grabber.setImageHeight(540);grabber.start();return grabber;}

摄像头数据截图

/** 摄像头截图 */
public static void screenshot(String rtspURL, String fileName, Long samplingRate) throws Exception {avutil.av_log_set_level(avutil.AV_LOG_ERROR);FFmpegLogCallback.set();FFmpegFrameGrabber grabber = this.getGrabber();File outPut = new File(fileName); ByteArrayOutputStream outputStream = new ByteArrayOutputStream();// 间隔多少帧取1帧,普通网络摄像帧率约25Hz。这里不要用sleep控制,会越来越慢int samplingRate = 5;int index = 0;Frame frame = null;while (true){frame = grabber.grabImage();if(frame == null){grabber.stop();grabber.release();grabber = this.getGrabber();System.out.println("没切到图");continue;}if (frame != null && index++ >= samplingRate) {ImageIO.write(FrameToBufferedImage(frame), "jpg", outPut); index = 0;}}
}

2,基于OpenCV封装类

<!-- https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv -->
<dependency><groupId>org.bytedeco.javacpp-presets</groupId><artifactId>opencv</artifactId><version>3.2.0-1.3</version>
</dependency>

截图(里头有人脸识别、截图、HTTP推送等,没用的可以删除忽略)

 /** 摄像头截图 */public void screenshot_ex() throws IOException {// 内存不能实时释放,尽量不newVideoCapture capture = new VideoCapture();capture.open(m_rtspURL);capture.set(3, 960);capture.set(4, 540);if (!capture.isOpened()) {m_log.error("ERROR:could not open camera {}", m_rtspURL);return;}// type 0: 表示rgb 人脸检测 1:表示nir人脸检测int type = 0;Mat frame = new Mat();int index = 0;while (true) {boolean have = capture.read(frame);// 切一下 resize(原矩阵,新矩阵,宽,高)Imgproc.resize(frame, frame, new Size(960,540));// 截一下 submat(起始行,截止行,起始列,截止列)// frame = frame.submat(20, 540 - 88, 96, 960 - 96);if (!have) {m_log.error("切图失败");capture.release();capture.open(m_rtspURL);continue;}if(index++ < m_samplingRate){continue;}index = 0;if (!frame.empty()) {                  long matAddr = frame.getNativeObjAddr();// 获取特征FeatureInfo[] featureInfo = Face.faceFeature(matAddr, type);if (featureInfo == null || featureInfo.length <= 0) {m_log.info("无人脸");continue;}List<FaceAttribute> eatureInfoList = new ArrayList<>();for (int i = 0; i < featureInfo.length; i++) {FeatureInfo fi = featureInfo[i];// (注意)父类对象实例化时不知道子类,所以这个地方不能父实例强转子实例,要new个子实例// FaceAttribute faceAttribute = new FaceAttribute(fi);FaceAttribute faceAttribute = new FaceAttribute();// 抠图Mat mat_sub = new Mat();long outAddr = mat_sub.getNativeObjAddr();Face.faceCrop(matAddr, outAddr);// 属性faceAttribute.setAttribute(Face.faceAttr(outAddr));// 搜索faceAttribute.setIdentify(Face.identifyWithAll(fi.feature, type).replaceAll("\\n|\\t",""));// 绘制FaceDraw.drawRects(frame, fi.box);eatureInfoList.add(faceAttribute);mat_sub = null;}// 保存String fname = UUID.randomUUID().toString() + ".jpg";Imgcodecs.imwrite(m_rtspImage + fname, frame);// 发送JSONObject jo = new JSONObject();jo.put("error_code", 0);jo.put("img_src", m_rtspImage_down + fname);String str = GsonUtils.toJson(eatureInfoList);jo.put("face_list", str);Map<String, Object> map = new HashMap<>();map.put("JsonData", jo);map.put("UseState", 0);map.put("CreateDate", LocalDateTime.now().toString());String param = GsonUtils.toJson(map);try {m_HttpUtil.postAsync(m_sendURL, param);m_log.info("INFO::向{}推发送数据成功{}",m_sendURL, param);} catch (java.lang.Exception e) {m_log.error("ERROR::向{}推送数据失败 ",m_sendURL);}eatureInfoList = null;jo = null;map = null;System.gc();}           }}

依赖的dll放到运行目录(这狗平台不让传附件)

下载地址https://download.csdn.net/download/zj850324/87283565

java获取网络摄像头数据相关推荐

  1. FFmpeg获取网络摄像头数据解码

    对USB摄像头实时编码,在前面已经探讨过了.这次改变下思路,尝试去截取网络摄像头的H264码流,将其解码播放. 这里的测试代码,是在海康摄像头的基础上进行的. 解码的大致流程和以前的保持一致,只不过增 ...

  2. 利用opencv获取网络摄像头数据并显示报错 select() timeout

    opencv官网demo-Capture Video from Camera : import numpy as np import cv2 as cv cap = cv.VideoCapture(0 ...

  3. C++网络摄像头数据的获取与显示 (续)

    上篇介绍过了vlc对于网络摄像头数据的获取,继续上篇介绍opencv获取摄像头数据 OpenCV是一个强大的计算机视觉库,而不是视频流编码器或者解码器.希望大家不要走入这个误区,可以把这部分简单单独看 ...

  4. java获取主机信息大全,网络编程:Java获取网络主机信息

    java.net.InetAddress类表示互联网协议 (IP) 地址. 有两个子类:Inet4Address, Inet6Address 通过 InetAddress可以方便获取一个域名下的IP, ...

  5. 使用TensorFlow.js进行人脸触摸检测第1部分:将实时网络摄像头数据与深度学习配合使用

    目录 起点 将HTML5网络摄像头API与TensorFlow.js结合使用 检测脸部触摸 技术脚注 终点线 下一步是什么?我们是否可以在未经培训的情况下检测到面部触摸? 下载TensorFlowJS ...

  6. 使用ONVIF Device Test Tool获取网络摄像头的音/视频

    软/硬件准备 1.一个网络摄像头(IPC),品牌必须支持ONVIF协议,具体哪些品牌支持不作为本教程介绍的重点,大家可自行度娘,我知道的有品牌大华和海康威视; 2.ONVIF Device Test ...

  7. Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI

    现在NBA联赛也进行到半决赛了,我们怎么样才能以更快的方法获取NBA的数据呢?这里我们就自己来做一个数据播报的程序 文章目录 制作NBA数据爬虫 捋顺思路 编写代码 NBAReporter.py NB ...

  8. HI3559V200获取IMX458摄像头数据_(2)sdk例程sample_vio

    文章目录 1.sample_vio介绍 1 linux client端 2 liteos server端 2.sample_vio_server如何在liteos运行 1.如何将sample_vio_ ...

  9. ROS系列——ONVIF Device Test Tool测试工具获取网络摄像头的rtsp

    ROS系列--ONVIF Device Test Tool测试工具获取网络摄像头的rtsp 1.说明 2.ONVIF Device Test Tool工具下载及安装 3.连接网络摄像头 4.获取视频测 ...

最新文章

  1. Maven和Gradle对比
  2. .html天气预报上蔡,上蔡天气预报15天
  3. 《Cloudera hadoop大数据平台实战指南》此书2019年1月已上市
  4. Python3 三步爬楼梯问题
  5. MATLAB slider中的数值,在微信小程序中如何使用slider设置数据值
  6. 《程序员代码面试指南》第三章 二叉树问题 二叉树节点间的最大距离问题
  7. LeetCode 862. 和至少为 K 的最短子数组(前缀和+deque单调栈)
  8. express rest_Express / Node中用于REST API的邮递员工具
  9. html5 canvas简易时钟
  10. vue-video-player 实现广告视频轮播和播放直播
  11. java JDK11对比JDK8
  12. Socket面试题整理
  13. 解决git:fatal:Unable to create”…/.git/index.lock” 的错误
  14. 机器学习-GB、GBDT、XGboost、Adaboost
  15. 【JTAG、SBW、BSL】MSP430的BSL
  16. #Latex编写时行溢出页边距
  17. 2022中科院自动化所人工智能暑期学校(部分内容)
  18. DRAM DDR4DDR5 UDIMMRDIMM的内存测试固件开发的经验总结
  19. 修改RK3399 HDMI显示分辨率
  20. rust箱子冷却时间_【NOX-RUST 1100防锈油】_欣阅(上海)实业有限公司

热门文章

  1. 三菱、汇川plc用485通讯板和变频器通讯,实现正转、反转、运行过程改变频率实现调速
  2. 短视频 SDK 开发 (一) 开发一款短视频 SDK 需要具备哪些知识?
  3. 鹏博士拟23亿元转让数据中心业务,被指贱卖资产缓解债务兑付压力
  4. 选择国企背景的期货公司开户
  5. 基于神经网络的推荐算法,协同过滤推荐算法python
  6. 跟着java学瑜伽_在家里跟着健身软件练瑜伽和去瑜伽馆差别大吗?
  7. java SSM jsp页面跳转404
  8. 查询linux下的命令是什么意思,技术|如何在Linux命令行下查询字典?
  9. 工业4.0,我们该何去何从?
  10. Java四舍五入的几种方式