偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用 MediaPipe 檢測面部五官

人工智能 人臉識別
本文將重點介紹如何使用 MediaPipe 檢測和跟蹤特定的面部特征,包括鼻子、嘴巴、眼睛和虹膜。

面部識別和檢測已成為許多現(xiàn)代應(yīng)用中不可或缺的組成部分,包括用于設(shè)備解鎖和社交媒體應(yīng)用中實時效果的添加。然而,準確高效地檢測面部特征,包括鼻子、嘴巴、眼睛甚至虹膜,可能是一個挑戰(zhàn)性的過程。幸運的是,由Google開發(fā)的開源框架MediaPipe提供了一個解決方案,它提供了強大的預訓練機器學習模型,允許開發(fā)者以高精度跟蹤和分析面部標志點。

MediaPipe為計算機視覺任務(wù)提供了一套全面的預構(gòu)建解決方案,包括手部跟蹤、姿態(tài)估計和面部標志點檢測。輕量級設(shè)計確保了實時性能,使其成為集成到移動和基于網(wǎng)絡(luò)的應(yīng)用中的最佳選擇。

本文將重點介紹如何使用MediaPipe檢測和跟蹤特定的面部特征,包括鼻子、嘴巴、眼睛和虹膜。通過本指南的結(jié)束,讀者不僅將全面了解MediaPipe的功能,而且還能夠在自己的項目中實現(xiàn)面部特征檢測。這將有助于探索如何輕松利用MediaPipe的強大功能檢測這些關(guān)鍵的面部特征。

開始使用

步驟1:安裝必要的庫

pip install opencv-python mediapip
# 避坑:記得先使用 pip install msvc-runtime 命令安裝msvc-runtime, 不然會報錯
# ImportError: DLL load failed while importing _framework_bindings: 動態(tài)鏈接庫(DLL)初始化例程失敗。

步驟2:導入庫

# coding: utf-8
import mediapipe as mp
import cv2
import os

步驟3:初始化 FaceMesh 模型并定義面部特征標志點

class FaceMeshDetector:
    def __init__(self, static_image_mode=False, max_num_faces=1, refine_landmarks=False, min_detection_con=0.5,
                 min_tracking_con=0.5):
        # 初始化面部網(wǎng)格檢測的參數(shù)
        self.static_image_mode = static_image_mode  # 是否處理圖像(True)或視頻流(False)
        self.max_num_faces = max_num_faces  # 要檢測的最大面孔數(shù)
        self.refine_landmarks = refine_landmarks  # 是否為了更好的精度細化虹膜標志點
        self.min_detection_con = min_detection_con  # 面部檢測的最小置信度
        self.min_tracking_con = min_tracking_con  # 跟蹤的最小置信度

        # 初始化Mediapipe面部網(wǎng)格解決方案
        self.mpFaceMesh = mp.solutions.face_mesh
        self.faceMesh = self.mpFaceMesh.FaceMesh(self.static_image_mode,
                                                 self.max_num_faces,
                                                 self.refine_landmarks,
                                                 self.min_detection_con,
                                                 self.min_tracking_con)

        # 存儲特定面部特征的標志點索引
        # 這些是Mediapipe為左右眼、虹膜、鼻子和嘴巴預定義的索引

        self.LEFT_EYE_LANDMARKS = [463, 398, 384, 385, 386, 387, 388, 466, 263, 249, 390, 373, 374,
                                   380, 381, 382, 362]  # 左眼標志點

        self.RIGHT_EYE_LANDMARKS = [33, 246, 161, 160, 159, 158, 157, 173, 133, 155, 154, 153, 145,
                                    144, 163, 7]  # 右眼標志點

        self.LEFT_IRIS_LANDMARKS = [474, 475, 477, 476]  # 左虹膜標志點
        self.RIGHT_IRIS_LANDMARKS = [469, 470, 471, 472]  # 右虹膜標志點

        self.NOSE_LANDMARKS = [193, 168, 417, 122, 351, 196, 419, 3, 248, 236, 456, 198, 420, 131, 360, 49, 279, 48,
                               278, 219, 439, 59, 289, 218, 438, 237, 457, 44, 19, 274]  # 鼻子標志點

        self.MOUTH_LANDMARKS = [0, 267, 269, 270, 409, 306, 375, 321, 405, 314, 17, 84, 181, 91, 146, 61, 185, 40, 39,
                                37]  # 嘴巴標志點

