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

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. 如何查看linux内核中驱动的初始化顺序?

    答:通过生成的System.map可以查看到,主要关注__initcall_<module_entry_function>_init<level>,如: __initcall_ ...

  2. OpenCV3.4.1快速集成到Android studio中,10分钟搞定

    OpenCV3.4.1快速集成到Android studio中,10分钟搞定     转载 https://blog.csdn.net/yu540135101/article/details/8259 ...

  3. .md 即 markdown 文件的基本常用编写语法

    0. 前言 Markdown 是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式.现在的项目都使用了 git 仓库,再加上远程仓库 github 托管,那就难免要写一些 ...

  4. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_15-webpack研究-webpack-dev-server-程序调试

    webpack把我们的js文件都打包了.所以不能用chrome的调试工具. 打包生成的js文件比较乱无法跟踪. 配置好了以后就可以让浏览器查看到打包后的源代码 在源代码这里加一个debuuger 这里 ...

  5. Spring事务管理1-------环境搭建

    Spring将事务管理分成了两类: * 编程式事务管理 手动编写代码进行事务管理,开发中使用较少 * 声明式事务管理 A - 基于TransactionProxyFactoryBean的方式.开发使用 ...

  6. nginx虚拟主机添加

    1. 进入 /usr/local/nginx/conf/vhost 目录, 创建虚拟主机配置文件 wbs.test.com.conf ({域名}.conf). 2.打开配置文件, 添加服务如下: lo ...

  7. GCN入门理解

    图是信息的最佳表示方式.在一个图中,有通过边(谓之“关系”)连接起来的节点(谓之“实体”).想一想,你的Facebook社交网络是个什么样子的:以你为中心连接上你的朋友们,他们又以不同的方式相互联系. ...

  8. 【DSP开发】如何获得浮点型的数据的IEEE的表示

    [DSP开发]如何获得浮点型的数据的IEEE的表示 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 浮点数的存储规范,由IEEE指定的,具体的规范文件是:IE ...

  9. Ubuntu修改终端显示的主机名、用户名、目录不同颜色

    打开终端输入:echo $PS1 输入:gedit ~/.bashrc #定位到如下代码: if [ "$color_prompt" = yes ]; then PS1='${de ...

  10. 洛谷 题解 P2802 【回家】

    思路:DFS+剪枝 本题可以用一个字符二维数组来存整个地图,然后在往四个方向进行搜索.注意:当走到家门前要先判断血量!(本人就被坑了) 代码: #include<bits/stdc++.h> ...