Tải bản đầy đủ (.pdf) (51 trang)

xây dựng hệ thống gán tên tự động cho người trong ảnh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.78 MB, 51 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

NGÀNH KỸ THUẬT PHẦN MỀM

Đề tài

XÂY DỰNG HỆ THỐNG GÁN TÊN TỰ ĐỘNG
CHO NGƯỜI TRONG ẢNH

Sinh viên: Lương Đức Duy
Mã số: 1111280
Khóa: K37

Cần Thơ, 05/2015


BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
BỘ MÔN CÔNG NGHỆ PHẦN MỀM

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

NGÀNH KỸ THUẬT PHẦN MỀM


Đề tài

XÂY DỰNG HỆ THỐNG GÁN TÊN TỰ ĐỘNG
CHO NGƯỜI TRONG ẢNH

Người hướng dẫn

Sinh viên thực hiện

TS Phạm Nguyên Khang

Lương Đức Duy
Mã số: 1111280
Khóa: K37

Cần Thơ, 05/2015
2


Lời cảm ơn
Trải qua quá trình học tập và làm việc trong một thời gian dài, gặp không ít khó
khăn, song với sự nổ lực của bản thân, sự giúp đỡ của thầy cô và bạn bè, cuối cùng
đề tài luận văn của tôi cũng đã hoàn thành.
Qua vài lời này, mình muốn bày tỏ lòng biết ơn sâu sắc của mình đến với:
 Các thầy cô Khoa Công Nghệ Thông Tin và Truyền Thông đã dìu dắt, dạy dỗ
và giúp đỡ mình trong 4 năm đại học.
 Thầy Phạm Nguyên Khang – giáo viên hướng dẫn đã gắn bó, nhiệt tình giúp
đỡ mình về chuyên môn và kỹ thuật ngay từ đầu cho dù mình không học
chuyên về Khoa học máy tính.
 Ngoài ra còn sự giúp đỡ của bạn bè, động viên hỗ trợ về tinh thần và thời gian

để giúp mình hoàn thành luận văn này.
Vì kinh nghiệm còn ít ỏi, thời gian thực hiện tương đối ngắn, và do bản thân
cũng không học chuyên ngành Khoa học máy tính, cho nên đề tài luận văn không
tránh khỏi sai sót.
Rất mong nhận được ý kiến đóng góp của quý thầy cô và bạn bè để đề tài được
hoàn thiện hơn.
Chân thành cảm ơn

3


Mục lục
Lời cảm ơn ..............................................................................................................3
Mục lục ....................................................................................................................4
Danh mục hình ảnh .................................................................................................6
Danh mục bảng .......................................................................................................7
Tóm lược .................................................................................................................8
GIỚI THIỆU .............................................................................................................10
Đặt vấn đề..............................................................................................................11
Lịch sử giải quyết vấn đề ......................................................................................11
Mục tiêu đề tài .......................................................................................................12
Đối tượng và phạm vi nghiên cứu .........................................................................12
Nội dung nghiên cứu .............................................................................................12
Đóng góp chính của đề tài .....................................................................................12
Bố cục của quyển luận văn....................................................................................12
NỘI DUNG ...............................................................................................................14
Chương 1 - Mô tả bài toán ....................................................................................15
1.1 Mô tả chi tiết bài toán...............................................................................15
1.2 Các giải pháp liên quan ............................................................................16
1.3 Lựa chọn giải pháp ...................................................................................17

Chương 2 – Thiết kế và cài đặt giải pháp .............................................................18
1.1 Tổng quan về gán nhãn tự động cho người trong ảnh .............................18
1.2 Định vị mặt người sử dụng đặc trưng Haar-like ......................................19
1.3 Trích xuất các đặc trưng SIFT của ảnh ....................................................27
1.4 Gán nhãn cho ảnh bằng giải thuật Naive-Bayes Nearest-Neighbor (NBNN)
31
1.5 Hệ thống gán nhãn tự động cho người trong ảnh .....................................35
Chương 3 – Kiểm thử và đánh giá ........................................................................41
Thí nghiệm 1 .....................................................................................................42
Thí nghiệm 2 .....................................................................................................43

4


Thí nghiệm 3 .....................................................................................................45
Đánh giá chung .................................................................................................48
KẾT LUẬN ...............................................................................................................49
Kết quả đạt được ...................................................................................................50
Hướng phát triển ...................................................................................................50
Tài liệu tham khảo .....................................................................................................51

