Python3基于微信订阅号的人脸识别
目录
注册个人版微信公众号(订阅号)需要一个未注册过公众号的任意邮箱
做一个本地端口映射80或443的内网穿透 访问https://natapp.cn/
本节课需要准备
- 入门级:
- 微信公众号
- Natapp内网穿透
- Face++账号
- Python3
- Pycharm编辑器
- 进阶版:
- 微信公众号
- Natapp内网穿透
- Face++账号
- Python3
- Pycharm编辑器
- 云服务器一台
- 已备案二级域名一个
- Docker技术
开始搭建操作
步骤一:
注册个人版微信公众号(订阅号)需要一个未注册过公众号的任意邮箱
步骤二:
做一个本地端口映射80或443的内网穿透 访问https://natapp.cn/
注册一个账号,然后申请免费隧道
起个名字,选择web,本地端口自己定义一个即可
这是我为本次微信订阅号测试准备的
配置好后下载客户端
我选择的是windows64位
接下来就是natapp配置文件 config.ini
[default]
authtoken=48acb7b6b80b49ed #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=none #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
安装python依赖包
pip install
使用pycharm编写python3代码 weixinDream.py 测试代码
import hashlib
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/',methods=['GET','POST'])
def wechat_auth():
if request.method == 'GET':
print('coming Get')
data = request.args
token = 'weixin' # 不要忘记输入 token
signature = data.get('signature','')
timestamp = data.get('timestamp','')
nonce = data.get('nonce','')
echostr = data.get('echostr','')
s = [timestamp,nonce,token]
s.sort()
s = ''.join(s)
if (hashlib.sha1(s.encode('utf8')).hexdigest() == signature):
return make_response(echostr)
if __name__ == "__main__":
app.run(port=8088,debug=True)
使用python3 weixinDream.py
完整调用face++识别源码
import hashlib
from flask import Flask, request, make_response
import xml.etree.ElementTree as ET
import requests
app = Flask(__name__)
@app.route('/',methods=['GET','POST'])
def wechat_auth():
if request.method == 'GET':
print('coming Get')
data = request.args
token = 'weixin' # 不要忘记输入 token
signature = data.get('signature','')
timestamp = data.get('timestamp','')
nonce = data.get('nonce','')
echostr = data.get('echostr','')
s = [timestamp,nonce,token]
s.sort()
s = ''.join(s)
if (hashlib.sha1(s.encode('utf8')).hexdigest() == signature):
return make_response(echostr)
if request.method == 'POST':
xml_str = request.stream.read()
# print(xml_str)
xml = ET.fromstring(xml_str)
toUserName=xml.find('ToUserName').text
fromUserName = xml.find('FromUserName').text
createTime = xml.find('CreateTime').text
msgType = xml.find('MsgType').text
PicUrl = xml.find('PicUrl').text
print(PicUrl)
data={
'api_key':'你的key',
'api_secret':'你的secret',
'image_url':str(PicUrl),
'return_landmark':0,
'return_attributes':'gender,age,beauty',
}
result = requests.post(url="https://api-cn.faceplusplus.com/facepp/v3/detect",data=data).json()
gender = result['faces'][0]['attributes']['gender']['value']
age = result['faces'][0]['attributes']['age']['value']
if gender=="Male":
beauty = result['faces'][0]['attributes']['beauty']['male_score']
else:
beauty = result['faces'][0]['attributes']['beauty']['female_score']
if gender=="Male":
gender2="男性"
else:
gender2="女性"
resultStr="性别为:%s,年龄大约为:%s岁,颜值:%s" % (gender2,age,beauty)
if msgType == 'image':
reply = '''
<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>
''' % (
fromUserName,
toUserName,
createTime,
'text',
resultStr,
)
return reply
if __name__ == "__main__":
app.run(port=8088,debug=True)
步骤三:
公众号设置
服务器地址(URL地址改成这个 token和代码中的一致
最终运行即可 python3 weixinDream.py
步骤四:
Docker环境部署环境请移步百度云下载相关资料
Docker一键安装脚本与运行包
链接:https://pan.baidu.com/s/1uijg3d3WF7ATxJ4rpLr3Qw
提取码:amd5
有个坑点就是云服务器nginx一定要反代我的容器映射的nginx 8092端口
反代代码放在/etc/nginx/conf.d/flaskapp.conf
给flaskapp.conf chmod 777 flaskapp.conf 权限
flaskapp.conf代码
server {
listen 80;
server_name 你的二级域名;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8092/;
}
}
至此所有配置完毕,可以关注公众号查看演示效果
请老铁关注我的公众号
欢迎关注我的公众号,测试你的颜值和年龄