java获取网络摄像头数据
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获取网络摄像头数据相关推荐
- FFmpeg获取网络摄像头数据解码
对USB摄像头实时编码,在前面已经探讨过了.这次改变下思路,尝试去截取网络摄像头的H264码流,将其解码播放. 这里的测试代码,是在海康摄像头的基础上进行的. 解码的大致流程和以前的保持一致,只不过增 ...
- 利用opencv获取网络摄像头数据并显示报错 select() timeout
opencv官网demo-Capture Video from Camera : import numpy as np import cv2 as cv cap = cv.VideoCapture(0 ...
- C++网络摄像头数据的获取与显示 (续)
上篇介绍过了vlc对于网络摄像头数据的获取,继续上篇介绍opencv获取摄像头数据 OpenCV是一个强大的计算机视觉库,而不是视频流编码器或者解码器.希望大家不要走入这个误区,可以把这部分简单单独看 ...
- java获取主机信息大全,网络编程:Java获取网络主机信息
java.net.InetAddress类表示互联网协议 (IP) 地址. 有两个子类:Inet4Address, Inet6Address 通过 InetAddress可以方便获取一个域名下的IP, ...
- 使用TensorFlow.js进行人脸触摸检测第1部分:将实时网络摄像头数据与深度学习配合使用
目录 起点 将HTML5网络摄像头API与TensorFlow.js结合使用 检测脸部触摸 技术脚注 终点线 下一步是什么?我们是否可以在未经培训的情况下检测到面部触摸? 下载TensorFlowJS ...
- 使用ONVIF Device Test Tool获取网络摄像头的音/视频
软/硬件准备 1.一个网络摄像头(IPC),品牌必须支持ONVIF协议,具体哪些品牌支持不作为本教程介绍的重点,大家可自行度娘,我知道的有品牌大华和海康威视; 2.ONVIF Device Test ...
- Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI
现在NBA联赛也进行到半决赛了,我们怎么样才能以更快的方法获取NBA的数据呢?这里我们就自己来做一个数据播报的程序 文章目录 制作NBA数据爬虫 捋顺思路 编写代码 NBAReporter.py NB ...
- HI3559V200获取IMX458摄像头数据_(2)sdk例程sample_vio
文章目录 1.sample_vio介绍 1 linux client端 2 liteos server端 2.sample_vio_server如何在liteos运行 1.如何将sample_vio_ ...
- ROS系列——ONVIF Device Test Tool测试工具获取网络摄像头的rtsp
ROS系列--ONVIF Device Test Tool测试工具获取网络摄像头的rtsp 1.说明 2.ONVIF Device Test Tool工具下载及安装 3.连接网络摄像头 4.获取视频测 ...
最新文章
- Maven和Gradle对比
- .html天气预报上蔡,上蔡天气预报15天
- 《Cloudera hadoop大数据平台实战指南》此书2019年1月已上市
- Python3 三步爬楼梯问题
- MATLAB slider中的数值,在微信小程序中如何使用slider设置数据值
- 《程序员代码面试指南》第三章 二叉树问题 二叉树节点间的最大距离问题
- LeetCode 862. 和至少为 K 的最短子数组(前缀和+deque单调栈)
- express rest_Express / Node中用于REST API的邮递员工具
- html5 canvas简易时钟
- vue-video-player 实现广告视频轮播和播放直播
- java JDK11对比JDK8
- Socket面试题整理
- 解决git:fatal:Unable to create”…/.git/index.lock” 的错误
- 机器学习-GB、GBDT、XGboost、Adaboost
- 【JTAG、SBW、BSL】MSP430的BSL
- #Latex编写时行溢出页边距
- 2022中科院自动化所人工智能暑期学校(部分内容)
- DRAM DDR4DDR5 UDIMMRDIMM的内存测试固件开发的经验总结
- 修改RK3399 HDMI显示分辨率
- rust箱子冷却时间_【NOX-RUST 1100防锈油】_欣阅(上海)实业有限公司
热门文章
- 三菱、汇川plc用485通讯板和变频器通讯,实现正转、反转、运行过程改变频率实现调速
- 短视频 SDK 开发 (一) 开发一款短视频 SDK 需要具备哪些知识?
- 鹏博士拟23亿元转让数据中心业务,被指贱卖资产缓解债务兑付压力
- 选择国企背景的期货公司开户
- 基于神经网络的推荐算法,协同过滤推荐算法python
- 跟着java学瑜伽_在家里跟着健身软件练瑜伽和去瑜伽馆差别大吗?
- java SSM jsp页面跳转404
- 查询linux下的命令是什么意思,技术|如何在Linux命令行下查询字典?
- 工业4.0,我们该何去何从?
- Java四舍五入的几种方式