5


Danh mục hình ảnh
Hình 1.1: Mô tả bài toán gán nhãn cho người trong ảnh ..........................................15
Hình 2.1: Mô tả tổng quan về việc gán nhãn tự động cho người trong ảnh .............18
Hình 2.2: Các đặc trưng Haar-like (Nguồn: Wordpress) ..........................................19
Hình 2.3: Mô tả việc xám hóa hình ảnh ....................................................................20
Hình 2.4: Mô tả việc chèn đặc trưng Haar-like lên ảnh để định vị khuôn mặt .........21

Hình 2.5: Mô tả việc định vị mặt người trong ảnh....................................................21
Hình 2.6: Mô tả việc tách mặt người ra khỏi ảnh .....................................................22
Hình 2.7: Cấu trúc và nội dung bên trong bộ thư viện OpenCV (nguồn:
learningopencv.files.wordpress.com) .......................................................................24
Hình 2.8 : Ví dụ về các SIFT keypoint trên một ảnh (nguồn: Internet) ....................27
Hình 2.9 : Hình biểu thị mô tả hướng và độ lớn của các đặc trưng (nguồn:
Codeproject) ..............................................................................................................29
Hình 2.10: Ví dụ về một tập hợp các ảnh mặt người được cắt ra dùng để tính toán các
đặc trưng SIFT ..........................................................................................................30
Hình 2.11: Mô tả luồng xử lý của hệ thống gán nhãn tự động .................................36
Hình 2.12: Giao diện chính của hệ thống gán nhãn tự động cho người trong ảnh ...37
Hình 2.13: Hệ thống đang xử lý hình ảnh đầu vào ...................................................38
Hình 2.14: Hệ thống hiển thị kết quả trả về ..............................................................39
Hình 2.15: Hiển thị tập mặt của một người...............................................................40
Hình 3.1: Một số hình ảnh trong bộ hình ảnh được sử dụng để thực nghiệm ..........41
Hình 3.2: Hình ảnh 5 người được đem ra đánh giá trong lần 1 ................................42
Hình 3.3: Hình 10 người được đem ra đánh giá trong lần 2 .....................................43
Hình 3.4: Hình 20 người được đem ra đánh giá trong lần 3 .....................................45

6


Danh mục bảng
Bảng 3.1: Kết quả nhận diện thí nghiệm 1 bằng Brute-Force ..................................42
Bảng 3.2: Kết quả nhận diện thí nghiệm 1 bằng FLANN ........................................42
Bảng 3.3: Kết quả nhận diện thí nghiệm 2 bằng Brute-Force ..................................43
Bảng 3.4: Kết quả nhận diện thí nghiệm 2 bằng FLANN ........................................44
Bảng 3.5: Kết quả nhận diện thí nghiệm 3 bằng Brute-Force ..................................46
Bảng 3.6: Kết quả nhận diện thí nghiệm 3 bằng FLANN ........................................47
Bảng 3.7: Tổng kết đánh giá giải thuật NBNN .........................................................48


7


Tóm lược
Với sự phát triển của công nghệ số, nguồn dữ liệu ảnh ngày càng tăng. Làm
cho máy tính có thể nhận dạng đối tượng có trong ảnh, hiểu và mô tả được nội dung
ảnh là một trong những nhánh nghiên cứu của ngành thị giác máy tính. Mục tiêu của
đề tài này là áp dụng các thành tựu trong thị giác máy tính để xây dựng một hệ thống
có khả năng “biết” được tên của từng người có trong ảnh.
Để xác định được tên của từng người có trong ảnh, đầu tiên là phải xác định được
vị trí khuôn mặt có trong ảnh đầu vào, bộ thư viện OpenCV có module định vị mặt
người có trong ảnh khá chính xác. Mỗi ảnh mặt người sẽ được trích xuất thành các
thông tin mà máy tính có thể hiểu được, các thông tin này được gọi là các điểm đặc
trưng của một ảnh, trong đề tài này sử đặc trưng cục bộ SIFT (Scale invariant Feature
Transform). Mỗi SIFT của một ảnh là một vector đặc trưng có 128 chiều, trung bình
một ảnh mặt người có khoảng 200 SIFT. Với mỗi ảnh đầu vào, các đặc trung SIFT
của ảnh đầu vào sẽ được so khớp với các lớp SIFT trong cơ sở dữ liệu để đưa ra quyết
định gán nhãn cho bức ảnh. Lớp SIFT trong cơ sở dữ liệu là tổng hợp của tất cả các
SIFT của ảnh của cùng một người. Ứng với mỗi SIFT của mỗi ảnh đầu vào. Câu trả
lời cho bài toán là lớp SIFT nào trong cơ sở dữ liệu có khoảng cách gần nhất với SIFT
của ảnh đầu vào.

