日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)

發(fā)布時(shí)間:2024/7/23 pytorch 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV与图像处理学习十七——OpenCV人脸检测(含代码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OpenCV與圖像處理學(xué)習(xí)十七——OpenCV人臉檢測(含代碼)

  • 一、人臉識(shí)別概要
    • 1.1 人臉檢測
    • 1.2 人臉對(duì)齊(Face Alignment)
    • 1.3 人臉特征提取(Face Feature Extraction)
    • 1.4 人臉識(shí)別(Face Recognition)
  • 二、人臉檢測(不是識(shí)別)的代碼
    • 2.1 cv2.CascadeClassifier
    • 2.2 dlib庫

一、人臉識(shí)別概要

一般而言,一個(gè)完整的人臉識(shí)別系統(tǒng)包含4個(gè)主要組成部分,即人臉檢測人臉對(duì)齊(將側(cè)臉或歪臉變成正面臉)、人臉特征提取以及人臉識(shí)別

四部分流水線操作:

  • 人臉檢測在圖像中找到人臉的位置;
  • 人臉配準(zhǔn)在人臉上找到眼睛、鼻子、嘴巴等面部器官的位置;
  • 通過人臉特征提取將人臉圖像信息抽象為字符串信息;
  • 人臉識(shí)別將目標(biāo)人臉圖像與既有人臉比對(duì)計(jì)算相似度,確認(rèn)人臉對(duì)應(yīng)身份。

1.1 人臉檢測

人臉檢測算法的輸入是一張圖片,輸出是人臉框坐標(biāo)序列。一般情況下,輸出的人臉坐標(biāo)框?yàn)橐粋€(gè)正朝上的正方形,但也有一些人臉檢測技術(shù)輸出是正朝上的矩形,或者是帶旋轉(zhuǎn)方向的矩形。

1.2 人臉對(duì)齊(Face Alignment)

根據(jù)人臉圖像,自動(dòng)定位出人臉五官關(guān)鍵點(diǎn)坐標(biāo)的一項(xiàng)技術(shù)。

人臉對(duì)齊算法的輸入是“一張人臉圖片”加“人臉坐標(biāo)框”,輸出五官關(guān)鍵點(diǎn)的坐標(biāo)序列。五官關(guān)鍵點(diǎn)的數(shù)量是預(yù)先設(shè)定好的一個(gè)固定數(shù)值,可以根據(jù)不同的語義來定義(常見的有5點(diǎn)、68點(diǎn)等)。

對(duì)人臉圖像進(jìn)行特征點(diǎn)定位,將得到的特征點(diǎn)利用仿射變換進(jìn)行人臉矯正,若不矯正,非正面人臉進(jìn)行識(shí)別的準(zhǔn)確率不高。

1.3 人臉特征提取(Face Feature Extraction)

將一張人臉圖像轉(zhuǎn)化為一串固定長度的數(shù)值的過程。

具有表征某個(gè)人臉特點(diǎn)能力的數(shù)值串被稱為“人臉特征(Face Feature)”

1.4 人臉識(shí)別(Face Recognition)

識(shí)別出輸入人臉圖對(duì)應(yīng)身份的算法。

輸入一個(gè)人臉特征,通過和注冊(cè)在庫中N個(gè)身份對(duì)應(yīng)的特征進(jìn)行逐個(gè)比對(duì),找出 “一個(gè)” 與輸入特征相似度最高的特征。將這個(gè)最高相似度和預(yù)設(shè)的閾值進(jìn)行比較,如果大于閾值,則返回該特征對(duì)應(yīng)的身份,否則返回 “不在庫中” 。

二、人臉檢測(不是識(shí)別)的代碼

2.1 cv2.CascadeClassifier

import cv2# 讀入圖像 img = cv2.imread("image/3.png")# 加載人臉特征,該文件在 python安裝目錄\Lib\site-packages\cv2\data 下 # 注意xml文件的路徑一定要對(duì) face_cascade = cv2.CascadeClassifier(r'image/haarcascade_frontalface_default.xml') # 將讀取的圖像轉(zhuǎn)為COLOR_BGR2GRAY,減少計(jì)算強(qiáng)度 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 檢測出的人臉個(gè)數(shù) faces = face_cascade.detectMultiScale(gray, scaleFactor = 1.15, minNeighbors = 4, minSize = (5, 5))print("Face : {0}".format(len(faces))) print(faces) # 用矩形圈出人臉的位置 for(x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.namedWindow("Faces") cv2.imshow("Faces", img) cv2.waitKey(0) cv2.destroyAllWindows()

效果如下所示:

2.2 dlib庫

ps:dlib庫的安裝可以自行百度。

dlib庫是通過68特征點(diǎn)來識(shí)別人臉的:

# -*- coding:utf-8 -*- import cv2 import dlib import numpy as nppredictor_model = 'image/shape_predictor_68_face_landmarks/shape_predictor_68_face_landmarks.dat' detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor(predictor_model)# cv2讀取圖像 test_film_path = "image/3.png" img = cv2.imread(test_film_path) # 取灰度 img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)# 人臉數(shù)rects rects = detector(img_gray, 0) print(rects[0]) for i in range(len(rects)):landmarks = np.matrix([[p.x, p.y] for p in predictor(img, rects[i]).parts()])print(landmarks, type(landmarks))for idx, point in enumerate(landmarks):# 68點(diǎn)的坐標(biāo)pos = (point[0, 0], point[0, 1])#print(idx+1, pos)# 利用cv2.circle給每個(gè)特征點(diǎn)畫一個(gè)圈,共68個(gè)cv2.circle(img, pos, 3, color=(0, 255, 0))# 利用cv2.putText輸出1-68font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img, str(idx+1), pos, font, 0.5, (0, 0, 255), 1, cv2.LINE_AA)# cv2.imwrite("result.png", img) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()

效果如下所示:

68點(diǎn)坐標(biāo)保存在一個(gè)np.martrix里:

[[ 95 137][ 98 162][104 187][108 212][117 235][131 255][149 272][170 285][192 289][215 285][235 270][253 251][266 229][272 205][276 180][283 156][285 131][101 114][116 106][134 107][153 110][172 117][209 117][227 109][246 106][265 105][282 113][190 135][191 153][191 172][192 189][177 199][184 203][192 205][201 203][208 199][125 135][136 127][151 127][163 139][149 143][135 143][219 138][230 127][245 126][257 134][247 142][232 142][161 235][172 226][185 219][193 222][200 219][212 226][224 235][213 247][201 252][193 252][184 252][172 247][168 235][185 231][193 232][200 232][217 235][201 235][193 236][185 235]] <class 'numpy.matrix'>

總結(jié)

以上是生活随笔為你收集整理的OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。