之前写了深度学习环境的搭建,并在环境中搭建了深度神经网络加以训练,最终完成了猫狗图片的分类。那么,是否可以利用训练得到的模型,在其他应用场景完成拓展呢?

本文将利用itchat和图灵机器人(可以不用图灵机器人,不过只能识别图片,不能聊天太枯燥了吧ˇ▽ˇ)搭建私人微信账号,完成私号的消息自动回复以及图片识别。

1、先修知识:

  • aws+Anaconda+ tensorflow + keras +opencv搭建深度学习网络环境(上--硬件篇)
  • aws+Anaconda+ tensorflow + keras +opencv搭建深度学习网络环境(下--软件篇)
  • 搭建深度学习网络识别图片--猫狗大战(keras接口、tensorflow做后端)

(当然,这里也可以直接利用keras官网提供的基于ImageNet上预训练模型的完成图片识别功能。示例中,我们将利用keras提供的基于imageNet上预训练的xception模型完成图片识别功能。)

  • keras中文文档
  • itchat(itchat是一个开源的微信个人号接口)
  • 图灵机器人key
  • itchat与图灵交互接口

2、效果展示

个人聊天窗口:

群聊窗口:@才会回复

3、直接上代码,注释应该够清楚了

#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
# @Author = JasonZhou
# @File  : myItchat.py
# @Date  : 2018/8/15
'''import itchat
import requests
import cv2
from keras.applications import xception
import numpy as np
import matplotlib.pyplot as pltKEY = 'd437bcbd717347b58066b929872cc13b'#tuling key,可以自己申请
model = xception.Xception(weights="imagenet")def get_response(self, msg):#构造要发送给图灵机器人服务器的数据apiUrl = 'http://www.tuling123.com/openapi/api'data = {'key' : self.KEY,'info' : msg,#发送给tuling的msg'userid' : 'JasonZhou89',#自己的用户id,随意填写}try:# 发送一个post请求r = requests.post(apiUrl, data=data).json()#字典的get方法在字典没有‘text’值时,返回None而不抛出异常return r.get('text')#为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常#如果服务器没有正常交互(返回非json或无法链接),那么就会进入下面的returnexcept:#返回Nonereturn#单人聊天(文本)
@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(self, msg):#为了保证在图灵key出现问题时仍可以回复,这里设置一个默认的回复defaultReply = r'这个问题难住了我--'#如果图灵出问题,那么返回就是Nonereply = self.get_response(msg['Text'])#a or b,如果a有内容返回a,否则返回breturn reply or defaultReply#群聊(文本)
@itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
def group_text_reply(self, msg):from_group = ''group = itchat.get_chatrooms(update=True)for g in group:#print(g['NickName'])#打印所有群名#只针对想要设置的群进行微信机器人if g['NickName'] == u'行业大神交流群': #换成自己群的名称from_group = (g['UserName']) #获取群名对应的idif msg['FromUserName'] ==from_group:# 当然如果只想针对@你的人才回复,可以设置if msg['isAt']:if msg['isAt']:reply = self.get_response(msg['Text'])defaultReply = r'这个问题难住了我--'return reply or defaultReply#利用xception模型对图片进行识别分类,返回分类结果topN
def pred_ped(self, img_path, top_num, preprocess_input, decode_predictions):x = cv2.imread(img_path)x = x[:, :, ::-1]x = cv2.resize(x, (299, 299))x = np.expand_dims(x, axis=0)x = preprocess_input(x)preds = self.model.predict(x)dps = decode_predictions(preds, top_num)[0]return(dps)#单人聊天(图片)
@itchat.msg_register(itchat.content.PICTURE)
def download_files(self, msg):friend = itchat.search_friends(userName=msg['FromUserName'])filename = msg['FileName']convertfilename = filename.replace('.', '.convert.')msg['Text'](filename)#下载图片#模型预测图片内容dp = self.pred_ped( filename,5,xception.preprocess_input, xception.decode_predictions)if dp[4][2]*100 > 1:# 将图片内容前5个可能性,用饼图形式返回labels = [dp[0][1], dp[1][1], dp[2][1], dp[3][1], dp[4][1]]sizes = [int(100 * dp[0][2]), int(100*dp[1][2]), int(100*dp[2][2]), int(100*dp[3][2]), int(100*dp[4][2])]colors = 'yellowgreen', 'gold', 'lightskyblue', 'lightcoral', 'red'explode = 0, 0, 0, 0, 0elif dp[3][2]*100 > 1:# 将图片内容前4个可能性,用饼图形式返回labels = [dp[0][1], dp[1][1], dp[2][1], dp[3][1]]sizes = [int(100*dp[0][2]), int(100*dp[1][2]), int(100*dp[2][2]), int(100*dp[3][2])]colors = 'yellowgreen', 'gold', 'lightskyblue', 'lightcoral'explode = 0, 0, 0, 0elif dp[2][2]*100 > 1:# 将图片内容前3个可能性,用饼图形式返回labels = [dp[0][1], dp[1][1], dp[2][1]]sizes = [int(100*dp[0][2]), int(100*dp[1][2]), int(100*dp[2][2])]colors = 'yellowgreen', 'gold', 'lightskyblue'explode = 0, 0, 0elif dp[1][2] * 100 > 1:# 将图片内容前2个可能性,用饼图形式返回labels = [dp[0][1], dp[1][1]]sizes = [int(100*dp[0][2]), int(100*dp[1][2])]colors = 'yellowgreen', 'gold'explode = 0, 0, 0else:# 将图片内容以文字类型返回itchat.send("这张图片 {:.4f}% 的概率是 {}".format(100 * dp[0][2], dp[0][1]), msg['FromUserName'])returnplt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=False, startangle=50)plt.axis('equal')plt.savefig(r'C:\Users\zhj\Anaconda2\envs\test\algorithm\1.jpg')plt.close()f = r'C:\Users\zhj\Anaconda2\envs\test\algorithm\1.jpg' #图片地址itchat.send_image(f,  msg['FromUserName'])if __name__ == '__main__':itchat.auto_login(hotReload=True)#为了让实验更加方便(修改程序不需要多次扫码),我们使用热启动itchat.run()

微信自动回复+图片识别相关推荐

  1. 微信自动回复图片 api标准接口的 php代码

    微信自动回复图片 api标准接口的 php代码 实现的功能:客户在公众号上回复关键字,公众号自动回复一张图片 在微信开发的页面上,设置好触发的关键词,及触发后跳转到指定的接口地址,如http://ww ...

  2. 微信小程序使用京东云实现垃圾分类图片识别垃圾分类

    在做微信小程序垃圾分类功能时,有用到拍照识别语音识别和文字识别,文字识别直接传参,语音识别需要将语音转化成文字,图片识别需要将图片转化成base64格式传参,通过调用京东云的接口来返回垃圾信息.具体实 ...

  3. asscee答疑_微信小程序——图片识别

    我的微信小程序 期末大作业--基于百度大脑API的图片识别小程序 具体实现了动物识别.植物识别.车辆识别 三个功能 实验源码已经放到了我的GitHub,欢迎测试修改 (项目地址:https://git ...

  4. 微信公众平台消息接口开发(22)图片识别之漂亮指数/帅气指数

    微信公众平台开发模式 微信 图片识别 人脸识别 漂亮指数 帅气指数 微信公众平台消息接口 微信开发模式 作者:http://www.cnblogs.com/txw1958/ 原文:http://www ...

  5. EasyAR+微信小程序识别图片开发记录

    EasyAR+微信小程序识别图片开发记录 所需数据 业务关系 示例代码 总结 所需数据 //小程序>appid AppId:***** //EasyAR> ApiKey:**** APIS ...

  6. 微信自动回复小程序(有手就行)

    昨天刷B站看见了个微信自动回复小程序视频作者是不高兴就喝水视频在这看着感觉挺有意思的我也搞个敷衍我女朋友. 安装python3.4以上版本,并配置环境变量!!! 1.安装依赖包 方法:在cmd中(wi ...

  7. Python微信库:itchat ——实现微信自动回复

    参考文章  http://www.nulll.me/index.php/archives/72.html https://blog.csdn.net/mdpsdhr/article/details/6 ...

  8. 哈哈哈,用 Python 实现微信自动回复真香啊

    大家好,今天我们使用 WechatPCAPI 做了获取微信好友信息以及查看撤回消息,本文我们再使用 WechatPCAPI 来实现微信自动回复的功能. 实现自动回复的功能,我们需要用到图灵机器人,网址 ...

  9. 小程序客服自动回复图片,云开发的实现

    小程序先开通云开发,创建一个文件夹,并配置为云函数的目录 小程序客服自动回复图片实现步骤: 1.云函数接收消息推送 第一步:开发者工具云开发控制台中增加配置 打开云开发控制台,到设置 tab 中选择全 ...

最新文章

  1. 不断审视自己,做一个长期主义者
  2. jq取第一个子元素为select_jquery如何获取第一个或最后一个子元素?
  3. 车辆动力学及控制_道路自适应车辆动力学控制研究(127页)【附下载】
  4. Aspx页面中直接编写javascript脚本
  5. Oracle :备份 、还原数据库
  6. 最全LinuxC语言系统开发资源视频资源
  7. 写给想做自动化的我和我们
  8. NYOJ517 最小公倍数
  9. linux系统vmd软件如何使用,科学网—VMD (linux下分子可视化软件) - 刘雪静的博文...
  10. 《批判性思维工具》—— 阅读内化(5)
  11. Spring Cloud Eureka Server 源码解析(七)处理客户端增量下载请求、读写锁问题
  12. 雷蛇雷云3无法连接服务器,雷蛇驱动安装无法访问服务器怎么办
  13. swift 设置启动页
  14. 集成第三方单点登录JIRA(Colfluence同理)
  15. 随机生成20以内加减法,5次答题并统计正确和错误题数
  16. 融云会话界面自定义功能_Android快速集成融云
  17. vue-cli十分钟学习入门笔记――开袋即食
  18. 【NOIP】【codevs】【DP】1169传纸条
  19. 2012清明北京---泰山踏青
  20. 实验07 路由器的基本配置和单臂路由配置实验报告

热门文章

  1. 是的,奈学教育一周年了!
  2. ConvMAE实战:使用ConvMAE实现对植物幼苗的分类(非官方)(一)
  3. 大数据职业发展规划和技能
  4. redis分布式锁实践 并实现看门狗锁续期机制
  5. 《工程硕士英语》MOOC习题解答
  6. 二十四节气(历法)_The 24 Solar Terms
  7. Qt保留小数点后一位、两位……
  8. Java报错---Cannot refer to the non-final local variable user defined in an enclosing scope
  9. Win8.1打开电脑时提示C:\WINDOWS\system32\config\systemprofile\Desktop不可用的解决方法
  10. 高可用集群篇(五)-- K8S部署微服务