STDIO
Tìm kiếm gần đây

    Nội dung

    OpenCV với Python Trong Ứng Dụng Phát Hiện Khuôn Mặt Trong Bức Ảnh

    Võ Lê Huy

    28/01/2019
    29/06/2020
    OpenCV với Python Trong Ứng Dụng Phát Hiện Khuôn Mặt Trong Bức Ảnh
    Tự động nhận dạng các khuôn mặt có trong bức ảnh với OpenCV và Python, ứng dụng tự động hóa.

    Một nhóm lập trình viên nước ngoài phát triển về trí tuệ nhân tạo đã nhận định rằng:

    Để đưa ra quyết định thực hiện một việc gì đó thì trước tiên phải nhận dạng được các vật chất xung quanh thế nên chúng tôi đã miệt mài học toán và thuật toán nhằm tối ưu nhất có thể nhận ra một vật thể, cũng là một con mèo nhưng lúc thì nó nhảy, lúc thì nó nằm và còn có lúc nó bị một vật gì đó cản một nửa khuôn mặt thế cho nên rất khó để mà nhận dạng ra được khuôn mặt cúa chúng, thay vào việc mãi mê nghiên cứu và phát triển thuật toán thì chúng tôi đã sử dụng một lượng hình ảnh/dữ liệu về con mèo nạp vào chương trình, cùng là một chi phí hoặc có khả năng thấp hơn nhưng kết quả lại tốt hơn rất nhiều.

    Bài viết này giới thiệu đến bạn đọc sử dụng OpenCV với ngôn ngữ mô tả là Python cùng với tệp tin XML Haarcascade để nhận diện khuôn mặt trong một bức ảnh.

    Môi trường thử nghiệm

    • Python phiên bản 3.6.5.
    • OpenCV phiên bản 3.4.1.

    Các thư viện cần thiết

    Sử dụng cửa sổ Command Prompt và thực viện dòng lệnh sau đây

    pip install opencv-python

    Sử dụng OpenCV trong bài toán nhận diện khuôn mặt

    Phần giới thiệu đã đề cập đến dùng hình ảnh/dữ liệu để giảm chi phí cho việc nghiên cứu thuật toán và những dữ liệu này đã được đúc kết thành tệp tin xml.

    Haar Cascade là dữ liệu được sử dụng phổ biến nhất, tôi chỉ sử dụng riêng một tệp tin trong bộ Haar Cascade là haarcascade_frontalface_default.xml và ngoài ra còn có các tệp tin về phát hiện mắt, miệng, hình dáng cơ thể trong bộ Haar Cascade.

    Đầu tiên khai báo những thư viện sau

    import cv2

    Bước 1: Đầu vào sẽ là bức ảnh và tệp tin xml

    image        = cv2.imread("images/Bill Gates.jpg")
    face_cascade = cv2.CascadeClassifier("Haar Cascade/haarcascade_frontalface_default.xml")

    Bước 2: Tạo một bức ảnh xám từ bức ảnh gốc

    grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    Bước 3: Sử dụng phương thức detectMultiScale để phát hiện khuôn mặt trong bức ảnh xám

    faces = faceCascade.detectMultiScale(
        grayImage,
        scaleFactor  = 1.1,
        minNeighbors = 5
    )
    • grayImage: là nguồn/bức ảnh xám.
    • scaleFactor: độ scale sau mỗi lần quét, tính theo 0.01 = 1%. Nếu như để scaleFactor = 1 thì tấm ảnh sẽ giữ nguyên
    • minNeighbors: scale và quét ảnh cho đến khi không thể scale được nữa thì lúc này sẽ xuất hiện những khung ảnh trùng nhau, số lần trùng nhau chính là tham số minNeighbors để quyết định cho việc có chọn khung ảnh này là khuôn mặt hay không.

    Ngoài ra còn có các tham số như là maxScale, minScale để cho kích thước khung ảnh bắt đầu và kích thước khung ảnh kết thúc. Có thể hiệu chỉnh tham số scaleFactor, minNeighbors, minScale, maxScale để có kết quả như mong muốn.

    Bước 4: Sau khi tính toán thì dữ liệu các khuôn mặt đã có trong biến faces, để muốn xác thực chúng ta vẽ nó lên bức ảnh gốc và phác họa ra màn hình

    # Draw
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
    # Show
    cv2.imshow("Faces found", image)

    Kết thúc chương trình với

    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Kết quả khi chạy chương trình

    result

    Source code đầy đủ

    Bill Gates và Steve Jobs
    Bill Gates và Steve Jobs
    import cv2
    
    # Bước 1: Tấm ảnh và tệp tin xml
    face_cascade = cv2.CascadeClassifier("Haar Cascade/haarcascade_frontalface_default.xml")
    image = cv2.imread("images/Bill Gates.jpg")
    
    # Bước 2: Tạo một bức ảnh xám
    grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    # Bước 3: Tìm khuôn mặt
    faces = face_cascade.detectMultiScale(
        grayImage,
        scaleFactor  = 1.1,
        minNeighbors = 5,
    )
    
    # Bước 4: Vẽ các khuôn mặt đã nhận diện được lên tấm ảnh gốc
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
    
    # Bước 5: Vẽ lên màn hình
    cv2.imshow("Faces found", image)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    Thảo luận

    Đăng nhập

    Bài viết liên quan

    Xử Lý Ảnh Với OpenCV: Các Phép Toán Hình Thái Học

    Xử Lý Ảnh Với OpenCV: Các Phép Toán Hình Thái Học

    Nẳm trong loạt bài viết trong chương trình Tự Học OpenCV Qua Các Ví Dụ Thực Tế. Bài viết giới thiệu những thuật toán cơ sở trong xử lý hình thái học, và đã giới thiệu ...

    Trương Xuân Đạt

    23/01/2015

    OpenCV – Cài Đặt Và Ví Dụ Minh Họa Sử Dụng

    OpenCV – Cài Đặt Và Ví Dụ Minh Họa Sử Dụng

    OpenCV (Open Computer Vision) là một thư viện mã nguồn mở chuyên dùng để xử lý các vấn đề liên quan đến thị giác máy tính. Nhờ một hệ thống các giải thuật chuyên biệt, ...

    Vũ Quang Huy

    29/09/2014

    Toán Tử Khung Xương Trong Ảnh Nhị Phân - Skeleton Binary Morphology

    Toán Tử Khung Xương Trong Ảnh Nhị Phân - Skeleton Binary Morphology

    Toán Tử Khung Xương rút trích thành phần chính đại diện cho hình dạng của đối tượng trong ảnh nhị phân. Được ứng dụng trong nhận dạng mẫu (nhận dạng kí tự), nén ảnh (được ...

    Kim Uyên

    24/05/2016

    OpenCV Với Python Trong Ứng Dụng Đếm Số Lượng

    OpenCV Với Python Trong Ứng Dụng Đếm Số Lượng

    Bài viết ứng dụng OpenCV để nhận dạng và đếm số lượng vật thể giúp giảm bớt thời gian làm việc thủ công cho con người. Bạn có thể ứng dụng ngoài đếm đậu để đếm nhiều loại ...

    Võ Lê Huy

    02/05/2019

    Thành Phần Hoá Các Đối Tượng Trong Game Với Cocos2d-x

    Thành Phần Hoá Các Đối Tượng Trong Game Với Cocos2d-x

    Trong quá trình phát triển ứng dụng, việc phát sinh ra lỗi ở một thành phần nào đó trong ứng dụng là điều không thể tránh khỏi. Dự án càng lớn, khả năng phát hiện lỗi ...

    Rye Nguyen

    11/08/2015

    Xử Lý Ảnh Với OpenCV: Lọc Số Trong Ảnh

    Xử Lý Ảnh Với OpenCV: Lọc Số Trong Ảnh

    Nẳm trong loạt bài viết trong chương trình Tự Học OpenCV Qua Các Ví Dụ Thực Tế. Bài viết sẽ giới thiệu khái niệm lọc số ảnh là gì?, khái niệm và công thức nhân chập ma ...

    Trương Xuân Đạt

    23/01/2015

    Xử Lý Ảnh Với OpenCV: Độ Sáng, Độ Tương Phản Và Biểu Đồ Tần Số Histogram

    Xử Lý Ảnh Với OpenCV: Độ Sáng, Độ Tương Phản Và Biểu Đồ Tần Số Histogram

    Nẳm trong loạt bài viết trong chương trình Tự Học OpenCV Qua Các Ví Dụ Thực Tế. Bài viết sẽ giới thiệu tăng giảm độ sáng, độ tương phản của một tấm ảnh. Giới thiệu, cách ...

    Trương Xuân Đạt

    23/01/2015

    DirectX – Lịch Sử Phát Triển Và Những Thăng Trầm

    DirectX – Lịch Sử Phát Triển Và Những Thăng Trầm

    OpenGL, Direct3D hay rộng hơn là DirectX là một trong những giao diện lập trình ứng dụng (API) về đa phương tiện thông dụng nhất hiện nay. Nhân sự kiện DirectX 12 ra mắt ...

    Vũ Quang Huy

    28/09/2014

    Chụp Ảnh Màn Hình Với C# Trong 5 Bước

    Chụp Ảnh Màn Hình Với C# Trong 5 Bước

    Hướng dẫn bạn đọc viết một ứng dụng bằng C# thực hiện thao tác chụp ảnh màn hình và tự động lưu lại theo định dạng chọn trước trong 5 bước. Ứng dụng có thể mở rộng thành ...

    Vũ Quang Huy

    28/09/2014

    Cơ Bản Về Ảnh - Cách OpenCV Lưu Trữ Dữ Liệu Ảnh

    Cơ Bản Về Ảnh - Cách OpenCV Lưu Trữ Dữ Liệu Ảnh

    Ảnh là một khái niệm quen thuộc đối với tất cả mọi người. Tuy nhiên, không có nhiều người hiểu chi tiết về ảnh, theo cái nhìn xử lý ảnh. Vì thế, trong bài viết này, tôi ...

    Kim Uyên

    24/05/2016

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    [email protected]

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020