SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)

news2024/10/17 16:14:45

场景

需对接海康威视交通产品中的交通违章检测功能,实现车辆闯红灯时获取抓拍数据(车牌号)并获取上传的抓拍图片。

根据其官方资料设备网络SDK使用手册中说明,此流程需要可以通过报警布防方式进行。

访问官方下载SDK文档等资料

海康威视-引领智能物联新未来

服务支持-技术支持-SDK下载-选择设备网络SDK,这里服务器使用的centos,所以下载

设备网络SDK_Linux64版本的

下载之后会有需要引入的sdk文件以及说明手册、示例代码等。

根据手册说明,方式可选为两种,这里选择报警布防方式,该方式可以接受上传的图片。

当然这里使用的是交通违章检测类型的布防流程,其他报警布防流程与此类似。

首先需要项目中引入所需的sdk文件,然后按照示例代码进行集成和修改即可。

注意报警布防方式假如有多个摄像头,则需要获取每个摄像头的ip、端口(默认8000)、用户名、密码,并且需要连接/登录每个摄像头

进行布防操作。

接口调用流程参考手册中说明

这里使用Java语言集成,关于Java集成,手册中新手指南-Java开发指南中有介绍

这里是在linux上服务器上操作,直接查看linux上集成的方式说明

注:

博客:
霸道流氓气质-CSDN博客

实现

上面SDK开发指南下载后会有Java示例代码

CH-HCNetSDKV6.1.9.48_build20230410_linux64\Demo示例\2-Java开发示例\2-报警布防监听

其提供的demo是java的

下面就是将示例代码集成到spingboot中并修改添加日志记录、yml读取摄像头信息等操作。

新建SpringBoot项目,添加所需的pom依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

以上依赖为非集成sdk所需依赖。

下面将示例demo的jar包通过外挂目录离线引入的方式,在项目根目录下新建lib目录,将示例代码中的所需的jna.jar和examples.jar依赖复制进来

注意,这里lib下的引入的sdk的其他so等文件为便于管理,线上使用路径非此路径。

然后修改pom文件引入lib下的两个jar包

        <!--将外部的jar依赖通过dependency的方式引入,id和name随便写-->
        <dependency>
            <groupId>com.badao</groupId>
            <artifactId>hkdemo</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/examples.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.badao</groupId>
            <artifactId>jna</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/jna.jar</systemPath>
        </dependency>

再修改pom的resoureces文件夹配置

        <!--resources文件夹配置-->
        <resources>
            <!--将lib目录编译到对应的jar的依赖目录下-->
            <resource>
                <directory>${project.basedir}/lib</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>

            <!--将lib目录打包到target目录的lib文件夹下-->
            <resource>
                <directory>${project.basedir}/lib</directory>
                <targetPath>../lib</targetPath>
            </resource>

        </resources>

修改位置

按照示例代码的目录新建pic目录和sdklog目录用来存放照片和日志文件。

然后示例代码中Alarm的main方法的运行逻辑修改为springboot项目启动后执行的逻辑,即新建类并实现ApplicationRunner接口,重写run方法

在run方法中执行示例main方法执行的逻辑,将示例demo中的输出修改为使用logback日志输出并记录到文件。

改登录设备部分的代码,将写死的配置修改为从yml配置文件中获取,这里使用@Value注解的方式。

yml中添加配置

#摄像头相关配置信息
hkCamera:
  ip: "127.0.0.1"
  port: 8000
  username: "admin"
  password: "123456"

上面启动类添加读取配置

然后修改示例代码中登录设备后的根据输入项进行选择的操作的代码,将其注释掉,直接执行布防操作的代码。

然后把示例demo中用到的所有方法、工具类等复制过来,修改相应的包名,导入路径等,直至不报错为止。

其中抓拍后的回调方法在AlarmDataParse中,对应的case下

然后需要设置SpringBoot项目在销毁/退出前执行的代码,上面项目启动后需要进行登录设备和布防操作,那么在后台停止时要进行注销登录、撤防等操作

还在上面重写run启动方法的类中,添加方法并使用@PreDestroy注解

    /**
     * 在程序关闭后执行
     */
    @PreDestroy
    public void destroy(){
        //设备注销
        BuFangAfterStart.logoutDev(lUserID);
        log.info(lUserID+"设备注销");
        //撤防
        hCNetSDK.NET_DVR_CloseAlarmChan_V30(lUserID);
        log.info(lUserID+"设备撤防");
        //释放SDK
        hCNetSDK.NET_DVR_Cleanup();
        log.info("释放SDK");
    }

