大家好,我是熊猫,你的NAS领航员。NAS不只是存储那么简单,数码也可以是生活,关注我,给你的生活加点'技'趣!
引言
今天要介绍的容器项目大有来头,他可以对接支持onvif协议的摄像头,或者支持RTSP流的网络摄像头,而单纯的对接肯定没意思,毕竟各大NAS厂商自己就有视频监控工具。但它内置了很多大模型,通过内置的这些大模型,能实现对视频流的AI分析,从而实现告警的作用,这一切都在你NAS本地上执行,所以这个容器项目我也愿称之为NAS性能杀手,今天咱们要介绍的便是思通数科——AI视频卫士。
项目官网项目介绍
首先还是简单介绍一下,AI视频卫士是一个多功能AI实时监控系统,支持多种设备混合接入,包括:无人机、行车记录仪,收银机、监控摄像头、Pad、手机和电脑摄像头。系统具备高度灵活性,能够针对监控目标和范围提供实时预警。此外,系统内置低代码算法模型快速训练平台(付费版),简化了算法开发流程。用户还可以便捷地通过文字或图像搜索监控录像中的人脸、物体、标牌、车牌和语音对话。
在开源版本中,作者提供了20种免费模型供我们使用,例如配戴安全帽、人体跌倒识别、电动车监测、大货车监测、房门关开监测、灭火器正常、地面积水、口罩识别、安全手套识别、玩手机识别、睡觉识别、吸烟监测、非机动车识别、表情识别、占道经营识别、智能电网守卫、宠物牵绳识别、轮椅识别、婴儿车识别、交通事故识别。
以下是坐着给到的项目特性:
实时监控功能:
- 视频直播画面:系统首页展示当前监控摄像头下的实时监测画面,用户可以点击全屏查看。
- 监控画面切换:用户可以通过下拉框选择不同摄像头和分组,查看不同监控画面。
- 实时数据展示:首页左侧栏展示最新的实时预警数据,用户可以点击查看详情。
- 摄像头点位统计:管理员可以看到摄像头的生效、失效状态和总数。
- 预警统计与走势:展示监控场景中预警次数最多的情况,以及不同时间范围内的预警类型统计。
监测任务管理:
- 监测任务列表:展示用户创建的监控任务列表。
- 添加监测任务:允许用户添加多个参数,并将任务分配给单个或多个摄像头。
- 任务状态管理:用户可以对监控任务进行开启、停止或定时监控等操作。
- 监测任务管理:用户可以查看任务详情并进行修改。
事件告警功能:
- 事件列表:展示最新的报警信息,支持分类、分组和分时间段检索。
- 告警详情:用户可以查看预警数据的详细信息。
算法商城:
- 算法列表:实时同步更新算法列表。
- 算法详情:查看算法的详细介绍。
- 算法导入:通过本地或在线方式导入算法模型。
- 停用与更新:允许用户停止当前算法并提醒相关监测任务,联网时自动检测更新。
视频检索:
- 视频标记:自动为视频帧打标签。
- 图像文字识别:自动提取视频中的文字内容。
- 标记存储:存储视频标记和原始图片的对应关系。
- 检索视频:通过关键词、摄像头点位、时间范围检索视频内容。
模型训练(商用版):
- 样本管理:上传图片样本作为训练数据集。
- 样本标注:对图像进行目标物体标记。
- 自动标注:使用导入的模型自动标注图像。
- 模型发布:将训练好的模块发布到正式系统中。
- 迭代训练:在原有模型基础上进行迭代训练。
- 模型训练:使用标注后的数据样本进行模型训练。
视频接入:
- 添加设备:添加不同协议型号的摄像头。
- 分组管理:设置摄像头分组,便于管理。
- 设备管理:对摄像头进行修改、删除等操作。
部署
项目的部署稍微有点麻烦,不过聪明的你们应该能一看就会,毕竟虽然麻烦,都步骤都并不难。首先,我们需要准备好六个镜像,分别是redis、rabbitmq、mysql、minio、elasticsearch以及ai_video镜像。六个镜像加起来总体积达到了接近10GB,非常离谱。
不过作者非常贴心的给到了五个本地镜像包,并上传到了百度网盘供大家使用,这一点还是非常贴心的,这里熊猫也贴上地址,将其中的文件全部下载放到NAS中即可。网盘链接:https://pan.baidu.com/s/14tgK26G3bxibjhsT5jG25A
提取码:kglr
。
这时候有小聪明就会问了,那还有一个镜像。很抱歉,剩下的一个镜像还是需要我们自行下载,且它也是体积最大的那个,不过好在作者又贴心的给我们加了加速地址,所以下载速度其实非常不错。这里贴一个docker pull命令:docker pull crpi-q4f4vwdmprv5egrk.cn-hangzhou.personal.cr.aliyuncs.com/yssanyue/ai_video:v1.4
镜像下载之后,我们还需要给镜像起一个别名,这时候就需要用到SSH端口了。打开NAS的SSH端口,用工具连接上NAS之后,咱们输入sudo -i
获取root权限,随后输入命令docker tag crpi-q4f4vwdmprv5egrk.cn-hangzhou.personal.cr.aliyuncs.com/yssanyue/ai_video:v1.4 ai_video:v1.4
将刚刚下载的镜像改名为ai_video
熊猫今天用到的为绿联的DXP4800,多次更新之后绿联的UGOS Pro系统越来越好用了,且目前支持Docker-compose堆栈的方式来创建容器项目,加上N100的性能也还不错,所以今天就用到了绿联。这里咱们打开Docker,来到项目界面。
项目可以看到熊猫是已经启动了容器项目了,在创建yml文件之前,我们需要准备一些文件以及文件夹,其中文件需要到作者给到的地址去下载,这里贴一个地址。我们需要下载volumes.zip中的文件,并将其解压之后提取其中的nginx.conf、application.yml以及config.yaml三个文件。https://gitee.com/stonedtx/stonedtaiv/tree/master/docker
随后在NAS中新建这样的目录树,将刚刚下载的三个文件放到config文件夹中。目录树
这时候创建docker-compose.yml文件,文件内容如下,映射路径和端口记得根据自身NAS设备进行更改。
services:
mysql:
container_name: mysql
image: mysql:8.0.38
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: config5566
MYSQL_DATABASE: yys_aivideo
MYSQL_USER: user
MYSQL_PASSWORD: config5566
volumes:
- /volume1/docker/aivideo/mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -pconfig5566"]
interval: 30s
timeout: 10s
retries: 5
networks:
- videonetworks
redis:
container_name: redis
image: redis:7.2
ports:
- "6381:6379"
volumes:
- /volume1/docker/aivideo/redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
networks:
- videonetworks
es:
container_name: es
image: elasticsearch:8.14.3
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- xpack.security.enabled=false
- discovery.type=single-node
ports:
- "9222:9200"
- "9333:9300"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
networks:
- videonetworks
minio:
container_name: minio
image: minio/minio:latest
ports:
- "9005:9000"
- "9010:9001"
environment:
MINIO_ACCESS_KEY: admin
MINIO_SECRET_KEY: admin123
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 3
volumes:
- /volume1/docker/aivideo/minio-data:/data
networks:
- videonetworks
rabbitmq:
container_name: rabbitmq
image: rabbitmq:4.0
ports:
- "15673:15672" # 映射 RabbitMQ 管理界面
- "5673:5672" # 映射 RabbitMQ 消息队列
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: admin123
command: >
bash -c "rabbitmq-plugins enable rabbitmq_management && rabbitmq-server"
healthcheck:
test: ["CMD-SHELL", "rabbitmq-diagnostics -q ping"]
interval: 30s
timeout: 10s
retries: 3
volumes:
- /volume1/docker/aivideo/rabbitmq-data:/var/lib/rabbitmq
networks:
- videonetworks
app:
container_name: app
image: ai_video:v1.4
ports:
- "35310:35300"
volumes:
- /volume1/docker/aivideo/config/nginx.conf:/etc/nginx/nginx.conf
- /volume1/docker/aivideo/config/application.yml:/opt/aivideo/java-service/application.yml
- /volume1/docker/aivideo/config/config.yaml:/opt/aivideo/python-service/config/config.yaml
# links:
# - mysql:mysql
# - redis:redis
# - es:es
# - minio:minio
# - rabbitmq:rabbitmq
networks:
- videonetworks
depends_on:
- mysql
- redis
- es
- minio
- rabbitmq
networks:
videonetworks:
driver: bridge
创建好之后如果你的NAS支持docker-compose堆栈,那直接将文件或者代码丢进去就可以了,如果不支持,也可以通过创建yml文件,再SSH的方式获取root之后再输入docker-compose up -d
的命令来启动项目。
成功启动之后会拉起六个容器,如果其中app容器日志出现这样的内容,就代表项目启动成功了。
日志这时候我们输入NASip:35310/vis/
就可以进入登录界面了,默认账号为admin,密码为Stonedt,123。
体验
熊猫这里已经将我家里的监控加到了里面,所以在数据看板这里能看到摄像头数量1,同时右边能看到该摄像头的实时监控画面。
数据看板功能很好理解,首先来到视频接入这里添加摄像头或者网络摄像头。现在左边的设备列表这里添加分组,建好分组之后可以直接点击右边方框中的+号添加设备。
设置分组这里熊猫先将添加的摄像头删除,在设备支持上,首先你要知道你的设备是否支持RTSP流视频(onvif协议都支持),如果不支持那就不能添加。如果直接,咱们直接输入摄像头的RTSP流地址,点击测试,有画面就可以直接提交。
添加设备这时候咱们就完成摄像头添加了,如何实现AI检测呢?切换到检测任务这一栏,选择右边的添加任务,输入任务名称、设置优先级、选择监控点以及监控场景(一次只能选择三个模型),最后选择检测日期和实时监控,状态选择启动就可以了。
AI检测任务的检测会一直进行,这时候你就会看到你的NAS开始高强度负载了,熊猫这里加了六个模型,N100直接干到了99%的占用,8G的内存也基本告急。
负载理论上如果你的NAS足够强,那么可以添加足够多的模型进去。不过N100应该不行,所以熊猫也就没有过多尝试了。不过AI检测实测在较为清晰和近距离的情况下的确可用,如果检测目标太远或者很糊,那么依然检测不到。
总结
很牛的项目,最牛的还是作者,完成度如此之高的项目居然选择了开源,虽说作者是靠卖模型盈利,不过实际感觉个人或者店面使用,免费的模型也足够用了。给作者点赞!!!
以上便是本期的全部内容了,如果你觉得还算有趣或者对你有所帮助,不妨点赞收藏,最后也希望能得到你的关注,咱们下期见!三连