手把手教你實現人臉識別,有手就行

leida777發表於2022-03-09

應用領域

金融領域。人臉識別當前在金融領域的應用最為廣泛,當前國內金融領域監管要求嚴格,金融相關產品都需要實名認證,並且具有較高的安全性要求,活體識別,銀行卡ocr識別,身份證ocr識別,人證對比等在各大手機銀行,金融app,保險app等都已經成為不可或缺的一個環節

安保領域。目前大量的企業,住宅,社群,學校等安全管理越來越普及,人臉門禁系統已經成為非常普及的一種安保方式。

通行領域。很多城市的火車站已經安裝了人臉識別通行裝置,進行人證對比過檢,有些城市的地鐵站也可以透過人臉識別的方式進行地鐵進出站通行。

泛娛樂領域。現在市場上火爆的美顏相機,網路直播,短影片等都是建立在人臉識別的基礎上對人臉進行美顏和特效處理。

公安,司法領域。公安系統在追捕逃犯時也會利用人臉識別系統對逃犯進行定位,監獄系統目前也會對服刑人員透過人臉識別系統進行報警和安防

自助服務裝置。如銀行的自動提款機,無人超市等。

考勤及會務。如工作考勤,會議出席人臉牆等。目前人臉識別市場上的巨頭主要有商場,也有很多領域內巨頭公司投資的小公司。

第一步:匯入模組

dlib模組安裝其實是比較繁瑣的,要認真耐心點,可以參考:dlib安裝,如果不行再看看別的教程。


import sys

import cv2

import face_recognition #dlib 人臉識別庫


第二步:載入圖片並數值化

測試圖片為我的偶像:

face_img=face_recognition.load_image_file('1.png')

print(face_img)


列印結果:

在這裡插入圖片描述

輸出為三維影像矩陣,把影像轉為矩陣。

第三步:獲取圖片中的人臉資料

提取人臉特徵編碼,並獲取到人臉五官的位置:

face_encodings=face_recognition.face_encodings(face_img)#進行特徵提取向量化,獲取人臉的編碼

face_locations=face_recognition.face_locations(face_img)#五官對應的位置

print(face_encodings)


圖片中有幾個人臉就有幾個陣列:

在這裡插入圖片描述

第四步:人數計算

這裡只做判斷兩個人是否為一個人,超出兩個就退出了

n=len(face_encodings)

print(n)

#這裡只做判斷兩個人是否為一個人,超出兩個就退出了

if n>2:

    print('超過兩個人')

    sys.exit()


列印可以分出是兩個人:

在這裡插入圖片描述


第五步:人臉比較

#獲取兩個人的資料

face1=face_encodings[0]

face2=face_encodings[1]


result=face_recognition.compare_faces([face1],face2,tolerance=0.6)#人臉比較,,誤差不超過0.6則可以,預設值也為0.6

print(result)


返回:

在這裡插入圖片描述

判斷出為不是同一個人。
再稍微修改一下,讓表達更清楚:

if result==[True]:

    name='same'

    print('兩個人為同一個人')

else:

    print('兩者不是同一個人')

    name='different'


返回:

在這裡插入圖片描述

第六步:框出人臉寫上文字

獲取兩個人臉位置座標:

for i in range(len(face_encodings)):

    face_encoding=face_encodings[(i-1)] #倒序獲取

    face_location = face_locations[(i - 1)]

    print(face_location)#獲取人臉位置


返回:

在這裡插入圖片描述

元祖四個數值分別表示框人臉矩形框的四個點座標。

獲取到座標後開始畫框框並寫上文字:

top,right,bottom,left=face_location#確定出座標

    #畫框框

    cv2.rectangle(face_img,(left,top),(right,bottom),(255,0,0))#傳參分別為:圖片,座標,RGB顏色,框粗細

    #寫字上去

    cv2.putText(face_img,name,(left-10,top-10),cv2.FONT_HERSHEY_DUPLEX,0.8,(255,255,0),2)#傳引數分別為:圖片,文字,座標,字型,字型大小,顏色,粗細


第七步:顯示處理好的影像

face_img_rgb=cv2.cvtColor(face_img,cv2.COLOR_BGR2RGB)#確保顏色不要混亂

#展示影像

cv2.imshow('compare',face_img_rgb)

#設定等待關閉

cv2.waitKey(0)


效果:

在這裡插入圖片描述

你只需要按步驟敲程式碼即可為全部程式碼,當然為了便於大家直接cv,程式碼展示如下:

# coding=gbk

"""

作者:川川

公眾號:玩轉大資料

@時間  : 2022/2/5 14:36

群:428335755

"""

import sys

import cv2

import face_recognition #dlib 人臉識別庫



face_img=face_recognition.load_image_file('1.png')

# print(face_img)


face_encodings=face_recognition.face_encodings(face_img)#進行特徵提取向量化,獲取人臉的編碼

face_locations=face_recognition.face_locations(face_img)#五官對應的位置

# print(face_encodings)


n=len(face_encodings)

print(n)

#這裡只做判斷兩個人是否為一個人,超出兩個就退出了

if n>2:

    print('超過兩個人')

    sys.exit()


#獲取兩個人的資料

face1=face_encodings[0]

face2=face_encodings[1]


result=face_recognition.compare_faces([face1],face2,tolerance=0.6)#人臉比較,,誤差不超過0.6則可以,預設值也為0.6

# print(result)

if result==[True]:

    name='same'

    print('兩個人為同一個人')

else:

    print('兩者不是同一個人')

    name='different'



for i in range(len(face_encodings)):

    face_encoding=face_encodings[(i-1)] #倒序獲取

    face_location = face_locations[(i - 1)]

    # print(face_location)#獲取人臉位置


    top,right,bottom,left=face_location#確定出座標

    #畫框框

    cv2.rectangle(face_img,(left,top),(right,bottom),(255,0,0))#傳參分別為:圖片,座標,RGB顏色,框粗細

    #寫字上去

    cv2.putText(face_img,name,(left-10,top-10),cv2.FONT_HERSHEY_DUPLEX,0.8,(255,255,0),2)#傳引數分別為:圖片,文字,座標,字型,字型大小,顏色,粗細


face_img_rgb=cv2.cvtColor(face_img,cv2.COLOR_BGR2RGB)#確保顏色不要混亂

#展示影像

cv2.imshow('compare',face_img_rgb)

#設定等待關閉

cv2.waitKey(0)


標出了兩個人臉並寫上為different,就是不同的意思,當然本篇文章為了給大家簡單介紹實現 人臉識別,並沒有做過多的複雜實現,近段時間我研究人臉識別也做了一些複雜的功能實現,感興趣也可以一起聊聊。

更高階的人臉識別專案



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014825/viewspace-2868779/,如需轉載,請註明出處,否則將追究法律責任。

相關文章