在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當(dāng)前位置:雨林木風(fēng)下載站 > 網(wǎng)絡(luò)軟件教程 > 詳細(xì)頁面

來看看你的顏值多高吧!基于Python開發(fā)的公眾號

來看看你的顏值多高吧!基于Python開發(fā)的公眾號

更新時間:2025-09-20 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

導(dǎo)微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務(wù)的免費(fèi)應(yīng)用程序,由張小龍所帶領(lǐng)的騰訊廣州研發(fā)中心產(chǎn)品團(tuán)隊(duì)打造 [2] 。微信支持跨通信運(yùn)營商、跨操作系統(tǒng)平臺...
微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務(wù)的免費(fèi)應(yīng)用程序,由張小龍所帶領(lǐng)的騰訊廣州研發(fā)中心產(chǎn)品團(tuán)隊(duì)打造 [2] 。微信支持跨通信運(yùn)營商、跨操作系統(tǒng)平臺通過網(wǎng)絡(luò)快速發(fā)送免費(fèi)(需消耗少量網(wǎng)絡(luò)流量)語音短信、視頻、圖片和文字,同時,也可以使用通過共享流媒體內(nèi)容的資料和基于位置的社交插件“搖一搖”、“漂流瓶”、“朋友圈”、”公眾平臺“、”語音記事本“等服務(wù)插件。
這是一個基于Python的微信公眾號開發(fā)之顏值檢測,今天我們把用戶的圖片通過騰訊的AI平臺分析后再返回給用戶。來一起體驗(yàn)下公眾號的顏值檢測吧

效果圖

1691280-3107ca5c3aec2f5b.png

1691280-201fade473e79cc3.jpg

1691280-cc338ba77cc79eaf.jpg

一. 接入騰訊AI平臺

我們先看一下官方人臉檢測與分析接口的描述:

檢測給定圖片(Image)中的所有人臉(Face)的位置和相應(yīng)的面部屬性。位置包括(x, y, w, h),面部屬性包括性別(gender), 年齡(age), 表情(expression), 魅力(beauty), 眼鏡(glass)和姿態(tài)(pitch,roll,yaw)。

請求參數(shù)包括下面幾個:

  • app_id 應(yīng)用標(biāo)識,我們在AI平臺注冊后就可以得到app_id

  • time_stamp 時間戳

  • nonce_str 隨機(jī)字符串

  • sign 簽名信息,需要我們自己去計算

  • image 需要檢測的圖片(上限1M)

  • mode 檢測模式

1.接口鑒權(quán),構(gòu)造請求參數(shù)

官方給了我們接口鑒權(quán)的計算方法。

  1. 將<key, value>請求參數(shù)對按key進(jìn)行字典升序排序,得到有序的參數(shù)對列表N

  2. 將列表N中的參數(shù)對按URL鍵值對的格式拼接成字符串,得到字符串T(如:key1=value1&key2=value2),URL鍵值拼接過程value部分需要URL編碼,URL編碼算法用大寫字母,例如%E8,而不是小寫%e8

  3. 將應(yīng)用密鑰以app_key為鍵名,組成URL鍵值拼接到字符串T末尾,得到字符串S(如:key1=value1&key2=value2&app_key=密鑰)

  4. 對字符串S進(jìn)行MD5運(yùn)算,將得到的MD5值所有字符轉(zhuǎn)換成大寫,得到接口請求簽名

2.請求接口地址

請求接口信息,我們用 requests 發(fā)送請求,會得到返回的 json 格式的圖像信息pip install requests安裝requests。

3.處理返回的信息

處理返回的信息,把信息展示在圖片上,再把處理后的圖片保存。這里我們用到 opencv ,和 pillow 兩個庫pip install pillowpip install opencv-python來安裝。

開始編寫代碼,我們新建一個face_id.py 文件來對接AI平臺,并且返回檢測后的圖像數(shù)據(jù)。

import time
import random
import base64
import hashlib
import requests
from urllib.parse import urlencode
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import os


# 一.計算接口鑒權(quán),構(gòu)造請求參數(shù)

def random_str():
    '''得到隨機(jī)字符串nonce_str'''
    str = 'abcdefghijklmnopqrstuvwxyz'
    r = ''
    for i in range(15):
        index = random.randint(0,25)
        r += str[index]
    return r


def image(name):
    with open(name, 'rb') as f:
        content = f.read()
    return base64.b64encode(content)


