场景
需对接海康威视交通产品中的交通违章检测功能,实现车辆闯红灯时获取抓拍数据(车牌号)并获取上传的抓拍图片。
根据其官方资料设备网络SDK使用手册中说明,此流程需要可以通过报警布防方式进行。
访问官方下载SDK文档等资料
服务支持-技术支持-SDK下载-选择设备网络SDK,这里服务器使用的centos,所以下载
设备网络SDK_Linux64版本的
下载之后会有需要引入的sdk文件以及说明手册、示例代码等。
根据手册说明,方式可选为两种,这里选择报警布防方式,该方式可以接受上传的图片。
当然这里使用的是交通违章检测类型的布防流程,其他报警布防流程与此类似。
首先需要项目中引入所需的sdk文件,然后按照示例代码进行集成和修改即可。
注意报警布防方式假如有多个摄像头,则需要获取每个摄像头的ip、端口(默认8000)、用户名、密码,并且需要连接/登录每个摄像头
进行布防操作。
接口调用流程参考手册中说明
这里使用Java语言集成,关于Java集成,手册中新手指南-Java开发指南中有介绍
这里是在linux上服务器上操作,直接查看linux上集成的方式说明
注:
实现
上面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