垃圾管理是现代城市一个非常有挑战性的任务,每个地区都有其独特的垃圾产生模式,但无论产生垃圾的种类和数量如何变化,优化垃圾的收集方式是降低成本、保持城市清洁的重要手段。
对于一些城市来说,由于不能安装大型垃圾箱,这项任务变得更加困难,比如阿姆斯特丹,在市中心的大部分地区,垃圾收集依赖于市民和游客每周两次将垃圾袋投放到指定的收集点。
在这种情况下,优化垃圾收集过程和尽量减少垃圾袋在这些地点的堆积时间是至关重要的。
传统的解决方法是将某种形式的传感器分散在城市中,这些传感器将负责收集有关垃圾分布的数据,但是这种方法成本很高,无论是安装还是维护都需要持续的投资,而且对环境不友好,毕竟这种解决环境问题的方法,同时又生产了更多的一次性电子产品,还将它们散布在城市的各个角落。
但是medium上有位名叫Michele Moscaritolo博主就想,如果有一个智能摄像头可以准确地识别垃圾,那么这个问题就很好解决了。
一个城市只需要有一些这样的摄像头,装在垃圾收集车或专用车辆,垃圾处理中心的人员可以从他们的办公室实时远程监控垃圾统计数据,比如每种垃圾类型通常出现在哪里,每天、每周和每月的趋势,热点等。
另外,这样的专用车辆还可以检测居民不按时间地点要求扔垃圾的情况,以进行实时干预。
有了这样的想法,Michele Moscaritolo就付诸行动,做了这样的一个智能摄像头和垃圾监控系统。
让我们一起来膜拜一下大神的教程。
相机,要选就选最好的
检测方面我采用了一个常用且非常有效的对象检测神经网络:Yolo,阿姆斯特丹市的人工智能专家Maarten Sukel最近发布了这个网络的一个版本,专门训练识别垃圾箱、袋子和纸箱,这个系统作为我们相机软件的核心。
Yolo链接:
https://pjreddie.com/darknet/yolo/
考虑到隐私问题,摄像机还嵌入了一项模糊人脸,衣服和人体的边缘技术,这样就没有涉及隐私的数据被传输到云。
为便携式相机增加智能功能,我使用了NVIDIA Jetson家族系统的单晶片相机。对于相机,我选择了最强大的一个,AGX Xavier系列,考虑到我们必须运行垃圾检测和人模糊,这是一个比较稳妥的选择。
全城最靓的智能Vespa摩托
要到达阿姆斯特丹的每个地区,最好的就是电动自行车。但是电动车哪能配得上我拉风的造型,因此我改装了我的Vespa摩托车,把所有的设备(相机和天线排除在外)都放在坐垫下的车厢里。加上一个简单的稳压器和一个电源按钮,我就有了一个智能的Vespa摩托车,我给它取了个名字——VespAI!
车载软件使用经过修改的Darknet来运行Yolo v3,检测结果通过一个滤波和积累模块提供,该模块将避免在多个相邻视频帧中出现多次计算同一垃圾;它还将为一个”垃圾点”在大约5米半径范围内进行多次检测。
垃圾的GPS坐标通过简单的gpsd接口从usb模块读取,将数据存储在Google Firestore实时数据库中,这样本地的Google firebase SDK就被用于客户端应用程序开发。
应用程序
现代数据分析应用程序必须支持从任何设备和平台访问,而实时数据访问则需要使用适当的后端技术和能够支持用户查询的数据模型。我们选择Ionic+Angular进行前端开发和谷歌的Firestore坐标实时数据库。
Ionic+Angular让我们可以从一个普通的代码库生产iOS和安卓应用程序,以及一个基于web的可以从任何浏览器访问的应用程序。
Google Firebase则可以让我们将每个GPS点左边作为一个嵌套的集合/文档存储。选择的数据模型允许我们快速检索检测到的垃圾点列表,包括相关的GPS坐标、集装箱/袋子/纸板的数量、按区域和每小时的粒度数据,其对分布式计数器的支持还能让我们按小时和区域实时统计信息变得非常容易,不需要执行复杂的查询。
Firebase客户端SDK包括一个通用的API,可用于订阅客户端应用程序,以添加/更新/删除Firestore数据库上运行在VespAI上的应用程序产生的活动。通过这种方式,我们的所有应用程序都可以在检测后几秒钟内显示数据。
谷歌地图目前支持两种不同的可视化: 热图和标记点。热度图可以快速查看区域中的垃圾分布情况,而标记点可以检查单个垃圾检测点的详细信息。
垃圾数据分析应用程序(Android)
网页版应用程序链接如下:
https://mangustatrash.firebaseapp.com/tabs/tab2
未来可以改进的地方
该应用程序功能齐全,但是还有一些可以改进的地方:
- 使用更好的全球定位系统模块。目前的模块基于u-blox neo-7代,neo-8现在已经可以用了,精度比neo-7代有所提高,这将避免由于卫星接收差有时出现垃圾在“在运河中央”的情况。
- 进一步训练神经网络模型。当我们累积越来越多的垃圾图像时,我们将用这些图像用于进一步训练,以逐步获得更精确的检测。
- 后端改进。我们计划使用Firestore分布式计数器来添加更多的实时统计信息,例如基于区域的每个垃圾类型的每日和每周统计信息。
- 同样在后端。我们正在考虑使用GeoFire来支持地理查询,这将允许用户对客户定义的区域进行统计。
- 支持将数据导出到其他类型的数据库。比如支持基于SQL的历史数据集查询。