一、彩虹屁机器人 开心每一天
1.主要功能
- 1.彩虹屁,不开心哄你开心
- 2.舔狗日记,舔与被舔是不是都很开心啊哈哈
- 3.毒鸡汤,兄弟干了这碗鸡汤还能熬
- 4.带我去one,自动ps人像并动漫到one的每日美图美文中
2.所用技术
- 1.利用爬虫技术,爬取当天one优美句子、图片
- 2.利用PaddlePaddle超能力扣取微信人像照片
- 3.合并人像和one的图片
- 4.利用PaddlePaddle超能力风格化图片
- 5.利用图像处理超能力合并图像和语句
- 6.对接天行API,各种彩虹屁不停息
二、wechaty配置
具体配置可参看前面的项目: aistudio.baidu.com/aistudio/pr…
三、代码
0.基于wechaty-python库
1.语言类对接天行API获取
2.图片类对接天行api获取,同时应用paddlehub进行处理
import os import asyncio import paddlehub as hub import cv2 import numpy as np import sys, urllib, json import urllib.request import PIL from wechaty import ( Contact, FileBox, Message, Wechaty, ScanStatus, ) model = hub.Module(name="humanseg_lite") # 彩虹屁 def caihongpi(): APIKEY = '#####################替换成你的###########################' url = 'http://api.tianapi.com/txapi/caihongpi/index?key=' + APIKEY req = urllib.request.Request(url) resp = urllib.request.urlopen(req) content = json.loads(resp.read()) print(content) if (content): return content['newslist'][0]['content'] else: return '你的彩虹屁机器人离岗了' # 舔狗日记 def tiangouriji(): APIKEY = '#####################替换成你的###########################' url = 'http://api.tianapi.com/txapi/tiangou/index?key=' + APIKEY req = urllib.request.Request(url) resp = urllib.request.urlopen(req) content = json.loads(resp.read()) print(content) if (content): return content['newslist'][0]['content'] else: return '你的彩虹屁机器人离岗了' # 毒鸡汤 def dujitang(): APIKEY = '#####################替换成你的###########################' url = 'http://api.tianapi.com/txapi/dujitang/index?key=' + APIKEY req = urllib.request.Request(url) resp = urllib.request.urlopen(req) content = json.loads(resp.read()) print(content) if (content): return content['newslist'][0]['content'] else: return '你的彩虹屁机器人离岗了' # 下载one def one(): APIKEY = '50b404254dc7bbde25adc1432b1050b2' url = 'http://api.tianapi.com/txapi/one/index?key=' + APIKEY req = urllib.request.Request(url) resp = urllib.request.urlopen(req) content = json.loads(resp.read()) print(content) if (content): word = content['newslist'][0]['word'] img_url = content['newslist'][0]['imgurl'] local_img = str(content['newslist'][0]['oneid']) + '.jpg' local_img = os.path.join('local_img', local_img) if not os.path.exists('local_img'): urllib.request.urlretrieve(img_url, local_img) return word, local_img else: return '你的彩虹屁机器人离岗了' def img_koutu(img_path): res = model.segment( paths=[img_path], visualization=True, output_dir='humanseg_output') # 返回新图片的路径 src = 'humanseg_output' files = os.listdir(src) files_path = [f'{src}\{file}' for file in files] files_path.sort(key=lambda fp: os.path.getctime(fp), reverse=True) img_new_path = files_path[0] print(img_new_path) # 绝对路径 return img_new_path def merge(img_path): # 当日美句、美图 word, local_img = one() new_img_path = r'merge/result.png' frame = cv2.imread(local_img, cv2.IMREAD_COLOR) # 捕获图像1 height, width = frame.shape[:2] size = (int(width * 0.3), int(height * 0.3)) frame = cv2.resize(frame, size, interpolation=cv2.INTER_AREA) logo = cv2.imread(img_path, cv2.IMREAD_UNCHANGED) rows, cols, channels = logo.shape dx, dy = 120, 150 roi = frame[dx:dx + rows, dy:dy + cols] for i in range(rows): for j in range(cols): if not (logo[i, j][3] == 0): # 透明的意思 roi[i, j][0] = logo[i, j][0] roi[i, j][1] = logo[i, j][1] roi[i, j][2] = logo[i, j][2] frame[dx:dx + rows, dy:dy + cols] = roi cv2.imwrite(new_img_path, frame) return new_img_path, word def add_word(new_img_path, word): # PingFang.ttc from PIL import ImageFont, Image, ImageDraw font = ImageFont.truetype('simhei.ttf', 20) image = Image.open(new_img_path) draw = ImageDraw.Draw(image) draw.text((70, 20), word, (220, 20, 60), font=font) # image.show() image.save(new_img_path, quality=50, subsampling=0) return new_img_path def dongman(img_path): # 图片转换后存放的路径 img_new_path = r'dongman/dongman.jpg' print(img_new_path) model = hub.Module(name='animegan_v2_shinkai_33') result = model.style_transfer(images=[cv2.imread(img_path)], visualization=True, output_dir='dongman') cv2.imwrite(img_new_path, result[0]) return img_new_path async def on_message(msg: Message): if msg.text() == '自我介绍': await msg.say( '这是彩虹屁机器人\n- 收到"ding", 自动回复"dong dong dong"\n- 收到"图片", 自动回复一张图片\n- 收到"彩虹屁",自动回复花式彩虹屁\n- 收到"舔狗",自动回复花式舔狗日记\n- 收到"毒鸡汤",自动回复花式毒鸡汤\n-收到您的照片,自动返回旅游到one意境美图美句,让你开开心心朋友圈') if msg.text() == '彩虹屁': await msg.say(caihongpi()) if msg.text() == '舔狗': await msg.say(tiangouriji()) if msg.text() == '毒鸡汤': await msg.say(dujitang()) if msg.text() == 'ding': await msg.say('这是自动回复: dong dong dong') if msg.text() == 'hi' or msg.text() == '你好': await msg.say('这是自动回复: 机器人目前的功能是\n- 收到"ding", 自动回复"dong dong dong"\n- 收到"图片", 自动回复一张图片') if msg.text() == '图片': url = 'https://ai.bdstatic.com/file/403BC03612CC4AF1B05FB26A19D99BAF' if msg.text() == '自我介绍': await msg.say( '这是彩虹屁机器人\n- 收到"ding", 自动回复"dong dong dong"\n- 收到"图片", 自动回复一张图片\n- 收到"彩虹屁",自动回复花式彩虹屁\n-收到您的照片,自动返回旅游到one意境美图美句,让你开开心心朋友圈') # 如果收到的message是一张图片 if msg.type() == Message.Type.MESSAGE_TYPE_IMAGE: # 1.消息图片存储 # 将Message转换为FileBox file_box_2 = await msg.to_file_box() # 获取图片名 img_name = file_box_2.name # 图片保存的路径 img_path = './image/' + img_name # 将图片保存为本地文件 print('1.消息图片存储', img_path) await file_box_2.to_file(file_path=img_path) # 2.抠图 img_new_path = img_koutu(img_path) print('2.抠图', img_new_path) # 3.获取one图文并合并 last_img, word = merge(img_new_path) print(' 3.获取one图文并合并', last_img, word) # 4.风格画图片 last_img = dongman(last_img) print('4.风格画图片', last_img) # add_word(last_img, word) print('5.加入文字', last_img) print(word) # 6.发送图片 file_box_3 = FileBox.from_file(last_img) await msg.say(file_box_3) async def on_scan( qrcode: str, status: ScanStatus, _data, ): print('状态: ' + str(status)) print('查看在线二维码: https://wechaty.js.org/qrcode/' + qrcode) async def on_login(user: Contact): print(user) async def main(): # 确保我们在环境变量中设置了WECHATY_PUPPET_SERVICE_TOKEN if 'WECHATY_PUPPET_SERVICE_TOKEN' not in os.environ: print(''' Error: WECHATY_PUPPET_SERVICE_TOKEN 没有配置,详情见链接: https://github.com/wechaty/python-wechaty-getting-started/#wechaty_puppet_service_token ''') bot = Wechaty() bot.on('扫描', on_scan) bot.on('登录', on_login) bot.on('消息', on_message) await bot.start() print('[Wechaty] 彩虹机器人启动了......') asyncio.run(main())