def get_params(img):
    '''組織接口請求的參數(shù)形式,并且計算sign接口鑒權(quán)信息,
    最終返回接口請求所需要的參數(shù)字典'''
    params = {
        'app_id': '1106860829',
        'time_stamp': str(int(time.time())),
        'nonce_str': random_str(),
        'image': img,
        'mode': '0'

    }

    sort_dict = sorted(params.items(), key=lambda item: item[0], reverse=False)  # 排序
    sort_dict.append(('app_key', 'P8Gt8nxi6k8vLKbS'))  # 添加app_key
    rawtext = urlencode(sort_dict).encode()  # URL編碼
    sha = hashlib.md5()
    sha.update(rawtext)
    md5text = sha.hexdigest().upper()  # 計算出sign,接口鑒權(quán)
    params['sign'] = md5text  # 添加到請求參數(shù)列表中
    return params

# 二.請求接口URL


def access_api(img):
    frame = cv2.imread(img)
    nparry_encode = cv2.imencode('.jpg', frame)[1]
    data_encode = np.array(nparry_encode)
    img_encode = base64.b64encode(data_encode)  # 圖片轉(zhuǎn)為base64編碼格式
    url = 'https://api.ai.qq.com/fcgi-bin/face/face_detectface'
    res = requests.post(url, get_params(img_encode)).json()  # 請求URL,得到j(luò)son信息
    # 把信息顯示到圖片上
    if res['ret'] == 0:  # 0代表請求成功
        pil_img = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))  # 把opencv格式轉(zhuǎn)換為PIL格式,方便寫漢字
        draw = ImageDraw.Draw(pil_img)
        for obj in res['data']['face_list']:
            img_width = res['data']['image_width']  # 圖像寬度
            img_height = res['data']['image_height']  # 圖像高度
            # print(obj)
            x = obj['x']  # 人臉框左上角x坐標(biāo)
            y = obj['y']  # 人臉框左上角y坐標(biāo)
            w = obj['width']  # 人臉框?qū)挾?            h = obj['height']  # 人臉框高度
            # 根據(jù)返回的值,自定義一下顯示的文字內(nèi)容
            if obj['glass'] == 1:  # 眼鏡
                glass = '有'
            else:
                glass = '無'
            if obj['gender'] >= 70:  # 性別值從0-100表示從女性到男性
                gender = '男'
            elif 50 <= obj['gender'] < 70:
                gender = "娘"
            elif obj['gender'] < 30:
                gender = '女'
            else:
                gender = '女漢子'
            if 90 < obj['expression'] <= 100:  # 表情從0-100,表示笑的程度
                expression = '一笑傾城'
            elif 80 < obj['expression'] <= 90:
                expression = '心花怒放'
            elif 70 < obj['expression'] <= 80:
                expression = '興高采烈'
            elif 60 < obj['expression'] <= 70:
                expression = '眉開眼笑'
            elif 50 < obj['expression'] <= 60:
                expression = '喜上眉梢'
            elif 40 < obj['expression'] <= 50:
                expression = '喜氣洋洋'
            elif 30 < obj['expression'] <= 40:
                expression = '笑逐顏開'
            elif 20 < obj['expression'] <= 30:
                expression = '似笑非笑'
            elif 10 < obj['expression'] <= 20:
                expression = '半嗔半喜'
            elif 0 <= obj['expression'] <= 10:
                expression = '黯然傷神'
            delt = h // 5  # 確定文字垂直距離
            # 寫入圖片
            if len(res['data']['face_list']) > 1:  # 檢測到多個人臉,就把信息寫入人臉框內(nèi)
                font = ImageFont.truetype('yahei.ttf', w // 8, encoding='utf-8')  # 提前把字體文件下載好
                draw.text((x + 10, y + 10), '性別 :' + gender, (76, 176, 80), font=font)
                draw.text((x + 10, y + 10 + delt * 1), '年齡 :' + str(obj['age']), (76, 176, 80), font=font)
                draw.text((x + 10, y + 10 + delt * 2), '表情 :' + expression, (76, 176, 80), font=font)
                draw.text((x + 10, y + 10 + delt * 3), '魅力 :' + str(obj['beauty']), (76, 176, 80), font=font)
                draw.text((x + 10, y + 10 + delt * 4), '眼鏡 :' + glass, (76, 176, 80), font=font)
            elif img_width - x - w < 170:  # 避免圖片太窄,導(dǎo)致文字顯示不完全
                font = ImageFont.truetype('yahei.ttf', w // 8, encoding='utf-8')
                draw.text((x + 10, y + 10), '性別 :' + gender, (76, 176, 80), font=font)
                draw.text((x + 10, y + 10 + delt * 1), '年齡 :' + str(obj['age']), (76, 176, 80), font=font)
                draw.text((x + 10, y + 10 + delt * 2), '表情 :' + expression, (76, 176, 80), font=font)
                draw.text((x + 10, y + 10 + delt * 3), '魅力 :' + str(obj['beauty']), (76, 176, 80), font=font)
                draw.text((x + 10, y + 10 + delt * 4), '眼鏡 :' + glass, (76, 176, 80), font=font)
            else:
                font = ImageFont.truetype('yahei.ttf', 20, encoding='utf-8')
                draw.text((x + w + 10, y + 10), '性別 :' + gender, (76, 176, 80), font=font)
                draw.text((x + w + 10, y + 10 + delt * 1), '年齡 :' + str(obj['age']), (76, 176, 80), font=font)
                draw.text((x + w + 10, y + 10 + delt * 2), '表情 :' + expression, (76, 176, 80), font=font)
                draw.text((x + w + 10, y + 10 + delt * 3), '魅力 :' + str(obj['beauty']), (76, 176, 80), font=font)
                draw.text((x + w + 10, y + 10 + delt * 4), '眼鏡 :' + glass, (76, 176, 80), font=font)

            draw.rectangle((x, y, x + w, y + h), outline="#4CB050")  # 畫出人臉方框
            cv2img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)  # 把 pil 格式轉(zhuǎn)換為 cv
            cv2.imwrite('faces/{}'.format(os.path.basename(img)), cv2img)  # 保存圖片到 face 文件夾下
            return '檢測成功'
    else:
        return '檢測失敗'

到這里我們的人臉檢測接口接入及圖片處理就完成了。之后在收到用戶發(fā)送的圖片信息后,調(diào)用這個函數(shù),把處理后的圖片返回給用戶就可以。

返回圖片給用戶

當(dāng)收到用戶圖片時,需要以下幾個步驟:

保存圖片

當(dāng)接收到用戶圖片后,我們要先把圖片保存起來,之后才能去調(diào)用人臉分析接口,把圖片信息傳遞過去,我們需要編寫一個 img_download 函數(shù)來下載圖片。詳見下方代碼

調(diào)用人臉分析接口

圖片下載后,調(diào)用 face_id.py 文件里的接口函數(shù),得到處理后的圖片。

上傳圖片

檢測結(jié)果是一張新的圖片,要把圖片發(fā)送給用戶我們需要一個 Media_ID,要獲取Media_ID必須先把圖片上傳為臨時素材,所以這里我們需要一個img_upload函數(shù)來上傳圖片,并且在上傳時需要用到一個access_token,我們通過一個函數(shù)來獲取. 獲取access_token必須要把我們自己的IP地址加入白名單,否則是獲取不到的。請登錄“微信公眾平臺-開發(fā)-基本配置”提前將服務(wù)器IP地址添加到IP白名單中,可以在http://ip.qq.com/查看本機(jī)的IP...

開始編寫代碼,我們新建一個 utils.py 來下載、上傳圖片

import requests
import json
import threading
import time
import os

token = ''
app_id = 'wxfc6adcdd7593a712'
secret = '429d85da0244792be19e0deb29615128'


def img_download(url, name):
    r = requests.get(url)
    with open('images/{}-{}.jpg'.format(name, time.strftime("%Y_%m_%d%H_%M_%S", time.localtime())), 'wb') as fd:
        fd.write(r.content)
    if os.path.getsize(fd.name) >= 1048576:
        return 'large'
    # print('namename', os.path.basename(fd.name))
    return os.path.basename(fd.name)


def get_access_token(appid, secret):
    '''獲取access_token,100分鐘刷新一次'''

    url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}'.format(appid, secret)
    r = requests.get(url)
    parse_json = json.loads(r.text)
    global token
    token = parse_json['access_token']
    global timer
    timer = threading.Timer(6000, get_access_token)
    timer.start()


