一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用Python寫一個(gè)人臉識(shí)別系統(tǒng)

奈因PCB電路板設(shè)計(jì) ? 來源:CSDN博客 ? 作者:Together_CZ ? 2021-08-11 10:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

face_recognition是一個(gè)強(qiáng)大、簡單、易上手的人臉識(shí)別開源項(xiàng)目,并且配備了完整的開發(fā)文檔和應(yīng)用案例,特別是兼容樹莓派系統(tǒng)。 face_recognition一經(jīng)開源發(fā)布就得到的廣泛的熱捧,使用簡單,功能強(qiáng)大成為其非常顯著的標(biāo)簽。face_recognition對(duì)于公司或者是一些工程實(shí)踐性的應(yīng)用場景來說是非常好用好上手的利器,不需要你有太多的理論基礎(chǔ)就可以比較輕松地去完成一個(gè)識(shí)別項(xiàng)目,所以今天我們專門來講解一下。

首先face_recognition項(xiàng)目開源地址是:https://github.com/ageitgey/face_recognition

網(wǎng)上有比較完整的API說明以及實(shí)例應(yīng)用,我這里就不多去說明了。首先,使用face_recognition需要安裝,可以通過pip完成。

安裝完成后就可以使用了,在編碼前可以通過簡單的測試來檢驗(yàn)是否安裝成功,如下所示:

成功安裝后,就可以進(jìn)入使用了。

1、定位圖像中的人臉

def demoFunc():

‘’‘

在一張包含人臉的圖片中圈出來人臉

’‘’

image = face_recognition.load_image_file(“test.jpg”)

face_locations = face_recognition.face_locations(image)

for one in face_locations:

y0, x1, y1, x0=one

cv2.rectangle(image, pt1=(x0, y0), pt2=(x1, y1), color=(0, 0, 255), thickness=3)

cv2.imshow(‘a(chǎn)aa’, image)

if cv2.waitKey(0) & 0xFF == ord(‘q’):

cv2.destroyAllWindows()

感覺還是很強(qiáng)大的,當(dāng)然了,在我實(shí)踐的過程中也發(fā)現(xiàn)了部分圖像識(shí)別檢測人臉失敗的問題,這個(gè)畢竟不是一個(gè)百分之百的問題,face_recognition更像是一個(gè)基礎(chǔ)框架,幫助我們更加高效地去構(gòu)建自己的人臉識(shí)別的相關(guān)應(yīng)用。

2、切割圖像中的每個(gè)人臉保存本地

def demoFunc():

‘’‘

圖片中人臉截圖保存

’‘’

img = cv2.imread(“test.jpg”)

image = face_recognition.load_image_file(“test.jpg”)

face_locations = face_recognition.face_locations(image) #(top, right, bottom, left)

for i in range(len(face_locations)):

y0, x1, y1, x0 = face_locations[i]

cropped = img.crop((x0,y0,x1,y1)) # (left, upper, right, lower) 左上角 右下角

cropped.save(str(i)+“_.jpg”)

cropped.show()

使用的原始圖像同上,結(jié)果如下所示:

五張人臉都檢測成功,并且保存成功,這里主要是要注意一些face_locations這個(gè)函數(shù)的返回結(jié)果,返回的子列表中每個(gè)子列表包含4個(gè)元素,分別是單張人臉圖像的左上頂點(diǎn)和右下頂點(diǎn)坐標(biāo),主要需要注意的是這四個(gè)參數(shù)的順序,我給出來的結(jié)果中(x0,y0)表示左上頂點(diǎn)的坐標(biāo),(x1,y1)表示右下頂點(diǎn)的坐標(biāo)。

3、將圖像中的每個(gè)人臉編碼成一個(gè)128維的向量

def demoFunc():

‘’‘

將圖片中的每張人臉編碼成一個(gè)128維長度的向量

’‘’

image = face_recognition.load_image_file(“cl.jpg”)

face_locations = face_recognition.face_locations(image) #(top, right, bottom, left)

face_encodings = face_recognition.face_encodings(image, face_locations) #將單個(gè)人臉數(shù)據(jù)轉(zhuǎn)化為一個(gè)128維的向量

for one in face_encodings:

print(‘one: ’,one)

進(jìn)行到這里就不得不去講一下face_recognition的一些應(yīng)用原理,下面是我的一些總結(jié),如有不當(dāng)歡迎指教。

face_recognition模塊人臉識(shí)別應(yīng)用實(shí)現(xiàn)的原理:

(1) 給定想要識(shí)別的人臉的圖片并對(duì)其進(jìn)行編碼(每個(gè)人只需要一張),并將這些不同的人臉編碼構(gòu)建成一個(gè)列表。編碼其實(shí)就是將人臉圖片映射成一個(gè)128維的特征向量。