Abstract
With the development of digital technology, image data sources is increasing.
Making the computer can identify objects in pictures, understand and describe the
content of the photo is a research branch of visual computing industry. The objective
of this project is applying the achievements in computer vision to build a system with
the ability to "know" the name of each person in the picture.
To determine the name of each person in the picture, the first is to identify the

location face in the input image, the OpenCV library with navigation module pictured
faces quite accurate. Each face image will be extracted into the information that
computer can understand, this information is called the interesting points of a picture,
this project uses SIFT (Scale invariant Feature Transform) to described a picture. The
SIFT feature of a picture is a vector has 128 dimensions, each SIFT feature is called
SIFT keypoints. A picture of one person face has around 200 SIFT keypoints in
average. For each input picture, it’s SIFT keypoints will be matched with all CLASS
of SIFT keypoints in the database. The class of SIFT keypoints in the database is the
sum of all of the SIFT keypoints which is extracted from all images of the same
8


person. The output is the class of SIFT keypoints has the closest distance with the
SIFT keypoints of input picture.

9


GIỚI THIỆU

10


Đặt vấn đề
Hiện nay, với sự phát triển chóng mặt của công nghệ thông tin, nhu cầu sử dụng
và lưu trữ thông tin của con người ngày càng cao. Nếu như những ngày đầu, máy tính
được sử dụng để giải quyết những vấn đề đòi hỏi tính toán cao, phức tạp và khó tiếp
cận, thì hiện nay việc sử dụng máy tính đã là trở nên một nhu cầu gần như cơ bản đối
với mọi người. Một trong những nhu cầu đặc biệt lớn khi mọi người sử dụng máy
tính đó chính là lưu giữ ký ức, cụ thể hơn là những tấm ảnh. Tuy nhiên sẽ không là

vấn đề nếu việc lưu trữ ảnh chỉ dừng lại vài chục tấm, các điện thoại di động ngày
nay đã có bước tiến xa trong việc chụp ảnh. Cho nên nhu cầu lưu trữ ảnh đẩy lên cao
khiến mỗi máy tính cá nhân chứa cả trăm tấm ảnh, cả ngàn tấm ảnh, thậm chí đối với
các nhà nhiếp ảnh, làm phim, v.v thì con số đó càng lớn hơn nữa.Vấn đề đặt ra là với
số lượng lớn ảnh như vậy, thì làm sao để quản lý dễ dàng. Có nhiều phương pháp để
quản lý ảnh, trong đó cách tiếp cận quản lý ảnh theo mặt người là một phương pháp
vừa trực quan, dễ nhìn và mang tính kết nối cao.
Tiêu biểu có thể kể đến chức năng gắn thẻ (tag) ảnh của Facebook, ảnh của
người dùng đưa lên, mỗi khuôn mặt sẽ được định vị và gán cho một cái tên tương
ứng, mọi người vào xem có thể được đây là ai, có trang Facebook nào. Ngoài ra các
chương trình quản lý ảnh hiện đại ngày nay cũng có nhận diện khuôn mặt như Picasa
của Google, iPhoto của Apple, v.v
Các chương trình hay hệ thống muốn xác định tên của một người trong ảnh,
trước hết cần phải xác định được những khuôn mặt có trong bức ảnh rồi mới dùng
các khuôn mặt ấy để xác định tên của khuôn mặt. Hiện nay đã có rất nhiều phương
pháp xác định mặt người, có nhiều nghiên cứu để phát triển các hệ thống nhận dạng
mặt người với độ chính xác cao và nhanh chóng. Do đó trong đề tài luận văn này, tôi
không đi sâu vào việc làm thế nào để nhận dạng khuôn mặt, mà tôi sử dụng lại module
nhận dạng khuôn mặt có trong bộ thư viện OpenCV để xác định mặt người, đây là
một bộ thư viện khá nổi tiếng và được nhiều người sử dụng trong thị giác máy tính.
Khi đã xác định được mặt người thì tôi sẽ trích xuất các đặc trưng cục bộ SIFT để
làm cơ sở so sánh, từ đó có thể phân loại mặt người theo tên.

