Biến webcam của bạn thành hệ thống phát hiện AI với dự án Python đơn giản này

Tác giả T-X, T.M.Hai 11, 2025, 09:00:10 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 2 Khách đang xem chủ đề.

Khám phá sức mạnh của trí tuệ nhân tạo ngay tại nhà bạn với dự án đơn giản này.

Python là một trong những ngôn ngữ phổ biến nhất để phát triển các dự án trí tuệ nhân tạo và thị giác máy tính. Với sức mạnh của OpenCV và các thư viện nhận diện khuôn mặt, bạn có thể xây dựng các hệ thống thông minh có khả năng đưa ra quyết định và hoàn thành nhiệm vụ. Hãy cùng xây dựng một hệ thống gửi cảnh báo khi phát hiện khuôn mặt.


Tôi đang sử dụng Windows 11 cho dự án này. Vì vậy, một số bước thiết lập có thể khác nếu bạn sử dụng Linux hoặc macOS. Ngoài ra, bạn vẫn có thể làm theo để hiểu dự án.

1. Tải xuống và cài đặt các phần phụ thuộc

Điều đầu tiên bạn cần cho dự án này là Python đã được cài đặt trên hệ thống của bạn. Tôi sẽ sử dụng phiên bản 3.12.x. Đối với trình soạn thảo mã, tôi đang sử dụng VS Code. Bạn có thể sử dụng bất kỳ trình soạn thảo nào bạn thích. Bước tiếp theo là thiết lập môi trường ảo của chúng ta. Tạo một thư mục dự án và vào trong đó. Sau đó mở terminal của bạn. Tôi đang sử dụng PowerShell. Để tạo môi trường ảo, hãy chạy lệnh sau:

Mã nguồn [Chọn]
python -m venv.venv
Sau đó kích hoạt môi trường ảo:

Mã nguồn [Chọn]
.\.venv\Scripts\Activate.ps1 # Windows PowerShell
source venv/bin/activate # Linux or macOS

Đối với dự án này, bạn sẽ cần một vài thư viện Python, chẳng hạn như OpenCV để chụp ảnh khuôn mặt, mediapipenhận diện khuôn mặt và playsound3tạo âm thanh. Hãy cài đặt chúng trong môi trường ảo của bạn bằng lệnh sau:

Mã nguồn [Chọn]
pip install opencv-python mediapipe playsound3

Bạn cũng có thể kiểm tra xem chúng đã được cài đặt đúng cách hay chưa bằng cách chạy lệnh sau:

Mã nguồn [Chọn]
pip list
Điều cuối cùng bạn cần là một tập tin âm thanh. Tôi sẽ sử dụng một tập tin mẫu alert.wav.

2. Hướng dẫn thiết lập dự án cơ bản

Giờ bạn đã cài đặt xong mọi thứ, hãy cùng nhau xây dựng nền tảng cho hệ thống cảnh báo AI của bạn. Hãy tạo một main.pytệp. Đó là nơi chứa tất cả mã của bạn. Hiện tại, việc duy nhất chúng ta cần làm là hiển thị hình ảnh từ webcam trên màn hình. Hãy bắt đầu với lệnh nhập duy nhất chúng ta cần ở giai đoạn này:

Mã nguồn [Chọn]
import cv2
OpenCV là công cụ cho phép chúng ta truy cập webcam, đọc khung hình và cuối cùng là vẽ các đối tượng như khung bao. Hiện tại, nó chỉ cần mở camera. Ngay bên dưới phần import, hãy thêm đoạn mã này:

Mã nguồn [Chọn]
cap = cv2.VideoCapture(0)
Dòng lệnh này hướng dẫn OpenCV mở camera mặc định. Nếu bạn đang dùng máy tính xách tay, "0" hầu như luôn là đáp án đúng. Trên máy tính để bàn có nhiều camera, bạn có thể cần thử 1 hoặc 2 sau. Để trải nghiệm được mượt mà, hãy thêm một bước kiểm tra an toàn đơn giản:

Mã nguồn [Chọn]
if not cap.isOpened():
    raise RuntimeError("Could not open webcam.")

