在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是人臉識別?如何使用10行代碼實現人臉識別

Wildesbeast ? 來源:今日頭條 ? 作者:Python集結號 ? 2020-04-06 12:17 ? 次閱讀

什么是人臉識別

人臉識別,是基于人的臉部特征信息進行身份識別的一種生物識別技術。用攝像機或攝像頭采集含有人臉的圖像或視頻流,并自動在圖像中檢測和跟蹤人臉,進而對檢測到的人臉進行臉部識別的一系列相關技術,通常也叫做人像識別、面部識別。

目前的人臉識別技術已經非常成熟了,還發展成3D人臉識別。而且現在各大廠商也都提供了人臉識別的API接口供我們調用,可以說幾行代碼就可以完成人臉識別。但是人臉識別的根本還是基于圖像處理。在Python中最強大的圖像處理庫就是OpenCV。

OpenCV簡介

OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。OpenCV可用于開發實時的圖像處理、計算機視覺以及模式識別程序。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法

OpenCV基本使用

安裝

pip install opencv-python # 基礎庫pip install opencv-contrib-python # 擴展庫pip install opencv-python-headless

讀取圖片

讀取和顯示圖片是最基本的操作了,OpenCV當中使用imread和imshow實現該操作

import cv2 as cv# 讀取圖片,路徑不能含有中文名,否則圖片讀取不出來image = cv.imread(‘1111.jpg’)# 顯示圖片cv.imshow(‘image’, image)# 等待鍵盤輸入,單位是毫秒,0表示無限等待cv.waitKey(0)# 因為最終調用的是C++對象,所以使用完要釋放內存cv.destroyAllWindows()

將圖片轉為灰度圖

OpenCV中數百中關于不同色彩控件之間轉換的方法。目前最常用的有三種:灰度、BGR、HSV。

灰度色彩空間是通過去除彩色信息來講圖片轉換成灰階,灰度圖會大量減少圖像處理中的色彩處理,對人臉識別很有效。

BGR每個像素都由一個三元數組來表示,分別代碼藍、綠、紅三種顏色。python中還有一個庫PIL,讀取的圖片通道是RGB,其實是一樣的,只是顏色順序不一樣

HSV,H是色調,S是飽和度,V是黑暗的程度

將圖片轉換為灰度圖

import cv2 as cv# 讀取圖片,路徑不能含有中文名,否則圖片讀取不出來image = cv.imread(‘1111.jpg’)# cv2讀取圖片的通道是BGR,# PIL讀取圖片的通道是RGB# code選擇COLOR_BGR2GRAY,就是BGR to GRAYgray_image = cv.cvtColor(image, code=cv.COLOR_BGR2GRAY)# 顯示圖片cv.imshow(‘image’, gray_image)# 等待鍵盤輸入,單位是毫秒,0表示無限等待cv.waitKey(0)# 因為最終調用的是C++對象,所以使用完要釋放內存cv.destroyAllWindows()

繪制矩形

image = cv.imread(‘1111.jpg’)x, y, w, h = 50, 50, 80, 80# 繪制矩形cv.rectangle(image, (x, y, x+w, y+h), color=(0, 255, 0), thickness=2)# 繪制圓形cv.circle(image, center=(x + w//2, y + h//2), radius=w//2, color=(0, 0, 255), thickness=2)cv.imshow(‘image’, image)cv.waitKey(0)cv.destroyAllWindows()

人臉檢測

人臉檢測實際上是對圖像提取特征,Haar特征是一種用于實現實時人臉跟蹤的特征。每個Haar特征都描述了相鄰圖像區域的對比模式。比如邊、定點和細線都能生成具有判別性的特征。OpenCV給我們提供了Haar特征數據,在cv2/data目錄下,使用特征數據的方法def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None)

scaleFactor: 指定每個圖像比例縮小多少圖像

minNeighbors: 指定每個候選矩形必須保留多少個鄰居,值越大說明精度要求越高

minSize:檢測到的最小矩形大小

maxSize: 檢測到的最大矩形大小

檢測圖片中人臉

