一、程序说明

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 BaiduFaceIdentifyclass BeautyRank():def __init__(self):self.db_conn = sqlite3.connect('beauty_rank.db')self.db_cursor = self.db_conn.cursor()self.model_count = 0self.bfi = BaiduFaceIdentify()passdef 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/',}# 访问明星名单urlresponse = requests.get(name_list_url,headers=headers,timeout=10)if response.status_code != 200:logging.warning(f"请求失败:{response.status_code}")return Falsesel = 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 += 1try: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,'360')except:logging.warning(f'\r\n{count}/{star_counts}:{star_name}出现错误')continuedef 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 nameimg_frames_key = 'items'# 下边从明星图片中抽取图片具体url的key nameimg_url_key = 'pic_url'elif search_engine == '360':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'# 访问搜索引擎,获取明星图片urltry:response = requests.get(star_img_ajax_request_url, headers=headers, timeout=10)if response.status_code != 200:logging.warning('请求出错:%s' % response.status_code)return Falsejson_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()passif __name__ == '__main__':# 明星名单urlname_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 timeclass 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_secretresponse_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_facesdef parse_face_pic(self,url_pic):#调用get_access_token获取access_tokenaccess_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.0else: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.0else: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)

View Code

百度AI认为最漂亮的中国女星是----范冰冰相关推荐

  1. 两大权威机构点赞百度AI,“技术为王”时代的中国旗帜

    全球AI市场有着什么样的新格局? 先是<哈佛商业评论>中文版发布的<人工智能专项调研报告>,通过大规模的调研给出了回答:国际权威咨询机构沙利文又在<2019年中美人工智能 ...

  2. 百度AI攻坚战:PaddlePaddle中国突围

      作者 | 阿司匹林 出品 | AI科技大本营(ID:rgznai100) 2013年,百度开始研发深度学习框架PaddlePaddle,搜索.凤巢CTR预估上线DNN模型. 2016年,在百度世界 ...

  3. AI+工业互联网:百度AI专利讲述“中国智造”

    工业是国民经济的主导产业.随着人工智能(AI)与工业互联网的加速融合,工业迈向数字化.网络化.智能化,中国制造转向"中国智造",为国民经济高质量发展注入了新动能. 从工业互联网的提 ...

  4. 这届百度AI究竟什么水平?

    2019-12-16 14:16:41 乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 这届百度AI究竟啥水平? 作为布局最早.声量最高,也最受国内外关注的中国头号玩家,此问已非一日. ...

  5. 李彦宏的百度 AI 落地战略,由王海峰来实现

    雷锋网消息,2019 年 9 月 2 日,百度董事长兼 CEO 李彦宏在内部信中宣布,将进一步升级 " 云 + AI" 战略,同时百度智能云与 CTO 高效融合,百度副总裁.百度智 ...

  6. 落地三大产业,深耕两个领域,百度AI的这一年|李彦宏乌镇行

    在去年的乌镇世界互联网大会上,李彦宏提到了无人驾驶.智能城市,希望 AI 应用到各行各业.今天,他就带着百度 AI 过去一年里的落地成果,又一次来到了乌镇. 在人工智能论坛上,他发表了主题为" ...

  7. 【学习求职必备】百度AI和它的7大AI黑科技

    jenny 在读研究生一枚~ 作者 | jenny 编辑 | jenny 接着上一篇介绍国内的重要研究院,这是第二期的介绍,也是国内最大的AI生态 01 简介 百度研究院隶属于百度AI技术平台体系(A ...

  8. GPU算力免费用?百度AI Studio两周年惊喜活动开启

    对于开发者而言,两年意味着什么呢? 两年也可能让一个算法从领先时代到被时代领先:两年可以伴随一家籍籍无名的公司,成长为业内的一匹黑马:两年,也可以让一个初出茅庐的AI平台摇身一变成为中国AI人才培养的 ...

  9. 百度AI达人创造营之创意的起源

    百度AI达人创造营之"创意的起源" 文章目录 百度AI达人创造营之"创意的起源" 前言 一.关于飞桨及本次课程 二.创意从哪来呢? 1. 娱乐是生活的一部分(P ...

  10. 做百度AI工程师,还要会“相牛”?

    百度 AI 工程师每年春暖花开就去养牛场,做什么? 三年前,一通来自蓝奥云牧股份总裁王永生的电话,将百度 AI 工程师阿权吸引到了通辽这个素有"内蒙古粮仓"和"黄牛之乡& ...

最新文章

  1. Java Socket传输数据的文件系统介绍
  2. Java ConcurrentModificationException异常原因和解决方法
  3. 执行计划--为查询指定查询计划
  4. MySQL SQL的概述
  5. 高仿真的类-BeanWrapper
  6. iOS开发Drag and Drop简介
  7. 3d打印 路径规划_3D打印螺旋桨技术的应用和挑战
  8. sqlserver中自定义函数+存储过程实现批量删除
  9. 二叉树中进行 BFS 和图中进行 BFS 最大的区别
  10. cesium 球体半倾斜角度
  11. “21天好习惯”第一期-18
  12. SVM多分类原理学习
  13. java实现 GB35114 sip AuthorizationHeader遇到的一个小坑
  14. jquery+baidu map api 仿安居客地图找房源(基于百度地图)
  15. 使用AForge录制视频
  16. 电子商务类网站CDN加速方案
  17. c语言三维空间间绕坐标轴变换,浙江大学软件学院三维动画与交互技术考试概念拾掇...
  18. EOS区块链一周要闻回顾(2.24-3.01)
  19. Python编程基础题(2-求一元二次方程的解Ⅱ)
  20. 2020PAT甲级秋季7-4 Professional Ability Test (30分)

热门文章

  1. C什么k什么_K线基础——什么是MACD?
  2. #STM32 LCD12864编程即原理介绍
  3. python自动批量发邮件脚本_python自动发送邮件脚本
  4. Excel使用VBA自动调整列宽
  5. “C:\Users\用户名\AppData\里面的文件是什么?可以删除么??
  6. Window.iso镜像文件下载
  7. rep的软件用什么打开_rep文件用什么软件打开
  8. 【网络营销】CPA、CPS、CPM、CPT、CPC 是什么
  9. 永久免费的域名注册有吗?免费的域名注册在哪个平台?
  10. java 视频提取音频 | Java工具类