毕设开源 深度学习社交距离检测系统(源码+论文)
文章目录0 前言1 项目运行效果2 设计原理3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪4 最后0 前言这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目提供大家参考学习今天要分享的是毕业设计 深度学习社交距离检测系统源码论文学长这里给一个题目综合评分(每项满分5分)难度系数3分工作量3分创新点4分项目分享见主页任意置顶文章1 项目运行效果视频效果毕业设计 深度学习社交距离检测系统2 设计原理安全的社交距离是公共预防传染病毒的途径之一。所以在人群密集的区域进行社交距离的安全评估是十分重要的。社交距离的测量旨在保持个体之间的物理距离和减少相互接触的人群来减缓或阻止病毒传播在抗击病毒和预防大流感中发挥重要作用。但时刻保持安全距离具有一定的难度特别是在校园工厂等场所在这种情况下开发智能摄像头等技术尤为关键。将人工智能深度学习集成至安全摄像头对行人进行社交距离评估。现阶段针对疫情防范的要求主要采用人工干预和计算机处理技术。人工干预存在人力资源要求高风险大时间成本高等等缺点。计算机处理等人工智能技术的发展对社交安全距离的安全评估具有良好的效果。通过距离分类人群的高危险和低危险距离。相关代码importargparsefromutils.datasetsimport*fromutils.utilsimport*defdetect(save_imgFalse):out,source,weights,view_img,save_txt,imgsz\ opt.output,opt.source,opt.weights,opt.view_img,opt.save_txt,opt.img_size webcamsource0orsource.startswith(rtsp)orsource.startswith(http)orsource.endswith(.txt)# Initializedevicetorch_utils.select_device(opt.device)ifos.path.exists(out):shutil.rmtree(out)# delete output folderos.makedirs(out)# make new output folderhalfdevice.type!cpu# half precision only supported on CUDA# Load modelgoogle_utils.attempt_download(weights)modeltorch.load(weights,map_locationdevice)[model].float()# load to FP32# torch.save(torch.load(weights, map_locationdevice), weights) # update model if SourceChangeWarning# model.fuse()model.to(device).eval()ifhalf:model.half()# to FP16# Second-stage classifierclassifyFalseifclassify:modelctorch_utils.load_classifier(nameresnet101,n2)# initializemodelc.load_state_dict(torch.load(weights/resnet101.pt,map_locationdevice)[model])# load weightsmodelc.to(device).eval()# Set Dataloadervid_path,vid_writerNone,Noneifwebcam:view_imgTruetorch.backends.cudnn.benchmarkTrue# set True to speed up constant image size inferencedatasetLoadStreams(source,img_sizeimgsz)else:save_imgTruedatasetLoadImages(source,img_sizeimgsz)# Get names and colorsnamesmodel.namesifhasattr(model,names)elsemodel.modules.names colors[[random.randint(0,255)for_inrange(3)]for_inrange(len(names))]# Run inferencet0time.time()imgtorch.zeros((1,3,imgsz,imgsz),devicedevice)# init img_model(img.half()ifhalfelseimg)ifdevice.type!cpuelseNone# run onceforpath,img,im0s,vid_capindataset:imgtorch.from_numpy(img).to(device)imgimg.half()ifhalfelseimg.float()# uint8 to fp16/32img/255.0# 0 - 255 to 0.0 - 1.0ifimg.ndimension()3:imgimg.unsqueeze(0)# Inferencet1torch_utils.time_synchronized()predmodel(img,augmentopt.augment)[0]# Apply NMSprednon_max_suppression(pred,opt.conf_thres,opt.iou_thres,fastTrue,classesopt.classes,agnosticopt.agnostic_nms)t2torch_utils.time_synchronized()# Apply Classifierifclassify:predapply_classifier(pred,modelc,img,im0s)# List to store bounding coordinates of peoplepeople_coords[]# Process detectionsfori,detinenumerate(pred):# detections per imageifwebcam:# batch_size 1p,s,im0path[i],%g: %i,im0s[i].copy()else:p,s,im0path,,im0s save_pathstr(Path(out)/Path(p).name)s%gx%g %img.shape[2:]# print stringgntorch.tensor(im0.shape)[[1,0,1,0]]# normalization gain whwhifdetisnotNoneandlen(det):# Rescale boxes from img_size to im0 sizedet[:,:4]scale_coords(img.shape[2:],det[:,:4],im0.shape).round()# Print resultsforcindet[:,-1].unique():n(det[:,-1]c).sum()# detections per classs%g %ss, %(n,names[int(c)])# add to string# Write resultsfor*xyxy,conf,clsindet:ifsave_txt:# Write to filexywh(xyxy2xywh(torch.tensor(xyxy).view(1,4))/gn).view(-1).tolist()# normalized xywhwithopen(save_path[:save_path.rfind(.)].txt,a)asfile:file.write((%g *5\n)%(cls,*xywh))# label formatifsave_imgorview_img:# Add bbox to imagelabel%s %.2f%(names[int(cls)],conf)iflabelisnotNone:if(label.split())[0]person:people_coords.append(xyxy)# plot_one_box(xyxy, im0, line_thickness3)plot_dots_on_people(xyxy,im0)# Plot lines connecting peopledistancing(people_coords,im0,dist_thres_lim(200,250))# Print time (inference NMS)print(%sDone. (%.3fs)%(s,t2-t1))# Stream resultsifview_img:cv2.imshow(p,im0)ifcv2.waitKey(1)ord(q):# q to quitraiseStopIteration# Save results (image with detections)ifsave_img:ifdataset.modeimages:cv2.imwrite(save_path,im0)else:ifvid_path!save_path:# new videovid_pathsave_pathifisinstance(vid_writer,cv2.VideoWriter):vid_writer.release()# release previous video writerfpsvid_cap.get(cv2.CAP_PROP_FPS)wint(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH))hint(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))vid_writercv2.VideoWriter(save_path,cv2.VideoWriter_fourcc(*opt.fourcc),fps,(w,h))vid_writer.write(im0)ifsave_txtorsave_img:print(Results saved to %s%os.getcwd()os.sepout)ifplatformdarwin:# MacOSos.system(open save_path)print(Done. (%.3fs)%(time.time()-t0))3 相关技术3.1 YOLOV4YOLOv4使用卷积网络 CSPDarknet-53 特征提取网络结构模型如图 2 所示。在每个 Darknet-53的残块行加上 CSP(Cross Stage Partial)结构13将基础层划分为两部分再通过跨层次结构的特征融合进行合并。并采用 FPN( feature pyramid networks)结构加强特征金字塔最后用不同层的特征的高分辨率来提取不同尺度特征图进行对象检测。最终网络输出 3 个不同尺度的特征图在三个不同尺度特征图上分别使用 3 个不同的先验框anchors进行预测识别使得远近大小目标均能得到较好的检测。YOLOv4 的先验框尺寸是经PASCALL_VOC,COCO 数据集包含的种类复杂而生成的并不一定完全适合行人。本研究旨在研究行人之间的社交距离针对行人目标检测利用聚类算法对 YOLOv4 的先验框微调首先将行人数据集F依据相似性分为i个对象即,其中每个对象都具有 m 个维度的属性。聚类算法的目的是 i 个对象依据相似性聚集到指定的 j 个类簇每个对象属于且仅属于一个其到类簇中心距离最小的类簇中心。初始化 j 个 聚 类 中 心,计算每一个对象到每一个聚类中心的欧式距离见公式之后依次比较每个对象到每个聚类中心的距离将对象分配至距离最近的簇类中心的类簇中得到个类簇聚类算法中定义了类簇的原型类簇中心就是类簇内所有对象在各个维度的均值其公式见相关代码defcheck_anchors(dataset,model,thr4.0,imgsz640):# Check anchor fit to data, recompute if necessaryprint(\nAnalyzing anchors... ,end)mmodel.module.model[-1]ifhasattr(model,module)elsemodel.model[-1]# Detect()shapesimgsz*dataset.shapes/dataset.shapes.max(1,keepdimsTrue)whtorch.tensor(np.concatenate([l[:,3:5]*sfors,linzip(shapes,dataset.labels)])).float()# whdefmetric(k):# compute metricrwh[:,None]/k[None]xtorch.min(r,1./r).min(2)[0]# ratio metricbestx.max(1)[0]# best_xreturn(best1./thr).float().mean()# best possible recallbprmetric(m.anchor_grid.clone().cpu().view(-1,2))print(Best Possible Recall (BPR) %.4f%bpr,end)ifbpr0.99:# threshold to recomputeprint(. Attempting to generate improved anchors, please wait...%bpr)nam.anchor_grid.numel()//2# number of anchorsnew_anchorskmean_anchors(dataset,nna,img_sizeimgsz,thrthr,gen1000,verboseFalse)new_bprmetric(new_anchors.reshape(-1,2))ifnew_bprbpr:# replace anchorsnew_anchorstorch.tensor(new_anchors,devicem.anchors.device).type_as(m.anchors)m.anchor_grid[:]new_anchors.clone().view_as(m.anchor_grid)# for inferencem.anchors[:]new_anchors.clone().view_as(m.anchors)/m.stride.to(m.anchors.device).view(-1,1,1)# lossprint(New anchors saved to model. Update model *.yaml to use these anchors in the future.)else:print(Original anchors better than new anchors. Proceeding with original anchors.)print()# newline3.2 基于 DeepSort 算法的行人跟踪YOLOv4中完成行人目标检测后生成边界框Bounding boxBboxBbox 含有包含最小化行人边框矩形的坐标信息本研究引入 DeepSort 算法[18]完成对行人的质点进行跟踪目的是为了在运动矢量分析时算行人安全社交距离中。首先对行人进行质点化计算。其质点计算公式如确定行人质点后利用 DeepSort 算法实现对多个目标的精确定位与跟踪其核心算法流程如图所示相关代码classTrackState: 单个轨迹的三种状态 Tentative1#不确定态Confirmed2#确定态Deleted3#删除态classTrack:def__init__(self,mean,covariance,track_id,class_id,conf,n_init,max_age,featureNone): mean:位置、速度状态分布均值向量维度(8×1) convariance:位置、速度状态分布方差矩阵维度(8×8) track_id:轨迹ID class_id:轨迹所属类别 hits:轨迹更新次数(初始化为1)即轨迹与目标连续匹配成功次数 age:轨迹连续存在的帧数(初始化为1)即轨迹出现到被删除的连续总帧数 time_since_update:轨迹距离上次更新后的连续帧数(初始化为0)即轨迹与目标连续匹配失败次数 state:轨迹状态 features:轨迹所属目标的外观语义特征轨迹匹配成功时添加当前帧的新外观语义特征 conf:轨迹所属目标的置信度得分 _n_init:轨迹状态由不确定态到确定态所需连续匹配成功的次数 _max_age:轨迹状态由不确定态到删除态所需连续匹配失败的次数 self.meanmean self.covariancecovariance self.track_idtrack_id self.class_idint(class_id)self.hits1self.age1self.time_since_update0self.stateTrackState.Tentative self.features[]iffeatureisnotNone:self.features.append(feature)#若不为None初始化外观语义特征self.confconf self._n_initn_init self._max_agemax_agedefincrement_age(self): 预测下一帧轨迹时调用 self.age1#轨迹连续存在帧数1self.time_since_update1#轨迹连续匹配失败次数1defpredict(self,kf): 预测下一帧轨迹信息 self.mean,self.covariancekf.predict(self.mean,self.covariance)#卡尔曼滤波预测下一帧轨迹的状态均值和方差self.increment_age()#调用函数age1time_since_update1defupdate(self,kf,detection,class_id,conf): 更新匹配成功的轨迹信息 self.confconf#更新置信度得分self.mean,self.covariancekf.update(self.mean,self.covariance,detection.to_xyah())#卡尔曼滤波更新轨迹的状态均值和方差self.features.append(detection.feature)#添加轨迹对应目标框的外观语义特征self.class_idclass_id.int()#更新轨迹所属类别self.hits1#轨迹匹配成功次数1self.time_since_update0#匹配成功时轨迹连续匹配失败次数归0ifself.stateTrackState.Tentativeandself.hitsself._n_init:self.stateTrackState.Confirmed#当连续匹配成功次数达标时轨迹由不确定态转为确定态defmark_missed(self): 将轨迹状态转为删除态 ifself.stateTrackState.Tentative:self.stateTrackState.Deleted#当级联匹配和IOU匹配后仍为不确定态elifself.time_since_updateself._max_age:self.stateTrackState.Deleted#当连续匹配失败次数超标 该部分还存在一些轨迹坐标转化及状态判定函数具体可参考代码来源 篇幅有限更多详细设计见设计论文4 最后项目包含内容一万四千字 完整详细设计论文项目分享见主页任意置顶文章