import osimport cv2 as cvdef face_detect_demo(image): # 將圖片轉換為灰度圖 gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # 加載特征數據 face_detector = cv.CascadeClassifier(os.path.join(cv.data.haarcascades, ‘haarcascade_frontalface_default.xml’)) faces = face_detector.detectMultiScale(gray) for x, y, w, h in faces: cv.rectangle(image, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)# 讀取圖片,路徑不能含有中文名,否則圖片讀取不出來image = cv.imread(‘2222.jpg’)face_detect_demo(image)# 顯示圖片cv.imshow(‘image’, image)# 等待鍵盤輸入,單位是毫秒,0表示無限等待cv.waitKey(0)# 因為最終調用的是C++對象,所以使用完要釋放內存cv.destroyAllWindows()

采用默認參數,檢測人臉數據不全,需要調整detectMultiScale函數的參數,調整為faces = face_detector.detectMultiScale(gray, scaleFactor=1.02, minNeighbors=3)

我們發現除了檢測到人臉數據,還有一些其他的臟數據,這個時候可以打印檢測出的人臉數據位置和大小

faces = face_detector.detectMultiScale(gray, scaleFactor=1.02, minNeighbors=3)for x, y, w, h in faces: print(x, y, w, h) # 打印每一個檢測到的數據位置和大小 cv.rectangle(image, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)

從大小中我們看到最大的兩個矩形,剛好是人臉數據,其余都是臟數據,那么繼續修改函數參數faces = face_detector.detectMultiScale(gray, scaleFactor=1.02, minNeighbors=3, minSize=(80, 80))

檢測視頻中人臉

視頻就是一張一張的圖片組成的,在視頻的幀上面重復這個過程就能完成視頻中的人臉檢測了。視頻讀取OpenCV為我們提供了函數VideoCapture,參數可以是視頻文件或者0(表示調用攝像頭)

import cv2 as cv# 人臉檢測def face_detect_demo(image): try: # 將圖片轉換為灰度圖 gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # 加載特征數據 face_detector = cv.CascadeClassifier(os.path.join(cv.data.haarcascades, ‘haarcascade_frontalface_default.xml’)) faces = face_detector.detectMultiScale(gray) for x, y, w, h in faces: print(x, y, w, h) cv.rectangle(image, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2) except Exception as e: passcap = cv.VideoCapture(‘人臉識別.mp4’)while cap.isOpened(): flag, frame = cap.read() face_detect_demo(frame) cv.imshow(‘result’, frame) if ord(‘q’) == cv.waitKey(5): breakcap.realse()cv.destroyAllWindows()

這個我們是做的人臉識別,怎么把愛好都識別了,這么先進嗎?很顯然這不太符合我們的要求,愛好只能藏在心里,你給我檢測出來就不行了。所以我們必須要進行優化處理。OpenCV為我們提供了一個機器學習的小模塊,我們可以訓練它,讓它只識別我們需要的部分,不要亂猜測。

訓練數據

訓練數據就是我們把一些圖片交給訓練模型,讓模型熟悉她,這樣它就能更加準確的識別相同的圖片。訓練的數據一般我們可以從網上搜索:人臉識別數據庫,或者從視頻中保存美幀的數據作為訓練集。所有的人臉識別算法在他們的train()函數中都有兩個參數:圖像數組和標簽數組。這些標簽標示進行識別時候的人臉ID,根據ID可以知道被識別的人是誰。

獲取訓練集

從視頻中每隔5幀截取一個圖片,保存成圖片

import cv2cap = cv2.VideoCapture(‘人臉識別.mp4’)number = 100count = 1while cap.isOpened() and number 》 0: flag, frame = cap.read() if not flag: break if count % 5 == 0: # 按照視頻圖像中人臉的大體位置進行裁剪,只取人臉部分 img = frame[70:280, 520:730] cv2.imwrite(‘data/{}.png’.format(number), img) number -= 1 count += 1cap.release()cv2.destroyAllWindows()

使用LBPH訓練模型

def getImageAndLabels(path_list): faces = [] ids = [] image_paths = [os.path.join(path_list, f) for f in os.listdir(path_list) if f.endswith(‘.png’)] face_detector = cv.CascadeClassifier(os.path.join(cv.data.haarcascades, ‘haarcascade_frontalface_default.xml’)) for image in image_paths: img = cv.imread(image) gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) faces = face_detector.detectMultiScale(gray) _id = int(os.path.split(image)[1].split(‘。’)[0]) for x, y, w, h in faces: faces.append(gray[y:y+h, x:x+w]) ids.append(_id) return faces, idsfaces, ids = getImageAndLabels(‘data’)# 訓練recognizer = cv.face.LBPHFaceRecognizer_create()recognizer.train(faces, np.array(ids))# 保存訓練特征recognizer.write(‘trains/trains.yml’)