def img_upload(mediaType, name):
    global token
    url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=%s&type=%s" % (token, mediaType)
    files = {'media': open('{}'.format(name), 'rb')}
    r = requests.post(url, files=files)
    parse_json = json.loads(r.text)
    return parse_json['media_id']

get_access_token(app_id, secret)

返回給用戶

我們簡單修改下收到圖片后的邏輯,收到圖片后經(jīng)過人臉檢測,上傳獲得Media_ID,我們要做的就是把圖片返回給用戶即可。直接看connect.py的代碼

import falcon
from falcon import uri
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, 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('&')
        b = {}
        for i in query_list:
            b[i.split('=')[0]] = i.split('=')[1]

        try:
            check_signature(token='lengxiao', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
            resp.body = (b['echostr'])
        except InvalidSignatureException:
            pass
        resp.status = falcon.HTTP_200

    def on_post(self, req, resp):
        xml = req.stream.read()
        msg = parse_message(xml)
        if msg.type == 'text':
            reply = TextReply(content=msg.content, message=msg)
            xml = reply.render()
            resp.body = (xml)
            resp.status = falcon.HTTP_200
        elif msg.type == 'image':
            name = img_download(msg.image, msg.source)  # 下載圖片
            r = access_api('images/' + name)
            if r == '檢測成功':
                media_id = img_upload('image', 'faces/' + name)  # 上傳圖片,得到 media_id
                reply = ImageReply(media_id=media_id, message=msg)
            else:
                reply = TextReply(content='人臉檢測失敗,請上傳1M以下人臉清晰的照片', message=msg)
            xml = reply.render()
            resp.body = (xml)
            resp.status = falcon.HTTP_200

app = falcon.API()
connect = Connect()
app.add_route('/connect', connect)

至此我們的工作就做完了,我們的公眾號可以進(jìn)行顏值檢測了。本來我打算用在自己公眾號上的,但是還存在下面幾個問題,所以沒有使用。

  1. 微信的機(jī)制,我們的程序必須在5s內(nèi)給出響應(yīng)。不然就會報'公眾號提供的服務(wù)出現(xiàn)故障'。然而處理圖片有時會比較慢,經(jīng)常會超過5s。所以正確的處理方式應(yīng)該是拿到用戶的請求后立即返回一個空字符串表示我們收到了,之后單獨(dú)創(chuàng)建一個線程去處理圖片,當(dāng)圖片處理完后通過客服接口發(fā)送給用戶。可惜的是未認(rèn)證的公眾號沒有客服接口,所以沒辦法,超過5s就會報錯。

  2. 無法自定義菜單,一旦啟用了自定義開發(fā),菜單也需要自定義配置,但是未認(rèn)證的公眾號沒有權(quán)限通過程序來配置菜單,只能在微信后臺配置。

所以,我并沒有在我的公眾號上啟用這個程序,但是如果有認(rèn)證的公眾號,可以嘗試開發(fā)各種好玩的功能。

相關(guān)推薦:

微信公眾平臺開發(fā)一鍵關(guān)注微信公眾平臺賬號

微信公眾平臺開發(fā)嘗試,微信公眾平臺

視頻:傳智、黑馬微信公眾平臺開發(fā)視頻教程

以上就是來看看你的顏值多高吧!基于Python開發(fā)的公眾號的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


微信提供公眾平臺、朋友圈、消息推送等功能,用戶可以通過“搖一搖”、“搜索號碼”、“附近的人”、掃二維碼方式添加好友和關(guān)注公眾平臺,同時微信將內(nèi)容分享給好友以及將用戶看到的精彩內(nèi)容分享到微信朋友圈。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 激情 小说 亚洲 图片: 伦| 天堂在线中文在线| 人体内射精一区二区三区| 一区二区三区 欧美| 日本免费在线视频观看| 污视频网址在线观看| 久久精品午夜福利| 国产二区视频在线| 黄色a级片免费看| 欧美国产日韩另类| 久久午夜夜伦鲁鲁一区二区| 国产二区视频在线播放| 国产素人在线观看| 欧美二区在线视频| 精品成在人线av无码免费看| 中文字幕在线视频一区二区| 国产精品99久久免费黑人人妻| 伊人再见免费在线观看高清版 | 中文字幕第17页| 99999精品视频| 一区二区在线免费看| 日本肉体xxxx裸体xxx免费| mm1313亚洲国产精品无码试看| 国产91在线视频观看| 国产一线二线三线女| 国产免费黄色一级片| 欧美日本视频在线观看| 免费日韩视频在线观看| 国产精品v日韩精品v在线观看| 欧美日韩中文不卡| 精品无码av无码免费专区| 日本国产一级片| 欧美图片激情小说| 欧美综合在线观看视频| 天天干天天曰天天操| 97超碰在线人人| 激情五月婷婷久久| 鲁一鲁一鲁一鲁一澡| 日韩欧美色视频| 日本午夜激情视频| 天天干天天玩天天操| 8x8x华人在线| 国产av天堂无码一区二区三区| 欧美成人黑人猛交| 国产乱子伦农村叉叉叉| 玩弄中年熟妇正在播放| 国产福利片一区二区| 在线视频日韩一区| av免费看网址| 国产日韩第一页| 中文字幕一区二区三区四| 久久久国产欧美| 日本成年人网址| 各处沟厕大尺度偷拍女厕嘘嘘| www.亚洲一区二区| 亚洲一区二区在线视频观看| 亚洲成人av免费看| 99草草国产熟女视频在线| av动漫在线看| 一本久道中文无码字幕av| 波多野结衣家庭教师视频| 日韩中文字幕在线免费| 国产无限制自拍| 91视频 -- 69xx| 精品久久久久久久无码| 孩娇小videos精品| 中国黄色录像片| 欧美中日韩在线| 国内外免费激情视频| 欧美大片久久久| 青草全福视在线| 国产精品免费入口| 国产精品一区二区小说| 欧美日韩dvd| 乱子伦视频在线看| 在线观看成人免费| 大j8黑人w巨大888a片| 婷婷激情综合五月天| 精品人妻人人做人人爽| 四季av一区二区| 青青青在线观看视频| 中文字幕在线观看第三页| 日韩人妻精品无码一区二区三区| 亚洲国产精品女人| 欧美中文字幕在线观看视频| 久操手机在线视频| 精品国产av无码一区二区三区| 天天做天天爱天天高潮| 看一级黄色录像| 青青青青在线视频| 国产日韩一区二区在线| 男女污污的视频| 永久免费黄色片| 国产高清av在线播放| 97国产在线播放| 日日噜噜噜噜久久久精品毛片| 日韩在线不卡一区| 日韩精品在线观看av| 97视频久久久| 天天干天天综合| 日本一道在线观看| 伊人国产精品视频| 精品久久免费观看| 免费观看中文字幕| 可以在线看黄的网站| 欧美日韩激情四射| 亚洲色婷婷久久精品av蜜桃| 黄色一级片网址| 无码人妻aⅴ一区二区三区日本| 簧片在线免费看| 亚洲精品中文字幕乱码无线| 超碰在线免费观看97| 亚洲热在线视频| 国产美女主播在线| 亚洲综合在线网站| 日韩精品视频网址| 日本精品免费在线观看| 日本免费观看网站| 激情五月六月婷婷| 啊啊啊一区二区| 亚洲女人在线观看| 污污污污污污www网站免费| 99久久激情视频| 狠狠精品干练久久久无码中文字幕| 超碰成人免费在线| 五月婷婷之婷婷| 久久精品免费一区二区| 偷拍盗摄高潮叫床对白清晰| www.日本三级| 夜夜爽久久精品91| 欧美一级在线看| 青青草免费在线视频观看| 男人添女荫道口图片| 男女猛烈激情xx00免费视频| 一道本视频在线观看| av免费一区二区| 免费看a级黄色片| www.超碰com| 99精品一区二区三区的区别| 9久久9毛片又大又硬又粗| 日韩欧美黄色大片| 狠狠干视频网站| 日韩精品一区二区三区不卡 | 亚洲精品蜜桃久久久久久| 麻豆三级在线观看| 欧美成人黄色网址| 国产精品999视频| 青青青在线视频播放| 国产在线视频综合| 成年人深夜视频| 亚洲一区二区三区av无码| 女人床在线观看| 久久福利一区二区| 东北少妇不带套对白| 777精品久无码人妻蜜桃| 成人av在线不卡| 黄色一级视频在线播放| 免费在线看黄色片| 国产女大学生av| 蜜臀av免费观看| 91网址在线观看精品| 好吊色视频988gao在线观看| 波多野结衣av一区二区全免费观看 | 日韩专区第三页| 无码粉嫩虎白一线天在线观看 | 国产精品探花在线播放| 最近免费观看高清韩国日本大全| 欧美另类videosbestsex日本| 日本免费a视频| 日本va中文字幕| 亚欧美一区二区三区| 国产二区视频在线播放| 亚洲国产日韩欧美在线观看| 激情成人开心网| 宅男噜噜噜66国产免费观看| 中文字幕一区二区在线观看视频 | 国产精品丝袜久久久久久消防器材 | 国产一区视频免费观看| 免费网站在线观看黄| 人妻有码中文字幕| 米仓穗香在线观看| 8x8x最新地址| 少妇无码av无码专区在线观看 | 美女喷白浆视频| 黄网站欧美内射| 懂色av粉嫩av蜜臀av| 成人午夜激情av| 日本中文字幕片| 一卡二卡三卡视频| 成人毛片100部免费看| 色婷婷.com| 国产精品v日韩精品v在线观看| 久久9精品区-无套内射无码| 欧美 亚洲 视频| 国产一级黄色录像片| 97精品国产97久久久久久粉红| 色婷婷.com| 国产a级片免费看| 黄色网址在线免费看| 久久艹这里只有精品|