多摄像机网络智能视频监控系统设计与实现

article/2025/10/19 4:04:48

1、智能视频监控系统项目背景介绍

2、系统的需求分析

在多摄像机视频监控系统中,通过前端结构化信息提取设备获取单个摄像机的结构化信息以后,需要将数据传输到云端服务器当中进行统一的存储和管理,从而为再识别等服务提供可靠的数据来源,满足更加丰富的用户需求。在这里插入图片描述
本章将基于云平台的多摄像机监控系统的总体需求分成三个部分:存储功能、业务处理功能以及前端查询和显示功能。在存储功能方面,主要是对摄像机中提取出的结构化信息以及各个摄像机的信息进行存储;在业务处理功能方面,主要是实现行人图片的再识别算法,以及结合摄像机的拓扑关系的多摄像机的行人再识别算法,能够给用户提供接口,实时的调用并处理用户的需求;最后是前端的显示和查询功能,对用户进行的单摄像机图像信息查询能够及时的显示到前端,主要包括多用户管理功能。

3、系统的整体设计

3.1 系统的整体架构

整个系统架构按照物理结构可分成四个大的部分:分布式边缘计算节点、Web服务器、流媒体服务器以及网页客户端。

  • 边缘计算节点:每个节点处理1~4路视频数据,实现对监控视频的结构化信息提取。
  • Web服务器:负责整个系统的资源调度,用于保存和处理计算节点上传过来的数据,提供各种API接口供外部设备访问;
  • 流媒体服务器:负责对监控视频内容进行采集、缓存调度和传输,以流媒体协议(RTMP/RTSP)将多路摄像机网络中的视频数据传输到客户端以及Web服务器端进行显示
  • 客户端:前端UI界面展示,实现一些人际交互操作,用户直接通过浏览器访问指定网址即可。
    在这里插入图片描述

3.2 前端计算节点

在前端对视频进行目标结构化处理,提取出行人或车辆矩形框位置以及图片,然后将该目标信息以JSON格式传送到云端服务器的数据库当中;每个节点可分为五个模块:视频读取模块、目标检测模块、目标跟踪与结构化信息提取模块、数据上传模块与嫌疑目标检测模块,其具体的如下图所示:
在这里插入图片描述

  • 视频读取模块:读取实时视频数据并缓存在一个队列当中,队列缓存满了就删除最早进来的视频帧,目标检测模块每次从队列顶部抽取最新的一帧进行处理;
  • 目标检测模块:这里采用yolov5实现对视频的实时检测,输入图片帧,输出目标检测框以及对应的类别信息,这里主要检测行人部分;
  • 目标跟踪与结构化信息提取模块:主要对目标检测模块所检测到的目标进行跟踪,并将跟踪的结果提取其结构化信息,生成json文件、jpg文件以及avi文件;
  • 结构化信息上传模块:主要通过http的POST请求,将结构化信息文件通过API传送到服务器的数据库中保存起来
  • 嫌疑人检测模块:获取服务器发布的嫌疑人图片,对每次进入摄像机中的新目标进行查询,如果是嫌疑人则将其跟踪结果重点标注,传输到服务其当中。

3.3 后端服务器

后端服务器主要分成三个部分:计算节点信息处理模块、任务处理模块、任务发布模块。

  • 计算节点信息处理模块: 主要是保存各个计算节点发送过来的结构化视频数据;
  • 任务处理模块: 主要处理客户端发送过来的请求,包括行人再识别检索、行人结构化信息查询、行人跟踪等功能;
  • 任务发布模块: 主要实现对各个计算节点任务的发布处理,包括目标检测模块、跟踪模块的训练权重,嫌疑人跟踪信息的发布等;

本系统中,后台的web服务器主要采用Ubuntu16.04+Nginx+uWSGI+Django2.2进行搭建和部署。
在这里插入图片描述在这里插入图片描述

3.4 网页客户端

网页客户端采用HTML5+CSS+Javascript来编写,总共有5个界面:登录界面、主界面、行人检索界面、以及系统配置界面。

  • 登录界面:主要负责用户管理,对注册的用户才有权限进入不同的界面;
  • 主界面:主要负责监控信息的展示,结构化后行人与车辆的统计信息,等基础信息,这些并不需要算法进行结构化信息的加工处理;
  • 行人检索界面:主要负责行人的查询、行人的离线跟踪,以及嫌疑人信息分发布;
  • 系统配置界面:主要负责设置一些系统参数,包括摄像机IP信息、摄像机编号、前端计算节点参数权重等信息的发布。

