IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    NAS部署AI视频卫士,压榨NAS的最后一滴性能,NAS性能检测镜像

    panda发表于 2024-11-04 17:21:14
    love 0

    大家好,我是熊猫,你的NAS领航员。NAS不只是存储那么简单,数码也可以是生活,关注我,给你的生活加点'技'趣!

    引言

    今天要介绍的容器项目大有来头,他可以对接支持onvif协议的摄像头,或者支持RTSP流的网络摄像头,而单纯的对接肯定没意思,毕竟各大NAS厂商自己就有视频监控工具。但它内置了很多大模型,通过内置的这些大模型,能实现对视频流的AI分析,从而实现告警的作用,这一切都在你NAS本地上执行,所以这个容器项目我也愿称之为NAS性能杀手,今天咱们要介绍的便是思通数科——AI视频卫士。

    项目官网

    项目介绍

    首先还是简单介绍一下,AI视频卫士是一个多功能AI实时监控系统,支持多种设备混合接入,包括:无人机、行车记录仪,收银机、监控摄像头、Pad、手机和电脑摄像头。系统具备高度灵活性,能够针对监控目标和范围提供实时预警。此外,系统内置低代码算法模型快速训练平台(付费版),简化了算法开发流程。用户还可以便捷地通过文字或图像搜索监控录像中的人脸、物体、标牌、车牌和语音对话。

    在开源版本中,作者提供了20种免费模型供我们使用,例如配戴安全帽、人体跌倒识别、电动车监测、大货车监测、房门关开监测、灭火器正常、地面积水、口罩识别、安全手套识别、玩手机识别、睡觉识别、吸烟监测、非机动车识别、表情识别、占道经营识别、智能电网守卫、宠物牵绳识别、轮椅识别、婴儿车识别、交通事故识别。

    以下是坐着给到的项目特性:

    1. 实时监控功能:

      • 视频直播画面:系统首页展示当前监控摄像头下的实时监测画面,用户可以点击全屏查看。
      • 监控画面切换:用户可以通过下拉框选择不同摄像头和分组,查看不同监控画面。
      • 实时数据展示:首页左侧栏展示最新的实时预警数据,用户可以点击查看详情。
      • 摄像头点位统计:管理员可以看到摄像头的生效、失效状态和总数。
      • 预警统计与走势:展示监控场景中预警次数最多的情况,以及不同时间范围内的预警类型统计。
    2. 监测任务管理:

      • 监测任务列表:展示用户创建的监控任务列表。
      • 添加监测任务:允许用户添加多个参数,并将任务分配给单个或多个摄像头。
      • 任务状态管理:用户可以对监控任务进行开启、停止或定时监控等操作。
      • 监测任务管理:用户可以查看任务详情并进行修改。
    3. 事件告警功能:

      • 事件列表:展示最新的报警信息,支持分类、分组和分时间段检索。
      • 告警详情:用户可以查看预警数据的详细信息。
    4. 算法商城:

      • 算法列表:实时同步更新算法列表。
      • 算法详情:查看算法的详细介绍。
      • 算法导入:通过本地或在线方式导入算法模型。
      • 停用与更新:允许用户停止当前算法并提醒相关监测任务,联网时自动检测更新。
    5. 视频检索:

      • 视频标记:自动为视频帧打标签。
      • 图像文字识别:自动提取视频中的文字内容。
      • 标记存储:存储视频标记和原始图片的对应关系。
      • 检索视频:通过关键词、摄像头点位、时间范围检索视频内容。
    6. 模型训练(商用版):

      • 样本管理:上传图片样本作为训练数据集。
      • 样本标注:对图像进行目标物体标记。
      • 自动标注:使用导入的模型自动标注图像。
      • 模型发布:将训练好的模块发布到正式系统中。
      • 迭代训练:在原有模型基础上进行迭代训练。
      • 模型训练:使用标注后的数据样本进行模型训练。
    7. 视频接入:

      • 添加设备:添加不同协议型号的摄像头。
      • 分组管理:设置摄像头分组,便于管理。
      • 设备管理:对摄像头进行修改、删除等操作。

      部署

      项目的部署稍微有点麻烦,不过聪明的你们应该能一看就会,毕竟虽然麻烦,都步骤都并不难。首先,我们需要准备好六个镜像,分别是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

    image.png
    随后在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检测实测在较为清晰和近距离的情况下的确可用,如果检测目标太远或者很糊,那么依然检测不到。

    总结

    很牛的项目,最牛的还是作者,完成度如此之高的项目居然选择了开源,虽说作者是靠卖模型盈利,不过实际感觉个人或者店面使用,免费的模型也足够用了。给作者点赞!!!

    以上便是本期的全部内容了,如果你觉得还算有趣或者对你有所帮助,不妨点赞收藏,最后也希望能得到你的关注,咱们下期见!
    三连



沪ICP备19023445号-2号
友情链接