执行注销、撤防、释放sdk的操作。

线上测试

按照示例demo的路径相对关系,在jar包所在路径下新建lib(存放sdk等三方依赖)、pic(存放抓拍照片)、sdklog(记录sdk的日志)等目录。

这里直接使用DockerCompose的方式部署。

在usr/test/下新建dockercompose配置文件

version: "3.8"

services:

  java:
    image: openjdk:8u342-oracle
    container_name: hk_test
    volumes:
      - ./home:/home
    working_dir: /home/
    environment:
      TZ: Asia/Shanghai
    command: [
      'java',
      '-jar',
      '/home/hk-test.jar'
    ]

在yaml配置文件所在目录下新建如下目录

在home目录下新建相关目录,并将jar包和yml配置文件上传

然后将需要集成的sdk的所有文件、文件夹上传至home/lib下,其实这里可能不需要sdk都引入,但是为了方便直接全部都引入。

这里lib是要与示例代码中引入sdk的路径所对应

另外记得修改sdk输出日志的路径,示例代码可能会是log1目录

运行jar包,查看日志输出

提示布防成功,等待其触发闯红灯报警

回调方法中记录到了车牌号等信息,查看pic下照片文件

停止后台,查看撤防是否成功

示例代码及相关配套资源下载:

https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/89895783

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华三服务器R4900 G5在图形界面使用PMC阵列卡(P460-B4)创建RAID,并安装系统(中文教程)

环境以用户需求安装Centos7.9&#xff0c;服务器使用9块900G硬盘&#xff0c;创建RAID1和RAID6&#xff0c;留一块作为热备盘。 使用笔记本通过HDM管理口&#xff08;&#xff09;登录 使用VGA&#xff08;&#xff09;线连接显示器和使用usb线连接键盘鼠标&#xff0c;进行窗…

生成 Excel 表列名称

Excel 大家都用过&#xff0c;它的列名是用字母编号的&#xff0c;A 表示第一列&#xff0c;B 表示第二列&#xff0c;AA 表示第27列&#xff0c;AB 表示第28列等等。 现给定一个数字&#xff0c;如何得到列名称呢。比如输入28&#xff0c;输出 AB。 一开始以为就是一个简单的…

C++ 算法学习——1.9 Kruskal算法

Kruskal算法是一种用于解决最小生成树&#xff08;Minimum Spanning Tree&#xff09;问题的贪婪算法。 Kruskal算法步骤&#xff1a; 初始化&#xff1a;将图中的所有边按照权值从小到大进行排序。 创建并查集&#xff1a;为每个顶点创建一个集合&#xff0c;用于判断两个顶…

中国灌溉农田空间分布

针对全国灌溉农田空间分布数据缺失的现状&#xff0c;融合MODIS植被指数和统计数据生成MIrAD-GI临时灌溉数据集&#xff0c;再利用约束统计和协同绘图方法将其与中国区域现有灌溉数据进行集成、整合&#xff0c;生成了2000-2019年中国逐年灌溉农田分布数据集&#xff08;500米空…

5、JavaScript(四)

25.ajax : 前端向后端异步的取数据而无需刷新页面的技术 1 公司中的整体工作流程 1、项目开发的流程 每个职位该做的工作&#xff1a; 产品经理&#xff1a;提需求的 与客户沟通 画出原型图给程序员使用 UI设计师&#xff1a;美化 替换UI框架&#xff1a;antd element-ui e…

python将照片集导出成视频

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 背景 一个安静的下午&#xff0c;看着电脑里乱七八糟的照片&#xff0c;有大有小&#xff0c;宽高不一&#xff0c;突然想找个方式把他们统一起来&…

SketchUp Pro 2024 for Mac 3D建模 草图设计大师软件安装【保姆级教程,简单小白轻松上手】

Mac分享吧 文章目录 SketchUp Pro 3D建模 草图设计大师软件 安装完成&#xff0c;软件打开效果一、Mac中安装SketchUp Pro 3D建模 草图设计大师软件——v241️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件&#xff0c;将安装包从左侧拖入右侧文件夹中3️⃣&#xff1a;应…

【数据结构】7道经典链表面试题

