毕设开源 深度学习社交距离检测系统(源码+论文)
文章目录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/8/9 9:34:21 阅读更多 →
传统企业AI转型:从单点智能到系统进化的破局之道

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

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

2026/8/9 9:34:21 阅读更多 →
Unity运行时撤销重做系统实现:从命令模式到状态快照的完整方案

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

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

2026/8/9 9:34:21 阅读更多 →

最新新闻

从序列到功能:DeltaSplice助力破解alternative splicing调控机制

从序列到功能:DeltaSplice助力破解alternative splicing调控机制

从序列到功能:DeltaSplice助力破解alternative splicing调控机制 【免费下载链接】deltasplice 项目地址: https://ai.gitcode.com/hf_mirrors/multimolecule/deltasplice DeltaSplice是一款强大的生物信息学工具,专注于从基因序列预测可变剪接&…

2026/8/9 21:31:01 阅读更多 →
5个终极技巧:快速掌握Chrome DevTools完整工具生态

5个终极技巧:快速掌握Chrome DevTools完整工具生态

5个终极技巧:快速掌握Chrome DevTools完整工具生态 【免费下载链接】awesome-chrome-devtools Awesome tooling and resources in the Chrome DevTools & DevTools Protocol ecosystem 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-chrome-devtools …

2026/8/9 21:31:01 阅读更多 →
NetLogo社会网络仿真数据流动优化实践

NetLogo社会网络仿真数据流动优化实践

1. NetLogo社会网络仿真中的数据流动实践在复杂系统建模领域,NetLogo作为一款多主体建模工具,其社会网络仿真功能常被用于研究信息传播、群体行为等社会现象。我使用NetLogo进行传染病传播模型研究时,数据导入导出功能直接影响着实验效率——…

2026/8/9 21:31:01 阅读更多 →
NetLogo社会网络仿真数据交互实践与优化

NetLogo社会网络仿真数据交互实践与优化

1. NetLogo社会网络仿真中的数据流动实践在复杂系统建模领域,NetLogo作为一款多主体建模工具,其社会网络仿真功能常被用于研究信息传播、群体行为等社会现象。我最近在完成一个城市交通流量与社交网络关联性的研究项目时,深刻体会到数据导入导…

2026/8/9 21:31:01 阅读更多 →
NativeScript-Vue共享元素转场动画实战指南

NativeScript-Vue共享元素转场动画实战指南

1. 项目概述:共享元素转场动画的核心价值在移动应用开发中,页面跳转时的生硬切换一直是影响用户体验的痛点。共享元素转场(Shared Element Transition)通过让两个页面间的特定元素产生视觉关联,创造出流畅的导航体验。…

2026/8/9 21:31:01 阅读更多 →
Docker C/S架构解析与容器技术实践

Docker C/S架构解析与容器技术实践

1. Docker架构底层解析:C/S模型如何驱动容器革命当你在终端输入docker run nginx时,背后其实触发了一系列精密的跨进程协作。Docker的C/S架构设计就像交响乐团的指挥,将客户端指令转化为实际的容器操作。这种设计不仅实现了轻量级虚拟化&…

2026/8/9 21:30:01 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →