news 2026/6/10 20:57:32

毕设 基于机器视觉的停车位识别检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
毕设 基于机器视觉的停车位识别检测
简介

你是不是经常在停车场周围转来转去寻找停车位。如果你的车辆能准确地告诉你最近的停车位在哪里,那是不是很爽?事实证明,基于深度学习和OpenCV解决这个问题相对容易,只需获取停车场的实时视频即可。

该项目可推荐用于毕业设计

毕设帮助,开题指导,资料分享,疑问解答(见文末)

🧿选题指导, 项目分享:见文末

检测效果

废话不多说, 先上效果图


注意车辆移动后空车位被标记上

车辆移动到其他车位

实现方式
整体思路

这个流程的第一步就是检测一帧视频中所有可能的停车位。显然,在我们能够检测哪个是没有被占用的停车位之前,我们需要知道图像中的哪些部分是停车位。

第二步就是检测每帧视频中的所有车辆。这样我们可以逐帧跟踪每辆车的运动。

第三步就是确定哪些车位目前是被占用的,哪些没有。这需要结合前两步的结果。

最后一步就是出现新车位时通知我。这需要基于视频中两帧之间车辆位置的变化。

这里的每一步,我们都可以使用多种技术用很多种方式实现。构建这个流程并没有唯一正确或者错误的方式,但不同的方法会有优劣之分。

使用要使用到两个视觉识别技术 :识别空车位停车线,识别车辆
检测空车位

车位探测系统的第一步是识别停车位。有一些技巧可以做到这一点。例如,通过在一个地点定位停车线来识别停车位。这可以使用OpenCV提供的边缘检测器来完成。但是如果没有停车线呢?

我们可以使用的另一种方法是假设长时间不移动的汽车停在停车位上。换句话说,有效的停车位就是那些停着不动的车的地方。但是,这似乎也不可靠。它可能会导致假阳性和真阴性。

那么,当自动化系统看起来不可靠时,我们应该怎么做呢?我们可以手动操作。与基于空间的方法需要对每个不同的停车位进行标签和训练不同,我们只需标记一次停车场边界和周围道路区域即可为新的停车位配置我们的系统。

在这里,我们将从停车位的视频流中截取一帧,并标记停车区域。Python库matplotlib 提供了称为PolygonSelector的功能。它提供了选择多边形区域的功能。

我制作了一个简单的python脚本来标记输入视频的初始帧之一上的多边形区域。它以视频路径作为参数,并将选定多边形区域的坐标保存在pickle文件中作为输出。

importosimportnumpyasnpimportcv2importpickleimportargparseimportmatplotlib.pyplotaspltfrommatplotlib.patchesimportPolygonfrommatplotlib.widgetsimportPolygonSelectorfrommatplotlib.collectionsimportPatchCollectionfromshapely.geometryimportboxfromshapely.geometryimportPolygonasshapely_poly points=[]prev_points=[]patches=[]total_points=[]breaker=FalseclassSelectFromCollection(object):def__init__(self,ax):self.canvas=ax.figure.canvas self.poly=PolygonSelector(ax,self.onselect)self.ind=[]defonselect(self,verts):globalpoints points=verts self.canvas.draw_idle()defdisconnect(self):self.poly.disconnect_events()self.canvas.draw_idle()defbreak_loop(event):globalbreakerglobalglobSelectglobalsavePathifevent.key=='b':globSelect.disconnect()ifos.path.exists(savePath):os.remove(savePath)print("data saved in "+savePath+" file")withopen(savePath,'wb')asf:pickle.dump(total_points,f,protocol=pickle.HIGHEST_PROTOCOL)exit()defonkeypress(event):globalpoints,prev_points,total_pointsifevent.key=='n':pts=np.array(points,dtype=np.int32)ifpoints!=prev_pointsandlen(set(points))==4:print("Points : "+str(pts))patches.append(Polygon(pts))total_points.append(pts)prev_points=pointsif__name__=='__main__':parser=argparse.ArgumentParser()parser.add_argument('video_path',help="Path of video file")parser.add_argument('--out_file',help="Name of the output file",default="regions.p")args=parser.parse_args()globalglobSelectglobalsavePath savePath=args.out_fileifargs.out_file.endswith(".p")elseargs.out_file+".p"print("\n> Select a region in the figure by enclosing them within a quadrilateral.")print("> Press the 'f' key to go full screen.")print("> Press the 'esc' key to discard current quadrilateral.")print("> Try holding the 'shift' key to move all of the vertices.")print("> Try holding the 'ctrl' key to move a single vertex.")print("> After marking a quadrilateral press 'n' to save current quadrilateral and then press 'q' to start marking a new quadrilateral")print("> When you are done press 'b' to Exit the program\n")video_capture=cv2.VideoCapture(args.video_path)cnt=0rgb_image=Nonewhilevideo_capture.isOpened():success,frame=video_capture.read()ifnotsuccess:breakifcnt==5:rgb_image=frame[:,:,::-1]cnt+=1video_capture.release()whileTrue:fig,ax=plt.subplots()image=rgb_image ax.imshow(image)p=PatchCollection(patches,alpha=0.7)p.set_array(10*np.ones(len(patches)))ax.add_collection(p)globSelect=SelectFromCollection(ax)bbox=plt.connect('key_press_event',onkeypress)break_event=plt.connect('key_press_event',break_loop)plt.show()globSelect.disconnect()