代碼定義了一個類,指定為FaceMeshDetector,它使用MediaPipe開發(fā)的FaceMesh解決方案來檢測面部標志點。這次檢測的重點是特定區(qū)域,即眼睛、虹膜、鼻子和嘴巴。識別出的標志點從圖像中提取出來,并以像素坐標的形式返回。

__init__方法

__init__方法的目的是初始化檢測器,這是通過配置MediaPipe的FaceMesh解決方案并存儲眼睛、虹膜、鼻子和嘴巴的特定標志點索引來實現(xiàn)的。

步驟4:處理圖像以檢測面部標志點,提取我們想要的面部特征的坐標

def findMeshInFace(self, img): # 初始化一個字典來存儲面部特征的標志點 landmarks = {}

  def findMeshInFace(self, img):
      # 初始化一個字典來存儲面部特征的標志點
      landmarks = {}

      # 將輸入圖像轉(zhuǎn)換為RGB,因為Mediapipe需要RGB圖像
      imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

      # 處理圖像以使用FaceMesh模型找到面部標志點
      results = self.faceMesh.process(imgRGB)

      # 檢查是否檢測到任何面孔
      if results.multi_face_landmarks:
          # 遍歷檢測到的面孔(這里,max_num_faces = 1,所以通常只有一個面孔)
          for faceLms in results.multi_face_landmarks:
              # 在標志點字典中初始化列表以存儲每個面部特征的坐標
              landmarks["left_eye_landmarks"] = []
              landmarks["right_eye_landmarks"] = []
              landmarks["left_iris_landmarks"] = []
              landmarks["right_iris_landmarks"] = []
              landmarks["nose_landmarks"] = []
              landmarks["mouth_landmarks"] = []
              landmarks["all_landmarks"] = []  # 存儲所有面部標志點以完成面部網(wǎng)格

              # 遍歷所有面部標志點
              for i, lm in enumerate(faceLms.landmark):
                  h, w, ic = img.shape  # 獲取圖像高度、寬度和通道數(shù)
                  x, y = int(lm.x * w), int(lm.y * h)  # 將歸一化坐標轉(zhuǎn)換為像素值

                  # 存儲所有標志點的坐標
                  landmarks["all_landmarks"].append((x, y))

                  # 根據(jù)預定義的索引存儲特定特征的標志點
                  if i in self.LEFT_EYE_LANDMARKS:
                      landmarks["left_eye_landmarks"].append((x, y))  # 左眼
                  if i in self.RIGHT_EYE_LANDMARKS:
                      landmarks["right_eye_landmarks"].append((x, y))  # 右眼
                  if i in self.LEFT_IRIS_LANDMARKS:
                      landmarks["left_iris_landmarks"].append((x, y))  # 左虹膜
                  if i in self.RIGHT_IRIS_LANDMARKS:
                      landmarks["right_iris_landmarks"].append((x, y))  # 右虹膜
                  if i in self.NOSE_LANDMARKS:
                      landmarks["nose_landmarks"].append((x, y))  # 鼻子
                  if i in self.MOUTH_LANDMARKS:
                      landmarks["mouth_landmarks"].append((x, y))  # 嘴巴

      # 返回處理后的圖像和特征標志點的字典
      return img, landmarks

findMeshInFace方法

這個方法處理輸入圖像,檢測面部標志點,并返回帶有面部特征坐標的圖像。

步驟5:為圖像定義主函數(shù)

使用細化虹膜標志點的FaceMeshDetector以獲得更好的精度

# 使用細化虹膜標志點的FaceMeshDetector以獲得更好的精度
detector = FaceMeshDetector(refine_landmarks=True)

# 定義我們感興趣的面部特征(眼睛、鼻子、嘴巴、虹膜和所有標志點)
face_parts = ["left_eye_landmarks", "right_eye_landmarks", "nose_landmarks",
              "mouth_landmarks", "all_landmarks", "left_iris_landmarks",
              "right_iris_landmarks"]

