摘要: 一个小例子带你玩转Opencv+tensorflow~

介绍

你是不是经常在停车场周围转来转去寻找停车位。如果你的手机能准确地告诉你最近的停车位在哪里,那是不是很爽?事实证明,基于深度学习和OpenCV解决这个问题相对容易,只需获取停车场的实时视频即可。下面的GIF图片突出显示洛杉矶机场停车场上所有可用的停车位,并显示可用停车位的数量,关键是这一过程是实时的!

你可以在Github repo找到我曾用过的代码。

步骤概述

构建这个停车检测模型主要有两个步骤:

1.检测所有可用的停车位;

2.确定停车位是空的还是被占用的;

因为安装了摄像头视图,我们可以使用OpenCV对每个停车位进行一次映射。一旦你知道了每个停车位的位置,你就可以用深度学习来预测它是否空着。我已经在我的博客上分享了所涉及的一个高层次步骤的概述。如果你对详细代码感兴趣,请看看我的博客。

检测所有可用停车位的位置

检测停车位的基本思路是,所有的停车点的分隔线都是处于水平线,而一列中的停车点之间的间隔大致相等。首先使用Canny边缘检测来获得边缘图像。我还把没有停车的地方遮了起来。如下所示:

然后我在边缘图像上做了霍夫变换,画出了它能识别的所有线。我只选择斜率接近于零的直线来隔离水平线。霍夫变换的输出如下:

正如你所看到的那样,霍夫变换在识别停车线方面做得相当好,但是输出有噪声——几个停车线被多次检测到,而有些被遗漏了。那么我们如何解决这个问题呢?然后我用观察和直觉开始,通过使用霍夫变换返回的坐标,聚集x坐标来确定主要的停车道。利用聚类逻辑来识别车道线x坐标的间隔。这样就能识别出这里的12个车道。如下:

如果所有这些看起来都很复杂,别担心5——我已经在github的jupyter notebook上一步一步地记录了代码。现在我已经知道了所有的停车道都在哪里,通过合理地假设所有的停车点大小都一样来识别每个单独的停车位。我仔细观察了结果,以确保尽可能准确地捕捉到点之间的边界。我终于能够标出每个停车位。如下:

当完成了每个车位的定位之后,我们可以为每个点分配一个ID,并将其坐标保存在字典中并将它pickled了一下,以便以后能取回。这是可以实现的,因为安装了摄像头,我们不需要一次又一次地计算每个点在视图中的位置。更多详情请登录我的博客。

识别该车位是否有标记

现在我们有了每个停车位的映射,可以通过以下几种方式来确定这个停车位是否被占用:

1.使用OpenCV检查视频图像中停车位的像素颜色是否与空停车位的颜色一致。这是一种简单的方法,但容易出错。例如,灯光的变化将会改变一个空停车位的颜色,在一天的光照变化中,这种方法将无法正确工作。如果有可能的话,这种逻辑会把灰色的汽车当成空停车位;

2.使用目标检测来识别所有的汽车,然后检查汽车的位置是否与停车位重叠。我做了尝试,发现实时检测模型真的很难检测小尺寸的对象,检测到的车辆不超过30%;

3.使用CNN检测每个停车位,并预测是否有人停车,这种方法最终效果最好。

要构建一个CNN,我们需要停车位有车以及无车这两种情况的图像。我提取了每个停车位的图像,并将其保存在文件夹中,然后将这些图像分组。我还在Github上分享了这个训练文件夹。

因为在1280x720像素的图像中有近550个车位,所以每个车位的大小只有15x60像素左右。下面是空车位和被占用车位的图像:

然而,由于被占用车位和空车位看起来有很大的不同,这对CNN来说应该不是一个具有挑战性的问题。

然而,我只有大约550张关于这两个类的图片,所以决定利用VGG的前10层,并在VGG模型的输出添加一个单一的softmax图层来进行迁移学习。你可以在这里找到这个迁移学习模型的代码,准确率达到94%。见下文:

现在,我将停车位检测和CNN预测器结合起来,构建了一个停车位检测器,准确率非常高。

我还在notebook记录了在视频流上运行这个的代码。

结论

对于联合不同的工具和使用深度学习来构建实际应用程序这么容易我感到很惊奇,我在两个下午完成了这项工作。

准备进一步探索的其他几个想法:

1.如果可以将车位检测逻辑扩展到任何可能使用深度学习的车位地图上,那就太好了,OpenCV对每个用例进行调优有限制;

2.CNN使用的VGG模型是一个重量化模型,想要尝试更轻量化的模型。

