使用Python轻松完成垃圾分类(基于图像识别)


Posted in Python onJuly 09, 2019

0 环境

Python版本:3.6.8

系统版本:macOS Mojave

Python Jupyter Notebook

1 引言

七月了,大家最近一定被一项新的政策给折磨的焦头烂额,那就是垃圾分类。《上海市生活垃圾管理条例》已经正式实施了,相信还是有很多的小伙伴和我一样,还没有完全搞清楚哪些应该扔在哪个类别里。感觉每天都在学习一遍垃圾分类,真令人头大。

听说一杯没有喝完的珍珠奶茶应该这么扔

  • 首先,没喝完的奶茶水要倒在水池里
  • 珍珠,水果肉等残渣放进湿垃圾
  • 把杯子要丢入干垃圾
  • 接下来是盖子,如果是带盖子带热饮(比如大部分的热饮),塑料盖是可以归到可回收垃圾的嗷

看到这里,是不是大家突然都不想喝奶茶了呢,哈哈。不过不要紧,垃圾分类虽然要执行,但是奶茶也可以照喝。

那么,这里我们想讨论一下,人工智能和数据科学的方法能不能帮助我们进行更好的垃圾分类?这样我们不用为了不知道要扔哪个垃圾箱而烦恼。

2 思路

这问题的解决思路或许不止一条。这里只是抛砖引玉一下,提供一些浅显的见解。

第一种方案,可以把垃圾的信息制成表格化数据,然后用传统的机器学习方法。

第二种方案,把所有的垃圾分类信息做成知识图谱,每一次的查询就好像是在翻字典一样查阅信息。

第三种方案,可以借助现在的深度学习方法,来对垃圾进行识别和分类。每次我们给一张垃圾的图片,让模型识别出这是属于哪一种类别的:干垃圾,湿垃圾,有害垃圾还是可回收垃圾。

使用Python轻松完成垃圾分类(基于图像识别)

3 图像分类

图像分类是深度学习的一个经典应用。它的输入是一张图片, 然后经过一些处理,进入一个深度学习的模型,该模型会返回这个图片里垃圾的类别。这里我们考虑四个类别:干垃圾,湿垃圾,有害垃圾还是可回收垃圾。

报纸 :可回收垃圾

使用Python轻松完成垃圾分类(基于图像识别)

电池 :有害垃圾

使用Python轻松完成垃圾分类(基于图像识别)

一次性餐盒 :干垃圾

使用Python轻松完成垃圾分类(基于图像识别)

我们对图片里的物品进行分类,这是图像处理和识别的领域。人工智能里提出了使用卷积神经网络(Convolutional Neural Network, CNN)来解决这一类问题。

我会用keras包和Tensorflow后端来建立模型。 由于训练集的样本暂时比较缺乏,所以这里只能先给一套思路和代码。训练模型的工作之前还得进行一波数据收集。

我们就先来看看代码大致长什么样吧

先导入一些必要的包。

使用Python轻松完成垃圾分类(基于图像识别)

再做一下准备工作。

使用Python轻松完成垃圾分类(基于图像识别)

在上面,我们初始化了一些变量,batch size是128; num_classes = 4,因为需要分类的数量是4,有干垃圾,湿垃圾,有害垃圾和可回收垃圾这四个种类。epochs 是我们要训练的次数。接下来,img_rows, img_cols = 28, 28 我们给了图片的纬度大小。

在 .reshape(60000,28,28,1)中 , 60000 是图片的数量(可变), 28是图片的大小(可调),并且1是channel的意思,channel = 1 是指黑白照片。 .reshape(10000,28,28,1)也是同理,只是图片数量是10000。

到了最后两行,我们是把我们目标变量的值转化成一个二分类, 是用一个向量(矩阵)来表示。比如 [1,0,0,0] 是指干垃圾,[0,1,0,0]是指湿垃圾等等。

接下来是建模的部分。

使用Python轻松完成垃圾分类(基于图像识别)

我们加了卷积层和池化层进入模型。激活函数是 relu,relu函数几乎被广泛地使用在了卷积神经网络和深度学习。我们在层与层之间也加了dropout来减少过拟合。Dense layer是用来做类别预测的。

建完模型后,我们要进行模型的验证,保证准确性在线。

使用Python轻松完成垃圾分类(基于图像识别)

到这里,我们的建模预测已经大概完成了。一个好的模型,要不断地去优化它,提高精确度等指标要求,直到达到可以接受的程度。

这优化的过程,我们在这里就先不深入讨论了,以后继续。

4 总结

值得一提的是,尽管方法上是有实现的可能,但是实际操作中肯定要更复杂的多,尤其是对精度有着很高的要求。

而且当一个图片里面包含着好几种垃圾种类,这也会让我们的分类模型开发变得很复杂,增加了难度。

比如,我们想要对一杯奶茶进行垃圾分类,照片里面是包含了多个垃圾的种类,这就比较头大了,因为这并不是属于单一的类别。

前路的困难肯定是有的,不过就当这里的分享是个抛砖引玉的起点吧。

毕竟李白也说了,“长风破浪会有时,直挂云帆济沧海”。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
python开发利器之ulipad的使用实践
Mar 16 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
Python文件操作基本流程代码实例
Dec 11 Python
基于数据归一化以及Python实现方式
Jul 11 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
Aug 01 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
通过shell+python实现企业微信预警
Mar 07 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
浅谈Python数学建模之整数规划
Jun 23 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 #Python
python求最大值,不使用内置函数的实现方法
Jul 09 #Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 #Python
python爬虫的一个常见简单js反爬详解
Jul 09 #Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 #Python
python 返回一个列表中第二大的数方法
Jul 09 #Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 #Python
You might like
一段实时更新的时间代码
2006/07/07 Javascript
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
使用python实现tcp自动重连
2017/07/02 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
python中的global关键字的使用方法
2019/08/20 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
高考寄语大全
2014/04/08 职场文书
应届生找工作求职信
2014/06/24 职场文书
新党章的学习心得体会
2014/11/07 职场文书
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android
分享7个 Python 实战项目练习
2022/03/03 Python