for item in range(len(face_parts)):
    # 從指定的文件路徑讀取圖像
    image = cv2.imread(r"D:\test.jpg")  # 將<YourImagePath>替換為實際的圖像路徑
    save_path = r'D:'

    # 使用FaceMeshDetector在當前幀中找到面部標志點
    image, landmarks = detector.findMeshInFace(image)

    # 嘗試繪制指定面部部分(本例中為鼻子)的標志點
    try:
        for landmark in landmarks[face_parts[item]]:
            # 在每個標志點坐標處繪制一個小綠圈
            cv2.circle(image, (landmark[0], landmark[1]), 3, (0, 255, 0), -1)  # 圓圈參數(shù):中心,半徑,顏色,厚度
    except KeyError:
        # 如果未找到指定部分的標志點,則跳過繪制
        pass

    # 在幀上顯示正在檢測的面部特征的名稱(例如,“nose_landmarks”)
    cv2.putText(image, f"{face_parts[item]}", (20, 70), cv2.FONT_HERSHEY_PLAIN, 5, (0, 255, 0), 5)
    # cv2.putText參數(shù):圖像,文本,位置,字體,字體大小,顏色,厚度

    # 在標題為“Image”的窗口中顯示帶有檢測到的標志點的修改后的幀
    # cv2.imshow("Image", image)
    # 保存圖像
    cv2.imwrite(os.path.join(save_path, face_parts[item] + '.jpg'), image)
    # 等待按鍵以關(guān)閉顯示的圖像窗口
    cv2.waitKey(0)

以下表示上述圖像的每個面部特征的結(jié)果。

步驟6:為視頻定義主函數(shù)

# 使用細化的虹膜標志點初始化FaceMeshDetector以提高精度
detector = FaceMeshDetector(refine_landmarks=True)

# 定義我們感興趣的面部特征(眼睛、鼻子、嘴巴、虹膜和所有標志點)
face_parts = ["left_eye_landmarks", "right_eye_landmarks", "nose_landmarks",
              "mouth_landmarks", "all_landmarks", "left_iris_landmarks",
              "right_iris_landmarks"]

# 指定要檢測的面部特征(索引2在這里指的是鼻子標志點)
face_part = 2

# 從文件"woman_face.mp4"捕獲視頻
cap = cv2.VideoCapture("<YourVideoPath>") # 使用0表示網(wǎng)絡(luò)攝像頭

# 開始一個循環(huán),逐幀處理視頻
while True:
    # 從視頻捕獲中讀取下一幀
    success, image = cap.read()

    # 使用FaceMeshDetector在當前幀中找到面部標志點
    image, landmarks = detector.findMeshInFace(image)

    # 如果讀取幀不成功(例如,視頻結(jié)束),則跳出循環(huán)
    if not success:
        break

    # 嘗試繪制指定面部部分(本例中為鼻子)的標志點
    try:
        for landmark in landmarks[face_parts[face_part]]:
            # 在每個標志點坐標處繪制一個小綠圈
            cv2.circle(image, (landmark[0], landmark[1]), 3, (0, 255, 0), -1)
    except KeyError:
        # 如果未找到指定部分的標志點,則跳過繪制
        pass

    # 在幀上顯示正在檢測的面部特征的名稱(例如,“nose_landmarks”)
    cv2.putText(image, f"{face_parts[face_part]}", (20, 70), cv2.FONT_HERSHEY_PLAIN, 5, (0, 255, 0), 5)

    # 在標題為“Image”的窗口中顯示帶有檢測到的標志點的修改后的幀
    cv2.imshow("Image", image)

    # 等待按鍵1毫秒,并檢查用戶是否按下了'q'鍵以退出
    key = cv2.waitKey(1)
    if key & 0xFF == ord('q'):
        break
責任編輯:趙寧寧 來源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2012-12-18 09:16:21

IBM計算機感官

2018-05-11 14:10:17

Python人臉識別

2023-12-06 13:56:24

智能數(shù)據(jù)

2020-01-03 08:00:00

面部識別人工智能AI

2021-06-23 09:25:57

鴻蒙HarmonyOS應(yīng)用

2018-11-28 14:53:44

物聯(lián)網(wǎng)網(wǎng)關(guān)物聯(lián)網(wǎng)IOT

2024-12-26 17:16:59

2021-11-05 11:01:47

人工智能元宇宙面部識別

2021-06-18 11:58:08

人工智能AI面部識別

2017-09-04 20:06:32

深度學習檢測人臉追蹤

2022-09-21 07:57:56

面部識別身份認證。Web

2021-12-15 16:54:05

區(qū)塊鏈面部識別技術(shù)

2022-08-03 10:43:42

安全風險影子IT

2020-03-13 08:18:09

面部識別生物識別人工智能

2012-04-05 12:16:15

HTC

2022-01-04 08:00:00

面部識別安全技術(shù)

2024-09-14 09:31:25

2022-05-26 05:24:56

人工智能面部識別AI

2013-07-30 10:26:37

2020-07-20 10:18:02

人工智能面部識別視頻分析
點贊
收藏

51CTO技術(shù)棧公眾號