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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】stack(STL)

stack的介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&#xff0c;并提供一组特定的成…

幂律分布笔记

一、幂律分布的数据拟合 数据分箱&#xff1a; 所谓分箱就是对原始数据进行分组&#xff0c;然后对每一组内的数据进行平滑处理。常见的分箱方式主要有等深分箱、等宽分箱、用户自定义等 对数分箱&#xff1a; 对原数据进行分箱&#xff0c;第i个箱的宽度为bi&#xff0c;b…

双十一购物节有哪些好物值得入手?2024双十一好物清单合集分享

一年一度的双十一购物狂欢节即将来临&#xff0c;各大平台纷纷开启预热活动&#xff0c;伴随着品牌的疯狂折扣和满减优惠&#xff0c;众多商品即将迎来超值的价格。现在正是大家“剁手”换新装备的大好时机。作为一名深耕智能产品多年的资深达人&#xff0c;今天这期我将从不同…

【python】OpenCV—Sort the Point Set from Top Left to Bottom Right

文章目录 1、功能描述2、代码实现3、效果展示4、更多例子5、参考 1、功能描述 给出一张图片&#xff0c;里面含有各种图形&#xff0c;取各种图形的中心点&#xff0c;从左到右从上到下排序 例如 2、代码实现 import cv2 import numpy as npdef process_img(img):img_gray c…

Xshell使用密钥远程登录Ubuntu 22.04报错:所选的用户密钥未在远程主机上注册。请再试一次

报错截图如下&#xff1a; 问题原因&#xff1a; Ubuntu 22.04 不支持 Xshell使用的私钥。 查看系统支持的私钥&#xff1a;sudo sshd -T | egrep "pubkey" ~$ sudo sshd -T | egrep "pubkey" pubkeyauthentication yes pubkeyacceptedalgorithms ssh-ed…

2024最新Selenium自动化测试面试题!

1、什么是自动化测试、自动化测试的优势是什么&#xff1f; 通过工具或脚本代替手工测试执行过程的测试都叫自动化测试。 自动化测试的优势&#xff1a; 1、减少回归测试成本 2、减少兼容性测试成本 3、提高测试反馈速度 4、提高测试覆盖率 5、让测试工程师做更有意义的…

LeetCode刷题日记之贪心算法(四)

目录 前言柠檬水找零根据身高重建队列用最少数量的箭引爆气球总结 前言 在前几篇文章中&#xff0c;我们已经覆盖了贪心算法的基本思路和多种题型。这次我将继续分享几道具有挑战性的贪心题目。希望这篇文章能为大家带来更多解题灵感和技巧✍✍✍ 柠檬水找零 LeetCode题目链接…

openai swarm多智能体框架使用案例;调用第三方deepseek大模型接口服务

参考: https://github.com/openai/swarm 安装: pip install git+ssh://git@github.com/openai/swarm.git pip install python-dotenv 代码: .env OPENAI_BASE_URL="https://api.deepseek.com/v1" OPENAI_API_KEY

MPU6050简介

MPU6050是一款集成了三轴加速度计和三轴陀螺仪的六轴传感器模块&#xff0c;由InvenSense公司开发。它广泛应用于运动检测、姿态感知、手势识别、无人机控制等领域。 MPU6050的主要功能与特点 6轴传感器&#xff1a; 三轴加速度计&#xff1a;用于测量物体在X、Y、Z三个轴向上…

【GT240X】如何在 Linux 中格式化磁盘

如何在 Linux 中格式化磁盘 文章目录 一、说明二、关于磁盘分区格式化过程三、如何通过命令行在 Linux 上格式化磁盘3.1 进入管理员&#xff08;root&#xff09;模式3.2 步骤1&#xff1a;查看磁盘情况&#xff0c;找到要分区的盘3.3 步骤2&#xff1a;用gdisk指令创建分区3.4…

ZK集群搭建:详细步骤与注意事项

在大数据和分布式系统日益重要的今天&#xff0c;ZooKeeper&#xff08;简称ZK&#xff09;作为一种分布式协调服务&#xff0c;扮演着举足轻重的角色。它主要用于管理大型分布式系统中的配置信息、命名、同步等。下面将详细介绍如何搭建一个ZooKeeper集群&#xff0c;帮助大家…

文档处理之10种PDF解析工具测评:兼看知识图谱遇见Chart图表的有趣实现思路

我们来围绕文档智能这个方向&#xff0c;一个是10种PDF解析工具6种不同文档类别的测试分析&#xff0c;这个有好落地&#xff0c;能够给出一些具有参考意义的工具。 另一个是关于图表跟知识图谱的结合&#xff0c;ChartKG&#xff0c;其中对于知识图谱的设计、图表要素的抽取以…

基于大模型的招聘智能体:从创意到MVP

正在考虑下一个 SaaS 创意&#xff1f;以下是我在短短几个小时内从创意到 MVP 的过程。 以下是我将在这篇文章中介绍的内容概述&#xff1a; 为什么这个想法让我产生共鸣我是如何开始构建它的我现在的处境以及我是否会真正推出 获得 SaaS 创意并构建它并不容易。就是这样。 …

SD-WAN可以搭建在任何网络上,通过中央控制器管理企业所有用户的终端路由器,实现集中配置和监控。

中国联通国际公司产品之 SD-WAN 在数字化转型的浪潮中&#xff0c;企业对于网络灵活性和高效性的需求日益增长。中国联通国际公司推出的SD-WAN&#xff08;软件定义广域网&#xff09;产品&#xff0c;正是基于这一背景应运而生&#xff0c;它以其独特的技术优势和全球化的网络…

何使用本地 LLMs 为可观察性 AI 助手提供本地部署支持

作者&#xff1a;来自 Elastic David Hope 了解如何为私有或本地部署配置本地 LLM。更多阅读&#xff1a;使用 Elastic 和 LM Studio 的 Herding Llama 3.1。 智能大语言模型已经存在了一段时间&#xff0c;一些客户做的第一件事就是在发生了许多严重的数据泄露事件后采取措施…

nltk_data下载安装

gitee上下载zip下载后解压缩&#xff08;三次&#xff09;packages文件夹改名为nltk_data 找应该放在哪&#xff1a; 放到上面列出的任一位置&#xff1a; 放到正确位置后&#xff1a;

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章&#xff1a; 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境&#xff0c;均为 windows 环境&#xff0c;mac 环境其实也类似 ~ ① 编译proto文件&#xff0c;相关插件 简单介绍&#xff1a; protoc 是编译器&#xff0c;用于将…

数据分析和可视化python库orange简单使用方法

Orange 是一个基于 Python 的数据挖掘和机器学习库&#xff0c;它提供了一系列可视化工具和算法&#xff0c;用于数据分析、机器学习和数据可视化等任务。 一、主要特点 可视化界面&#xff1a;Orange 提供了直观的可视化界面&#xff0c;使得用户可以通过拖放操作构建数据分…

HCIP-HarmonyOS Application Developer 习题(十五)

&#xff08;判断&#xff09;1、在HarmonyOs中发布带权限公共事件&#xff0c;发布者首先要在config.json中申请所需的权限。 答案&#xff1a;正确 分析&#xff1a;发布携带权限的公共事件&#xff1a;构造CommonEventPublishInfo对象&#xff0c;设置订阅者的权限。 &#…

nacos实现配置管理

项目结构 引入依赖 <!--统一配置管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--读取bootstrap文件--><dependency>&l…