
# WordDoc

人脸部门嵌入式软件交接文档, 主要涵盖野生动物管理系统、华为软件定义摄像头、车载客流密度分析、车站管理系统(研发中).

## 1.项目涵盖的知识点

项目研发主要涉及不同的深度学习开发框架, 这个因不同硬件而异, 算法部署流程也有区别, 项目多数采用**docker容器+docker-compose**的部署方式, 请参考一下资料进行研究。

### 1.1 野生动物管理系统

项目详细请参考gsd目录, 部署硬件大多数采用**工控机(x86) + 寒武纪mlu220(加速卡)**的形式, 部署框架采用[CNStream](https://github.com/Cambricon/CNStream), 后期因为**mlu220**性能低下等原因确定更换为**英伟达Jetson系列的TX-2 NX**, 算法部署框架则为[Deepstream](https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvvideoconvert.html).


**应用层**:

> 应用层, 寒武纪、Jetson系列差别不大

工具库 | 资料
---|---
httplib | http工具库
rapidjson | 处理json数据的工具库
[zltoolkit](https://gitee.com/xia-chu/ZLToolKit.git) | 工具库, 包含定时器、线程池管理等.

**寒武纪算法层**:

资料 | 作用 | 链接
---|---|---|
cnstream | 算法的部署框架, 真正落地还需自行修改和增加模块 | https://github.com/Cambricon/CNStream
寒武纪文档中心 | 包含[mlu220的驱动安装](https://www.cambricon.com/docs/sdk_1.7.0/driver_4.20.16/user_guide_4.20.16/index.html)    | https://developer.cambricon.com/index/document/index/classid/3.html
寒武纪开发者社区 | 咨询问题, 但更推荐通过销售找研发 | https://developer.cambricon.com/
live555(流媒体服务器框架) | mlu220中算法展示流的部署框架 | http://www.live555.com/ |

**Jetson算法层**

资料 | 作用 | 链接
---|---|---| 
deepstream | 算法的部署框架, 建设于gstreamer, 自行学习 | https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_docker_containers.html
deepstream容器库 | deepstream容器库 |https://catalog.ngc.nvidia.com/orgs/nvidia/containers/deepstream-l4t/tags | 

### 1.2 华为软件定义摄像头

项目具体参考HuaWeiSDC目录, 华为软件定义摄像头, 产品形态为一个摄像头, 可自行部署自己训练的算法, 实现摄像头与算法一体化。

资料 | 链接
---|---
产品形态 | https://e.huawei.com/cn/products/intelligent-vision/cameras/software-defined-camera/
算法部署平台 | https://hdps.holosens.huaweicloud.com/shdps
社区 | https://forum.huawei.com/enterprise/zh/index

### 1.3 车载客流密度分析

项目详细参考miva目录, 项目应用场景为地铁列车上,考虑到硬件统合性能和功耗限制等因素, 选择的是**Jetson Xavire NX**, 软件则基于Deepstream进行开发.

资料 | 作用 | 链接
---|---|---| 
deepstream | 算法的部署框架, 建设于gstreamer, 自行学习 | https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_docker_containers.html | 

### 1.4 车站管理系统(研发中)

项目详细参考ins目录, 项目应场景为地铁车站, 算法所需的处理资源较大, 所以方案采用**硬件服务器 + GPU的形式**, 因为考虑到后续自动化维护、部署、资源动态伸缩问题, 决定采用[K8s(Kubernetes)](https://www.kubernetes.org.cn/doc-11)这种分布式部署方案, 同时为了更好实现的多用户权限管理, 采用国内青云开源的[Kubesphere](https://kubesphere.io/api/kubesphere/#tag/DevOps-Credential)来管理和部署K8s.

- 算法部署部分也采用Deepstream进行部署

### 1.5 gsd_check

项目详细参考gsd_check, 项目应用场景为对野生动物管理系统的识别结果进行二次筛查, 降低误识别, 硬件平台为**Jetson Xavire NX**, 软件则是居于tensorttx进行开发.

资料 | 作用 | 链接
---|---|---| 
tensorrtx | 算法的部署框架, 建设于tensorrtx, 自行学习 | https://github.com/wang-xinyu/tensorrtx
drogon | http服务框架 | https://gitee.com/an-tao/drogon?utm_source=alading&utm_campaign=repo 

### 1.6 gsd_var

项目应用场景为对野生动物管理系统的识别结果进行二次识别, 识别鸟种, 内部架构跟gsd_check一样, 不做过多的描述。

## 2.软件仓库与镜像仓库

软件仓库、镜像仓库地址均为自己搭建gitlab服务、harbor服务, 物理机为工控机, 该做法的原因为能够将两者服务纳入到VPN内网中, 从而实现真正意义上的自动化部署。

**服务:**

| 服务 | 地址 | 作用 | 账号 | 密码 |
| --- | --- | --- | --- | --- | 
| gitlab | http://192.168.31.174 | 私有git服务 | root | sunwin2021 |
| harbor | http://192.168.31.174:8080 | 私有DockerHub服务 | admin | SZsunwin2022 |

## 3.摄像头参数说明

摄像头参数主要分辨率为1080P, 不能使用2K, 这样会影响到算法的识别效果, 在部署时一定要检查是否为1080P, 而相机账号密码多数**admin sunwin2021**。

## 4.软件更新说明

因为有些机场目前处于流量卡欠费的情况, 并且结合软件迭代问题、各个机场的网络环境不同, 各个机场更新方法不同, 根据以下表格选择对应不同的方法, 方法具体参考**update**目录下文件.

| 机场 | 更新方法 |
| --- | --- | 
| 白云、大兴、深圳机场、兰州南端、合肥机场 | 正常更新.md |
| 首都、乌鲁木齐、成都、兰州北端、中端 | 旧版转新版更新.md |

**注意: 将旧版程序转换为新版后, 统一使用正常更新方法**

