Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Cách làm đồ án nhận diện khuôn mặt bằng OpenCV
Hướng Dẫn Đồ Án

Cách làm đồ án nhận diện khuôn mặt bằng OpenCV

Chia sẻ
Chia sẻ

Trong kỷ nguyên của trí tuệ nhân tạo và thị giác máy tính, nhận diện khuôn mặt (face recognition) đang trở thành một trong những ứng dụng phổ biến nhất – từ mở khóa điện thoại đến giám sát an ninh. Nếu bạn là sinh viên ngành CNTT hoặc AI, việc làm đồ án AI nhận diện khuôn mặt bằng OpenCV không chỉ giúp bạn ứng dụng kiến thức vào thực tế mà còn dễ dàng ghi điểm với giảng viên nhờ tính ứng dụng cao.

Vậy làm thế nào để xây dựng một ứng dụng nhận diện khuôn mặt đơn giản nhưng hiệu quả, sử dụng Python và OpenCV? Bài viết này sẽ hướng dẫn bạn từ A đến Z, đảm bảo bạn có thể trình bày và demo đầy đủ trong buổi bảo vệ đồ án.

Chuẩn bị môi trường lập trình

Đầu tiên, bạn cần đảm bảo máy tính đã cài đặt:

  • Python 3.7 trở lên

  • Trình quản lý gói pip

  • IDE như PyCharm hoặc VS Code

Sau đó, cài đặt các thư viện cần thiết:

pip install opencv-python opencv-contrib-python numpy pillow

Giải thích:

  • opencv-python: thư viện chính cho xử lý ảnh

  • opencv-contrib-python: chứa các mô hình face recognizer (LBPH, EigenFace…)

  • numpy: để xử lý mảng ảnh

  • pillow: hỗ trợ thao tác ảnh PIL

Phát hiện khuôn mặt bằng Haar Cascade

Đây là bước nhận diện vị trí khuôn mặt trong ảnh hoặc video. Chúng ta sẽ dùng mô hình Haar Cascade được huấn luyện sẵn (có sẵn trong OpenCV).

File: detect_face.py

import cv2

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)

for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

cv2.imshow("Face Detection", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Lưu ý: Bạn có thể thay test.jpg bằng tên file ảnh chứa khuân mặt của bạn hoặc tải xuống ảnh mẫu tại đây sau đó đổi tên file vừa tải thành test.jpg đặt file này cùng trong thư mục chứa file detect_face.py nhé!

Bấm nút chạy chương trình và cho ra kết quả sau:

Kết quả nhận diện khuôn mặt

Thu thập dữ liệu khuôn mặt (dataset)

Một hệ thống nhận diện cần được huấn luyện từ dữ liệu cụ thể. Mỗi người dùng cần có ảnh mẫu của khuôn mặt (thường là 50–100 ảnh).

Chúng ta sẽ viết một đoạn mã dùng webcam để chụp ảnh khuôn mặt và lưu vào thư mục dataset.

File: crop_face.py

import cv2
import os

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
cam = cv2.VideoCapture(0)

user_id = input("Nhập ID người dùng: ")
count = 0

if not os.path.exists("dataset"):
    os.mkdir("dataset")

while True:
    ret, img = cam.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x, y, w, h) in faces:
        count += 1
        face_img = gray[y:y + h, x:x + w]
        face_img = cv2.resize(face_img, (200, 200))
        cv2.imwrite(f"dataset/User.{user_id}.{count}.jpg", face_img)
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    cv2.imshow("Collecting Data", img)
    if cv2.waitKey(1) == 27 or count >= 100:  # ESC hoặc đủ 100 ảnh
        break

cam.release()
cv2.destroyAllWindows()

Huấn luyện mô hình nhận diện khuôn mặt

Sau khi có dữ liệu, bạn huấn luyện mô hình với thuật toán LBPH (Local Binary Pattern Histogram) – phù hợp với điều kiện ánh sáng không đồng đều, đơn giản nhưng hiệu quả.

File: train_face.py

import cv2
import numpy as np
from PIL import Image
import os

path = 'dataset'
recognizer = cv2.face.LBPHFaceRecognizer_create()

def get_images_and_labels(path):
    image_paths = [os.path.join(path, f) for f in os.listdir(path)]
    face_samples = []
    ids = []
    for image_path in image_paths:
        img = Image.open(image_path).convert('L')
        np_img = np.array(img, 'uint8')
        id = int(os.path.split(image_path)[-1].split('.')[1])
        face_samples.append(np_img)
        ids.append(id)
    return face_samples, ids

faces, ids = get_images_and_labels(path)
recognizer.train(faces, np.array(ids))
recognizer.save('trainer.yml')

Nếu gặp lỗi vui lòng cài đặt thư viện sau:

pip install opencv-contrib-python

Sau khi huấn luyện, mô hình sẽ lưu vào file trainer.yml.

Nhận diện khuôn mặt thời gian thực

Đây là bước giúp bạn demo trực tiếp trước giảng viên. Sử dụng webcam, đọc mô hình trainer.yml và kiểm tra khuôn mặt có khớp ID nào không:

File: detect_face_run.py

import cv2

recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer.yml')
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
cam = cv2.VideoCapture(0)

while True:
    ret, img = cam.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.2, 5)

    for (x, y, w, h) in faces:
        id, confidence = recognizer.predict(gray[y:y + h, x:x + w])
        text = f"User {id}" if confidence < 50 else "Unknown"
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
        cv2.putText(img, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

    cv2.imshow('Face Recognition', img)
    if cv2.waitKey(1) == 27:  # ESC
        break

cam.release()
cv2.destroyAllWindows()

Viết báo cáo và trình bày đồ án

Để hoàn chỉnh, bạn cần trình bày rõ trong báo cáo:

  • Mục tiêu: Nhận diện khuôn mặt bằng webcam

  • Công nghệ: Python, OpenCV, LBPH

  • Quy trình:

    • Phát hiện khuôn mặt

    • Thu thập dữ liệu

    • Huấn luyện

    • Nhận diện real-time

  • Ưu điểm: Nhanh, dễ triển khai, demo tốt

  • Giới hạn: Nhận diện trong phạm vi nhỏ, không tối ưu cho nhiều người dùng

Kết luận

Làm đồ án nhận diện khuôn mặt bằng OpenCV là một lựa chọn thông minh và thực tế dành cho sinh viên ngành Công nghệ Thông tin, đặc biệt trong lĩnh vực Trí tuệ nhân tạo và Thị giác máy tính. Chỉ với kiến thức nền tảng về Python và xử lý ảnh, bạn có thể xây dựng một hệ thống hoàn chỉnh: từ phát hiện khuôn mặt, thu thập dữ liệu, huấn luyện mô hình, đến nhận diện thời gian thực bằng webcam.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!