CHƯƠNG 5 XÂY DỰNG ỨNG DỤNG DỰA TRÊN CƠ SỞ LÝ THUYẾT

Một phần của tài liệu Tài liệu Đề tài: Phát hiện khuôn mặt trong ảnh pptx (Trang 30 - 36)

Phát hiện mặt người trong ảnh có nhiều ứng dụng trong cuộc sống, tuy nhiên, trong khóa luận này, tôi chỉ xây dựng một chương trình nhỏ để minh họa cho các lý thuyết ở trên. Cụ thể đấy là một chương trình phát hiện mặt người trong ảnh được viết trên nền visual c ++ của Microsoft, sử dụng thư viện mã nguồn mở OpenCV của Intel.

1. Sơ lược về OpenCV

Open VC là thư viện mã nguồn mở của intel về thị giác máy tính. Nó cung cấp một bộ mã nguồn bao gồm hàng trăm hàm, lớp dựa trên các thuật toán về xử lý ảnh cũng như Computer vision dùng ngôn ngữ C/C++. Open CV thể hiện sự đa dạng của trí tuệ nhân tạo. Được ứng dụng nhiều trong các bài toán nhận dạng mặt, dò tìm mặt, phát hiện mặt, lọc Kalman, … Cấu trúc tổng quan của OpenCV bao gồm 5 phần chính. 4 trong 5 phần đó được chỉ ra trong hình vẽ dưới.

Phần CV bao gồm các thư viện cơ bản về xử lý ảnh và các giải thuật về thị giác máy tính. ML là bộ thư viện về các thuật toán học máy, bao gồm rất nhiều bộ phân cụm và phân loại thống kê. HighGUI chứa đựng những thủ tục vào ra, các chức năng về lưu trữ cũng như đọc các file ảnh và video. Phần thứ 4, Cxcore chứa đựng các cấu trúc dữ liệu cơ bản ( ví dụ như cấu trúc XML, các cây dữ liệu …). Phần cuối cùng là CvAux, phần này bao gồm các thư viện cho việc phát hiện, theo dõi và nhận dạng đối tượng (khuôn mặt, mắt …).

Về cơ bản, từ ảnh gốc ban đầu, hệ thống sẽ chia ảnh thành vô số vùng nhỏ để tính các đặc trưng, sau đấy đưa các đặc trưng. Tiếp theo, chương trình sẽ xác định các vùng khả quan (các ứng viên) có thể là khuôn mặt, cuối cùng các ứng viên này sẽ được đưa vào một bộ phân loại để tiến hành xác định ứng viên nào là mặt người.

3. Phân tích – thiết kế hệ thống phát hiện mặt người 3.1.Phân tích

Nhiệm vụ chính của chương trình là dò tìm khuôn mặt từ một bức ảnh, một file video hoặc từ webcam, sau đấy lưu khuôn mặt vào csdl để phục vụ cho các mục đích khác (sẽ được phát triển sau).

Như vậy các chức năng chương trình bao gồm: • Kết nối đến webcam, đọc các file ảnh và video.

• Phát hiện các nhiều khuôn mặt có trong bức ảnh, video, webcam ... • Lưu ảnh khuôn mặt được phát hiện vào csdl.

3.2.Thiết kế hệ thống

Với các chức năng ở trên, chương trình được chia thành thành 3 phần chính: Phần xử lý đầu vào, phần phát hiện khuôn mặt và phần xử lý đầu ra.

a. Xử lý đầu vào:

Chương trình nhận đầu vào là file ảnh, video hoặc webcam, tuy nhiên, việc phát hiện khuôn mặt được thực hiện trên các bức ảnh, do đó, với đầu vào là webcam hay file video, ta phải chuyển thành các ảnh tĩnh và xử lý trên từng ảnh tĩnh. Sau khi đã có ảnh đầu vào rồi thì sẽ chuyển ảnh cho giai đoạn xử lý tiếp theo, đó là phát hiện các khuôn mặt có trong ảnh.

b. Phát hiện khuôn mặt

Phần này xử lý chính nghiệp vụ của hệ thống. Sau khi có ảnh truyền vào, hệ thống sẽ thực hiện chức năng phát hiện khuôn mặt có trong ảnh.

Việc phát hiện khuôn mặt được thực hiện nhanh bằng thuật toán adaboost thông qua hàm cvHaarDetectObjects() của OpenCV. Hàm này thực hiện việc phát hiện đối tượng dựa trên các đặc trưng haar-like, cụ thể là nhờ vào một bộ Cascade được truyền vào cho hàm. Bộ Cascade được xây dựng theo dạng cây (tree-node) và đã được huấn luyện từ trước.

Việc huấn luyện bộ Cascade có thể thực hiện từ những dữ liệu thu thập được để phục vụ cho quá trình nhận dạng. Ví dụ, muốn nhận dạng một người A, ta thu thập các ảnh khuôn mặt của người A với nhiều tư thế, góc chụp và điều kiện chụp khác nhau, sau đấy cho bộ nhận dạng học theo