基于LBPH的人臉識別

LBPH將檢測到的人臉分為小單元,并將其與模型中的對應單元進行比較,對每個區域的匹配值產生一個直方圖。調整后的區域中調用predict函數,該函數返回兩個元素的數組,第一個元素是所識別的個體標簽,第二個元素是置信度評分。所有的算法都有一個置信度評分閾值,置信度評分用來衡量圖像與模型中的差距,0表示完全匹配。LBPH有一個好的識別參考值要低于50。基本步驟為:

cv.VideoCapture讀取視頻

Haar算法檢測人臉數據

基于LBPH訓練集得到準確人臉數據,并輸出標記此人是誰

按置信度取準確度高的人臉標記出來

import osimport cv2 as cvdef face_detect_demo(image): try: global number # 將圖片轉換為灰度圖 gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # 加載特征數據 faces = face_detector.detectMultiScale(gray, scaleFactor=1.02, minNeighbors=3) for x, y, w, h in faces: # 獲取置信度,大于80表示取值錯誤 _id, confidence = recognizer.predict(gray[y:y + h, x:x + w]) if confidence 《 80: cv.rectangle(image, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2) except Exception as e: passdef check_face(): cap = cv.VideoCapture(‘人臉識別.mp4’) while cap.isOpened(): flag, frame = cap.read() if not flag: break face_detect_demo(frame) cv.imshow(‘img’, frame) cv.waitKey(2) cv.destroyAllWindows()if __name__ == ‘__main__’: # 加載訓練數據文件 recognizer = cv.face.LBPHFaceRecognizer_create() recognizer.read(‘trains/trains.yml’) face_detector = cv.CascadeClassifier(os.path.join(cv.data.haarcascades, ‘haarcascade_frontalface_default.xml’)) check_face()

總結

通過上面一步步的學習,你是不是對OpenCV人臉識別有個基本的認識了呢?但是我們也看到了,整個人臉識別的主要算法還是基于Haar,而且準確度并不是特別高,主要是會檢測出很多非人臉的數據。LBPH是讓我們給某個人臉進行標記,告訴我們他是誰,并沒有提高實際的檢測準確度。現在機器學習是非常火爆的,基于OpenCV的機器學習人臉識別也精確度也很高,下次我們在來對比幾種機器學習人臉識別的庫。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4612

    瀏覽量

    92901
  • 模型
    +關注

    關注

    1

    文章

    3243

    瀏覽量

    48842
  • 人臉識別
    +關注

    關注

    76

    文章

    4012

    瀏覽量

    81907