(2) 計(jì)算圖像向量之間的相似度根據(jù)閾值或者是容錯(cuò)度來決定是否是同一個(gè)人。

(3) 輸出識(shí)別結(jié)果標(biāo)簽。

毫不夸張地說,face_recognition整個(gè)的核心就在于這一塊的向量化處理中,輸入的每一張人臉圖像都會(huì)被轉(zhuǎn)化為一個(gè)128維的特征向量進(jìn)行存儲(chǔ),128維特征向量的生成也是一個(gè)算法在里面的感興趣的話可以去查一下深入了解一下,我這里就不展開了,之后的人臉識(shí)別就轉(zhuǎn)化為了兩個(gè)人臉圖像之間向量相似度的問題了。

這里使用一張成龍大哥的圖像來進(jìn)行測試,原始圖像如下所示:

向量化結(jié)果如下:

9dda3ef8-f6fd-11eb-9bcf-12bb97331649.png

如果自己想要構(gòu)建自己的個(gè)性化應(yīng)用的話一般會(huì)選擇在這里進(jìn)行改造,首先就是需要保存這里的特征向量。

4、輸入兩張人臉圖像,判斷是否是同一個(gè)人

def demoFunc(one_pic=‘c1.jpg’,two_pic=‘c2.jpg’):

‘’‘

給定兩張圖片,判斷是否是同一個(gè)人

’‘’

chenglong = face_recognition.load_image_file(one_pic)

unknown_image = face_recognition.load_image_file(two_pic)

biden_encoding = face_recognition.face_encodings(chenglong)[0]

unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

results = face_recognition.compare_faces([biden_encoding], unknown_encoding)

print(‘results: ’,results)

return results[0]

這里其實(shí)跟上面第三部分的有點(diǎn)相似,這部分是建立在第三部分基礎(chǔ)上的只不過是自帶了compare_faces這個(gè)相似度計(jì)算接口,這里其實(shí)可以自己去實(shí)現(xiàn)替換的。

同樣,使用了兩張成龍大哥的圖像來進(jìn)行測試,原始圖像如下所示:

測試結(jié)果如下:

9e01090c-f6fd-11eb-9bcf-12bb97331649.png

5、臉部關(guān)鍵點(diǎn)識(shí)別和標(biāo)注

def demoFunc(pic_path=‘cl.jpg’):

‘’‘

臉部關(guān)鍵點(diǎn)識(shí)別、標(biāo)注

’‘’

image = face_recognition.load_image_file(pic_path)

face_landmarks_list = face_recognition.face_landmarks(image)

print(“I found {} face(s) in this photograph.”.format(len(face_landmarks_list)))

pil_image = Image.fromarray(image)

d = ImageDraw.Draw(pil_image)

for face_landmarks in face_landmarks_list:

for facial_feature in face_landmarks.keys():

print(“The {} in this face has the following points: {}”.format(facial_feature, face_landmarks[facial_feature]))

for facial_feature in face_landmarks.keys():

d.line(face_landmarks[facial_feature], width=5)

pil_image.show()

臉部的關(guān)鍵點(diǎn)包括:鼻子、嘴巴、眼睛、眉毛等,這里還是用的上面成龍大哥的圖片,下面的結(jié)果輸出:

9e15c2ca-f6fd-11eb-9bcf-12bb97331649.png

6、化妝

這部分是建立在第五部分基礎(chǔ)上的,得到的面部的特征以后就可以進(jìn)行自動(dòng)化妝了,下面是具體的實(shí)現(xiàn):

def demoFunc(pic_path=“haiwang.jpg”):

‘’‘

化妝

’‘’

image = face_recognition.load_image_file(pic_path)

face_landmarks_list = face_recognition.face_landmarks(image)

pil_image = Image.fromarray(image)

for face_landmarks in face_landmarks_list:

demo = ImageDraw.Draw(pil_image, ‘RGBA’)

demo.polygon(face_landmarks[‘left_eyebrow’], fill=(68, 54, 39, 128))

demo.polygon(face_landmarks[‘right_eyebrow’], fill=(68, 54, 39, 128))

demo.line(face_landmarks[‘left_eyebrow’], fill=(68, 54, 39, 150), width=2)

demo.line(face_landmarks[‘right_eyebrow’], fill=(68, 54, 39, 150), width=2)

demo.polygon(face_landmarks[‘top_lip’], fill=(150, 0, 0, 128))

demo.polygon(face_landmarks[‘bottom_lip’], fill=(150, 0, 0, 128))

demo.line(face_landmarks[‘top_lip’], fill=(150, 0, 0, 64), width=2)

demo.line(face_landmarks[‘bottom_lip’], fill=(150, 0, 0, 64), width=2)