相关新闻

Windows防撤回工具终极指南:5步实现微信QQ消息永久保留

Windows防撤回工具终极指南:5步实现微信QQ消息永久保留

Windows防撤回工具终极指南:5步实现微信QQ消息永久保留 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.c…

2026/10/4 17:36:42 阅读更多 →
传统企业AI转型:从单点智能到系统进化的破局之道

传统企业AI转型:从单点智能到系统进化的破局之道

1. 项目概述:当“大象”遇见“AI” “困在‘AI’浪潮中的传统巨头”——这个标题精准地戳中了许多大型制造、家电、能源、乃至零售企业的现状。它们曾是各自领域的王者,拥有庞大的实体资产、成熟的供应链、稳定的客户群和深厚的行业壁垒。然而&#xff0…

2026/10/7 11:49:25 阅读更多 →
Unity运行时撤销重做系统实现:从命令模式到状态快照的完整方案

Unity运行时撤销重做系统实现:从命令模式到状态快照的完整方案

1. 项目概述 在Unity编辑器里做开发,CtrlZ和CtrlY这两个快捷键大概是除了鼠标点击之外,我们按得最多的组合键了。无论是调整一个物体的位置、修改一个材质球的颜色,还是不小心删掉了一堆精心摆放的Prefab,撤销和重做功能都是我们最…