Lịch sử giải quyết vấn đề
Trong lịch sử phát triển việc nhận dạng khuôn mặt trên máy tính, đã có nhiều
công trình nghiên cứu và đem lại nhiều kết quả khác nhau. Dưới đây có thể kể đến
một số công trình như: Nghiên cứu của Wenyi Zhao, Arvindh Krishnaswamy, Rama
Chellappa, Daniel L. Swets, John Weng (1998) sử dụng phương pháp PCA (phân tích
thành phần chính) kết hợp LDA (phân tích độc lập tuyến tính). Nghiên cứu của Jeffrey


11


Huang, Chengjun Liu, và Harry Wechsler (1998), đề xuất thuật toán căn cứ trên tính
tiến hóa (Evolutionary computation) và di truyền (Genetic) cho các tác vụ nhận dạng
khuôn mặt. Nghiên cứu của Daniel B. Graham và Nigel M. Allinson (1998), sử dụng
phương pháp được gọi là tạo bản sao không gian đặc trưng để biểu diễn và nhận dạng
hướng di chuyển của khuôn mặt. Vấn đề là các nghiên cứu này sử dụng giải thuật khá
phức tạp và khó cài đặt.

Mục tiêu đề tài
Mục tiêu là xây dựng một hệ thống quản lý hình ảnh theo mặt những người có
trong tấm ảnh. Tính năng chính của hệ thống là định vị và gán nhãn cho người có
trong mặt trong tấm ảnh.

Đối tượng và phạm vi nghiên cứu
Đối tượng và phạm vi của hệ thống quản lý hình ảnh là những bức ảnh của
nhiều người, nguồn dữ liệu được lấy từ các trang mạng và thông qua các hình ảnh tự
chụp.

Nội dung nghiên cứu
 Phương pháp định vị mặt người và việc sử dụng bộ thư viện OpenCV để thực
hiện việc định vị và trích xuất mặt người từ tấm ảnh
 Phương pháp xác định đặc trưng của tấm ảnh và ứng dụng đặc trưng SIFT vào
việc trích xuất các đặc trưng từ hình ảnh mặt người
 Tìm hiểu giải thuật học Naive-Bayes Nearest-Neighbor và ứng dụng giải thuật
này vào việc gán nhãn cho tên người có trong ảnh dựa vào đặc trưng SIFT

Đóng góp chính của đề tài
 Xây dựng được hệ thống quản lý hình ảnh theo mặt người

 Thực nghiệm được độ chính xác và thời gian chạy của giải thuật Naïve-Bayes
Nearest-Neighbor trên thực tế, từ đó đưa ra hướng nghiên cứu và phát triển
cho giải thuật nói riêng và thị giác máy tính nói chung

Bố cục của quyển luận văn
Quyển luận văn được chia làm ba phần chính:
 Phần giới thiệu

12


o Đặt vấn đề
o Lịch sử giải quyết vấn đề
o Mục tiêu đề tài
o Đối tượng phạm vi nghiên cứu
o Nội dung nghiên cứu
o Đóng góp chính của đề tài
 Phần nội dung
o Chương 1 – Mô tả bài toán
o Chương 2 – Thiết kế và cài đặt giải pháp
o Chương 3 – Kiểm thử và đánh giá
 Phần kết luận
o Kết quả đạt được
o Hướng phát triển

13


NỘI DUNG


14


Chương 1 - Mô tả bài toán
1.1 Mô tả chi tiết bài toán
Bài toán chung của đề tài này là bài toán gán nhãn cho ảnh, trong trường hợp
này là việc gán tên người tương ứng cho ảnh mặt người. Việc gán nhãn này cũng có
thể gọi là nhận dạng khuôn mặt. Một hệ thống nhận dạng khuôn mặt là một ứng dụng
máy tính cho phép tự động xác định hoặc xác minh một người từ trong một bức ảnh
số hoặc một khung hình từ trong một đoạn phim. Hình 1.1 mô tả việc gán tên tự động
cho người trong ảnh.

Hình 1.1: Mô tả bài toán gán nhãn cho người trong ảnh
Các bước cơ bản trong hệ thống bao gồm:
1. Định vị khuôn mặt trong ảnh
2. Trích xuất các đặc trưng trong ảnh khuôn mặt được xác định ở bước 1
3. Gán nhãn cho tên người dựa trên các đặc trưng trích xuất trong bước 2