thuật toán Cascade training. Tuy nhiên việc nhận dạng khuôn mặt là một công việc khó và tốn nhiều thời gian, do đó, tôi không thực hiện nó trong khóa luận của mình.

c. Xử lý đầu ra.

Khuôn mặt sau khi được phát hiện sẽ được tách ra khỏi bức ảnh và lưu dưới dạng ảnh bitmap với phần mở rộng là *.jpg.

Đối với đầu vào là các file ảnh, dữ liệu đầu ra cũng là file ảnh đấy nhưng có lưu vị trí khuôn mặt đã được phát hiện trên bức ảnh, đồng thời tách các riêng khuôn mặt và lưu vào cơ sở dữ liệu. Đối với đầu vào là các file video hoặc webcam. Các khuôn mặt sẽ được tách ra và lưu lại thành các file ảnh riêng rẽ, và được đánh số thứ tự theo tên file video. Ví dụ như file video test.avi thì ảnh các khuôn mặt phát hiện được sẽ được đánh số theo thứ tự như sau: test.avi_1.jpg, test.avi_2.jpg …

d. Thiết kế cơ sở dữ liệu

Lưu trữ cơ sở dữ liệu là một phần quan trọng của ứng dụng. Việc xây dựng, tổ chức cơ sở dữ liệu ảnh hướng lớn đến tốc độ của chương trình. Do đó tôi đã xây dựng và quản cơ sở dữ liệu bằng hệ quản trị cơ sở Oracle, đây là hệ quản trị cơ sở dữ liệu mạnh, đáp ứng được nhiều yêu cầu về quản lý cơ sở dữ liệu của các doanh nghiệp lớn, đặc biệt là các ngân hàng hay kho bạc. Tuy hiện tại, chương trình chỉ dừng lại ở mức phát hiện khuôn mặt trong ảnh, nhưng việc xây dựng một cơ sở dữ liệu tốt sẽ là tiền đề để có thể phát triển chương trình thành các ứng dụng lớn hơn sau này.

Hệ thống cần lưu trữ các dữ liệu: Ảnh khuôn mặt sau khi đã được phát hiện. Đối với đầu vào là file ảnh:

• Lưu ảnh đầu vào cùng vị trí khuôn mặt đã được phát hiện trên bức ảnh • Lưu từng khuôn mặt được phát hiện.

Đối với đầu vào là file video, hoặc webcam: • Lưu các khuôn mặt được phát hiện

Như vậy các thông tin trong cơ sở dữ liệu bao gồm 2 thực thể sau: • ẢNH GỐC ( IMAGES ): Ảnh đầu vào.

ID: Mã ảnh, kiểu Integer, là khóa chính và có ràng buộc là tự tăng.

Name: Tên của bức ảnh, kiểu dữ liệu varchar2(200). Trong trường hợp đầu vào là video thì tên sẽ được lấy theo tên của file video, còn nếu đầu vào là webcam thì sẽ đặt là webcam_ID (thêm ID ở trên vào tên).

Image: Lưu mã nhị phân của bức ảnh.

URL: lưu đường dẫn đến bức ảnh, kiểu giữ liệu varchar2(1000)

Lưu ý: Trong trường hợp file đầu vào là video hoặc webcam thì các trường Image, và URL sẽ nhận giá trị null.

KHUÔN MẶT ( FACES ): Các khuôn mặt phát hiện được. Các thuộc tính bao gồm: - ID: Mã ảnh, kiểu Integer, là khóa chính và có ràng buộc là tự tăng.

- IMAGE_ID: ID của ảnh gốc, kiểu dữ liệu Interger, là khóa ngoại tham chiếu đến bảng ẢNH GỐC.

- Name: Tên của khuôn mặt, được đặt theo tên ảnh gốc, đồng thời thêm số thứ tự để nhận biết các khuôn mặt của cùng ảnh gốc.

- Image: Lưu mã nhị phân của ảnh khuôn mặt.

- URL: lưu đường dẫn đến ảnh khuôn mặt, kiểu giữ liệu varchar2(1000).

e. Thiết kế giao diện

Giao diện của chương trình được thiết kế thân thiện và đơn giản. Tập trung vào chức năng chính phát hiện khuôn mặt trong ảnh. Bố cục trên giao diện được chia thành 4 phần.

Phần 1, chọn đầu vào. Các ảnh hoặc video có thể được lưu tùy ý trong các thư mục trên máy tính của người dùng. Phần thứ hai là danh sách các khuôn mặt đã được phát hiện và được lưu trong cơ sở dữ liệu. Phần thứ 3 là danh sách các Cascade. Cuối cùng là phần xử lý và hiện kết quả (số khuôn mặt phát hiện được, thời gian thực hiện). Người dùng chọn bức ảnh, chọn bộ Cascade, sau đấy nhấn vào nút “Detect” để thực hiện việc xác định khuôn mặt trên ảnh. Giao diện của chương trình được thể hiện như hình dưới.

Một phần của tài liệu Tài liệu Đề tài: Phát hiện khuôn mặt trong ảnh pptx (Trang 30 - 36)