Nếu camera đang bận hoặc bị che khuất, tốt nhất là nên báo lỗi ngay tại đây thay vì phải nhìn chằm chằm vào một cửa sổ đen sau đó. Bây giờ, hãy tạo một vòng lặp liên tục đọc các khung hình từ camera và hiển thị chúng trong một cửa sổ. Vòng lặp này sẽ tiếp tục chạy cho đến khi người dùng nhấn phím Q.

Mã nguồn [Chọn]
while True:
    ret, frame = cap.read()
    if not ret:
        break

    cv2.imshow("AI Alert System", frame)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

Vậy điều gì đang xảy ra ở đây?   Đăng nhập để xem liên kết()Nó lấy khung hình tiếp theo từ webcam của bạn. Nếu thất bại, chúng ta chỉ cần dừng vòng lặp. cv2.imshow()Nó hiển thị nguồn cấp video trực tiếp trong một cửa sổ có tiêu đề "Hệ thống cảnh báo AI". cv2.waitKey(1)Nó kiểm tra xem người dùng có nhấn phím Q hay không và thoát nếu có.

Khi vòng lặp kết thúc, webcam cần được giải phóng để các ứng dụng khác có thể sử dụng. Thêm đoạn mã này vào cuối tập tin:

Mã nguồn [Chọn]
cap.release()
cv2.destroyAllWindows()

Đến đây thì cứ việc chạy đi:

Mã nguồn [Chọn]
python main.py
Nếu mọi thứ được thiết lập đúng cách, hình ảnh từ webcam của bạn sẽ hiện lên trong một cửa sổ mới.


Nhấn phím Q để đóng cửa sổ.

3. Kiểm tra khả năng nhận diện khuôn mặt của bạn

Giờ đây, dự án cơ bản của chúng ta đã chạy và có thể mở webcam, đã đến lúc trang bị cho nó "bộ não". Chúng ta sẽ kết nối mô-đun Nhận diện khuôn mặt của Mediapipe để chương trình có thể nhận diện khuôn mặt trong thời gian thực. Cuộn lên đầu main.pytập tin của bạn và thêm đoạn mã nhập này cùng với các đoạn mã khác:

Mã nguồn [Chọn]
import mediapipe as mp
Điều này cho phép chúng ta truy cập trực tiếp vào API nhận diện khuôn mặt của Mediapipe. Ngay bên dưới phần khởi tạo webcam của bạn (hoặc bất kỳ đâu gần đầu, trước vòng lặp chính), hãy thêm:

Mã nguồn [Chọn]
mp_face = mp.solutions.face_detection
face_detector = mp_face.FaceDetection(model_selection=0, min_detection_confidence=0.5)

Đây là chức năng của nó: model_selection=0sử dụng mô hình nhẹ của Mediapipe được tối ưu hóa cho việc phát hiện ở cự ly gần, hoàn hảo cho khoảng cách của webcam. min_detection_confidence=0.5có nghĩa là "không hiển thị cho tôi các dự đoán có độ tin cậy dưới 50%". Bạn có thể chuyển cài đặt này lên 0.7sau nếu muốn phát hiện nghiêm ngặt hơn.

Bây giờ hãy cuộn vào bên trong vòng lặp chính và thêm phần này sau break câu lệnh.

Mã nguồn [Chọn]
# Convert to RGB because Mediapipe expects RGB frames
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

# Run face detection
results = face_detector.process(rgb)

# Check if any faces were found
faces_detected = results.detections is not None

OpenCV cung cấp cho chúng ta các khung hình ở định dạng BGR, nhưng Mediapipe chỉ hỗ trợ RGB, vì vậy chúng ta phải chuyển đổi màu sắc trước. face_detector.process()Công cụ này thực hiện phần việc nặng nhọc nhất. Nếu results.detectionstồn tại, điều đó có nghĩa là ít nhất một khuôn mặt đã được tìm thấy.

Việc này không bắt buộc, nhưng việc nhìn thấy các ô vuông xuất hiện trên khuôn mặt thực sự giúp xác nhận mọi thứ hoạt động tốt. Và trông cũng khá ngầu nữa. Hãy thêm đoạn mã này ngay bên dưới phần logic nhận diện:

Mã nguồn [Chọn]
if faces_detected:
        for detection in results.detections:
            box = detection.location_data.relative_bounding_box
            h, w, _ = frame.shape

            x = int(box.xmin * w)
            y = int(box.ymin * h)
            w_box = int(box.width * w)
            h_box = int(box.height * h)

            # Draw clean green face box
            cv2.rectangle(frame, (x, y), (x + w_box, y + h_box), (0, 255, 0), 2)
    else:
        # No face case
        cv2.putText(frame, "No face detected", (20, 40), cv2.FONT_HERSHEY_SIMPLEX,
                    1, (0, 0, 255), 2)

Về cơ bản, nếu webcam phát hiện khuôn mặt, nó sẽ vẽ một khung màu xanh lá cây xung quanh khuôn mặt của chúng ta. Chúng ta sử dụng một số phép tính để xác định diện tích khuôn mặt. Nếu không phát hiện thấy khuôn mặt, chúng ta sẽ viết một đoạn văn bản để phản ánh điều đó. Lưu tệp và chạy nó.
Phát hiện khuôn mặt bằng Python và MediaPipe.



Hãy thử di chuyển đầu, xuất hiện và biến mất khỏi khung hình, hoặc che mặt. Mediapipe sẽ xử lý tất cả một cách mượt mà.

4. Phát âm thanh khi nhận diện khuôn mặt

Giờ đây, chương trình của chúng ta đã có thể nhận diện khuôn mặt thành công, đã đến lúc hệ thống cảnh báo thực sự phát ra âm thanh cảnh báo. Điều đó có nghĩa là thêm một hiệu ứng âm thanh đơn giản phát ra ngay khi khuôn mặt xuất hiện trên camera. Chúng ta đã có sẵn alert.wavtệp tin này trong thư mục dự án, vì vậy việc duy nhất còn lại là dạy chương trình khi nào và cách phát âm thanh đó.

Chúng ta cần hai việc: playsound3phát âm thanh và threadingphát âm thanh mà không làm gián đoạn hình ảnh từ webcam. Thêm các lệnh import vào đầu file của bạn:

Mã nguồn [Chọn]
import playsound3
import threading

Thay vì gọi playsound3trực tiếp bên trong vòng lặp phát hiện, chúng ta gói nó vào một hàm nhỏ:

Mã nguồn [Chọn]
def play_alert():
    playsound3.playsound("alert.wav")

Chức năng này sau đó sẽ được khởi chạy trên một luồng riêng biệt, nhờ đó webcam vẫn hoạt động mượt mà.

Nếu chúng ta phát âm thanh cảnh báo ở mỗi khung hình, bạn sẽ nghe thấy một loạt âm thanh như tiếng súng máy. Vì vậy, chúng ta thêm một biến đơn giản để theo dõi xem âm thanh đã được phát hay chưa:

Mã nguồn [Chọn]
sound_played = False
Khi một khuôn mặt xuất hiện, chúng ta kích hoạt âm thanh một lần, rồi đánh dấu sound_played = True. Khi khuôn mặt biến mất, chúng ta đặt lại cờ. Bây giờ chúng ta đi vào vòng lặp webcam chính và mở rộng logic như sau:

    Nếu hệ thống phát hiện khuôn mặt và âm thanh chưa được phát, hãy phát âm thanh đó.
    Nếu không phát hiện thấy khuôn mặt nào, hãy đặt lại cờ.

Đây là phần đã được sửa đổi của vòng lặp:

Mã nguồn [Chọn]
# Inside your while True loop, after face detection:

if faces_detected and not sound_played:
    threading.Thread(target=play_alert).start()
    sound_played = True

elif not faces_detected:
    sound_played = False

Đó là tất cả logic chúng ta cần. Một khuôn mặt xuất hiện, âm thanh phát một lần. Khi khuôn mặt biến mất, hệ thống thiết lập lại. Nếu khuôn mặt xuất hiện lại, âm thanh lại phát.

Hy vọng bạn đã học được nhiều điều từ dự án này. Bạn có thể mở rộng nó bằng cách thêm phần cứng thực tế và tạo ra một dự án nhà thông minh. Toàn bộ mã nguồn có trên GitHub của tôi. Ngoài ra, hãy xem xét khám phá các dự án Python khác, chẳng hạn như ứng dụng trắc nghiệm hoặc ứng dụng danh sách việc cần làm.