demo.polygon(face_landmarks[‘left_eye’], fill=(255, 255, 255, 30))

demo.polygon(face_landmarks[‘right_eye’], fill=(255, 255, 255, 30))

demo.line(face_landmarks[‘left_eye’] + [face_landmarks[‘left_eye’][0]], fill=(0, 0, 0, 110), width=2)

demo.line(face_landmarks[‘right_eye’] + [face_landmarks[‘right_eye’][0]], fill=(0, 0, 0, 110), width=2)

pil_image.show()

7、基于face_recognition構(gòu)建自己的簡單人臉識(shí)別應(yīng)用

上面介紹了很多face_recognition的應(yīng)用,這里才是最重要的內(nèi)容我覺得是這樣的,基于已有的功能來實(shí)現(xiàn)我們自己的個(gè)性化應(yīng)用,我這里只是簡單的拋磚引玉,給出來自己的最最簡單的實(shí)現(xiàn):

def faceRecognitionDemo(picDir=‘data/’, test_pic=‘test.png’):

‘’‘

基于 face_recognition 構(gòu)建人臉識(shí)別模塊

’‘’

pic_list=os.listdir(picDir)

for one_pic in pic_list:

one_pic_path=picDir+one_pic

one_res=demo6(one_pic=one_pic_path,two_pic=test_pic)

one_name=one_pic.split(‘?!?].strip()

if one_res:

print(‘This Person is: ’, one_name)

break

else:

print(‘This Person is not: ’, one_name)

結(jié)果輸出如下:

9ef55f20-f6fd-11eb-9bcf-12bb97331649.png

當(dāng)然了,實(shí)時(shí)計(jì)算肯定當(dāng)前的計(jì)算方式不能滿足的,這個(gè)只是一個(gè)最簡單的應(yīng)用而已,只想在這里拋磚引玉,這里是通過調(diào)用了face_recognition接口的形式來完成相似判定的工作的,還有一種非常常見的辦法,就是在得到人臉圖像的128維特征向量之后,就可以將人臉識(shí)別問題轉(zhuǎn)化為基于機(jī)器學(xué)習(xí)模型的一個(gè)簡單分類問題了,比如SVM、RF、GBDT等都可以非常出色地完成上面的任務(wù)。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 人臉識(shí)別
    +關(guān)注

    關(guān)注

    77

    文章

    4080

    瀏覽量

    84144
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86628

原文標(biāo)題:手把手教你用Python寫個(gè)簡單又強(qiáng)大的人臉識(shí)別系統(tǒng)

