百度AI认为最漂亮的中国女星是----范冰冰
一、程序说明
1.1 程序说明
之前写调用百度AI接口的程序,然后刷到了两条明星的新闻,就想到了写个给明星颜值排下名的程序。
程序的关键点是两个,第一个是百度AI接口的调用这点其实直接使用早前实现的类所以没有费什么劲(见Python3+BaiduAI识别高颜值妹子图片)。
第二个是怎么个排法,这个问题还比较大可以分成几个点,第一点是排哪些明星,有哪些明星我也不是很清楚就随便百度一下然后用了这个网站的名单:https://123fans.cn/rank.php?c=2
第二个点是去哪里取图片,开始想的是从百度异步加载图片接口取图片但是发现百度用了一些防止这种操作的措施返回的结果列表直接访问会返回403,再分析一阵应该可以处理上selenium硬刚应该也可以但是没必要,换用了搜狗的。结果看到排第一的是范女皇,又加了一个360的排名有了些变化但总的排第一的还是范女皇。第一就第一吧我也不那么在意。
所以现的程序流程就是:从一个网页中取回明星名单----for循环名单列表----到搜狗和360各取一次ajax(大概各40张)----将每张图片传到百度AI接口----获取AI接口评分存入数据库。
1.2 程序结果说明
百度AI评分排行前99名:
百度AI评分最高二十张图片(AI思想出了问题,慎点):
方数真----97.77404785----sougou----http://s4.sinaimg.cn/mw690/001TftpDzy6JKwGUAAb33&690
陈紫函----97.15953064----360----http://images.rednet.cn/articleimage/2010/10/12/1129069853.jpg
杨幂----96.82311249----sougou----http://img5q.duitang.com/uploads/item/201505/12/20150512211001_5uvdh.jpeg
甘婷婷----96.7035675----360----http://s10.sinaimg.cn/mw690/5330f076gd6c34d9b4a29&690
张馨予----96.45571899----sougou----http://s8.sinaimg.cn/mw690/001AxaSkgy6VfYILP3pa7&690
孟子义----96.44942474----360----http://upload.qianhuaweb.com/2016/0830/1472529588682.jpg
范冰冰----95.78607178----sougou----http://p5.qhimg.com/t01d29f433bf172993e.png
张萌----95.58099365----sougou----http://himg2.huanqiu.com/attachment2010/2017/0219/20170219021506253.jpg
杨子姗----95.5355835----sougou----http://www.marubi.cn/vancheerfile/images/2017/3/2017030809597975.jpg
穆婷婷----95.47248077----sougou----http://img.cechoice.com/2016/03/24/201603241349he6ke.500x749.jpg
穆婷婷----95.35915375----sougou----http://img.cechoice.com/2016/03/24/201603241355gd6jd.500x749.jpg
范冰冰----95.2871933----360----http://pic16.nipic.com/20110915/8042943_090150767000_2.jpg
张萌----95.12875366----sougou----http://s8.sinaimg.cn/mw690/0041rhFZzy768ajttf927&690
蒋梦婕----94.87149048----360----http://img1.gtimg.com/ent/pics/hv1/52/109/1370/89112097.jpg
杨幂----94.79195404----sougou----http://cdn.duitang.com/uploads/item/201510/06/20151006152520_Eca3e.jpeg
赵丽颖----94.52903748----360----http://pic1.win4000.com/wallpaper/a/51a845cf17335.jpg
杨幂----94.52243042----360----http://img4.guang.j.cn/g5/M02/C7/76/wKghslZ_uXLT9fwLAADH7H3o2kY14.jpeg!q.50
江语晨----94.43437958----sougou----http://www.ttpaihang.com/image/vote/20111107092812512110.jpg
陈紫函----94.32379913----360----http://news.youth.cn/yl/201307/W020130726332937171156.jpg
江疏影----94.25344086----sougou----http://img0.ph.126.net/8s_MG7gI11mRTMu2W0MGiA==/6631915489163583882.jpg
二、程序源码
主程序源代码(beauty_rank.py):
import time
import json
import logging
import sqlite3
import requests
from lxml import etree
from urllib.parse import quote
from BaiduFaceIdentify import BaiduFaceIdentify class BeautyRank():
def __init__(self):
self.db_conn = sqlite3.connect('beauty_rank.db')
self.db_cursor = self.db_conn.cursor()
self.model_count = 0
self.bfi = BaiduFaceIdentify()
pass def request_name_list_url(self,name_list_url):
headers = {
'Host': '123fans.cn',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://www.ugirls.com/Models/',
}
# 访问明星名单url
response = requests.get(name_list_url,headers=headers,timeout=10)
if response.status_code != 200:
logging.warning(f"请求失败:{response.status_code}")
return False
sel = etree.HTML(response.text)
# 获取明星名单列表
name_lists = sel.xpath('//div[@id="main"]//div[@class="ranking"]//td[@class="name"]//a/text()')
star_counts = len(name_lists)
count = 0
# 遍历明星名单
for star_name in name_lists:
count += 1
try:
logging.warning(f'\r\n开始采集{count}/{star_counts}:{star_name}')
# 通过搜狗获取明星图片
self.request_and_parse_star_img(star_name,'sougou')
# 通过360获取明星图片
self.request_and_parse_star_img(star_name,'')
except:
logging.warning(f'\r\n{count}/{star_counts}:{star_name}出现错误')
continue def request_and_parse_star_img(self, star_name, search_engine):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'X-Requested-With': 'XMLHttpRequest',
'Connection': 'close',
}
# 根据要求使用的搜索引擎构建请求的url和完善头部信息
if search_engine == 'sougou':
star_img_ajax_request_url = f'http://pic.sogou.com/pics?query={quote(star_name)}&mode=1&start=96&reqType=ajax&reqFrom=result&tn=0'
headers['Host'] = 'pic.sogou.com'
headers['Referer'] = 'http://pic.sogou.com/pics?ie=utf8&p=40230504&interV=kKIOkrELjboMmLkEk7kTkKILlLELjboLmLkEkrgTkKIMkrELjboImLkEk74TkKILmrELjb8TkKIKmrELjbkI_1093829215&query=%E8%B5%B5%E4%B8%BD%E9%A2%96&'
# 下边从json_results中抽取明星图片列表的key name
img_frames_key = 'items'
# 下边从明星图片中抽取图片具体url的key name
img_url_key = 'pic_url'
elif search_engine == '':
star_img_ajax_request_url = f'http://image.so.com/j?q={quote(star_name)}&src=tab_www&correct={quote(star_name)}&pn=60&ch=&sn=120&sid=af5aac1212d41c3b5cd6a96a0c311ba2&ran=0&ras=0&cn=0&gn=10&kn=50'
headers['Host'] = 'image.so.com'
headers['Referer'] = 'http://image.so.com/i?q=%E8%B5%B5%E4%B8%BD%E9%A2%96&src=tab_www'
img_frames_key = 'list'
img_url_key = 'img'
# 访问搜索引擎,获取明星图片url
try:
response = requests.get(star_img_ajax_request_url, headers=headers, timeout=10)
if response.status_code != 200:
logging.warning('请求出错:%s' % response.status_code)
return False
json_results = json.loads(response.text)
except:
return False
# 遍历图片列表,调用百度AI接口并接收图片颜值
for img_frame in json_results[img_frames_key]:
img_url = img_frame[img_url_key]
logging.warning(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}开始识别:{img_url}')
try:
beauty_value = self.bfi.parse_face_pic(img_url)
except:
logging.warning('百度识别出现错误')
continue
# 如果颜值没有问题则插入数据库
if beauty_value > 1.0:
logging.warning(
f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}即将插入数据库({search_engine}):{star_name}-{beauty_value}-{img_url}')
self.insert_into_database(star_name, beauty_value, img_url,search_engine)
return True # 此函数用于将结果插入数据库
def insert_into_database(self,star_name,beauty_value,img_url,search_engine):
# 如果表star_beauty_value不存在则先创建
sql = '''create table if not exists star_beauty_value(star_name text,beauty_value int,img_url text,search_engine text)'''
self.db_cursor.execute(sql)
self.db_conn.commit()
# 将结果插入数据库
sql = f'''insert into star_beauty_valuex values('{star_name}','{beauty_value}','{img_url}','{search_engine}')'''
self.db_cursor.execute(sql)
self.db_conn.commit() def __del__(self):
self.db_cursor.close()
self.db_conn.close()
pass if __name__ == '__main__':
# 明星名单url
name_list_url = 'https://123fans.cn/rank.php?c=2'
# 实例化
beauty_rank = BeautyRank()
beauty_rank.request_name_list_url(name_list_url)
百度AI图像识别接口调用代码(BaiduFaceIdentify.py):
import base64
import requests
import json
import logging
import time class BaiduFaceIdentify():
#此函数用于获取access_token,返回access_token的值
#此函数被parse_face_pic调用
def get_access_token(self):
client_id = 'KuLRFhTzX3zBFBSrbQBsl6Q4' #此变量赋值成自己API Key的值
client_secret = '8ahbIb2hEOePzXhehw9ZDL9kGvbzIHTU' #此变量赋值成自己Secret Key的值
auth_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret response_at = requests.get(auth_url,timeout=10)
json_result = json.loads(response_at.text)
access_token = json_result['access_token']
return access_token #此函数进行人脸识别,返回识别到的人脸列表
#此函数被parse_face_pic调用
def identify_faces(self,url_pic,url_fi):
headers = {
'Content-Type': 'application/json; charset=UTF-8'
}
# 因为提交URL让baidu去读取图片,总是返回图片下载错了
# 所以我们这里将读取URL指向的图片,将图片转成BASE64编码,改用提交BASE64编码而不是提交URL
# pic_obj = urllib.request.urlopen(url_pic)
# pic_base64 = base64.b64encode(pic_obj.read())
response = requests.get(url_pic,timeout=10)
pic_base64 = base64.b64encode(response.content)
post_data = {
# 'image': url_pic,
# 'image_type' : 'URL',
'image': pic_base64,
'image_type': 'BASE64',
'face_field': 'facetype,gender,age,beauty', #expression,faceshape,landmark,race,quality,glasses
'max_face_num': 1
}
logging.warning(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}即将识别b2:{url_pic}')
response_fi = requests.post(url_fi,headers=headers,data=post_data,timeout=10)
json_fi_result = json.loads(response_fi.text)
# 有些图片是没有人脸的,或者识别有问题,这个我们不细管直接捕获异常就返回空列表
try:
# if json_fi_result['result'] is None:
# return []
# else:
return json_fi_result['result']['face_list']
except Exception:
return []
#下边的print也许是最直观,你最想要的
#print(json_fi_result['result']['face_list'][0]['age'])
#print(json_fi_result['result']['face_list'][0]['beauty']) #此函数用于解析进行人脸图片,返回图片中人物颜值
#此函数调用get_access_token、identify_faces
def parse_face_pic(self,url_pic):
#调用get_access_token获取access_token
access_token = self.get_access_token()
# access_token = '24.69a8b9206b4989703e38f4fb92878127.2592000.1534075146.282335-11407672'
url_fi = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' + access_token
#调用identify_faces,获取人脸列表
logging.warning(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}开始识别b1:{url_pic}')
json_faces = self.identify_faces(url_pic,url_fi)
# 如果没有人脸,那么就以0.0为颜值评分返回
if len(json_faces) == 0:
# logging.warning('未识别到人脸')
return 0.0
else:
for json_face in json_faces:
logging.debug('种类:'+json_face['face_type']['type'])
logging.debug('性别:'+json_face['gender']['type'])
logging.debug('年龄:'+str(json_face['age']))
logging.debug('颜值:'+str(json_face['beauty']))
# 如果识别到的不是妹子,也以1.0为颜值评分返回
# 如果识别到的是妹子,直接以值颜值返回
if json_face['gender']['type'] != 'female':
# logging.info('图片不是妹子')
return 1.0
else:
return json_face['beauty'] if __name__ == '__main__':
#uil_pic赋值成自己要测试的图片的url地址
url_pic = 'http://pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvdXNlcmltYWdlMy4zNjBkb2MuY29tLzEzLzA1MDkvMDUvNjYyMjAxMF8yMDEzMDUwOTA1Mzk0NjA4MDMuanBn.jpg'
bfi = BaiduFaceIdentify()
bfi.parse_face_pic(url_pic)
百度AI认为最漂亮的中国女星是----范冰冰的更多相关文章
- 逆天!百度AI音箱重磅升级:最大梦想实现
7月3日-7月4日,“Baidu Create 2019”百度AI开发者大会,在中国北京·国家会议中心举行. 百度创始人.董事长兼首席执行官李彦宏将与百度各业务板块的领军人物一起,为来自全球各地的开发 ...
- 了解人工智能?-百度AI
了解人工智能? 什么是人工智能? 由人创造的"智慧能力",同样具备智慧生物的能力 耳朵=倾听=麦克风=语音识别 ASR Automatic Speech Recognition 嘴 ...
- 百度AI开放平台- API实战调用
百度AI开放平台- API实战调用 一. 前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...
- 百度AI技术QQ群
百度语音QQ群 648968704 视频分析QQ群 632473158 DuerOSQQ群 604592023 图像识别QQ群 649285136 文字识别QQ群 631977213 理解与交互技术U ...
- 初探机器学习之使用百度AI服务实现图片识别与相似图片
一.百度云AI服务 最近在调研一些云服务平台的AI(人工智能)服务,了解了一下阿里云.腾讯云和百度云.其中,百度云提供了图像识别及图像搜索,而且还细分地提供了相似图片这项服务,比较符合我的需求,且百度 ...
- 基于百度AI开放平台的人脸识别及语音合成
基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜 ...
- 人工智能-调百度AI接口+图灵机器人
1.登陆百度AI的官网 1.注册:没有账号注册 2.创建应用 3.创建应用 4.查看应用的ID 5.Python代码 from aip import AipSpeech APP_ID = " ...
- PHP百度AI的OCR图片文字识别
第一步可定要获取百度的三个东西 要到百度AI网站(http://ai.baidu.com/)去注册 然后获得 -const APP_ID = '请填写你的appid'; -const API_KEY ...
- Python通过百度Ai识别图片中的文字
版本:python3.7 工作中有需要识别图片中的汗字,查看了半天大神们的博客,但没找到完全可以用的源码,经过自己的实践,以下源码可以实现: 创建应用 首先你需要登录百度AI,选择文字识别,创建一个应 ...
随机推荐
- R语言学习 - 非参数法生存分析--转载
生存分析指根据试验或调查得到的数据对生物或人的生存时间进行分析和推断,研究生存时间和结局与众多影响因素间关系及其程度大小的方法,也称生存率分析或存活率分析.常用于肿瘤等疾病的标志物筛选.疗效及预后的考 ...
- Tomcat日志系统详解
综合:Tomcat下相关的日志文件 Cataline引擎的日志文件,文件名catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的 ...
- ipconfig/all参数解析
本人是在搭建虚拟机时经常需要用到ipconfig/all名称查看宿主机的配置,但是对于该命令下的一些设置经常弄混,所以就花了点时间研究了一下. 参考文献:https://www.cnblogs.com ...
- Python 循环与定义函数
break for i in range(10): if i == 2: break print i 0 1 continue for i in range(10): if i == 2: conti ...
- linux c/c++ 获取文件大小
linux c/c++ 获取文件大小 #include <sys/stat.h> int FileSize(const char* fname) { struct stat statbuf ...
- 学习笔记37—WIN7系统本地连接没有有效的IP地址 电脑本地连接无有效ip配置怎么办
WIN7系统本地连接没有有效的IP地址 电脑本地连接无有效ip配置怎么办 家中有两台笔记本都有无线网卡,现在想让两台笔记本都能够上网,而又不想购买路由器,交换机等设备,这个时候怎么办呢? 其实只要进行 ...
- 学习笔记35—大话 Word和Excel
1.word中,加粗表格线条:设计---->笔画粗细. 2.Excel中,冻结某一行:点击工具栏中的视图→冻结空格→冻结单元格. 3.word中,输入卡方符号:插入----> 符号 --- ...
- 算法笔记--FFT
推荐阅读资料:算法导论第30章 本文不做证明,详细证明请看如上资料. FFT在算法竞赛中主要用来加速多项式的乘法 普通是多项式乘法时间复杂度的是O(n2),而用FFT求多项式的乘法可以使时间复杂度达到 ...
- Codeforces 458C - Elections
458C - Elections 思路: 三分凹形函数极小值域 代码: #include<bits/stdc++.h> using namespace std; #define ll lo ...
- c# 静态构造函数与私有构造函数共存
在使用静态构造函数的时候应该注意几点: 1.静态构造函数既没有访问修饰符,也没有参数.因为是.NET调用的,所以像public和private等修饰符就没有意义了. 2.是在创建第一个类实例或任何静态 ...