1. 程式人生 > >互聯網之無所遁形!

互聯網之無所遁形!

人臉比較 python



其實一直對電影裏面的對犯人進行人臉匹配然後,刷出來犯人信息很感興趣,今天晚上一時興起,就搞了一把小的。

理論上:你可以建立一個你感興趣的百萬級的數據庫,給你個照片 ,你就可以得到她是誰,哪裏的,信息都可以知道,而且因為人與人之間的網狀的關聯,你甚至可以知道她喜歡的人是誰,男朋友長啥樣子。

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

思路:

一、數據收集,可以采用爬蟲對網上海裏的明星信息進行有針對的爬取

二、格式化數據,存入mysq,把明星的自拍照的文件名存入數據庫中

三、使用百度的api對程序進行編寫,說實話,百度人臉識別做的很棒了,精確度很高

四、你上傳一張圖片(或者你能想象到的方式),後面的程序會對你海量的數據庫中人的信息進行比對

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


直接上代碼:

# 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 = "https://aip.baidubce.com/rest/2.0/face/v2/match"
    # 二進制方式打開圖文件
    f = open(image01, ‘rb‘)
    # 參數images:圖像base64編碼
    img1 = base64.b64encode(f.read())
    # 二進制方式打開圖文件
    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)+"   很有可以能是同一個人"
        #    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


需要改進的:

01、數據量太少

02、程序太醜


本文出自 “付煒超” 博客,謝絕轉載!

互聯網之無所遁形!