(PS: 若代码出现bug可反馈博主, 及时修改)

车辆识别

要检测视频中的汽车,我使用Mask-RCNN。它是一个卷积神经网络,对来自几个数据集(包括COCO数据集)的数百万个图像和视频进行了训练,以检测各种对象及其边界。 Mask-RCNN建立在Faster-RCNN对象检测模型的基础上。

除了每个检测到的对象的类标签和边界框坐标外,Mask RCNN还将返回图像中每个检测到的对象的像pixel-wise mask。这种pixel-wise masking称为“ 实例分割”。我们在计算机视觉领域所看到的一些最新进展,包括自动驾驶汽车、机器人等,都是由实例分割技术推动的。

M-RCNN将用于视频的每一帧,它将返回一个字典,其中包含边界框坐标、检测对象的masks、每个预测的置信度和检测对象的class_id。现在使用class_ids过滤掉汽车,卡车和公共汽车的边界框。然后,我们将在下一步中使用这些框来计算IoU。

由于Mask-RCNN比较复杂,这里篇幅有限,需要mask-RCNN的同学联系博主获取, 下面仅展示效果:

🧿 项目分享:大家可自取用于参考学习,获取方式见文末!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 17:04:59

终极指南:如何为dependency-cruiser添加新语言支持

终极指南:如何为dependency-cruiser添加新语言支持 【免费下载链接】dependency-cruiser Validate and visualize dependencies. Your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD. 项目地址: https://gitcode.com/gh_mirrors/de/dependenc…

作者头像 李华
网站建设 2026/6/10 16:33:48

揭秘新一代商业智能决策系统:AI驱动与嵌入式分析的融合革命

揭秘新一代商业智能决策系统:AI驱动与嵌入式分析的融合革命在会议室大屏前,一位销售总监用自然语言询问:“华东区上季度哪些产品销量增长最快?”三秒后,系统不仅展示了可视化图表,还自动关联了库存数据和客…

作者头像 李华
网站建设 2026/6/10 17:05:09

服务器数据恢复—RAIDZ多盘离线导致ZPOOL下线的数据恢复

服务器存储数据恢复环境&故障: 某存储设备中一共有40块磁盘组建存储池,其中4块磁盘作为全局热备盘使用。存储池内划分出若干空间映射到服务器使用。 服务器存储设备在没有断电、进水、异常操作、供电不稳定等外部因素的情况下突然崩溃。管理员重启服…

作者头像 李华
网站建设 2026/6/10 16:49:48

Springboot景区直通车服务系统01uc9(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:用户,商家信息,车辆信息,景区直通车,景点路线,路线预定,直通车预定,车辆预定开题报告内容一、研究背景与意义1.1 研究背景随着旅游业的快速发展,游客对旅游交通的便捷性、舒适性和个性化需求日益增长。景区直通车作为一种连接城…

作者头像 李华
网站建设 2026/6/10 16:07:40

17、高级 shell 编程全解析

高级 shell 编程全解析 1. 信号的发送与捕获 在某些情形下,我们不希望误按 ctrl - C 就终止当前进程。例如,当执行一个会对文件进行重大修改的复杂脚本时,如果脚本执行到一半就因误按 ctrl - C 而终止,文件空间可能会陷入混乱。这时候就需要用到信号捕获机制。 信号…

作者头像 李华
网站建设 2026/6/10 17:42:57

每日复盘超短20251211

第一问:今天能买吗? 答:今天 上涨家数:1033 家 ,远小于 2500家,今天不买,或落袋为安。第二问: 昨天最高标今天表现如何 答: 昨天最高标是 龙洲股份 大跌 第三问&#xff…

作者头像 李华