使用Python和OpenCV庫構建人臉識別系統


人臉識別是一種流行的技術,用於安全系統、移動裝置和社交媒體應用程式。它透過分析人的面部特徵來識別和驗證身份。Python是一種多功能的程式語言,OpenCV庫提供了廣泛的影像和影片處理功能,包括人臉識別。

在本教程中,我們將探討如何使用Python和OpenCV庫構建人臉識別系統。我們將從安裝OpenCV庫和必要的依賴項開始。然後我們將深入探討主要內容,包括人臉檢測、人臉識別和跟蹤。我們還將討論如何使用OpenCV訓練我們自己的人臉識別模型。

在本教程結束時,您將對如何使用Python和OpenCV構建人臉識別系統有紮實的理解,並能夠將此知識應用於各種現實場景。

開始

在深入使用OpenCV庫之前,我們需要首先使用pip安裝該庫。但是,由於它不是內建的,我們必須首先安裝OpenCV庫。這可以使用pip包管理器完成。

要安裝OpenCV庫,請開啟您的終端並輸入以下命令:

pip install opencv-python-headless opencv-contrib-python-headless numpy

這將下載並安裝OpenCV庫及其依賴項。安裝完成後,我們可以開始使用OpenCV並利用其模組!

使用OpenCV庫構建人臉識別系統

要訓練我們自己的人臉識別模型,我們需要一個包含我們想要識別的人的影像的資料集。我們可以使用OpenCV的createLBPHFaceRecognizer()函式建立一個可以根據其LBPH特徵識別面部的模型。方法如下:

# Load the dataset
dataset_path = "path/to/dataset"
dataset = load_dataset(dataset_path)

# Extract features and labels from the dataset
features, labels = extract_features_labels(dataset)

# Create LBPH face recognizer and train the model
recognizer = cv2.face.createLBPHFaceRecognizer()
recognizer.train(features, labels)

# Save the trained model
model_path = "path/to/model"
recognizer.save(model_path)

在上面的程式碼中,我們首先載入我們想要識別的人的影像資料集。然後,我們使用extract_features_labels()函式從資料集中提取LBPH特徵和標籤。最後,我們使用cv2.face.createLBPHFaceRecognizer()函式建立LBPH人臉識別器的例項,並使用提取的特徵和標籤訓練模型。

現在我們已經準備好訓練資料,讓我們直接進入程式碼,嘗試編寫並解釋它,而不是將其分解為元件。這將使您更容易理解,並且不會在過程中感到過於困惑!

import cv2
import os

# Get the training images from a directory
def get_training_images(directory):
   faces = []
   labels = []
   label = 0

   for subdir in os.listdir(directory):
      subdir_path = os.path.join(directory, subdir)
      if not os.path.isdir(subdir_path):
         continue

      for filename in os.listdir(subdir_path):
         img_path = os.path.join(subdir_path, filename)
         img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
         if img is None:
            continue

         faces.append(img)
         labels.append(label)

      label += 1

   return faces, labels

# Train the facial recognition model
def train_model(faces, labels):
   recognizer = cv2.face.createLBPHFaceRecognizer()
   recognizer.train(faces, labels)
   return recognizer

# Recognize a face in an image
def recognize_face(img, recognizer, face_cascade):
   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
   faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

   for (x, y, w, h) in faces:
      roi_gray = gray[y:y + h, x:x + w]
      id, confidence = recognizer.predict(roi_gray)

      if confidence < 100:
         label = "Person {}".format(id)
      else:
         label = "Unknown"

      cv2.putText(img, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 2)
      cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

   return img

# Main function
def main():
   # Load the face cascade classifier
   face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

   # Load the training images
   faces, labels = get_training_images("training_images")

   # Train the facial recognition model
   recognizer = train_model(faces, labels)

   # Initialize the camera
   camera = cv2.VideoCapture(0)

   while True:
      # Capture a frame from the camera
      ret, img = camera.read()

      # Recognize faces in the image
      img = recognize_face(img, recognizer, face_cascade)

      # Display the image
      cv2.imshow("Face Recognition", img)

      # Wait for a key press
      if cv2.waitKey(1) & 0xFF == ord("q"):
         break

   # Release the camera and close the window
   camera.release()
   cv2.destroyAllWindows()

if __name__ == "__main__":
   main()

此程式碼包括使用OpenCV的createLBPHFaceRecognizer()函式載入和訓練人臉識別模型的函式,以及使用訓練好的模型識別影像中的人臉的函式,以及使用OpenCV的detectMultiScale()函式檢測影像中的人臉。

主函式使用計算機的攝像頭捕捉幀,然後使用recognize_face()函式識別這些幀中的人臉。識別到的人臉會貼上該人的姓名標籤,如果未識別到人臉則標註為“未知”,然後使用OpenCV的imshow()函式顯示在視窗中。

結論

總而言之,人臉識別技術在從安全到娛樂的各個領域的應用正在迅速增長。OpenCV庫提供了一種高效有效的方法來使用Python開發人臉識別系統。在本教程中,我們介紹了使用OpenCV構建人臉識別系統的基本步驟,從檢測影像和影片中的人臉到訓練我們自己的人臉識別模型。我們還討論了實施人臉識別系統時的一些關鍵考慮因素,例如該技術的倫理和法律意義。

雖然人臉識別技術有可能徹底改變許多行業,但確保其以道德和負責任的方式使用非常重要。實施適當的隱私和安全措施對於防止濫用這項技術至關重要。此外,瞭解人臉識別系統的潛在偏差和侷限性,並不斷提高技術的準確性和公平性也很重要。

總的來說,OpenCV庫為使用Python構建人臉識別系統提供了一個強大的工具。透過遵循本教程中概述的步驟並記住該技術的倫理考慮因素,開發人員可以為各種應用建立強大有效的、人臉識別系統。

更新於:2023年8月31日

284 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.