2026/10/5 15:52:59 阅读更多 →

最新新闻

Visual C++ 手搓本地搜索引擎:倒排索引、分词与 TF-IDF 排序实战

Visual C++ 手搓本地搜索引擎:倒排索引、分词与 TF-IDF 排序实战

简介:这份资源是面向C初学者与游戏AI爱好者的Surakarta人机博弈项目源码包,基于Visual C开发,核心围绕alpha-beta搜索算法与简单估值函数展开,适合想理解博弈搜索、搜索引擎式状态空间遍历及面向对象编程的读者练手。压缩包共8个文…

2026/10/9 6:06:02 阅读更多 →
TCP网络通信编程大作业:从三次握手到C语言Socket实战

TCP网络通信编程大作业:从三次握手到C语言Socket实战

简介:一份完整的TCP/IP课程设计大作业报告,基于C语言实现TCP网络通信编程,面向计算机网络或TCP/IP协议课程的学生与开发者。报告围绕客户/服务器通信程序展开,实现了注册、登陆、单聊、私聊、在线人数列表、退出等功能&#xff0c…

2026/10/9 6:06:01 阅读更多 →
GitHub克隆/推送慢?3行Git指令+SSH/浅克隆实战提速

GitHub克隆/推送慢?3行Git指令+SSH/浅克隆实战提速

