VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云最新优惠促销活动
jtti最新优惠促销活动
新罗云最新优惠促销活动

看看你的颜值有多高!基于python的微信官方账号(Python开发微信微信官方账号)

locvps
主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

这是微信微信官方账号开发的基于Python的颜值测试。今天我们通过腾讯的AI平台对用户的图片进行分析,然后返回给用户。下面我们一起体验一下微信官方账号的颜值检测。

效果图看看你的颜值有多高!基于python的微信官方账号(Python开发微信微信官方账号)-主机参考

看看你的颜值有多高!基于python的微信官方账号(Python开发微信微信官方账号)-主机参考

看看你的颜值有多高!基于python的微信官方账号(Python开发微信微信官方账号)-主机参考

一、接入腾讯AI平台我们先来看官方人脸检测分析界面的描述:

检测给定图像中所有人脸的位置和相应的面部属性。包括位置(x,y,w,h),面部属性包括性别(性别),年龄(年龄),表情(表情),美颜(美貌),眼镜(眼镜)和姿态(俯仰,侧倾,偏航)。

这些参数包括以下内容:

app_id应用标识符,我们可以在AI平台注册后获取app_id。

时间戳

随机字符串

标志信息需要我们自己计算。

对要检测的图片进行成像(最大1M)

模式检测模式

1.接口认证,构造请求参数。官方给了我们接口认证的计算方法。

Will < key,value gt请求对按照关键字按字典升序排序,得到一个有序的参数对列表N。

列表N中的参数对按照URL键-值对的格式拼接成字符串,得到一个字符串T(比如key1 = value1 2 = value2),URL key2=value2拼接过程的值部分需要URL编码,URL编码算法使用大写字母,比如%E8,而不是小写的%e8。

应用键以app_key为键名,URL键值拼接到字符串T的末尾得到字符串S(例如key 1 = value 1 key 2 = value 2 ;App_key= key)

对字符串S进行MD5运算,将得到的MD5值的所有字符转换成大写,从而得到接口请求签名。

2.请求接口地址以请求接口信息。我们用请求发送请求,我们会得到返回的json格式的图像信息pip install requests来安装请求。

3.处理返回的信息,在图片上显示信息,然后保存处理后的图片。这里用opencv,pip安装pillow,PIP安装opencv-python来安装。

为了开始编写代码,我们创建了一个新的face_id.py文件来与AI平台进行交互,并返回检测到的图像数据。

导入时间import random import base 64 import hashlibimport requests from urllib . parse import urlencode import cv2 import numpy as NP from PIL import Image,Imagedraw,imagefontport OS # 1。计算接口认证,构造请求参数def random _ str(): # 39;''获取随机字符串nonce _ str # 39''str = # 39abcdefghijklmnopqrstuvwxyz # 39;r = # 39'对于范围内的I(15):index = random . randint(0,25)r+= str[index]return rdef image(name):with open(name, # 39;rb # 39)as f:content = f . read()return base64 . b 64 encode(content)def get _ params(img): # 39;''组织接口请求的参数形式,计算sign接口的认证信息,最终返回接口请求所需的参数字典 # 39;''params = { # 39app _ id # 39: '1106860829', '时间戳 # 39;:str(int(time.time())), # 39;nonce _ str # 39:random_str(), # 39;图像 # 39;:img, # 39;模式 # 39;: '0'} sort _ dict = sorted (params.items(),key = lambda item: item [0],reverse = false)# sort _ dict . append(( # 39 # 39;app _ key # 39, 'p 8 gt 8 nxi 6k 8 vlk bs # 39;)# add app _ keyrawtext = urlencode(sort _ dict)。encode()# URL encoding sha = hashlib . MD5()sha . update(raw text)MD 5 text = sha . hex digest()。upper () #计算标志,以及接口验证参数[ # 39;标志 # 39;] =添加到请求参数列表的list return params # II。请求接口URL def access _ API(IMG):frame = cv2 . im read(IMG)nParry _ encode = cv2 . imeencode( # 39;。jpg # 39,frame)[1]data _ encode = NP . array(nparry _ encode)img _ encode = base64 . b 64 encode(data _ encode)#图片转换为base64编码格式url = # 39https://api.ai.qq.com/fcgi-bin/face/face_detectface' Res = requests . post(URL,get _ params (img _ encode))。json () #请求URL,获取json信息#显示图片上的信息如果RES[ # 39;ret # 39] == 0: # 0表示请求成功PIL _ img = image . from array(cv2 . CVT color(frame,cv2.color _ bgr2rgb)) #将opencv格式转换为PIL格式,方便在res中为obj编写汉字draw = imagedraw . draw(pil _ img)[ # 39;数据 # 39;]['face _ list # 39]:img _ width = RES[ # 39;数据 # 39;]['图像_宽度 # 39;]# image width img _ height = RES[ # 39;数据 # 39;]['image _ height # 39] #图像高度# print(obj)x = obj[ # 39;x # 39] #脸框左上角的X坐标y = obj[ # 39;y # 39] #脸框左上角的Y坐标w = obj[ # 39;宽度 # 39;] #脸框宽度h = obj[ # 39;身高 # 39;] # Face Frame Height #根据返回值自定义显示的文本内容if obj[ # 39;格拉斯 # 39;]= = 1:# glasses glass = # 39;是的 # 39;else:glass = # 39;无 # 39;如果obj[ # 39;性别 # 39;] gt;= 70: #性别值从0-100表示性别从女性到男性= # 39;男 # 39;elif 50 lt= obj[ # 39;性别 # 39;] lt;70:gender = ;娘”elif obj[ # 39;性别 # 39;] lt;30:性别= # 39;女 # 39;else:性别= # 39;男人 # 39;如果90 ltobj[ # 39;表情 # 39;] lt;= 100: #表情从0-100,表示笑的程度表情= # 39;微笑 # 39;elif 80 ltobj[ # 39;表情 # 39;] lt;= 90:表达式= # 39;心花怒放 # 39;elif 70 ltobj[ # 39;表情 # 39;] lt;= 80:表达式= # 39;兴高采烈 # 39;elif 60 ltobj[ # 39;表情 # 39;] lt;= 70:表达式= # 39;微笑 # 39;elif 50 ltobj[ # 39;表情 # 39;] lt;= 60:表达式= # 39;喜气洋洋 # 39;elif 40 ltobj[ # 39;表情 # 39;] lt;= 50:expression = # 39;喜气洋洋 # 39;elif 30 ltobj[ # 39;表情 # 39;] lt;= 40:expression = # 39;微笑 # 39;elif 20 ltobj[ # 39;表情 # 39;] lt;= 30:expression = # 39;似笑非笑 # 39;elif 10 ltobj[ # 39;表情 # 39;] lt;= 20:expression = # 39;一半是陈,一半是 # 39;elif 0 lt= obj[ # 39;表情 # 39;] lt;= 10:expression = # 39;感觉沮丧和沮丧 # 39;Delt = h // 5 #确定文本的垂直距离#写出图片if len(RES[ # 39;数据 # 39;]['face _ list # 39]) gt;1: #检测到多张人脸时,将信息写入人脸框font = image font . truetype( # 39;yahei.ttf # 39,w // 8,编码= # 39;ut F-8 # 39;)#提前下载字体文件draw.text ((x+10,y+10), # 39;性别: # 39;+性别,(76,176,80),font=font) draw.text((x + 10,y + 10 + delt * 1), # 39;年龄: # 39;+str(obj[ # 39;年龄 # 39;]),(76,176,80),font=font) draw.text((x + 10,y + 10 + delt * 2), # 39;表情: # 39;+ expression,(76,176,80),font=font) draw.text((x + 10,y + 10 + delt * 3), # 39;魅力: # 39;+str(obj[ # 39;美 # 39;]),(76,176,80),font=font) draw.text((x + 10,y + 10 + delt * 4), # 39;眼镜: # 39;+ glass,(76,176,80),font = font)elif img _ width -x -w lt;10: #避免图片太窄,导致文字显示不完整font = image font . truetype( # 39;yahei.ttf # 39,w // 8,编码= # 39;ut F-8 # 39;)draw.text((x + 10,y + 10), # 39;性别: # 39;+性别,(76,176,80),font=font) draw.text((x + 10,y + 10 + delt * 1), # 39;年龄: # 39;+str(obj[ # 39;年龄 # 39;]),(76,176,80),font=font) draw.text((x + 10,y + 10 + delt * 2), # 39;表情: # 39;+ expression,(76,176,80),font=font) draw.text((x + 10,y + 10 + delt * 3), # 39;魅力: # 39;+str(obj[ # 39;美 # 39;]),(76,176,80),font=font) draw.text((x + 10,y + 10 + delt * 4), # 39;眼镜: # 39;+ glass,(76,176,80),font = font)else:font = image font . truetype( # 39;yahei.ttf # 39,20,编码= # 39;ut F-8 # 39;)draw.text((x + w + 10,y + 10), # 39;性别: # 39;+性别,(76,176,80),font=font) draw.text((x + w + 10,y + 10 + delt * 1), # 39;年龄: # 39;+str(obj[ # 39;年龄 # 39;]),(76,176,80),font=font) draw.text((x + w + 10,y + 10 + delt * 2), # 39;表情: # 39;+ expression,(76,176,80),font=font) draw.text((x + w + 10,y + 10 + delt * 3), # 39;魅力: # 39;+str(obj[ # 39;美 # 39;]),(76,176,80),font=font) draw.text((x + w + 10,y + 10 + delt * 4), # 39;眼镜: # 39;+ glass,(76,176,80),font=font) draw.rectangle((x,y,x + w,y + h),outline = # 4CB050 )#画个脸框CV2IMG = CV2。CVTColor (NP。数组(皮尔_ IMG),CV2。Color _ RGB2BGR) #将PIL格式转换为cv cv2 . im write( # 39;faces/{ } # 39;。format (os.path.basename (img))、cv2img) #将图片保存到face文件夹return # 39检测成功 # 39;else:return # 39;检测失败 # 39;在这里,我们的人脸检测接口接入和图像处理完成。接收到用户发送的图片信息后,调用该函数,将处理后的图片返回给用户。