收藏 人收藏

    評論

    相關推薦

    樹莓派做人臉識別

    基于云服務平臺的人臉識別1、設備樹莓派2、USB攝像頭。2、要求l使用USB攝像頭抓拍(可以使用各種開源軟件,也可以自己編程)臉部照片;l使用人臉識別的云服務平臺(可選擇FACECOR
    發表于 08-07 23:19

    人臉識別

    注冊username和人臉圖片,您可以使用這個功能自己實現一個小規模的人臉識別系統,比如明星臉識別、家庭成員
    發表于 02-22 12:09

    人臉識別技術原理解析

    `  人臉識別到底是什么?  人臉識別,是視覺模式識別的一個細分問題,也大概是最難解決的一個問題。 其實我們人每時每刻都在進行視覺模式
    發表于 12-23 23:17

    智能人臉抓拍機人臉識別

    1,智能人臉識別算法2,人臉抓拍對比,支持人臉跟蹤,人臉制動過濾3,支持數字寬動態,3D降噪功能4,支持DC 12V/24V/POE供電5,
    發表于 09-19 12:33

    LabVIEW人臉識別設計

    系統與試卷,公布綜合成績3、挑戰成功學員在3-5個工作日之內即可收到退款【課程介紹】本課程主要以LabVIEW視覺和第三方開源深度學習庫,實現人臉識別功能。人臉
    發表于 04-28 10:00

    人臉識別會改變什么

    導語:人臉識別已經在我們生活中隨處可見,但人臉識別將會給我們生活帶來便利的同時,也會重新改寫我們社交的本質,以及引發隱私、公平等方面的道德討論。2017年9月的《經濟學人》雜志就
    發表于 07-16 06:26

    什么是人臉識別技術

    什么是人臉識別技術人臉識別技術特點人臉識別技術流程人臉
    發表于 03-03 06:17

    人臉識別的全部源代碼

    Google Glass-- 谷歌眼鏡核心源碼人臉識別的全部源代碼(在Visual C++6.0下可以運行識別)l智能分析接口(支持車牌識別
    發表于 08-06 07:21

    RV1126基于虹軟人臉識別算法實現指南

    1、RV1126基于虹軟人臉識別算法實現的示例使用教程示例(rkmedia_vi_arc_rtsp_test.cc) 使用 CORE-1126-JD4 配套的 os04a10 攝像頭進
    發表于 06-08 15:51

    人臉識別沒那么難,1命令就能實現

    現在人臉識別那么火,各大手機廠商也是爭先在自己的手機上加入這種技術。那么,人臉識別技術真的很難嗎,其實不是的。下面告訴你如何用1命令
    發表于 10-27 16:13 ?2696次閱讀
    <b class='flag-5'>人臉</b><b class='flag-5'>識別</b>沒那么難,1<b class='flag-5'>行</b>命令就能<b class='flag-5'>實現</b>

    用dlib實現人臉識別的技巧

    很多人都認為人臉識別是一項非常難以實現的工作,看到名字就害怕,然后心懷忐忑到網上一搜,看到網上N頁的教程立馬就放棄了。這些人里包括曾經的我自己。其實如果如果你不是非要深究其中的原理,只是要實現
    的頭像 發表于 11-01 16:45 ?2.7w次閱讀

    如何用40代碼實現人臉識別

    Dlib里面有人臉檢測器,有訓練好的人臉關鍵點檢測器,也有訓練好的人臉識別模型。
    的頭像 發表于 07-15 09:16 ?4789次閱讀

    人臉識別技術原理與實現方式

    隨著大數據時代的到來,“人臉”也將成為數據的一部分,人臉識別如何實現?本文將為大家從人臉檢測、人臉
    發表于 02-05 11:16 ?2w次閱讀
    <b class='flag-5'>人臉</b><b class='flag-5'>識別</b>技術原理與<b class='flag-5'>實現</b>方式

    人臉識別是什么_人臉識別技術原理

    人臉識別是什么,人臉識別技術原理是如何的,它又是若何一步步實現的,人臉
    發表于 09-27 15:49 ?5889次閱讀
    <b class='flag-5'>人臉</b><b class='flag-5'>識別</b>是什么_<b class='flag-5'>人臉</b><b class='flag-5'>識別</b>技術原理

    基于python代碼人臉識別實例

    基于python代碼的一個人臉識別的實例,完整的實例,本人在pycharm中實測通過,是一個很基礎的入門級的人臉檢測和識別
    發表于 07-18 11:11 ?13次下載
    主站蜘蛛池模板: 日韩一区二区三区免费| 男人和女人做a免费视频| 狠狠色狠狠色综合日日32| 天天干狠狠干| 亚洲一区二区三区影院| 色偷偷成人| ts在线视频| 网站黄色在线观看| 天天摸天天碰色综合网| 成人a毛片在线看免费全部播放| 免费性bbbb台湾| 中文字幕欧美日韩| 精品亚洲欧美无人区乱码| 免费在线观看的视频| 国产精品高清免费网站| 久久精品视频国产| 国产69精品久久| 偷偷狠狠的日日日日| 在线午夜影院| 三级aa久久| 九色伊人| 1000rt人体1000欧美| 色视频免费看| 天堂在线资源最新版| 字幕网中文aⅴ资源站| 国产三级播放| 俺也操| 欧美性爽xxxⅹbbbb| 看片福利| 特黄特色| 奇米影视大全| 婷婷色婷婷| 天天噜夜夜操| 一级特黄色片| 在厨房乱子伦在线观看| 欧美色图在线观看| 久久久久久亚洲精品| 四虎影在永久地址在线观看| 天天舔夜夜操| 校园激情综合网| 天天爱天天做天天爽夜夜揉|