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

embedded/2024/10/18 7:49:02/

场景

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

根据其官方资料设备网络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: 8000username: "admin"password: "123456"

上面启动类添加读取配置

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

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

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

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

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

    /*** 在程序关闭后执行*/@PreDestroypublic void destroy(){//设备注销BuFangAfterStart.logoutDev(lUserID);log.info(lUserID+"设备注销");//撤防hCNetSDK.NET_DVR_CloseAlarmChan_V30(lUserID);log.info(lUserID+"设备撤防");//释放SDKhCNetSDK.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-oraclecontainer_name: hk_testvolumes:- ./home:/homeworking_dir: /home/environment:TZ: Asia/Shanghaicommand: ['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.ppmy.cn/embedded/128392.html

相关文章

重学SpringBoot3-集成Spring Security(三)

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Spring Security&#xff08;三&#xff09; 1. 防范CSRF&#xff08;跨站请求伪造&#xff09;1.1 演示效果1.2 关闭 CSRF 防护 2. 防范XSS&#x…

搭建Elasticsearch集群

一. 集群的结构 1.单点的问题 单点的Elasticsearch存在哪些可能出现的问题呢? 单台机器存储容量有限,无法实现高存储。容易出现单点故障,无法实现高可用。单服务的并发处理能力有限,无法实现高并发所以,为了应对这些问题,我们需要对Elasticsearch搭建集群。 2.数据分片…

外包干了5天,技术明显退步

我是一名本科生&#xff0c;自2019年起&#xff0c;我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定&#xff0c;但日复一日的重复性工作让我逐渐陷入了舒适区&#xff0c;失去了前进的动力。两年的时光匆匆流逝&#xff0c;我却在原地踏步&#xff0c;技术没有丝毫…

如何在OceanBase中新增系统变量及应用实践

因为系统变量涉及复杂的工程文件&#xff0c;为防止新增变量操作对软件系统的潜在影响&#xff0c;OceanBase为多数开发者设计了一套高效的编程框架。此框架允许开发者在新增及使用系统变量时&#xff0c;仅需专注于变量定义的细节。具体来说&#xff0c;通过运行一个Python脚本…

香橙派 orangepi5max 安装realsense d435i驱动

下载源码 git clone https://github.com/IntelRealSense/librealsense.git 进入源码目录 cd librealsense 安装依赖&#xff08;移除任何相机&#xff09; sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade sudo apt-get insta…

GEE python: RUSLE土壤侵蚀模型的代码

目录 简介 代码1 代码2 代码3 代码4 代码5 代码6 简介 该模型完全由 Python 代码编写,需要借助 Python API for GEE 对其进行转换,以便在 GEE 上运行。 模型由 3 个脚本组成: Input_File.py:从 GEE 中获取输入数据并导出为 tif 文件,然后读取这些文件并将输出转换…

iframe的使用详解

目录 一、基本概念和语法 二、优点 1.内容整合与复用&#xff1a; 2.独立的浏览环境&#xff1a; 3.跨域数据展示&#xff1a; 三、缺点 1.可访问性问题&#xff1a; 2.性能问题&#xff1a; 3.安全风险&#xff1a; 四、替代方案 1.使用JavaScript框架进行组件化开…

ArcGIS Pro SDK (十七)宗地结构

ArcGIS Pro SDK (十七)宗地结构 环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0 宗地结构 1 获取活动记录 string errorMessage = await QueuedTask.Run(() => {