.智能识别图片物体。这步是智能垃圾分类的魔法核心。原理是人工智能会根据打上标签的海量图片来识别新的图片所归属的分类标签。好奇的读者可能会问,我没学过深度学习啊?我也不会训练模型,怎么办?

python大大笑了,“没事,bat等巨头早就把这些核心人工智能能力封装成容易使用的接口了!为双喜鸟快速开发,我们只要站在巨人的肩膀上就行了。“

核心技术原理

智能识别图片的所属分类。这个是用的百度的智能api,只要把图片传给百度api,API就会识别该图片,并把该图片所归属的分类返回一个数组列表。智能识别图片的分类标签效果如图,左边是图,右边是api识别后的分类标签:

有这么好的东东,让我们立刻看看如何用吧。

首先申请百度图像识别API的用户和key。请移步百度智能api中心申请。

安装百度图像识别Python 

  • 如果已安装pip,执行pip install baidu-aip即可。
  • 如果已安装setuptools,执行python setup.py install即可。

初始化AipImageClassify

AipImageClassify是图像识别的Python SDK客户端,为使用图像识别的开发人员提供了一系列的交互方法。

from aip import AipImageClassify
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)

通用物体识别接口调用

该请求用于通用物体识别,即对于输入的手拍垃圾分类图片(可正常解码,且长宽比适宜),输出图片中的物体及场景标签。

""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
image = get_file_content('example.jpg')
""" 调用通用物体识别 """
client.advancedGeneral(image);
""" 如果有可选参数 """
options = {}
options["baike_num"] = 5
""" 带参数调用通用物体识别 """
client.advancedGeneral(image, options)

调用后返回结果例子如下:

{
"log_id": 327863200205075661,
"result_num": 5,
"result": [{
"score": 0.967622,
"root": "固体",
"baike_info": {
"baike_url": ......................

结果可以看到返回识别信息里包含了物体标签的信息。并且有score等字段,究竟都代表了什么涵义呢?看看下面的结果详细定义吧

结果详细定义

4.结果和条目文本相似度匹配。有了图片所归属的分类标签后,需要根据自然语言的相似度和垃圾分类条目进行相似度匹配。计算匹配后,将匹配度最高的垃圾分类返回微信界面,提示用户该垃圾具体分类是什么,自此这个智能垃圾分类小程序就开发完毕。

涉及到的python关键点是:

需要将垃圾分类的条目结构化到python代码。在设计前,请参考下官方的垃圾分类指南图。

对应python代码为:

trash_cat={}
trash_cat['circle']=['纸张','塑料','玻璃'.........]#可回收
...................................... #有害垃圾

将图片识别的标签和垃圾分类条目进行匹配,选出最匹配的垃圾分类条目。

python关键代码,将标签分词后形成:

all_doc_list = []
for doc in all_doc:
doc_list = [word for word in jieba.cut(doc)]
all_doc_list.append(doc_list)

然后用dictionary方法获取词袋(bag-of-words)

dictionary = corpora.Dictionary(all_doc_list)

使用doc2bow制作语料库

corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]

相似度分析

使用TF-IDF模型对语料库建模

tfidf = models.TfidfModel(corpus)

获取测试文档中,每个词的TF-IDF值

tfidf[doc_test_vec]

然后就可以根据相似度进行匹配,并将图片识别后的标签和最相匹配的分类条目关联起来,返回给用户了。

对于一个对小程序开发有了解的python程序员来说,一个小时已经可以轻松开发出基于百度智能api的能智能识别拍图的垃圾分类程序了。神奇吧!

总结:

本文从垃圾分类的痛点谈起,通过微信小程序+智能识别api+NLP文本相似度等开发关键点的解说,给有志于利用人工智能技术的程序员,短时间高效率的开发出智能方便垃圾分类的应用指明了一条便捷的道路。

希望大家能通过python技术,让我们的生活更方便和美好。欢迎在评论区进行意见建议交流。

本文仅代表作者个人观点,不代表SEO研究协会网(www.seoxiehui.cn)官方发声,对观点有疑义请先联系作者本人进行修改,若内容侵权或非法,请先联系发布者或作者删除,若需平台协助请联系平台管理员,邮箱cxb5918@163.com。学习互联网营销技术请到巨推学院www.jutuiedu.com。

Python打的更多相关文章

  1. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  4. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  5. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  6. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  7. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

  8. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  9. python开发编译器

    引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...

  10. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

随机推荐

  1. 安装Oracle11g出现INS-13001环境不满足最低要求

    原版:https://blog.csdn.net/Q_Sea__/article/details/79012808 第一次安装Oracle11g,就出现这个问题,就找了一些解决方案.现在总结一下. 出 ...

  2. [maven]idea+maven的多项目依赖

    如下两个项目: test-main test-utils 其中test-main需要引用test-utils. 最终效果如下: 实现步骤: 1:新建一个Empty Project作为框架项目 输入框架 ...

  3. [C++]多源最短路径(带权有向图):【Floyd算法(动态规划法)】 VS n*Dijkstra算法(贪心算法)

    1 Floyd算法 1.1 解决问题/提出背景 多源最短路径(带权有向图中,求每一对顶点之间的最短路径) 方案一:弗洛伊德(Floyd算法)算法 算法思想:动态规划法 时间复杂度:O(n^3) 形式上 ...

  4. 编译bitcoin比特币客户端

    我遇到了两个不太容易解决的问题. 问题一: checking for Berkeley DB C++ headers... default configure: error: Found Berkel ...

  5. CentOS 7下Cloudera Manager及CDH 6.0.1安装过程详解

    目录 一.概念介绍 1.CDH 概览 2.Cloudera Manager 概览 二.环境准备 1.软件版本选择 2.节点准备(四个节点) 3.配置主机名和hosts解析(所有节点) 4.关闭防火墙 ...

  6. android studio 开发中启动android项目报错sdk版本不一致解决方案

    安卓项目开发中新建项目后再run'的时候发现报错com.android.support:appcompat-v7依赖报错 查看下build.gredle所配置的参数: 打开项目的build.gradl ...

  7. MyBatis接口式编程

    MyBatis使用接口连接数据库 之前学习了如何传统的使用MyBatis连接数据库,今天学习如何使用更方便快捷的方式练级数据库.使用接口连接数据库 https://www.cnblogs.com/li ...

  8. OpenCV3编程入门.记录

    ZC:OpenCV3编程入门_毛星云编著_电子工业出版.pdf 1.在看到 PDF.P134(计算数组加权和:addWeighted()函数)的时候,其中讲到“当输出数组的深度为CV_32S时,这个函 ...

  9. 环境变量配置文件profile

    环境变量配置文件 在Ubuntu中有如下几个文件可以设置环境变量1./etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时, ...

  10. Java基础篇---多线程

    内容导航: 1.多线程的实现方式 2.线程安全问题 3.线程间通信 4.生产者消费者模式 第一部分多线程的实现方式 在java中多线程实现方式有2种 一.自定义一个类A,继承Thread类 publi ...