zxl
2025-04-28 6a9148db96ae24cb932ee50e9427269569348868
手册,海康接口调整
2个文件已修改
1个文件已添加
347 ■■■■■ 已修改文件
ycl-server/src/main/java/com/ycl/feign/HKLabelName.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/HKTask.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
运维手册.md 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/feign/HKLabelName.java
@@ -7,30 +7,23 @@
@Getter
public enum HKLabelName {
    carBigPictureAccess("carBigPictureAccess", "车辆卡口设备抓拍数据大图可用性"),
    carButtStability2023("carButtStability2023", "车辆视图库对接稳定性"),
    carClockAccuracy("carClockAccuracy", "车辆卡口设备时钟准确性"),
    carCorrectRate("carCorrectRate", "车辆卡口设备抓拍数据准确性"),
    carDelay("carDelay", "车辆卡口设备抓拍数据上传及时性"),
    carOnlineRate2023("carOnlineRate2023", "车辆点位在线率"),
    carQualifiedRate("carQualifiedRate", "车辆卡口设备抓拍数据完整性"),
    carUrlOkRate("carUrlOkRate", "车辆卡口设备url可用性"),
    carBigPictureAccess("carBigPictureAccess", "车辆卡口设备抓拍数据大图可用性"),
    carCorrectRate("carCorrectRate", "车辆卡口设备抓拍数据准确性"),
    carQualifiedRate("carQualifiedRate", "车辆卡口设备抓拍数据完整性"),
    carOnlineRate2023("carOnlineRate2023", "车辆点位在线率"),
    carButtStability2023("carButtStability2023", "车辆视图库对接稳定性"),
    faceClockAccuracy("faceClockAccuracy", "人脸设备抓拍图片时钟准确性"),
    faceCapturedPicturesEligibility("faceCapturedPicturesEligibility", "人脸设备抓拍图片合格性"),
    faceBigPictureAccess("faceBigPictureAccess", "人脸卡口设备抓拍数据大图可用性"),
    faceDelay("faceDelay", "设备抓拍人脸数据上传及时性"),
    faceOnlineRate("faceOnlineRate", "人脸点位在线率"),
    faceButtStability2023("faceButtStability2023", "人脸视图库对接稳定性"),
    faceCapturedPicturesEligibility("faceCapturedPicturesEligibility", "人脸设备抓拍图片合格性"),
    faceClockAccuracy("faceClockAccuracy", "人脸设备抓拍图片时钟准确性"),
    faceDelay("faceDelay", "设备抓拍人脸数据上传及时性"),
    faceOnlineRate("faceOnlineRate", "人脸点位在线率"),
    ;
ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -709,7 +709,7 @@
            if (faceJson != null) {
                String code = scoreJson.getString("code");
                if (ApiConstants.HKSuccessCode.equals(code)){
                    JSONObject data = scoreJson.getJSONObject("data");
                    JSONObject data = faceJson.getJSONObject("data");
                    Map<Integer,JSONObject> map = new HashMap<>();
                    //获得data ä¸‹ batchId çš„æ‰¹æ¬¡id对象 æ”¾å…¥map中
@@ -906,6 +906,8 @@
        face.setFaceInformationCollectionAccuracy(new BigDecimal("1"));
        //TODO:没找到考核项 è®¾å¤‡ç›®å½•一致率
        face.setDeviceDirectoryConsistent(new BigDecimal("1"));
        //TODO:没找到考核项 è½¦è¾†å¡å£ä¿¡æ¯é‡‡é›†å‡†ç¡®çއ
        car.setVehicleInformationCollectionAccuracy(new BigDecimal("1"));
        //TODO:没找到考核项 è”网卡口设备目录一致率
ÔËάÊÖ²á.md
New file
@@ -0,0 +1,318 @@
# æµ‹è¯•环境
服务器IP:51.92.65.72
远程连接:root    yunwei@123
## MySQL
[centos7离线安装mysql](https://blog.csdn.net/m0_52985087/article/details/134444801)
> å®‰è£…目录
`/usr/local/mysql`
> é…ç½®æ–‡ä»¶
`/etc/my.cnf`
> æ•°æ®åº“、密码
```txt
zgyw    zgyw@202488
```
> å¯åЍ命令
`service mysql start`
## nginx
[centos7离线安装nginx](https://blog.csdn.net/qq_42999949/article/details/121577084)
> å®‰è£…目录
`/usr/local/nginx`
> é…ç½®æ–‡ä»¶ä½ç½®
`/usr/local/nginx/conf/nginx.conf`
> å‰ç«¯åŒ…位置
`/usr/local/deploy`/
## java
> å®‰è£…目录
`usr/local/deploy`目录下
jdk17
将配置文件提取在jar包外的,如果要修改配置文件直接修改服务器上的:`application.yml`、`application-prod.yml`
> å¦‚何上传文件
使用的远程工具为:`MobaXterm`
连接上服务器后,左上角有上传,
上传后的文件位于:`/root/`下。需要复制到`/usr/local/deploy/`下:`mv /root/xxx /usr/local/deploy/`
> å¯åŠ¨åœæ­¢æœåŠ¡
启动:`./startserver.sh`
停止:查找端口(`ps -ef | grep java`),杀掉端口:`kill -9 ç«¯å£å·`
## mongo
> å®‰è£…版本
```txt
mongo7
```
> å®‰è£…位置
`/usr/local/mongodb7`
> é…ç½®æ–‡ä»¶ä½ç½®
```txt
/usr/local/mongodb7/mongo.conf
```
> å¯åЍ
`/usr/local/mongodb7/bin/mongod -f /usr/local/mongodb7/mongo.conf`
> ç”¨æˆ·åå¯†ç 
```txt
root       yunwei@2024
```
> ç›®æ ‡æ•°æ®åº“
```txt
zgyw
```
> å¦‚何连接到数据库
1. ä»»æ„åœ°æ–¹è¾“入:`mongosh`会进入test数据库
2. åˆ‡æ¢åˆ°admin数据库,`use admin`
3. è®¤è¯ï¼š`db.auth("root","yunwei@2024")`
4. è®¤è¯æˆåŠŸåŽï¼Œåˆ‡æ¢åˆ°zgyw数据库:`use zgyw`
5. æŸ¥è¯¢é›†åˆï¼š`show collections`
6. æŸ¥è¯¢é›†åˆä¸­çš„æ•°æ®ï¼š`db.集合名.find()`,这是查全部
7. åˆ é™¤é›†åˆï¼š`db.集合名.drop()`,测试环境可用
8. é€€å‡ºï¼š`exit`
> mongo工具
位于:`/usr/local/mongodb7/mongo-tools/bin`
## redis
[centos7离线安装redis](https://blog.csdn.net/u010177412/article/details/81780844)
> å®‰è£…版本
```txt
redis6
```
> å®‰è£…位置
`/usr/local/redis-6.2.14`
> é…ç½®æ–‡ä»¶ä½ç½®
```txt
/usr/local/redis-6.2.14/redis.conf
```
> ç”¨æˆ·åå¯†ç 
```txt
无
```
> ç›®æ ‡æ•°æ®åº“
```txt
1
```
> å¦‚何连接redis
1. /usr/local/redis-6.2.14/src目录下有个:redis-cli的脚本
2. åœ¨è¯¥ç›®å½•下`./redis-cli`即可运行
3. åˆ‡æ¢æ•°æ®åº“:`select 1`
4. æŸ¥çœ‹æ‰€æœ‰key:`keys *`
5. é€€å‡ºï¼š`exit`
## ä¼˜äº‘平台
> ç”¨æˆ·åã€å¯†ç 
```txt
yunwei     Yesc@123
```
## è¿ç»´ç³»ç»Ÿjar包启动脚本:
```bash
#!/bin/bash
# Jar包名称(不包括.jar后缀)
JAR_NAME="zgyw"
# Jar包路径
JAR_PATH="/usr/local/deploy/ycl-server.jar"
# Java命令路径(通常设置为java,除非你知道你的java命令在特定路径)
JAVA_CMD="java -Dspring.profiles.active=prod -Dspring.config.location=/usr/local/deploy/application.yml,/usr/local/deploy/application-prod.yml"
# ä½¿ç”¨ps和grep列出所有与SEARCH_STRING相关的进程
echo "找到以下java进程:"
ps -ef | grep "java"
# æç¤ºç”¨æˆ·è¾“入要杀死的进程的PID
read -p "请输入要杀死的进程号, æˆ–输入“q”结束脚本: " PID
# è¾“å…¥q,退出脚本执行
if [ "$PID" = "q" ]; then
    echo "Quitting..."
    exit 0
fi
# å¦‚果用户输入-1,则不需要杀死进程,直接启动
if [ "$PID" = "q" ]; then
    # å¯åЍJar包
    echo "Starting $JAR_NAME..."
    nohup $JAVA_CMD -jar $JAR_PATH 2>&1 &
    echo "$JAR_NAME started with PID $!"
fi
# æ£€æŸ¥è¾“入的PID是否为数字
if ! [[ "$PID" =~ ^[0-9]+$ ]]; then
    echo "请输入正确的数字进程号. è¾“入“q”可结束脚本."
    exit 1
fi
# æ£€æŸ¥è¯¥PID是否存在
if ! kill -0 "$PID" 2>/dev/null; then
    echo "PID $PID does not exist."
    exit 1
fi
# æ€æ­»è¿›ç¨‹
kill -SIGTERM "$PID"
# å¯é€‰ï¼šç­‰å¾…几秒钟看进程是否退出
sleep 2
# å¯åЍJar包
echo "Starting $JAR_NAME..."
nohup $JAVA_CMD -jar $JAR_PATH 2>&1 &
echo "$JAR_NAME started with PID $!"
```
只需将jar包上传至服务器,此服务器上传默认在`/root/`下,上传到root下后,直接执行此脚本即可。
如更换服务器,请在服务器上:`vi  xxx.sh`,复制进去后,需要设置为可运行脚本:`chmod a+x xxx.sh`
## å·¥å•取视频流一帧图片
实现:使用gb28181协议对接大华平台,对接成功后大华会推送国标级联目录(国标设备),根据国标设备以及其中的通道即可使用点播获取到某个摄像头的视频流,拿到视频流就可以取一帧得到图片。
使用的开源项目:
1. [wvp-pro](https://doc.wvp-pro.cn/#/_content/introduction/config),wvp-pro是实现了gb281协议的一套开源框架,基于springboot+vue实现。
2. [ZLmediaKit](https://github.com/ZLMediaKit/ZLMediaKit/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B),ZLmediaKit是一个拉流取流的开源矿建,基于c++实现。
二者相互配合,wvp-pro通过gb281得到拉流需要的数据(参数),然后通过其点播接口将流推送至ZLmediaKit转换成各种协议的视频地址(rtsp、mp4等等等等)。我们可以在自己的程序中调用wvp-pro的点播接口就能得到zlmediakit返回的视频地址了,也就能拿到一帧图片。
### éƒ¨ç½²zlmediakit
当前部署位置:`/usr/zlm/`
因为是内网环境,所以部署会比其官方文档的操作要复杂一些。
1. ç¬¬ä¸€æ­¥ï¼Œå®‰è£…openssl、gcc、gcc-c++、cmake包,这是zlm必要的环境。(openssl version æŸ¥çœ‹æ˜¯å¦å®‰è£…)如果你已经离线安装了redis、nginx,那么这两个包大概率已经安装了。
2. åœ¨ä¸€å°å…¬ç½‘服务器上,去克隆zlm项目,默认像阿里云、腾讯云的云服务器都自带git。代码下载完成后,执行其文档的命令,切记不能漏这个命令:`git submodule update --init`
```bash
#国内用户推荐从同步镜像网站gitee下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init
```
3. æ‰§è¡Œå®Œå‘½ä»¤åŽï¼ŒåŽ‹ç¼©zlm项目,上传到内网服务器解压。
![image-20240830150653130](https://xiangpeitop.oss-cn-chengdu.aliyuncs.com/blogimgs/image-20240830150653130.png)
4. è¿è¡Œ
![image-20240830150901459](https://xiangpeitop.oss-cn-chengdu.aliyuncs.com/blogimgs/image-20240830150901459.png)
5. æ€æ­»zlm进程:`ps -ef | grep MediaServer`,然后kill
6. é…ç½®æ–‡ä»¶ï¼Œé»˜è®¤http、https端口为80、443和nginx冲突,所以要改端口。配置文件也在`ZLmediaKit/release/linux/Debug/conf.ini`中。注意,这里只需要改端口能启动就行,后续wvp-pro会自动配置该文件
### éƒ¨ç½²wvp-pro
当前部署位置:`/usr/local/deploy/wvp/`
1. ä¿®æ”¹é…ç½®æ–‡ä»¶ï¼šä¸»è¦è¦ä¿®æ”¹å…³äºŽgb284、zlm的:
![image-20240830155843669](https://xiangpeitop.oss-cn-chengdu.aliyuncs.com/blogimgs/image-20240830155843669.png)
这些都可以自定义,但是这些也是需要大华平台添加的信息,id既做编号也做用户名。
<img src="https://xiangpeitop.oss-cn-chengdu.aliyuncs.com/blogimgs/image-20240830160353086.png" alt="image-20240830160353086" style="zoom:80%;" />
注意:id必须和zlm配置文件中的mediaServerId(属性名好像叫这个)一致。secret也必须一致(对应zlm中的通用配置中的secret)
因为wvp是sprngboot的所以打包:先打前端会打包到jar包静态文件中,再打jar包即可
wvp是需要数据库、redis的。
wvp部署好之后,联系大华平台的人,在大华sip国标平台添加我们wvp的sip信息,添加之后,大华会推送到国标目录到wvp平台(国标设备菜单)。只有一条数据,点击右侧操作按钮:通道,就能看到所有设备,其中通道编号就是国标码。
根据这一个国标设备的设备编号+一机一档设备的国标码,我们的系统就能调用wvp点播接口拿到视频地址,然后取帧保存为图片。