目录 1.返回倒数第K个节点【链接】 代码实现 2.链表的回文结构【链接】 代码实现 3.相交链表【链接】 代码实现 4.判断链表中是否有环【链接】 代码实现 常见问题解析 5.寻找环的入口点【链接】 代码实现1 代码实现2 6.随机链表的复制【链接】 代码实现 7.顺序…

DS堆的特性和实现(9)

文章目录 前言一、堆的概念和结构二、堆的调整算法向下调整算法向上调整算法两种算法建堆的时间复杂度 三、堆的实现结构体定义初始化和销毁堆的插入堆的删除挪移数据覆盖删除首尾交换再删除 获取堆顶元素获取有效数据个数判断是否为空 总结 前言 继续&#xff0c;本篇较难   …

我的创作纪念日-365天的感悟

时光荏苒&#xff0c;岁月如梭。转眼间&#xff0c;自己在CSDN注册已经整整15个年头了。回想起当初&#xff0c;还是个满怀憧憬、对未来充满无限好奇的学生哥。如今&#xff0c;虽然身份和角色发生了诸多变化&#xff0c;但CSDN始终陪伴着我&#xff0c;见证了我的成长与蜕变。…

JavaWeb环境下的Spring Boot在线考试系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

深入探讨C++多线程性能优化

深入探讨C多线程性能优化 在现代软件开发中&#xff0c;多线程编程已成为提升应用程序性能和响应速度的关键技术之一。尤其在C领域&#xff0c;多线程编程不仅能充分利用多核处理器的优势&#xff0c;还能显著提高计算密集型任务的效率。然而&#xff0c;多线程编程也带来了诸…

OpenAI的新功能Canvas,效果还不错

时隔两年&#xff0c;ChatGPT终迎来界面全新升级&#xff01; 这一次&#xff0c;OpenAI官宣推出类似 Anthropic 的 Artifacts 的界面交互功能 canvas&#xff0c;并称这是一种使用 ChatGPT 写作和编程的新方式。不论是写作&#xff0c;还是编码&#xff0c;都可以开启全新的交…

什么!我上传的文件不见了?

什么&#xff01;我上传的文件不见了? 前言&#xff1a; 最近在实现一个文件上传功能时使用了异步处理&#xff0c;但是在异步处理文件时&#xff0c;却提示NoSuchFileException错误。简化代码如下&#xff1a; PostMapping("/upload")void testFileUpload(Reques…

Flume抽取数据(包含自定义拦截器和时间戳拦截器)

flume参考网址&#xff1a;Flume 1.9用户手册中文版 — 可能是目前翻译最完整的版本了https://flume.liyifeng.org/?flagfromDoc#要求&#xff1a; 使用Flume将日志抽取到hdfs上&#xff1a;通过java代码编写一个拦截器&#xff0c;将日志中不是json数据的数据过滤掉&#xf…

学习文档10/16

MySQL 字符集&#xff1a; MySQL 支持很多种字符集的方式&#xff0c;比如 GB2312、GBK、BIG5、多种 Unicode 字符集&#xff08;UTF-8 编码、UTF-16 编码、UCS-2 编码、UTF-32 编码等等&#xff09;。 查看支持的字符集 你可以通过 SHOW CHARSET 命令来查看&#xff0c;支持…

一次性理清Environment体系

在Spring中&#xff0c;我们可以通过配置文件等方式去进行一些属性值的配置&#xff0c;比如通过Value注解去获取到对应的属性值&#xff0c;又或者说是想在程序运行时获取系统环境变量&#xff0c;类似的这些操作其实都是去获取一些配置数据&#xff0c;所以在Spring中对这些数…

C++ | Leetcode C++题解之第486题预测赢家

题目&#xff1a; 题解&#xff1a; class Solution { public:bool PredictTheWinner(vector<int>& nums) {int length nums.size();auto dp vector<int>(length);for (int i 0; i < length; i) {dp[i] nums[i];}for (int i length - 2; i > 0; i-…

基于SpringBoot+Vue+uniapp的在线招聘平台的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

喜报丨财富通科技荣获ISO9001、ISO27001及ISO20000三项国际认证

近日&#xff0c;财富通科技成功通过ISO9001、ISO27001及ISO20000三项国际标准认证。这标志着公司在质量管理体系、信息安全管理体系以及信息技术服务管理体系建设方面达到了国际认可的标准。 ISO9001认证表明财富通科技在软件开发、技术服务和项目管理等方面建立了一套完善的…