4、系统算法原理介绍

4.1 目标检测算法

本文使用的是yolov5,yolov5能够部署到cpu计算节点上实现视频中行人目标信息的实时提取

4.2 目标跟踪关联算法

采用卡尔曼滤波方式进行行人的跟踪,这里将卡尔曼滤波和行人的表观特征相结合进行行人目标的关联

4.3 行人再识别算法

主要包括行人特征的提取以及特征的距离度量。在终端提取行人的特征,上传到服务器当中实现行人的检索。
在这里主要使用两种行人再识别算法:

  • 用传统的方式LOMO+XQDA的方法提取行人特征,这种方法主要用于服务器端,其特点是使用CPU也能够快速的获得再识别结果;
    LOMO+XQDA官方地址: http://www.cbsr.ia.ac.cn/users/scliao/projects/lomo_xqda/
    LOMO+XQDA python实现:
    https://github.com/muggledy/lomo-xqda
  • 采用深度学习的方法,如Resnet50、Mobilev3等网络,其特点是需要对网络进行训练,并且需要采用GPU进行特征提取,其可以放在前端计算节点上进行,获取更深层次的行人特征。

4.4 摄像机网络拓扑生成

发布跟踪任务,在各个摄像机之间实现嫌疑人的持续跟踪

4.5 跨摄像机行人跟踪算法

附录1:服务器代码

5.1 数据库的设计models.py

5.1.1用户信息表

字段字段名称字段类型备注
Username用户名char(128)
Password密码char(128)
Email邮件EmailField
PhoneNumber电话Int

5.1.2 摄像机信息表

字段字段名称字段类型备注
ip摄像机IPGenericIPAddressField()
camera_namechar(64)
Position摄像机位置char(40)
RelateCam相邻摄像机char(10)
width摄像机分辨率宽Int
height摄像机分辨率高Int
fps摄像机帧数Int

5.1.3 行人结构化信息表

字段字段类型是否为空是否唯一备注
cameraIDchar(20)行人所在的摄像机ID
cameraIPchar(20)行人所在的摄像机IP
person_idchar(20)在摄像机cameraID中行人的编号
classesCharField行人的类别
imageImageField行人的关键帧图片
createdDateTimeField行人信息上传的时间
traceXchar(4096)行人X轴的轨迹信息
traceYchar(4096)行人Y轴的轨迹信息
EnterTimechar(100))行人进入摄像机的时间
durationInt行人在摄像机中持续的时间
videoFileField行人的视频序列
from django.db import models
class User(models.Model):Username = models.CharField(max_length=128, unique=True)password = models.CharField(max_length=128)email = models.EmailField(unique=True)PhoneNumber = models.IntegerField(blank=None)class Meta:ordering = ('Username',)def __str__(self):return self.Usernameclass Camera(models.Model):ip = models.GenericIPAddressField(protocol='both', unpack_ipv4=True)position = models.CharField(max_length=40)relateCam = models.CharField(max_length=10, blank=True, null=True)def __str__(self):return self.ipclass Person(models.Model):person_id = models.CharField(max_length=20, blank=True, null=True)cameraID = models.ForeignKey('Camera', blank=True, null=True)cameraIP = models.CharField(max_length=20, blank=True, null=True)image = models.ImageField(upload_to="personImage/%Y/%m/%d/%H", blank=True, null=True)created = models.DateTimeField(auto_now_add=True)traceX = models.CharField(unique=False, blank=True, null=True, max_length=4096)traceY = models.CharField(unique=False, blank=True, null=True, max_length=4096)duration = models.IntegerField(unique=False, default=0, blank=True, null=False)video = models.FileField(upload_to="personVideos/%Y/%m/%d/%H", blank=True, null=True)classes = models.CharField(max_length=20, blank=True, null=True)class Meta:ordering = ('created',)def __str__(self):return self.person_id

5.2 序列化serializer.py

from rest_framework import serializers
from polls.models import *class personSerializer(serializers.ModelSerializer):class Meta:model = Personfields = '__all__'class cameraSerializer(serializers.ModelSerializer):class Meta:model = Camerafields = '__all__'class userSerializer(serializers.ModelSerializer):class Meta:model = Userfields = '__all__'

5.3 路由设计urls.py

from . import views
from django.conf.urls import url, include, staticurlpatterns = [url(r'^person/$', views.person_list),url(r'^person/(?P<pk>[0-9]+)$', views.person_detail),url(r'^camera/$', views.camera_list),url(r'^camera/(?P<pk>[0-9]+)$', views.camera_detail),url(r'^findperson/$', views.find_person),
]