15


1.2 Các giải pháp liên quan
Định vị khuôn mặt
Để giải quyết được bài toán gán nhãn cho người trong ảnh, đầu tiên phải định vị được
khuôn mặt nằm ở đâu trong bức ảnh. Bài toán nhận diện khuôn mặt là bài toán được các kỹ
sư công nghê, các nhà tóa học quan tâm và nghiên cứu từ rất lâu. Hiện nay, trên thế giới có
rất nhiều phương pháp để nhận diện được khuôn mặt như template matching, neuron
network, haar-like… Tuy nhiên, phương pháp nhận dạng dựa trên các đặc trưng haar-like
được sử dụng nhiều nhất. Phương pháp này được cho là đơn giản và kết quả phát hiện là
tương đối cao, lên tới trên 98%.


Trích xuất đặc trưng từ ảnh
Có nhiều cách để biểu diễn một tấm ảnh trong máy tính. Cách đơn giản nhất
thường dùng là hiển thị ảnh bằng một ma trận các điểm ảnh, mỗi điểm ảnh hiển thị
một màu trên bức ảnh gọi là pixel. Tuy nhiên phương pháp này hiển thị này còn thô
và hầu như không được dùng để phân loại ảnh. Trong bài toán phân loại ảnh, ta cần
biểu diễn ảnh ở mức độ trừu tượng hơn, các dạng biểu diễn này là: màu sắc, texture,
shape, đặc trưng cục bộ SIFT. Trong đó, đặc trưng cục bộ SIFT là một trong những
phương pháp được đánh giá cao và được cộng đồng những người làm về phân loại
ảnh chứng minh đây là đặc trưng mang lại kết quả cao nhất.
Gán nhãn tên người cho ảnh
Bài toán gán nhãn cho người trong ảnh là thuộc về bài toán phân lớp ảnh, tức là
sẽ quyết định xem ảnh nào thuộc lớp nào. Vấn đề phân lớp ảnh là một trong những
vấn đề quan trọng trong thị giác máy tính. Phân lớp ảnh có nhiều phương pháp, tuy
nhiên có thể chia các phương pháp đó thành hai hướng tiếp cận chính:
1. Phương pháp dựa trên quá trình học/huấn luyện làm cơ sở xây dựng mô hình học.
Các phương pháp có thể kể đến là: SVM (Support Vector Machine), Boosting,
Decision tree(Cây quyết định), … Trong đó SVM là phương pháp hàng đầu hiện
nay trong các phương pháp này
2. Phương pháp không dựa trên quá trình học và không cần xây dựng mô hình học.
Các phương pháp này đưa ra quyết định trực tiếp dựa trên dữ liệu. Các phương
pháp này thường dựa trên ước lượng khoảng cách đến các láng giềng gần nhất
(Nearest-Neighbor)
Cách tiếp cận thứ 2 có những ưu điểm so với cách tiếp cận đầu tiên là:
 Có khả năng xử lý một số lượng các lớp

16


 Không cần quá trình học/huấn luyện

Tuy nhiên cách tiếp cận thứ hai lại có những nhược điểm:
 Thời gian phân loại chậm
 Việc lượng tử hóa hình ảnh làm mất các thông tin đến kết phân loại ảnh không
chính xác
Thực ra phương pháp Naïve-Bayes Nearest Neighbor(NBNN) cũng thuộc cách
tiếp cận thứ 2 nhưng lại giải quyết được nhược điểm của cách tiếp cận thứ 2 do không
cần lượng tử hóa hình ảnh. Phương pháp này vừa giải quyết được vấn đề vừa cài đặt
khá đơn giản.
1.3 Lựa chọn giải pháp
Từ các phân tích trên, trong đề tài này sẽ sử dụng các phương pháp sau để xây
dựng hệ thống:
1. Định vị mặt người bằng phương pháp sử dụng Haar-like feature, việc này sẽ được
thực hiện bởi một module trong bộ thư viện OpenCV
2. Trích xuất đặc trưng từ ảnh bằng cách sử dụng các đặc trưng SIFT
3. Gán nhãn cho tên người trong ảnh bằng giải thuật Naïve-Bayes Nearest Neighbor

17


