图片相似度识别_deepface:人脸识别\特征分析
2021微眾銀行第三屆金融科技高校技術(shù)大賽戰(zhàn)火再次蔓延,硝煙四起,伙伴約你組團來戰(zhàn)!
46萬獎金池,名企大廠實習機會隨你挑,與小伙伴一起開啟屬于你的人工智能新時代!
deepface是python的輕量級面部識別和面部屬性分析(年齡,性別,情感和種族)框架。您只需幾行代碼就可以應(yīng)用面部分析。它彌合了軟件工程和機器學(xué)習研究之間的鴻溝,非常適合想開車但不會造車的你。
開發(fā)者 Sefik Ilkin Serengil
臉部識別的步驟
face recognition pipeline?sefiks.com
偵測臉部區(qū)域(找到臉)
detect?sefiks.com
臉部方向調(diào)整
align?sefiks.com
圖片數(shù)據(jù)化(訓(xùn)練)
represent?sefiks.com
找到圖片相似度
verify?sefiks.com
所有這些復(fù)雜的前期,deepface 都在后臺運算好了。
DeepFace界面下的驗證功能可提供單張面部識別。該函數(shù)的每次調(diào)用都會構(gòu)建一個人臉識別模型,這非常耗內(nèi)存。如果要順序驗證多個面孔,則應(yīng)將面孔數(shù)組傳遞給函數(shù),而不要在for循環(huán)中調(diào)用該函數(shù)。這樣,一次就可以構(gòu)建復(fù)雜的人臉識別模型,這將極大地加快功能的速度。此外,在for循環(huán)中調(diào)用該函數(shù)可能還會導(dǎo)致內(nèi)存問題。
臉部驗證Face Verification-
Demo?youtu.be
批量臉部識別 Large scale face recognition-
Demo?youtu.be
臉部特征分析(年齡,性別,種族,表情)Facial Attribute Analysis-
Demo?youtu.be
實時視頻分析Streaming and Real Time Analysis-
Demo?youtu.be
if 打不開油管:
輕輕的告訴你:
那就接著往下看哦。
import os
os.chdir('C:/R_Py/Jupyter/deepface')
print("Current Working Directory " , os.getcwd())
path="./yangyuying/"
frames=[]
for image_db in os.listdir(path):
? ? #images=(path+"/"+image_db)
? ? ? frames.append(path+"/"+image_db)
讀取數(shù)據(jù)庫的圖片
import cv2
import matplotlib.pyplot as plt
#cv2 讀取的是GBR?
image1 = cv2.imread(frames[0])
plt.imshow(image1)
plt.imshow(image1[:, :, ::-1])
# 加上[:, :, ::-1] 改為RGB
import matplotlib.image as mpimg
#也可以直接用matplotlib.image 來讀去圖片
image2 = mpimg.imread(frames[1])
plt.imshow(image2)
from deepface import DeepFace
result= DeepFace.verify(frames[0],frames[1])
print("Is verified:",result["verified"])
?
-------------
Using VGG-Face model backend and cosine distance.?
Verification: ? 0%| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 0/1 [00:00<?, ?it/s]
Is verified: True?
{'verified': True,
?'distance': 0.1688520312309265,
?'max_threshold_to_verify': 0.4,
?'model': 'VGG-Face',
?'similarity_metric': 'cosine'}
結(jié)果是true,表明兩個圖片相似度非常高,image1 和 image2 是同一個人(楊鈺瑩)。
接下來用find來找到圖片庫里和特定照片所有的相似度(distance 越小越相似,VGG-Face 閾值是0.4)
import pandas as pd
df = DeepFace.find(img_path = image1,db_path = path)
?
--------------
?? ?identity?? ?distance
0?? ?./yangyuying//yang2.jpg?? ?0.168852
1?? ?./yangyuying//yang3.jpg?? ?0.218472
2?? ?./yangyuying//yang_mao.jpg 0.255236
讀取其中一張看看
image3 = mpimg.imread(df["identity"][1])
plt.imshow(image3)
deepface 里有多個不同的模塊來偵測臉部,其中"VGG-Face" 準確度最高。
VGG-Face,Facenet 回值為 True
OpenFace,DeepFace 回值為 False
models = ["VGG-Face", "Facenet", "OpenFace", "DeepFace"]
result2 =[]
for model in models:?
? ? result = DeepFace.verify(path + "yang1.jpeg", path +"yang2.jpg", model_name = model)
? ? result2.append(result)
?
---------------
[{'verified': True,
? 'distance': 0.1688520312309265,
? 'max_threshold_to_verify': 0.4,
? 'model': 'VGG-Face',
? 'similarity_metric': 'cosine'},
?{'verified': True,
? 'distance': 0.2785506248474121,
? 'max_threshold_to_verify': 0.4,
? 'model': 'Facenet',
? 'similarity_metric': 'cosine'},
?{'verified': False,
? 'distance': 0.1669234037399292,
? 'max_threshold_to_verify': 0.1,
? 'model': 'OpenFace',
? 'similarity_metric': 'cosine'},
?{'verified': False,
? 'distance': 0.34316086769104004,
? 'max_threshold_to_verify': 0.23,
? 'model': 'DeepFace',
? 'similarity_metric': 'cosine'}]
deepface 有3種圖片相似度算法["cosine", "euclidean", "euclidean_l2"],默認的為 Cosine。
metrics = ["cosine", "euclidean", "euclidean_l2"]
result3 = []
for metric in metrics:
? ? result = DeepFace.verify(path + "yang1.jpeg", path +"yang2.jpg",distance_metric = metric)
? ? result3.append(result)
?
---------------
[{'verified': True,
? 'distance': 0.1688520312309265,
? 'max_threshold_to_verify': 0.4,
? 'model': 'VGG-Face',
? 'similarity_metric': 'cosine'},
?{'verified': True,
? 'distance': 0.49954766,
? 'max_threshold_to_verify': 0.55,
? 'model': 'VGG-Face',
? 'similarity_metric': 'euclidean'},
?{'verified': True,
? 'distance': 0.5811232,
? 'max_threshold_to_verify': 0.75,
? 'model': 'VGG-Face',
? 'similarity_metric': 'euclidean_l2'}]
接下來就是非常實用的臉部特征分析(年齡,性別,種族,表情)
demography = DeepFace.analyze(path + "yang1.jpeg", actions = ['age', 'gender', 'race', 'emotion'])
#demographies = DeepFace.analyze(["img1.jpg", "img2.jpg", "img3.jpg"]) #analyzing multiple faces same time
print("Age: ", demography["age"])
print("Gender: ", demography["gender"])
print("Emotion: ", demography["dominant_emotion"])
print("Race: ", demography["dominant_race"])
看看結(jié)果:
Age: ?27.17988143003153
Gender: ?Woman
Emotion: ?happy
Race: ?asian
在把圖片讀出來確認下。。。
image2 = mpimg.imread(path + "yang1.jpeg")
plt.imshow(image2)
人臉識別任務(wù)可以通過幾種模型和相似性指標來處理。在此,deepface提供了一種特殊的增強和組合解決方案,以提高面部識別任務(wù)的準確性。這大大提高了準確性。人類可以在面部識別任務(wù)上獲得97.53%的分數(shù),而這種集成方法可以達到人類水平的準確度,并且可以達到98.57%的準確度。另一方面,要注意這比單個模型要慢得多。
resp_obj = DeepFace.verify(path + "yang1.jpeg", path +"yang2.jpg", model_name = "Ensemble")
df2 = DeepFace.find(img_path = path + "yang1.jpeg", db_path = path, model_name = "Ensemble")
楊鈺瑩圖片來源QQ,如有版權(quán)問題,聯(lián)系我刪除!
原文作者: Sefik Ilkin Serengil
github鏈接:
https://github.com/serengil/deepface?github.com
相關(guān)資源:非常經(jīng)典的MATLAB人臉識別程序(可顯示相似度)_diy人臉識別技術(shù)...
?
總結(jié)
以上是生活随笔為你收集整理的图片相似度识别_deepface:人脸识别\特征分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团点评基于 Flink 的实时数仓平台
- 下一篇: Navicat通过跳板机连接数据库