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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

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

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

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

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

一、人臉識別概要

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

四部分流水線操作:

  • 人臉檢測在圖像中找到人臉的位置;
  • 人臉配準在人臉上找到眼睛、鼻子、嘴巴等面部器官的位置;
  • 通過人臉特征提取將人臉圖像信息抽象為字符串信息;
  • 人臉識別將目標人臉圖像與既有人臉比對計算相似度,確認人臉對應身份。

1.1 人臉檢測

人臉檢測算法的輸入是一張圖片,輸出是人臉框坐標序列。一般情況下,輸出的人臉坐標框為一個正朝上的正方形,但也有一些人臉檢測技術輸出是正朝上的矩形,或者是帶旋轉方向的矩形。

1.2 人臉對齊(Face Alignment)

根據人臉圖像,自動定位出人臉五官關鍵點坐標的一項技術。

人臉對齊算法的輸入是“一張人臉圖片”加“人臉坐標框”,輸出五官關鍵點的坐標序列。五官關鍵點的數量是預先設定好的一個固定數值,可以根據不同的語義來定義(常見的有5點、68點等)。

對人臉圖像進行特征點定位,將得到的特征點利用仿射變換進行人臉矯正,若不矯正,非正面人臉進行識別的準確率不高。

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

將一張人臉圖像轉化為一串固定長度的數值的過程。

具有表征某個人臉特點能力的數值串被稱為“人臉特征(Face Feature)”

1.4 人臉識別(Face Recognition)

識別出輸入人臉圖對應身份的算法。

輸入一個人臉特征,通過和注冊在庫中N個身份對應的特征進行逐個比對,找出 “一個” 與輸入特征相似度最高的特征。將這個最高相似度和預設的閾值進行比較,如果大于閾值,則返回該特征對應的身份,否則返回 “不在庫中” 。

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

2.1 cv2.CascadeClassifier

import cv2# 讀入圖像 img = cv2.imread("image/3.png")# 加載人臉特征,該文件在 python安裝目錄\Lib\site-packages\cv2\data 下 # 注意xml文件的路徑一定要對 face_cascade = cv2.CascadeClassifier(r'image/haarcascade_frontalface_default.xml') # 將讀取的圖像轉為COLOR_BGR2GRAY,減少計算強度 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 檢測出的人臉個數 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特征點來識別人臉的:

# -*- 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)# 人臉數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點的坐標pos = (point[0, 0], point[0, 1])#print(idx+1, pos)# 利用cv2.circle給每個特征點畫一個圈,共68個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點坐標保存在一個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'>

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。