云服务器99元拼团购!拉新还可赢现金红包!300万等你瓜分!
马上一键开团赢红包: http://click.aliyun.com/m/1000019899/



本文作者:【方向】

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

基于OpencvTensorflow实现实时查找停车位置相关推荐

  1. matlab ssd检测,基于SSD神经网络的违章停车车辆实时检测方法与流程

    本发明属于图像识别和计算机视觉技术领域,尤其涉及一种停车车辆的检测方法,可用于城市环境中对违章停车车辆的检测. 背景技术: 随着现代社会经济的快速发展和城市化的普及,汽车作为一种重要的交通工具,其数量 ...

  2. 使用 Java(SpringMVC)+MySQL 实现基于微信小程序的停车管理系统【100011100】

    一种基于微信小程序的停车管理系统 摘要: 本项目基于停车管理选题,通过分析各类停车管理的需求和常见的停车管理系统方案,提出了一种基于微信小程序的停车管理系统. 本系统以微信小程序作为前端,在小程序内提 ...

  3. 基于成像激光雷达的鲁棒位置识别

    点云PCL免费知识星球,点云论文速读. 文章:Robust Place Recognition using an Imaging Lidar 作者:Tixiao Shan, Brendan Englo ...

  4. 查找(四)-------基于B树的查找和所谓的B树

    关于B树,不想写太多了,因为花在基于树的查找上的时间已经特么有点多了,就简单写写算了,如果以后有需要,或者有时间,可以再深入写写 首先说一下,为什么要有B树,以及B树是什么,很多数据结构和算法的书上来 ...

  5. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

  6. 基于正交投影的实时三维人体姿态估计

    王亦洲课题组 ECCV 2022 入选论文解读:基于正交投影的实时三维人体姿态估计 本文是对发表于计算机视觉领域顶级会议 ECCV 2022的论文 Faster VoxelPose: Real-tim ...

  7. 基于OpenCV的实时车道线分割&车道保持系统(源码&教程)

    1.研究背景 汽车主动安全系统能够实现风险的主动预防和规避,其能有力缓解当前我国汽车交通事故频发的困境,故对其的相关研究得到了国家的大力支持. 车道保持辅助系统(LKAS,Lane Keeping A ...

  8. Matlab与FPGA图像处理系列——基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现

    注:下载链接的资源是图片存 ROM 后读取进行 Sobel 检测显示在 VGA上,可供参考. 摘要:本文设计了一种基于 FPGA 的实时边缘检测系统,使用OV5640 摄像头模块获取实时的视频图像数据 ...

  9. 基于halcon的直线查找之卡尺

    我这人比较懒得罗里吧嗦,基本都是直接说两点:why?how? 基于halcon的直线查找之卡尺 直线的检测在halcon中主要有两种方式:直线拟合和卡尺直线.这里分享卡尺方法,拟合请移步:直线拟合 直 ...

最新文章

  1. 宁波海关连续查获走私白糖1700余吨
  2. 你还弄不懂的傅里叶变换,神经网络只用了30多行代码就学会了
  3. Web安全学习笔记——SQL注入
  4. Java工具类——通过配置XML验证Map
  5. xgboost参数_XGBoost实战和参数详解
  6. bdf比特数字基金_第四届世界数字经济大会,比特元BTY作为协办方参与
  7. IDEA常用提升开发效率的插件及快捷键(持续更新)
  8. 每天一个linux命令(60):scp命令
  9. R语言学习系列(数据挖掘之决策树算法实现--ID3代码篇)
  10. JavaScript教程---洪恩在线
  11. 23种设计模式之工厂模式
  12. Android开发神器总结
  13. HTML frameset 标签 cols 属性
  14. 基于Python pdfplumber实现PDF转WORD
  15. shell - 在文本中的前一行或后一行添加一行内容,指定行前后增加一行内容
  16. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发流程(六)烧写整个系统或更新部分系统
  17. springmvc的过滤器--Filter
  18. 希尔排序(实现+总结)
  19. Linux进程通信-管道
  20. 微信小程序开发:自定义组件-behaviors

热门文章

  1. MyBatis 源码分析 - 内置数据源
  2. Expectation Maximization-EM(期望最大化)-算法以及源码
  3. 程序员面试题精选100题(39)-颠倒栈[数据结构]
  4. 特征描述子提取公用接口
  5. [译]Web 性能优化: 图片优化让网站大小减少 62%
  6. 从一个实例,一窥docker进程管理
  7. Java并发基础01. 传统线程技术中创建线程的两种方式
  8. 浏览器左上角的网站图标
  9. Spring MVC 4.1 支持jsonp
  10. Zabbix如何实现Server和Agent的通信加密