Chương 2 – Thiết kế và cài đặt giải pháp
Chương này mô tả về việc thiết kế cài đặt hệ thống gán nhãn tự động cho người
trong ảnh, chương này đi sâu vào từng bước và phương pháp được áp dụng cho từng
bước như đã nêu trong chương 1.
1.1 Tổng quan về gán nhãn tự động cho người trong ảnh
Tập ảnh người

Ảnh truy vấn

Tách lấy khuôn mặt
trong ảnh


Tách lấy khuôn mặt
trong ảnh

Trích xuất đặc
trung SIFT của tất
cả các mặt

Trích xuất đặc
trung SIFT của mặt
có trong ảnh

Tổng hợp tất cả các
SIFT vào một lớp
và lưu vào file

CSDL SIFT

Xác định lớp C
tương ứng với
khuôn mặt

Người dùng cập
nhật lại là đúng
khuôn mặt hay sai

Cập nhật lại csdl
SIFT

Hình 2.1: Mô tả tổng quan về việc gán nhãn tự động cho người trong ảnh

Hình 2.1 mô tả tổng quát về việc thu thập dữ liệu và cách thức gán nhãn cho
người có trong một tấm ảnh. Hệ thống không có quá trình xây dựng mô hình hay
không có quá trình học, nhưng việc lưu trữ cơ sở dữ liệu (CSDL) để cần cho việc xử
lý cũng có thể xem như là một quá trình học. Việc lưu trữ CSDL được thực hiện ở
giai đoạn tổng hợp các SIFT của một lớp trong hệ thống.
Như đã nêu ở phần trên, có ba bước cơ bản trong việc gán nhãn tự động cho
người trong ảnh:

18


1. Định vị mặt người trong ảnh
2. Trích xuất các đặc trưng trong ảnh mặt người
3. Gán nhãn cho ảnh
Mỗi bước nêu trên sẽ được đi sâu ở các phần tiếp theo.
1.2 Định vị mặt người sử dụng đặc trưng Haar-like
Hệ thống gán nhãn tự động cho người có trong ảnh, cho nên công việc đầu tiên
cần giải quyết được là lấy tất cả các khuôn mặt có trong ảnh, lý do cần lấy khuôn mặt
trong ảnh là vì nếu không lấy ra khuôn mặt thì những chi tiết thừa trên bức ảnh mà
chúng ta không cần quan tâm như hình nên, cơ thể, v.v ngoài khuôn mặt sẽ ảnh hưởng
rất nhiều đến kết quả nhận dạng. Chưa kể các chi tiết này không có ích gì cho việc
nhận dạng mặt người, ngoài ra nó có thể làm nhiễu kết quả, làm giảm độ chính xác
của việc nhận diện khuôn mặt. Trong đó, hình ảnh của bức ảnh thường chiếm rất
nhiều thông tin của ảnh, nhưng hình nền lại không sử dụng cho việc nhận dạng mặt
người nên nếu giữ lại hình nền thì khả năng nhận dạng sai là khá cao. Ngoài ra, việc
loại bỏ các chi tiết thừa còn giúp giảm thời gian và không gian lưu trữ rất lớn cho hệ
thống.
Như đã trình bày ở phần trước, trong đề tài này, việc định vị khuôn mặt sẽ
được thực hiện bằng cách sử dụng các đặc trưng Haar-like. Các đặc trưng Haar-like
về mặt cơ bản là những hình chữ nhật được phân thành các vùng khác nhau như trong

hình 2.2

Hình 2.2: Các đặc trưng Haar-like (Nguồn: Wordpress)
Để nhận dạng khuôn mặt bằng đặc trưng Haar-like thì đầu tiên ta phải đưa ảnh
về xám hóa như trong hình 2.3

19


Hình 2.3: Mô tả việc xám hóa hình ảnh
Sau đó cho các đặc trưng Haar-like chạy khắp bức ảnh, những khu vực so
sánh được cho là giống với nhiều đặc trưng Haar-like nhất sẽ được đánh dấu lại. Đây
chính là phương pháp cơ bản để nhận dạng khuôn mặt. Trong quá trình nhận diện vật
thể, cụ thể ở đây là nhận diện khuôn mặt, nó sẽ chèn đặc trưng Haar-like lên toàn bộ
bức hình của bạn. Khu vực nào giống thì nó sẽ nhận diện ở đó là mặt của bạn. Cho
nên có rất nhiều khu vực trong hình nó sẽ nhận là mặt. Sau đó nó sẽ dùng các ảnh ko