GitHub克隆/推送速度慢这个话题,几乎隔几天就会在技术群里被捞起来一次。症状非常固定:git clone跑了一半,进度条卡在Receiving objects,接着一行RPC failed; curl 18 transfer closed with outstanding read data remaining直接终…

2026/10/9 6:06:01 阅读更多 →
基于Flask的体检管理系统开发实战:从数据库设计到部署

基于Flask的体检管理系统开发实战:从数据库设计到部署

1. 项目背景与整体设计思路1.1 为什么选Flask而不是Django或FastAPI我在接手这个健康医疗体检管理系统之前,其实纠结过一阵子框架选型。市面上Python做Web开发主要有三驾马车:Django、Flask、FastAPI。Django确实自带Admin后台、ORM、认证体系&#xff0…

2026/10/9 6:06:01 阅读更多 →
Java+MySQL图书管理系统实战:从环境搭建到MVC三层架构完整跑通

Java+MySQL图书管理系统实战:从环境搭建到MVC三层架构完整跑通

简介:这份资源是面向Java Web初学者与课程设计学习者的图书管理系统完整项目包,采用Java MySQL技术栈,以MVC三层架构组织各功能模块,适合用于毕业设计参考、课程作业实践或自学练手。系统涵盖用户登录、用户信息管理、图书信息增…

2026/10/9 6:06:01 阅读更多 →
SSR 前端项目 Docker 本地部署实战:从 Dockerfile 到 compose 编排

SSR 前端项目 Docker 本地部署实战:从 Dockerfile 到 compose 编排

如果你写过或者接手过 SSR 前端项目,大概都有过这种经历:本地npm run dev跑得飞起,可真要让项目在另一台电脑上跑起来,或者部署到服务器上验证,就开始连环翻车——Node 版本不对、系统库缺失、环境变量没配、数据库连不…

2026/10/9 6:05:01 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →