基於人工智慧的人臉識別


人工智慧(AI)在人臉識別中的應用徹底改變了計算機視覺領域。這項進步使機器能夠根據獨特的面部特徵驗證和區分個人。這項最先進的技術採用機器學習和深度學習元件的演算法,幫助提取面部特徵並將其與熟悉面部的資料庫進行比較。

人臉識別現已成為我們日常生活中的一個重要方面,廣泛應用於個性化使用者體驗和安全系統。本文探討了人工智慧在人臉識別中的應用、其對各行各業的影響以及執行人臉識別的不同技術,以及程式示例。

使用人工智慧進行人臉識別的步驟

以下是我們使用人工智慧建立人臉識別程式所遵循的步驟:

步驟

  • 步驟1 - 匯入我們將需要執行人臉識別(如dlib、OpenCV和face_recognition)的庫。

  • 步驟2 - 載入預先準備的人臉識別模型:利用dlib庫堆疊預先準備的模型,特別是基於ResNet的人臉識別模型。此模型適合提取面部描述符,即面部特徵的數學表示。

  • 步驟3 - 從LFW資料集載入影像:程式確定LFW(野外標記人臉)資料集影像的路徑。這張圖片將用作人臉識別的參考源。

  • 步驟4 - 初始化形狀預測和人臉檢測:初始化dlib提供的人臉檢測器和形狀檢測器。人臉檢測器負責檢測影片幀和影像中的人臉,而形狀預測器則預測面部特徵點,例如鼻子、眼睛和嘴巴的位置。

  • 步驟5 - 計算參考影像的面部描述符:計算LFW資料集中載入影像的面部描述符。它主要使用人臉檢測器檢測人臉,使用形狀預測器預測面部特徵點,然後使用預訓練的人臉識別模型計算面部描述符。計算出的面部描述符儲存在列表中。

  • 步驟6 - 初始化影片捕獲:從預設攝像頭(索引0)初始化影片捕獲。

  • 步驟7 - 開始人臉識別迴圈:程式進入迴圈以即時執行人臉識別。它從影片提要中捕獲每一幀並執行以下步驟:

    • 將幀轉換為RGB - 捕獲的幀從預設的BGR顏色格式轉換為RGB,這是人臉檢測和識別演算法所期望的格式。

    • 檢測幀中的人臉 - 人臉檢測器用於定位RGB幀中的人臉。它返回一個矩形列表,表示檢測到的人臉的邊界框。

    • 預測每個檢測到的人臉的面部描述符 - 對於每個檢測到的人臉,形狀預測器用於預測面部特徵點。然後,人臉識別模型計算該人臉的面部描述符。計算出的面部描述符儲存在一個數組中。

    • 執行人臉識別 - 程式將計算出的面部描述符與參考影像的描述符進行比較。它計算每對描述符之間的歐幾里德距離,並選擇距離最短的人臉。

    • 應用閾值並標記識別到的人臉 - 如果最小距離低於預定義的閾值,則程式將識別到的人臉標記為“匹配”,並在幀上顯示相應的邊界框和標籤。否則,人臉將標記為“未知”。

    • 顯示帶有標記人臉的幀 - 程式在一個視窗中顯示帶有標記人臉的結果幀。

    • 退出迴圈 - 下面的程式將繼續迴圈,直到使用者按下“q”鍵,這時它將中斷迴圈並終止程式。

  • 步驟8 - 釋放資源:退出迴圈後,程式將釋放影片捕獲並關閉所有開啟的視窗。

以下是按照上述步驟編寫的程式示例:

示例

import dlib
import cv2
import numpy as np

# Load the pre-trained face recognition model
face_recognition_model = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")

# Specify the path to an image in the LFW dataset
lfw_image_path = "lfw/Aaron_Eckhart/Aaron_Eckhart_0001.jpg"

# Load the LFW image
lfw_image = dlib.load_rgb_image(lfw_image_path)

# Initialize the face detector
face_detector = dlib.get_frontal_face_detector()

# Initialize the shape predictor
shape_predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# Initialize the face descriptors list
descriptors = []

