python人臉識別
- 人臉識別的崛起
- 什么是人臉識別
- 人臉識別技術的應用和發展
- python人臉識別
- 匯入庫
- 實作代碼
人臉識別的崛起
什么是人臉識別
人臉識別是將采集到的資料資訊,根據人臉特征資訊進行比對,從而辨識身份的技術,每逢談到人臉識別技術,就會想到人工智能,近年來,人工智能的發展成為當代技術革命的一部分,可以說計算機領域技術的發展,極大的帶動了這場革命,

常常在想人臉識別是如何做到,的這里面與復雜高級的資料建模,建立人臉各部分的資料模型密切相關,說白了,其實也就是演算法,演算法的研究,成為推動智能發展的頂梁柱,

這里面涉及的比較多,無論是從深度學習,還是機器學習,人工智能,這里面的實作程序,想必都是十分復雜的,
在下知識面比較薄弱,不敢多言,不過肯定的一點是,你的人臉識別首先要將人臉轉化為計算機可以識別的資料,人臉識別其實就是計算機方面的資料識別,
人臉識別技術的應用和發展
談到應用,我的第一映像就是手機上的人臉識別解鎖,目前在學校公寓里面也有人臉識別的機器,我記得首先是收集了我們學生們的照片,應該是存入資料庫的,我們學生的資訊,包括學號,以及所在系等等,學校都是存入資料庫的,學生在進入公寓時需要進行人臉識別,機器會進行識別,系統有兩種識別方式,一是識別人像,二是進行刷卡,刷卡會將自己的資訊讀取,會與資料庫的資訊對比,也是一種識別的方式,

目前,從我國人臉識別技術應用來看,主要集中在三大領域:考勤門禁、安防以及金融等等,人臉識別目前面臨著一個難題是,對于明亮可能有點要求,像黑暗的環境就比較困難,還有面部本身黑色的人也可能會有誤差,但是技術革命的發展,也必將解決這一難題,只有你想不到的,沒有做不到的,
應用前景:隨著人工智能的興起,更加高端的識別技術才是主流發展方向,無需接觸、更加方便、直觀的方式是未來方向,人臉識別具備無需被測者配合的特點,采集器掃過人臉就能進行對比,這在公安刑偵領域有著巨大的前景,在門禁安防領域,操作更加便捷的人臉識別也會更受歡迎,
python人臉識別
匯入庫
python是一門強大的計算機編程語言,我們常常要用到python中的庫,今天我們用到的庫是需要安裝的,因為不是python的內置庫,
1:opencv-python
2:face_recognition
我們這里主要介紹通過控制臺命令匯入庫,不過這里可能與一般情況下的固定格式的匯入有所區別,當然你可以借用Pycharm,以及直接去網站上安裝相應的包,我比較喜歡控制臺命令,因為感覺Pycharm匯入某些庫是比較慢的,
匯入opencv,這和python的版本是有區別的,我的是python3.7版本的,在控制臺匯入時,我們可以這樣匯入,opencv是依賴numpy的,我們一般這樣匯入,首先我們匯入cmake,,pip install cmake -i 鏡像源,
目前國內的鏡像源有如下:
阿里云 http://mirrors.aliyun.com/pypi/simple/
中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/
中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/
華中理工大學 http://pypi.hustunique.com/simple/
山東理工大學 http://pypi.sdutlinux.org/simple/
我們再匯入opencv-python,這樣匯入 pip install opencv-python -i 鏡像源 -trusted-host
trusted-host是代表信任該鏡像源,這里主要針對可能出現不信任的提示的情況,
同理,我們匯入face_recognition時,我們這樣在控制臺這樣寫:pip install face_recognition -i 鏡像源 -trusted-host
這里可能會出現記憶體占用很大的問題,不過等一會就好了

實作代碼
此代碼的目的是實作對圖片中人臉的識別,并判斷是否是同一張臉,是則回傳yes,否則回傳no,圖片會顯示出來,并顯示劃定人臉的位置框型,yes和no會在圖片上方顯示,
下面展示一些 行內代碼片,
#import sys #python內置庫
import cv2 #計算機視覺領域
import face_recognition #人臉識別庫,如果讀取圖片的話,會是影像矩陣
#就是每個圖片的rgb
# 1.人臉資料
# 2.演算法
# 3.建立模型
# 4.訓練模型
# 5.測驗模型
# 6.上線使用
# 1讀取
face_image = face_recognition.load_image_file("E://1.jpg")#讀取圖片
# 2進行人臉特征提取 向量化
#128維的五官資料
face_encoding = face_recognition.face_encodings(face_image)
# 3人臉位置
face_locations = face_recognition.face_locations(face_image)
# 判斷
n = len(face_encoding)
#如果超過連個人就退出來
if n>2:
print('超過兩個人')
sys.exit()
face1 = face_encoding[0]
face2 = face_encoding[1]
# 4比較 閾值 tolerance指定容錯率,越小越嚴格
result = face_recognition.compare_faces([face1],face2,tolerance=0.5)
if result == [True] :
print(1)
name = 'Yes'
else :
print(0)
name = 'No'
#繪圖
for i in range(len(face_encoding)):
face_encoding = face_encoding[i]
face_location = face_locations[i]
top,right,bottom,left = face_location
#畫框 影像 位置 顏色 粗細
cv2.rectangle(face_image,(left,top),(right,bottom),(0,255,0),2)
#寫字
cv2.putText(face_image,name,(left,top),cv2.FONT_HERSHEY_SIMPLEX,0.8,(255,0,0,2))
face_image_rgb = cv2.cvtColor(face_image,cv2.COLOR_BGR2RGB)
# 展示影像
cv2.imshow("output",face_image_rgb)
#防止閃退
cv2.waitKey(0)
我隨便找了一張圖,給大家簡單演示下這個程序
我們來看實作結果

我們看到結果是這兩個人不是同一張臉,當然,這張圖可能比較容易辨別,各位可以嘗試難度比較大的,據說face_recognition庫地識別率達到99.5%以上,這是保底了,
注意代碼的指定容錯率,這也是和結果很有關系的,
后期會寫出動態拍照人臉識別,說到底,還是呼叫庫啊,會寫庫和演算法的才是大佬,只會用方法的我還是有很多需要去學習,
畢竟才疏學淺,在下還望各位大佬指正,期待與大家共同進步,
-----jgdabc

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260700.html
標籤:AI
上一篇:C++命名空間
