超准的颜值打分器(超准的颜值打分器软件)

时间:2023-04-15 浏览:25 分类:娱乐资讯

前言

嗨喽!大家好呀,这里是魔王~

准备工作

在写代码之前,你需要先在Baidu开发者平台申请权限

步骤如下:登录百度智能云

【 https://cloud.baidu.com/?from=console 】,没有Baidu账号的注册一个;

第一次进入会有这样一个页面,你自己随意填

通过界面右上角进入控制台

进入控制台后点击左上角的菜单栏

选中产品服务搜索人脸识别

点击创建应用

  1. 应用名称随便填
  2. 接口选择默认
  3. 应用归属选个人
  4. 应用描述随便填
  5. 然后点击立即创建

创建完毕后点击返回应用列表重点点击领取免费资源

进行实名认证后领取服务类型里面的所有内容

实名认证需要一定时间

领取完毕之后回到应用列表

复制API Key和Secret Key里的内容,用于后期的接口认证

开发环境:
  • python 3.8
  • Pycharm 2021.2
  • 会使用API接口 百度云接口
模块使用:
  • requests >>> pip install requests
  • tqdm >>> pip install tqdm
  • os
  • base64
如何安装python第三方模块:
  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
  2. 在pycharm中点击Terminal(终端) 输入安装命令
如何配置pycharm里面的python解释器?
  1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
  2. 点击齿轮, 选择add
  3. 添加python安装路径
pycharm如何安装插件?
  1. 选择file(文件) >>> setting(设置) >>> Plugins(插件)
  2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
  3. 选择相应的插件点击 install(安装) 即可
  4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效
分为两个阶段第一个阶段 去采集主播照片数据

爬虫基本流程:

一. 数据来源分析

主播照片, 照片url地址 可以从哪里获取 >>> 通过网页上面开发者工具进行抓包分析

二. 代码实现步骤 发送请求 >>> 获取数据 >>> 解析数据 >>> 保存数据

发送请求, 对于 https://www.huya.com/g/2168 发送请求 列表页面获取数据, 获取服务器返回的响应数据 response解析数据, 提取我们想要数据内容 主播名字 主播封面图url地址json数据 可以直接处理re正则表达式提取根据标签节点/属性提取内容:xpathcss选择器保存数据, 图片内容保存到本地文件夹

第二阶段 颜值检测

对于我们保存下来照片, 进行颜值检测评分

完整代码

# 导入数据请求

import requests # pip install requests (导入模块没有使用是灰色)

# 导入格式化输出模块

import pprint

# 导入os文件操作模块

import os

import base64

from tqdm import tqdm

# 发送请求

# 确定请求的url地址

for page in range(1, 11):

url = f'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&page={page}'

# headers 请求头 伪装Python的代码 不被识别出来是爬虫程序...

# headers 是一个字典数据类型

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'

}

# 通过requests模块去对url地址发送请求

response = requests.get(url=url, headers=headers)

# 2. 获取数据, 获取服务器返回的数据内容

# <Response > 返回response对象, 200状态码 表示请求成功

# 我能不能直接获取json数据呢? *** 请求参数里面含有callback 想要直接获取json数据 要删掉

# print(response.json())

# pprint.pprint(response.json())

# 3. 解析数据, 提取我们想要数据内容 主播名字 主播封面图url地址

# json数据提取内容 根据冒号左边的内容 提取冒号右边内容

data_list = response.json()

for index in data_list:

# pprint.pprint(index)

name = index

img_url = index

# 4. 保存数据 保存图片数据内容, 也需要发送请求 获取数据

# response.text 获取响应体文本数据

# response.json() 获取响应体的json字典数据

# response.content 获取响应体的二进制数据

img_content = requests.get(url=img_url, headers=headers).content

# 'img' 文件路径 name 文件名字 '.jpg' 文件后缀 >>> 文件名

# mode 保存方式 wb 二进制模式写入

# as 重命名 为 f

filename = 'img_1'

if not os.path.exists(filename):

os.mkdir(filename)

with open(filename + name + '.jpg', mode='wb') as f:

f.write(img_content) # 写入数据

print('正在保存: ', name)

def get_beauty(img_base64):

host = 'https://aip.baidubce.com/oauth/2.0/token'

data = {

'grant_type': 'client_credentials',

'client_id': 'vXONiwhiVGlBaI2nRRIYLgz5',

'client_secret': 'ouZMTMuCGLi7pbeg734ftNxn9h3qN7R4'

}

response = requests.get(url=host, params=data)

token = response.json()

# print(token)

'''

人脸检测与属性分析

'''

request_url = f"https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token={token}"

params = {

"image": img_base64, # 需要传递 图片 base64

"image_type": "BASE64",

"face_field": "beauty"

}

headers = {'content-type': 'application/json'}

response = requests.post(request_url, data=params, headers=headers)

try:

beauty = response.json()

return beauty

except:

return '识别失败'

# f = open('imgDX丶软软.jpg', mode='rb') # 读取一张图片内容

# 转成base64内容

# img_base64 = base64.b64encode(f.read())

# 1. 获取所有图片

lis =

files = os.listdir('img_1')

print('正在识别人脸, 颜值检测中, 请稍后.....')

for file in tqdm(files):

img_file = 'img_1' + file

img_name = file.split('.')

# print(img_file)

f = open(img_file, mode='rb') # 读取一张图片内容

img_base64 = base64.b64encode(f.read())

beauty = get_beauty(img_base64)

if beauty != '识别失败':

dit = {

'主播': img_name,

'颜值': beauty,

}

lis.append(dit) # 把字典添加到空列表里面

# print(f'{img_name}颜值评分是{beauty}')

lis.sort(key=lambda x:x, reverse=True)

num = 1

# 前10张照片的颜值排名

for index in lis:

print(f'颜值排名第{num}的是{index}, 颜值评分是{index}')

num += 1

尾语

好了,我的这篇文章写到这里就结束啦!

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(? ?_?)?

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!