将图片返回给用户当您收到用户的图片时,您需要执行以下步骤:

保存图片。在接收到用户的图片后,我们需要先保存图片,然后可以调用人脸分析接口传递图片信息。我们需要写一个img_download函数来下载图片。参见下面的代码。

调用人脸分析界面图片下载后,调用face_id.py文件中的接口函数,得到处理后的图片。

图像上传检测的结果是新图像。要将图像发送给用户,我们需要一个Media_ID。要获取Media_ID,首先要上传图片作为临时素材,所以这里需要一个img_upload函数来上传图片,上传的时候需要使用一个access_token。我们通过一个函数得到它。要获取access_token,必须将自己的IP地址加入白名单,否则无法获取。请提前登录“微信公众平台-开发-基础配置”将服务器的IP地址添加到IP白名单中,即可查看该机在http://ip.qq.com/.的IP...

为了开始编写代码,我们创建了一个新的utils.py来下载和上传图片。

导入请求导入JSON导入线程导入时间导入ostoken = # 39'app _ id = # 39wxfc 6 ADC DD 7593 a 712 # 39;秘密= # 39;429d 85 da 0244792 be 19 E0 deb 29615128 # 39;def img_download(url,name):r = requests . get(URL)with open( # 39;images/{}-{}。jpg # 39。format(name,time . strftime( ;% Y _ % m _ % d % H _ % M _ % S ,time.localtime())), # 39;wb # 39)as FD:FD . write(r . content)if OS . path . getsize(FD . name)>= 1048576:return # 39;大号 # 39;#打印( # 39;namename # 39,OS . path . basename(FD . name))return OS . path . basename(FD . name)def get _ access _ token(appid,secret): # 39;''获取access _ token,每100分钟刷新一次 # 39;''url = # 39https://api.weixin.qq.com/cgi-bin/token?格兰特类型=客户证书 appid = { } secret = { } # 39。format(appid,secret)r = requests . get(URL)parse _ JSON = JSON . loads(r . text)全局令牌token = parse _ JSON[ # 39;访问令牌 # 39;]全局定时器timer =线程。Timer(6000,get _ access _ token)timer . start()def img _ upload(media type,name):全局令牌url = https://api.weixin.qq.com/cgi-bin/media/upload?访问令牌= % s 类型= % s % (token,media type)files = { # 39;媒体 # 39;:打开( # 39;{}'。格式(名称), # 39;rb # 39)} r = requests.post(url,files = files)parse _ JSON = JSON . loads(r . text)return parse _ JSON[ # 39;media _ id # 39] Get _ access _ token (app _ id,secret)返回给用户。我们收到图片后简单修改逻辑,收到图片后通过人脸检测,上传得到Media_ID。我们要做的就是把图片返回给用户。直接看connect.py的代码

