• <div id="kusac"></div>
  • <div id="kusac"></div><sup id="kusac"></sup>
    <sup id="kusac"></sup><li id="kusac"><ins id="kusac"><strong id="kusac"></strong></ins></li>
    <dl id="kusac"></dl>
    <dl id="kusac"></dl>
  • <div id="kusac"></div>
  • python实现明星专家系统,刷脸识人。

    100000+ 2019-03-27 15:33 吸血芭比

    微信扫一扫
    分享到朋友圈

    点击上方"python宝典",关注获取python全套视频,

    技术文章第一时间送达!

    其实一直对电影里面的对×××进行人脸匹配然后,刷出来×××信息很?#34892;?#36259;,今天晚上一时兴起,就搞了一把小的。

    理论上:你可以建立一个你?#34892;?#36259;的百万级的数据库,给你个照片 ,你就可以得到她是谁,哪里的,信息都可以知道,而且因为人与人之间的网状的关联,你甚至可以知道她喜欢的人是谁,?#20449;?#21451;长啥样子。

    想信我:一切都不是虚构的,你能做的更多!

    思路:

    一、数据收集,可以采用爬虫对网上海里的明星信息进行有针对的爬取

    二、格?#20132;?#25968;据,存入mysq,把明星的***照的文件名存入数据库中

    三、使用百度的api对程序进行编写,说实话,百度人脸识别做的很棒了,精确度很高

    四、你上传一张图片(或者你能想象到的方式),后面的程序会?#38405;?#28023;?#24247;?#25968;据库中人的信息进行比对

    五、输出匹配到的人的信息,和相似度的数值。

    直接上代***:

    # encoding:utf-8`
    import base64
    import urllib
    import urllib2
    import simplejson as json
    from  os import listdir
    import MySQLdb
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')

    def conmysql():
        conn= MySQLdb.connect(
            host='localhost',
            port = 3306,
            user='root',
            passwd='123456',
            db ='xxnlove',
            charset='utf8'
            )
        #cur = conn.cursor()
        return conn

    '''
    人脸比对接口
    '''


    def facecompar(image01,image02):
        matchUrl = "http://aip.baidubce.com/rest/2.0/face/v2/match"
        # 二进?#21697;?#24335;打开图文件
        f = open(image01, 'rb')
        # 参数images:图像base64编***
        img1 = base64.b64encode(f.read())
        # 二进?#21697;?#24335;打开图文件
        f = open(image02, 'rb')
        # 参数images:图像base64编***
        img2 = base64.b64encode(f.read())
        # 参数images:图像base64编***,多张图片半角逗号分隔
        params = {
            "images": img1 + ',' + img2}
        params = urllib.urlencode(params)
        access_token = '24.1a060b87a0dfcab77317999d.25922220.1505832798.282335-10029360'
        matchUrl = matchUrl + "?access_token=" + access_token
        request = urllib2.Request(url=matchUrl, data=params)
        request.add_header('Content-Type''application/x-www-form-urlencoded')
        response = urllib2.urlopen(request)
        content = response.read()
        if content:
            content = json.loads(content)
            similar=content['result'][0]['score']
            return similar
            #if similar >80:
                #print "两张图片的相似度为"+str(similar)+"   很有可?#38405;?#26159;同一个人"
            #    return similar
            #else:
            #    #print "两张图片的相似度为:"+str(content['result'][0]['score'])
            #    return similar
    def compare():
        similarlist=[]
        similardict={}
        for img in listdir('./star/'):
            similarvalue=facecompar('compar.jpg','./star/'+img)
            similarlist.append(similarvalue)
            similardict[similarvalue]=img
        return similarlist,similardict

    if __name__=="__main__":
        similarlist,similardict=compare()
        similarkey=sorted(similarlist)[-1]
        starname=similardict[similarkey] 
        conn = conmysql()
        cur = conn.cursor()
        sql="select * from face where iamge='%s'" % starname
        cur.execute(sql)
        results = cur.fetchall() 
        print "一共对数据库进行比对了"+str(len(similarlist))+"条信息"
        for info in results:
            print "匹配到明星的信息:"+ info[0],info[1],info[2],"相似度:"+str(similarkey)
        conn.close()

    测试图片:

    因为她是我高中的时候喜欢过的明星,所以~~~~

    明星数据库:

    因为只是先把路走通,所以数据很少。

    明星的照片所在目录:

    明星照片:


    程序运行效果:

    一共对数据库进行比对了5条信息

    匹配到明星的信息:曾轶可 27 1990年1月3日出生于湖南省常德市汉寿县,创作型女歌手,演员。 相似度:63.689125061

    优化后的:

    # encoding:utf-8`
    import base64
    import urllib
    import urllib2
    import simplejson as json
    from  os import listdir
    import MySQLdb
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    import requests
    from bs4 import BeautifulSoup
    import re


    def conmysql():
        conn= MySQLdb.connect(
            host='localhost',
            port = 3306,
            user='root',
            passwd='123456',
            db ='xxnlove',
            charset='utf8'
            )
        #cur = conn.cursor()
        return conn


    def crawling(name):
        url="http://baike.baidu.com/search/word?word='%s'" % name
        response = requests.get(url)
        response.encoding = 'utf-8'
        text = response.text
        soup = BeautifulSoup(text, 'lxml')
        for infor in soup.find_all('meta')[3:4]:
            global information
            information=(infor.get('content'))
        return information

    def facecrawling(name):
        url="http://baike.baidu.com/search/word?word='%s'"  % name
        response = requests.get(url)
        response.encoding = 'utf-8'
        text = response.text
        soup = BeautifulSoup(text, 'lxml')
        imgurl = soup.img.get('src')
        try:
            response = requests.get('%s' % imgurl)
            open('./star/'+name+'.jpg''wb').write(response.content) 
        except:
            print "继续"

    '''
    人脸比对接口
    '''


    def facecompar(image01,image02):
        matchUrl = "http://aip.baidubce.com/rest/2.0/face/v2/match"
        # 二进?#21697;?#24335;打开图文件
        f = open(image01, 'rb')
        # 参数images:图像base64编***
        img1 = base64.b64encode(f.read())
        # 二进?#21697;?#24335;打开图文件
        f = open(image02, 'rb')
        # 参数images:图像base64编***
        img2 = base64.b64encode(f.read())
        # 参数images:图像base64编***,多张图片半角逗号分隔
        params = {
            "images": img1 + ',' + img2}
        params = urllib.urlencode(params)
        access_token = '24.1fba688d5a060b87a0dfcab7731.2592000.1505832798.282335-100360'
        matchUrl = matchUrl + "?access_token=" + access_token
        request = urllib2.Request(url=matchUrl, data=params)
        request.add_header('Content-Type''application/x-www-form-urlencoded')
        response = urllib2.urlopen(request)
        content = response.read()
        if content:
            content = json.loads(content)
            try:
                similar=content['result'][0]['score']
                return similar
            except:
                print image02+"照片比对有问题"
            #if similar >80:
                #print "两张图片的相似度为"+str(similar)+"   很有可?#38405;?#26159;同一个人"
            #    return similar
            #else:
            #    #print "两张图片的相似度为:"+str(content['result'][0]['score'])
            #    return similar
    def compare():
        similarlist=[]
        similardict={}
        for img in listdir('./star/'):
            similarvalue=facecompar('compar.jpg','./star/'+img)
            similarlist.append(similarvalue)
            similardict[similarvalue]=img
        return similarlist,similardict

    def stardb():
        starstr="邢佳栋 李学庆 高昊 潘粤明 戴军 薛之谦 贾宏声 于波 李连杰 王斑 蓝雨 刘恩佑 任泉 李光洁 姜文 黑龙 张殿菲 邓超 张杰 杨坤 沙溢 李茂 黄磊 于小伟 刘冠翔 秦俊杰 张琳 陈坤 黄觉 邵峰 陈旭 马天宇 杨子 邓?#36130;?nbsp;赵鸿飞 马可 黄海波 黄志忠 李晨 后弦 王挺 何炅 朱亚文 胡军 许亚军 张涵予 贾乃亮 ?#20132;?nbsp;印小天 于和伟 田亮 夏雨 李亚鹏 胡兵 王睿 保剑锋 于震 苏醒 胡夏 张丰毅 刘翔 李玉刚 ?#24544;?#36718; 袁弘 朱雨辰 丁志诚 黄征 张子健 许嵩 向鼎 陆毅 乔振宇 闫肃 李健 王啸坤 胡歌 吉杰 吴俊余 韩寒 黄海冰 魏晨 郭敬明 何晟铭 巫迪文 谢苗 郑源 欢子 文章 陈翔 井柏然 左小祖咒 含笑 *** 徐誉滕 段奕宏 李炜 罗?#34892;?nbsp;张远 李立 释小龙 大左 君君 毛宁 樊凡 周一围 于荣光 汤潮 张晓晨 吴京 山野 陈龙 侯勇 张国强 玉米提 周觅 张丹峰 俞思远 姚明 冯绍峰 陈玉建 吴建飞 郑钧 胡彦斌 李智楠 钱枫 高曙光 谢*** 陈道明 柳云龙 汪峰 陈楚生 陈思成 魏晨 马雪阳 袁*** 崔健 杜淳 林申 刘洲成 黄晓明 刘烨 张翰 杨洋 宋晓波 解小东 窦唯 姜武 陈泽宇 彭坦 张一山 李易峰 严宽 东来东往 张国立 王志文 佟大为 柏栩栩 蒲?#22270;?nbsp;凌潇肃 李行亮 毛方圆 张?#25105;?nbsp;大张伟 师洋 李幼斌 ?#29228;?nbsp;朱梓骁 武艺 杨俊毅 耿乐 钱泳辰 撒贝宁 徐峥 ?#26041;?#24076; 黄晟晟 海鸣威 汪涵 王学兵 贾一平 孙红雷 袁文康 蔡国庆 吴秀波 王栎鑫 安琥 刘心 俞灏明 张超 于小彤 张峻宁 乔任梁 朴树 赵帆 张译 聂远 张敬轩 付辛博 黄明 杜海涛 李宇春 张靓颖 周笔畅 何洁 刘亦菲 张含韵 陈好 尚雯婕 汤唯 *** 韩雪 孙?#21697;?nbsp;张?#25991;?nbsp;霍思燕 陈紫函 朱雅琼 江一燕 厉娜 许飞 胡灵 ?#36335;?#23572; 刘力扬 reborn 章子怡 谭维维 魏佳庆 张亚飞 李旭丹 孙艺心 巩贺 艾梦萌 闰妮 王蓉 *** 汤芳 牛萌萌 范冰冰 赵薇 周迅 金莎 纪敏佳 黄*** 叶一茜 马苏 阿桑 董卿 金铭 徐行 姚笛 朱妍 夏颖 陈西贝 冯家妹 高娅媛 林爽 郑靖文 陶虹 徐静蕾 黄奕 董洁 巩俐 高圆圆 于娜 孟广美 Gameapple  ***奉奉 小龙女彤彤 张子萱  果子 丁贝莉 吸血芭比 公交MM 香香 段思思 二月丫头 刘羽琦 dodolook 拉拉公主 沈丽君 周璟馨 丁叮 谢雅雯 ?#24405;?#29738; 宋琳 郭慧敏 卢洁云 佘曼妮 黄景 马*** 蒋雯丽 宁静 许晴 张静初 瞿颖 张延 孙俪 闵春晓 蔡飞雨 吴卓羲 游鸿明 胡宇崴 ***岳 汤镇业 黄立行 苗?#20219;?nbsp;周星驰 温升豪 萧敬腾 ?#36158;强?nbsp;陈汉典 郑伊健 陈国坤 张信哲 范逸臣 王绍伟 辰亦儒 张卫健 周汤豪 成龙 林志颖 苏?#20449;?nbsp;温兆伦 吴建豪 黄家驹 卢广仲 林文龙 赵又廷 *** 周传雄 李治廷 周华健 钟镇涛 周渝民 陈柏霖 邱心志 陈百强 郑元畅 王杰 狄龙 郭富城 光良 黄浩然 彭于晏 马浚伟 蓝正龙 林佑威 杜德伟 费翔 许志安 黄义达 黄耀明 ?#24405;?#38155; 王喜 黄贯中 江华 贺一航 郑少秋 蔡康永 陈伟霆 黄宗泽 刘畊宏 梁家辉 林志炫 赵文卓 樊少皇 连凯 吴镇宇 *** 吴尊 张国荣 方大同 刘松仁 郑嘉颖 周柏豪 王祖蓝 古巨基 萧正楠 邹兆龙 李铭顺 吴奇隆 金城武 李圣杰 陈建州 余文乐 罗志祥 吴启华 李克勤 秦汉 单立文 汪东城 莫少聪 陈冠希 黄秋生 罗嘉良 欧弟 马国明 范?#21442;?nbsp;阮经天 郑中基 张智霖 麦浚龙 蔡依林 张韶涵 王心凌 徐若瑄 林志玲 王菲 S.H.E Twins 徐熙媛 桂纶镁 ?#24544;?#26216; 陈乔恩 梁静茹 蔡诗芸 范玮琪 廖碧儿 张柏芝 李嘉欣 容祖儿 李玟 贾静雯 MaggieQ ?#20013;娜?nbsp;朱茵 叶璇 唐宁 曾之乔 安以轩 杨丞琳  侯佩岑 同恩 陈松伶 文颂娴 梁凯蒂 林韦君 陈思璇 曹敏莉 ?#21482;?#20799; 郑雪儿 佘诗曼 郑秀文 萧蔷  温碧霞 刘嘉玲 刘玉玲 林熙蕾 李若彤 张曼玉 关之琳 陈慧琳 萧淑慎 蔡少芬 萧?#20999;?nbsp;田丽 杨采妮 李丽珍 琦琦 天心 任港秀 *** 郭静纯 钟丽缇 孙燕姿 叶*** 翁红 邱淑贞 蔡淑臻 梁咏琪 季芹 *** 莫文蔚 戴佩妮 刘若英 杨千桦 范伟琪 徐熙娣 陈宝莲 吴辰君 张庭 林嘉欣 俞飞鸿 *** 周海媚 伊能静 蜜雪薇琪  侯湘婷 Hebe 应?#21861;?nbsp;许茹芸 吴佩慈 郑希怡 范文芳 李彩桦 蔡淳佳 本多RuRu 范晓萱 张惠妹 ?#24544;?#33714; 关心妍 卓依婷 杨恭如 陈文媛 吴小莉 ?#36153;?#33459; 林青霞 赵雅芝 孟庭苇 吴倩莲 陈慧珊 许慧欣 黎姿 周慧敏 钟楚红 蔡琴 齐豫 邓丽君 林凤娇 陈玉莲 周冰倩 杨?#33841;?nbsp;金素梅 翁美玲 高胜美 甄妮 胡慧中 邝美云 俞小凡 吕秀菱 萧芳芳 刘雪华 潘迎紫 梁雁翎 汪明荃 苏芮 冯宝宝 利智 张艾嘉 叶倩文 陈淑桦 郑裕玲 潘越云 凤飞飞 喻?#23578;?
        starslist=starstr.split()
        for star in starslist:
            inform=crawling(star)
            facecrawling(star)
            try:
                conn = conmysql()
                cur = conn.cursor()
                image=star+'.jpg'
                sql="insert into star values(%s,%s,%s)"
                cur.execute(sql,(star,inform,image))
                cur.close()
                conn.commit()
                conn.close()
            finally:
                print "connitue"
            import time
            time.sleep(1.5)


    if __name__=="__main__":
        similarlist,similardict=compare()
        similarkey=sorted(similarlist)[-1]
        starname=similardict[similarkey] 
        conn = conmysql()
        cur = conn.cursor()
        sql="select * from face where iamge='%s'" % starname
        cur.execute(sql)
        results = cur.fetchall() 
        print "一共对数据库进行比对了"+str(len(similarlist))+"条信息"
        for info in results:
            print "匹配到明星的信息:"+ info[0],info[1],info[2],"相似度:"+str(similarkey)
        conn.close()

    数据库:

    目录:

    项目总结:人脸比对对照片的有一定要求,因为我爬取的照片大小不规则,所以比对的时候,会有问题,人脸比对用的百度的api接口,感觉关键部分不是自己实现的,正在恶补数据结构和算法。

    作者:付炜超
    来源:http://blog.51cto.com/9399369/1957909




    识别图中二维***,欢迎关注python宝典

    100000+ 分享给好友
    新疆11选5 500