# Compute face descriptors for the LFW image
face_rects = face_detector(lfw_image)
for face_rect in face_rects:
   shape = shape_predictor(lfw_image, face_rect)
   face_descriptor = face_recognition_model.compute_face_descriptor(lfw_image, shape)
   descriptors.append(np.array(face_descriptor))

# Initialize the video capture
video_capture = cv2.VideoCapture(0)

while True:
   # Capture frame-by-frame
   ret, frame = video_capture.read()

   # Convert the frame to RGB
   rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

   # Detect faces in the frame
   face_rects = face_detector(rgb_frame)

   # Iterate over the detected faces
   for face_rect in face_rects:
      # Predict face descriptors
      shape = shape_predictor(rgb_frame, face_rect)
      face_descriptor = face_recognition_model.compute_face_descriptor(rgb_frame, shape)
      face_descriptor = np.array(face_descriptor)

      # Perform face recognition by comparing face descriptors
      distances = np.linalg.norm(descriptors - face_descriptor, axis=1)
      min_distance_idx = np.argmin(distances)
      min_distance = distances[min_distance_idx]

      # Define a threshold for face recognition
      threshold = 0.6

      if min_distance <= threshold:
         # If recognized, label the face with the corresponding name from the LFW dataset
         label = "Match"
      else:
         # If not recognized, label the face as "Unknown"
         label = "Unknown"

      # Draw the bounding box and label on the frame
      cv2.rectangle(frame, (face_rect.left(), face_rect.top()), (face_rect.right(), face_rect.bottom()), (0, 255, 0), 2)
      cv2.putText(frame, label, (face_rect.left(), face_rect.top() - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

   # Display the resulting frame
   cv2.imshow('Face Recognition', frame)

   # Exit the loop if 'q' is pressed
   if cv2.waitKey(1) & 0xFF == ord('q'):
      break

# Release the video capture and close all windows
video_capture.release()
cv2.destroyAllWindows()

不同的面部識別技術

人工智慧採用各種方法和技術來識別和定點陣圖像或影片幀中的人臉。下面的描述以簡單的術語概述了幾種常用技術:

  • Haar級聯分類器 - 這些分類器利用畫素強度模式來檢測物體,包括人臉。透過在訓練期間使用正面和負面人臉示例,它們可以特別關注人臉檢測。

  • 方向梯度直方圖 (HOG) - 此演算法計算影像中梯度(畫素強度變化)的分佈,從而能夠理解物體的形狀和結構。結合機器學習分類器,它能夠檢測人臉。

  • 卷積神經網路 (CNN) - CNN是深度學習模型,以其在計算機視覺任務中的成功而聞名。在人臉檢測中,它們利用層來識別關鍵特徵並確定人臉的存在。

  • 單次多盒檢測器 (SSD) - SSD是一個流行的框架,它使用單個神經網路來預測物體的定位和標籤。透過在人臉資料上進行訓練,它可以有效地檢測人臉。

  • 更快的R-CNN - 這種廣泛使用的目標檢測模型利用區域建議網路生成潛在的邊界框,並使用分類器對其進行細化。經過適當的訓練,它擅長人臉檢測。

  • MTCNN(多工級聯卷積網路) - MTCNN是一種人臉檢測演算法,它採用多個階段來檢測不同比例的人臉。它經歷了諸如提出人臉、細化邊界框和定位面部特徵點之類的步驟。

  • YOLO(你只需看一次) - YOLO是一種能夠進行人臉檢測的目標檢測演算法。它將影像劃分為網格,預測邊界框和標籤。雖然它的執行速度很快,但可能會犧牲一些精度。

  • 帶有Haar類特徵的級聯分類器 - 此技術透過使用一系列針對特定特徵訓練的簡單分類器來有效地檢測人臉。結合這些分類器可以實現高精度和快速處理。

這些技術利用人工智慧演算法、機器學習和深度學習來實現精確有效的人臉檢測。每種技術都有其自身的優點和侷限性,選擇取決於速度、精度和可用資源等因素。

結論

總之,基於人工智慧的人臉識別技術提供了增強的安全性、改進的使用者體驗和運營效率。但是,解決隱私問題、偏見和倫理問題對於負責任的部署至關重要。

更新於:2023年8月8日

805 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告