5.4 视图的设计views.py

@api_view(['GET','POST'])
def camera_list(req):if req.method == 'GET':camera = Camera.objects.all()serializer = cameraSerializer(camera, many=True)return Response(serializer.data)elif req.method == 'POST':serializer = cameraSerializer(data=req.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)@api_view(['GET','PUT','DELETE'])
def camera_detail(req, pk):try:camera = Camera.objects.get(pk=pk)except Camera.DoesNotExist:return Response(status=status.HTTP_404_NOT_FOUND)if req.method == 'GET':serializer = cameraSerializer(camera)return Response(serializer.data)elif req.method == 'PUT':serializer = cameraSerializer(camera, data=req.data)if serializer.is_valid():serializer.save()return Response(serializer.data)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)elif req.method == 'DELETE':camera.delete()return Response(status=status.HTTP_204_NO_CONTENT)@api_view(['GET','POST'])
def person_list(req):if req.method == 'GET':persons = Person.objects.all()person_serializers = personSerializer(persons, many=True)return Response(person_serializers.data)elif req.method == 'POST':person_serializers = personSerializer(data=req.data)if person_serializers.is_valid():person_serializers.save()Person.objects.filter(id=person_serializers.data["id"]).update(person_id=person_serializers.data["id"])

http://chatgpt.dhexx.cn/article/l31XKkIp.shtml

相关文章

基于EasyCVR视频技术的“互联网+监管”非现场监管视频监控系统设计方案

一、方案背景 1、行业痛点 1&#xff09;智能化水平弱&#xff0c;管理效率低&#xff1a;传统监管方式比较落后&#xff0c;智能化水平弱&#xff0c;监管工作完全依赖人工&#xff0c;导致人力成本过高、监管盲点多、效率低、服务质量差&#xff1b; 2&#xff09;缺乏感知…

智能视频监控平台

智能视频监控平台 智能视频监控平台是融合网络高清、智能分析、多级管控为一体的综合视频监控平台。主要用于平安城市、社区安防等领域。提供视频直播、视频存储、录像回放、视频分析等功能&#xff0c;支持本地化接入和云平台接入前端摄像头。无需安装客户端&#xff0c;支持…

几种常见的网络摄像头_DVR方案_整理

几种常见的网络摄像头_DVR方案_整理 http://blog.csdn.net/ex_net/article/details/7833334 作者&#xff1a;张建波 邮箱&#xff1a; 281451020qq.com 电话&#xff1a;13577062679 欢迎来电交流&#xff01; 一、华为海思的方案 市面上的4路8路DVR基本都是Hi3515的方案&…

网络摄像机(IPC)介绍

目录 一、什么是网络摄像机(IPC) 二、IPC功能 三、分辨率和存储 四、编码标准 五、AHD和IPC的区别 一、什么是网络摄像机(IPC) 网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机&#xff0c;它可以将视频影像通过网络传至地球另一端&#xff0c;且远端的浏览…

IPC(网络摄像机)介绍

IPC是IP Camera的缩写词&#xff0c;IP是网际协议&#xff0c;Camera是照相机、摄影机&#xff0c;IP Camera顾名思义就是网络摄像机&#xff0c;它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。 IPC&#xff08;即网络摄像机&#xff09;可以与路由器、交换机、NV…

【技术方案】野外场景中的摄像头没有固定IP,如何联网实现视频监控需求?

TSINGSEE青犀视频平台的视频能力十分灵活&#xff0c;在实际项目中也经历过多种多样的监控场景与需求。较为常见的监控场景如工厂、校园、商场、楼宇、社区等等&#xff0c;摄像头在固定的场所&#xff0c;现场网络环境较好&#xff0c;摄像头有固定的IP。 对于这样的场景&…

ipcam 网络摄像机介绍

网络服务器的核心功能&#xff0c;目前&#xff0c;网络摄像机的主要解决方案有DSP和ASIC两大阵营&#xff0c;DSP方面&#xff0c;主要有TI、ADI等&#xff0c;而ASIC解决方案中&#xff0c;近期比较成功的有映佳和海思的方案&#xff0c;下面我们就这些核心方案进行一个分析。…

网络摄像机简介

前言 因学习需要,进行个人备份,来源于网络,进行整合 什么是网络摄像机 定义 网络摄像机,也叫IP摄像机(IP camera ,简称IPC,可不是进程通信的那个IPC) 特点 IPC的特点主要体现在“IP”上&#xff0c;即支持网络协议的摄像机&#xff0c;IPC可以看成是“模拟摄像机视频编码…