20


giống để loại trừ các vùng này. Hình 2.4 mô tả một việc chèn một Haar-like vào hình
ảnh trong quá trình định vị khuôn mặt.

Hình 2.4: Mô tả việc chèn đặc trưng Haar-like lên ảnh để định vị khuôn mặt
Kết quả là nó sẽ định vị được mặt người trong ảnh như trong hình 2.5

Hình 2.5: Mô tả việc định vị mặt người trong ảnh

21



Thường thì Haar-like feature được lưu trữ dưới dạng file xml và cần phải
thông qua một quá trình huấn luyện mới có thể định vị được vật thể, cụ thể trong đề
tài này là định vị được khuôn mặt. Trong đề tài này, việc định vị mặt người sẽ được
giải quyết bằng việc sử dụng bộ thư viện mở OpenCV để định vị mặt người. Trong
OpenCV đã có sẵn các file Haar-like được huấn luyện sẵn nên chỉ cần tải lên là sử
dụng được, không cần huấn luyện lại.
Công việc xác định mặt người được thực hiện bằng một module được xây
dựng sẵn trong OpenCV. Module này khá tốt trong việc lấy khuôn mặt trong ảnh. Khi
phần chương trình này chạy lên sẽ tải các dữ liệu xml lên để thực hiện định vị khuôn
mặt. OpenCV đã có huấn luyện sẵn một số file xml:
 haarcascade_frontalface_default.xml
 haarcascade_frontalface_alt.xml
 haarcascade_frontalface_alt2.xml
 haarcascade_frontalface_alt_tree.xml
 haarcascade_profileface.xml
Trong đề tài này sử dụng file haarcascade_frontalface_default.xml để thực
hiện việc định vị mặt người trong ảnh.
Đoạn chương trình định vị mặt người sẽ nhận vào tham số đầu vào là một
đường dẫn tới file ảnh, sau đó tách khuôn mặt ra và lưu dưới dạng PNG như trong
hình 2.6 .

Hình 2.6: Mô tả việc tách mặt người ra khỏi ảnh
22


Giới thiệu về OpenCV và ứng dụng của OpenCV trong thị giác máy tính
OpenCV (Open Source Computer Vision) là một thư viện các hàm lập trình sẵn
chủ yếu hướng tới xử lý thị giác máy tính theo thời gian thực, được phát triển bởi
trung tâm nghiên cứu Intel ga tại Nizhny Novgorod, và bây giờ thì được hỗ trợ bởi

Willow Garage và Itseez. Bộ thư viện này được sử dụng miễn phí dưới giấy phép mã
nguồn mở BSD. Bộ thư viện này có thể chạy trên nhiều nền tảng. Nó chú trọng chủ
yếu vào xử lý hình ảnh theo thời gian thực. Nếu như bộ thư viện phát hiện bộ
Integrated Performance Primitives của Intel có trong hệ thống, nó sẽ sử dụng các chế
độ tối ưu để tự tăng tốc.
Được khởi động chính thức từ năm 1999, dự án OpenCV được khởi tạo bởi
cuộc nghiên cứu của Intel. Những người đóng góp chính cho dự án bao gồm một số
các chuyên gia tối ưu hóa trong Intel Nga, cũng như đội Performance Library của
Intel.
Bản Alpha đầu tiên của OpenCV được phát hành công cộng tại hội nghị IEEE
về thị giác máy tính và nhận diện mẫu vào năm 2000, và tiếp theo là 5 bản beta được
phát hành trong khoảng thời gian 2001 đến 20015. Bản 1.0 chính thức đầu tiên được
phát hành vào năm 2006. Một phiên bản 1.1 được phát hành vào năm 2008.
Đợt phát hành lớn thứ hai của OpenCV là vào tháng mười năm 2009, OpenCV2
bao gồm những thay đổi lớn với các giao diện C++, chú trọng vào tính dễ dàng, các
hàm mới, v.v.
Vào tháng 8 năm 2012, việc hỗ trợ OpenCV được chuyển qua cho tổ chức phi
lợi nhuận OpenCV.org, là người phát triển chính và cũng là website chính.
OpenCV được viết bằng C++ và các giao tiếp chính của nó cũng là C++. Hiện
nay thì OpenCV đã hỗ trợ đầy đủ các giao tiếp như Python, Java và Matlab/Octvae.
OpenCV chạy được trên Windows, Android, Maemo, FreeBSD, OpenBSD,
iOs, BlackBerry 10, Linux và OS X.
Qua một thời gian dài phát triển, hiện nay OpenCV đã trở nên rất tuyệt vời trong
việc nó đưa ra một hệ thống đơn giản, dễ sử dụng giúp mọi người nhanh chóng xây
dựng được các ứng dụng. Nó chứa các lập trình xử lý ảnh rất đơn giản, kể cả thực thi
các hàm bậc cao như dò tìm khuôn mặt, theo dõi khuôn mặt, nhận dạng khuôn mặt….
Trước khi OpenCV ra đời, các công cụ xử lý ảnh còn chưa đồng nhất vừa chưa đi
theo một chuẩn chung, phát triển riêng lẻ là chủ yếu. Các bộ công cụ thương mại như
Matlab, Simulink, Halcon, … lại có giá thành cao, chỉ phù hợp cho các công ty lớn


