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

场景

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

根据其官方资料设备网络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

如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,确保对被访问网站的服务器负责。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值