嵌入式开发-最受欢迎的网络摄像机方案

转载&#xff1a;http://www.elecfans.com/baike/yuyinshipin/wangluoshexiangji/20150714376563_a.html 网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机&#xff0c;它可以将影像通过网络传至地球另一端&#xff0c;且远端的浏览者不需用任何专业软件&#xf…

网络摄像机架构

网络摄像机 IPC 现今的手机、运动摄像机以及安防监控领域的摄像机&#xff0c;它们通过光学传感器获取外部图像&#xff0c;经过处理后将视频信号存储或者传输到远端。本文主要针对网络摄像机。 硬件层 硬件层随着应用场景的的不同硬件方案上差别很大&#xff0c;手机的芯片解…

一套完整的网络视频监控系统设计方案

一套完整的网络视频监控系统设计方案 数字视频安防监控系统 一、需求分析 数字视频安防监控系统主要是对项目内公共区域进行全方位24小时不间断的视频监控&#xff1b;在监控中心通过电视墙实时显示整座大楼内外各个监控区域的现场情况&#xff0c;本次项目视频安防监控系统基…

网络WIFI摄像机方案主控芯片最全介绍

IPC网络WIFI摄像机方案主控芯片最全介绍: 看到很多朋友在问&#xff0c;什么是网络摄像机的方案&#xff0c;网络WIFI摄像机的主控究竟有什么区别&#xff0c;该用什么方案的网络摄像机来监控好? 鑫联拓展科技公司整理了一些资料给大家参考。 IPC网络摄像机方案把传统的模…

物联网之IP Camera解决方案简介

不看这几篇好文&#xff0c;就别说自己了解物联网 前言 IP Camera即网络摄像头&#xff0c;是物联网领域中的一个重要场景。本文将带领读者了解IP Camera这一典型物联网场景的市场、IP Camera的重要组成部分、以及以HaaS IP Camera为代表介绍IP Camera的解决方案的主要内容。 …

【bind()函数】JavaScript手写bind()及详解-超详细~~~

这两天学习了手写call、apply、bind&#xff0c;手写bind思考了很久才实现了MDN的示例的结果&#xff0c;所以记录下来~ 因为是第一篇文章&#xff0c;所以可能存在一些错误&#xff0c;希望各位大佬批评指正&#xff0c;不吝赐教。 也欢迎不懂的同学留言评论一起交流~~~ --…

2.深入了解bind函数

bind函数 1.查看方法2.详细解说&#xff08;中文&#xff09;bind函数&#xff1a; 3.bind文档 1.查看方法 使用指令&#xff1a;man bind 2.详细解说&#xff08;中文&#xff09; bind函数&#xff1a; 1.功能&#xff1a; bind函数把一个本地协议地址赋予一个套接字。 对…

C/C++ bind函数应用详解

文章目录 知识前导头文件bind介绍bind函数&#xff1a;bind简述&#xff1a; placeholders 用法探究单个参数多个参数成员函数 知识前导 头文件 #include <functional>bind介绍 bind函数&#xff1a; 使用规则&#xff1a; auto newCallable bind(callable, arg_li…

c++bind函数使用

总述 最近写代码的时候看到代码使用了bind&#xff0c;一个参数绑定的标准库函数。程序是这么写的&#xff0c; speaker_play_routine_ new boost::thread (boost::bind(&Speaker::playRoutine, this)); 这是我们一个语音播放的一行代码。 其中 boost::thread是新建一个线…

c++ bind 函数讲解

1.bind 函数的使用详解 可以将bind函数看作一个通用的函数适配器&#xff0c;它接受一个可调用对象&#xff0c;生成一个新的可调用对象来“适应”原对象的参数列表。 调用bind的一般形式&#xff1a;auto newCallable bind(callable,arg_list); 其中&#xff0c;newCallab…

Bind函数详解

自己开发了一个股票软件&#xff0c;功能很强大&#xff0c;需要的点击下面的链接获取&#xff1a; QStockView股票智能分析报警软件下载链接 - 一字千金 - 博客园 Bind函数详解 目录 1 简介... 1 2 使用实例... 1 2.1 bind函数常规使用... 1 2.2 …

网络编程之bind函数

基本TCP客户端/服务器程序的套接字函数 1、bind函数把一个本地协议地址赋予一个套接字。对于网际协议&#xff0c;协议地址是32位的IPv4地址或是128位的IPv6地址与16位的TCP或UDP端口号的组合。 #include<sys/socket.h> int bind(int sockfd, const struct sockaddr, …