23


để phát triển các ứng dụng phức tạp. Trong khi đó, OpenCV đã trở thành một công
cụ hữu ích và là lựa chọn của rất nhiều người trong bước đầu làm việc với xử lý ảnh
với các ưu điểm:
 OpenCV là công cụ chuyên dụng: Được Intel phát triển theo hướng tối ưu hóa
cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc dữ liệu hợp lý, thư viện
tạo giao diện, truy xuất thiết bị phần cứng được tích hợp sẵn OpenCV thích
hợp để phát triển nhanh ứng dụng.
 OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí (với BSD
license), việc được xây dựng trên mã nguồn mở giúp OpenCV trở thành công
cụ thích hợp cho nghiên cứu và phát triển, với khả năng thay đổi và mở rộng
các mô hình, thuật toán.
 OpenCV đã được sử dụng rộng rãi: Từ năm 1999 đến nay, OpenCV đã thu hút
được một lượng lớn người dùng, trong đó có các công ty lớn như Microsoft,
IBM, Sony, Siemens, Google và các nhóm nghiên cứu ở Standford, MIT,
CMU, Cambridge.... Nhiều forum hỗ trợ và cộng đồng người dùng đã được
thành lập, tạo nên kênh thông tin rộng lớn hữu ích cho việc tham khảo tra cứu.

Hình 2.7: Cấu trúc và nội dung bên trong bộ thư viện OpenCV (nguồn:
learningopencv.files.wordpress.com)
Hình 2.7 mô tả tổ chức thư viện bên trong OpenCV. Tổ chức thư viện OpenCV
khá đơn giản, bao gồm 4 module chính:

24


 CV chứa các giải thuật xử lý ảnh cơ bản và xử lý thị giác máy tính cấp cao
(nhận dạng khuôn mặt, hiệu chỉnh camera).

 MLL (Machine learning library) là bộ thư viện máy học, cung cấp khả năng
tự học của thuật toán với chức năng thống kê phân lớp và các thuật toán phân
nhóm.
 HighGUI: chứa các thành phần vào ra nhằm lưu trữ và tải các video và hình
ảnh từ file hoặc các thiết bị ngoại vi.
 CxCore: chứa các cấu trúc dữ liệu cơ sở, thực hiện cac thuật toán (phép tính
ma trận, tính toán), hỗ trợ XML, các thao tác vẽ chú thích.
Ngoài các thành phần cơ bản trên, OpenCV còn một thành phần nữa là
CvAux, chủ yếu chứa các thành phần, giải thuật thử nghiệm, chuẩn bị đưa vào phiên
bản kế tiếp.
Các chức năng của OpenCV tập trung vào thu nhập ảnh, xử lý ảnh và các thuật
toán xử lý dữ liệu ảnh:
 Truy xuất ảnh phim từ camera, file, hoặc các thiết bị ngoại vi khác.
 Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cho như: ma trận, vector, chuỗi,
xâu và cây.
 Xử lý ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh màu, phóng
to, thu nhỏ, chỉnh histograms.
 Xử lý cấu trúc: tìm viền, nhận dạng các chuyển động, thay đổi trong không
gian 3D, đối chiếu bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặt phẳng, đa
giác, ellipse, đường thẳng...
 Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và phân tích
chuyển động.
 Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượt để
chỉnh thông số (nếu cần thiết các bạn có thể tự tạo thêm các phím điều khiển
thông qua thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như
wxWidgets).
 Vẽ, chú thích lên ảnh.
25



×