文章出處:【微信號(hào):pcbgood,微信公眾號(hào):奈因PCB電路板設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【LeMaker Guitar申請(qǐng)】基于LeMaker Guitar的人臉識(shí)別系統(tǒng)

    學(xué)習(xí)對(duì)嵌入式應(yīng)用層開發(fā)有個(gè)更深入的認(rèn)識(shí)。項(xiàng)目描述:基于LeMaker Guitar的人臉識(shí)別系統(tǒng)設(shè)計(jì)思路是把 OpenCV移植到嵌入式操作系統(tǒng)
    發(fā)表于 01-18 16:23

    【LeMaker Guitar試用體驗(yàn)】之基于Python下的人臉識(shí)別系統(tǒng)【結(jié)貼】

    Python編程語言下實(shí)現(xiàn)基于LeMaker Guitar的人臉識(shí)別系統(tǒng),具體方案操作如下。.實(shí)驗(yàn)說明系統(tǒng)設(shè)備:1.LeMakerGuit
    發(fā)表于 02-25 14:03

    有大神嗎?找大神幫忙做一個(gè)人臉識(shí)別

    有大神嗎?找大神幫忙做一個(gè)人臉識(shí)別
    發(fā)表于 04-17 21:39

    基于linux操作系統(tǒng)實(shí)現(xiàn)一個(gè)人臉識(shí)別門禁系統(tǒng)

    形成組網(wǎng),實(shí)現(xiàn)一個(gè)人臉識(shí)別門禁系統(tǒng)??蛻舳藶榍度胧絃inux設(shè)備,采用QT庫顯示界面,通過攝像頭采集圖像。服務(wù)器為PC上 Ubuntu系統(tǒng),采用QT庫顯示界面,以O(shè)penCV庫為基礎(chǔ)進(jìn)
    發(fā)表于 12-14 06:24

    人臉識(shí)別系統(tǒng)定位功能剖析

    經(jīng)常被網(wǎng)友問到“人臉識(shí)別系統(tǒng)是如何找到人的?”,本文將通過實(shí)際案例具體分析人臉識(shí)別系統(tǒng)的組成、人臉識(shí)別系
    發(fā)表于 08-29 14:46 ?6040次閱讀

    如果一個(gè)人化妝了還能被人臉識(shí)別系統(tǒng)認(rèn)出來嗎

    萬維人臉識(shí)別技術(shù)是利用分析比對(duì)的技術(shù)來實(shí)現(xiàn)人臉識(shí)別,項(xiàng)熱門的計(jì)算機(jī)技術(shù)研究領(lǐng)域,其中包括人臉
    發(fā)表于 07-09 17:23 ?1w次閱讀

    人臉識(shí)別系統(tǒng)的四大優(yōu)勢_人臉識(shí)別系統(tǒng)需要攻克的難題

    人臉識(shí)別系統(tǒng)項(xiàng)新興技術(shù),隨著市場的發(fā)展,技術(shù)水平的提高,越來越多的行業(yè)和領(lǐng)域都需要這樣的系統(tǒng),可以提高工作效率,加快行業(yè)發(fā)展,下面來介紹一下人臉
    發(fā)表于 08-28 10:26 ?3522次閱讀

    人臉識(shí)別系統(tǒng)應(yīng)用范圍_選擇人臉識(shí)別系統(tǒng)的關(guān)注點(diǎn)

    隨之科學(xué)手段的快速發(fā)展,人臉識(shí)別系統(tǒng)被應(yīng)用到了眾多領(lǐng)域,人臉識(shí)別系統(tǒng)目前主要應(yīng)用于身份識(shí)別,可以利用快速
    發(fā)表于 08-31 14:56 ?1585次閱讀

    人臉識(shí)別系統(tǒng)的廠家如何選擇

    人臉識(shí)別是最近幾年大家聽到比較多的個(gè)熱門詞,聽上去就感覺非常的高科技。的確,人臉識(shí)別系統(tǒng)是通過
    發(fā)表于 09-02 15:15 ?1268次閱讀

    人臉識(shí)別系統(tǒng)使用的攻擊方法有哪些

    技術(shù),銀行則采用eKYC解決方案進(jìn)行入職流程。人臉識(shí)別研究的主要目的是提高驗(yàn)證和識(shí)別任務(wù)的性能,在過去,對(duì)人臉識(shí)別系統(tǒng)的安全漏洞的研究是比較
    發(fā)表于 11-18 11:28 ?6085次閱讀

    用樹莓派做一個(gè)人臉識(shí)別開鎖應(yīng)用的案例

    本文主要介紹實(shí)現(xiàn)一個(gè)人臉識(shí)別進(jìn)行開鎖的功能,用在真人實(shí)景游戲業(yè)務(wù)中。來源:騰訊技術(shù)工程微信號(hào)作者:eckygao,騰訊 CSIG 云產(chǎn)品部
    的頭像 發(fā)表于 12-10 18:37 ?698次閱讀

    如何使用ESP32-CAM構(gòu)建一個(gè)人臉識(shí)別系統(tǒng)

    在這個(gè)項(xiàng)目中,我們將使用 ESP32-CAM 構(gòu)建一個(gè)人臉識(shí)別系統(tǒng),該系統(tǒng)還可以通過識(shí)別未經(jīng)授權(quán)的人的面部來作為 ESP32-CAM 安全系統(tǒng)
    發(fā)表于 08-22 16:35 ?1.7w次閱讀
    如何使用ESP32-CAM構(gòu)建<b class='flag-5'>一個(gè)人臉</b><b class='flag-5'>識(shí)別系統(tǒng)</b>

    Xilinx KV 260構(gòu)建一個(gè)人臉識(shí)別車庫門鎖

    電子發(fā)燒友網(wǎng)站提供《Xilinx KV 260構(gòu)建一個(gè)人臉識(shí)別車庫門鎖.zip》資料免費(fèi)下載
    發(fā)表于 10-26 11:24 ?7次下載
    Xilinx KV 260構(gòu)建<b class='flag-5'>一個(gè)人臉</b><b class='flag-5'>識(shí)別</b>車庫門鎖

    人臉識(shí)別技術(shù)的應(yīng)用 部署一個(gè)人臉識(shí)別系統(tǒng)

    本次就使用PaddleInference將PaddleHub上的兩個(gè)模型串聯(lián)起來,并部署在CPU桌面平臺(tái)上,搭建個(gè)簡單的人臉識(shí)別系統(tǒng) 先展
    的頭像 發(fā)表于 12-06 18:14 ?1302次閱讀

    基于python代碼的人臉識(shí)別實(shí)例

    基于python代碼的一個(gè)人臉識(shí)別的實(shí)例,完整的實(shí)例,本人在pycharm中實(shí)測通過,是個(gè)很基礎(chǔ)的入門級(jí)的
    發(fā)表于 07-18 11:11 ?14次下載