import falcon from falcon import uri from we chatpy . utils import check _ signature from we chatpy . exceptions import invalidsignature exception from we chatpy . replies import parse _ message from we chatpy . imagereply from utils import img _ download,img _ upload from face _ id import access _ API class Connect(object):def on _ get(self,req,resp):query _ string = req . query _ string query _ list = query _ string . split( # 39; ')b = { } for I in query _ list:b[I . split( # 39;=')[0]]= I . split( # 39;=')[1]try:check _ signature(token = # 39;冷筱 # 39;,签名= b[ # 39;签名 # 39;],时间戳= b[ # 39;时间戳 # 39;],nonce = b[ # 39;nonce # 39])resp . body =(b[ # 39;echostr # 39])除了InvalidSignatureException:pass resp . status = falcon。HTTP_200 def on_post(self,req,resp):XML = req . stream . read()msg = parse _ message(XML)if msg . type = = # 39;正文 # 39;:reply = text reply(content = msg . content,message = msg)XML = reply . render()resp . body =(XML)resp . status = falcon。HTTP _ 200 elif msg.type = = # 39图像 # 39;:name = img _ download (msg.image,msg.source) #下载图片r = access _ API( # 39;images/ # 39;+ name)如果r = = # 39检测成功 # 39;:media _ id = img _ upload( # 39;图像 # 39;, 'faces/ # 39;+name) #上传图片获取media _ id reply = image reply(media _ id = media _ id,message = msg)else:reply = text reply(content = # 39;人脸检测失败,请上传一张1米以下人脸清晰的照片 # 39;,message = msg)XML = reply . render()resp . body =(XML)resp . status = falcon。HTTP_200app =猎鹰。API()Connect = Connect()app . add _ route( # 39;/connect # 39;至此,我们的工作完成,我们的微信官方账号可以进行面值测试了。我本来打算在自己的微信官方账号上用,但是还是有以下问题,就没用了。

微信机制,我们的程序必须在5s内给出回应。否则会被举报 # 39;微信官方账号提供的服务出现故障 # 39;。但是处理图片有时候比较慢,经常超过5s。所以正确的处理方法是立即返回一个空字符串表示我们收到了用户的请求,然后创建一个单独的线程来处理图片,图片处理完后通过客服接口发送给用户。可惜未认证的微信官方账号没有客服界面,没办法。如果超过5秒,它将报告一个错误。

您不能自定义菜单。一旦定制开发被启用,菜单也需要定制配置。但未认证的微信官方账号无权通过程序配置菜单,只能在微信后台配置。

所以,我没有在我的微信官方账号上启用这个程序,但是如果我有一个认证的微信官方账号,我可以尝试开发各种有趣的功能。

相关建议:

微信公众平台开发一键关注微信公众平台账号。

微信公众平台开发尝试,微信公众平台

视频:传智,黑马微信公众平台开发视频教程以上是看你的颜值有多高!基于Python的微信官方账号详情请多关注主机参考其他相关文章!

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:看看你的颜值有多高!基于python的微信官方账号(Python开发微信微信官方账号) https://zhujicankao.com/80062.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 看看你的颜值有多高!基于python的微信官方账号(Python开发微信微信官方账号)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!