Tải bản đầy đủ (.doc) (36 trang)

BÁO CÁO ĐỒ ÁN CƠ CỞ 5 ĐỀ TÀI : NHẬN DIỆN KHUÔN MẶT SỬ DỤNG OPENCV. Giảng viên hướng dẫn: NGUYỄN ANH TUẤN

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 (1.16 MB, 36 trang )

ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT HÀN

BÁO CÁO ĐỒ ÁN CƠ CỞ 5
ĐỀ TÀI : NHẬN DIỆN KHUÔN MẶT
SỬ DỤNG OPENCV
Sinh viên thực hiện: Đinh Văn Thảo – 18IT037
Đào Đức Thiện – 18IT038
Giảng viên hướng dẫn: NGUYỄN ANH TUẤN
Lớp: 18IT1

Đà nẵng, tháng 5 năm 2021


MỞ ĐẦU
Lý do chọn đề tài
Một trong những bài toán được nhiều người quan tâm nhất của lĩnh vực
xử lý ảnh hiện nay đó là nhận dạng khn mặt (Face Recognition). Như chúng
ta đã biết, khn mặt đóng vai trị quan trọng trong quá trình giao tiếp giữa
người với người, nó mang một lượng thơng tin giàu có, chẳng hạn như từ
khn mặt chúng ta có thể xác định giới tính, tuổi tác, chủng tộc, trạng thái
cảm xúc, đặc biệt là xác định mối quan hệ với đối tượng (có quen biết hay
khơng). Do đó, bài tốn nhận dạng khn mặt đóng vai trị quan trọng trong
nhiều lĩnh vực đời sống hằng ngày của con người như các hệ thống giám sát,
quản lý vào ra, tìm kiếm thơng tin một người nổi tiếng,…đặc biệt là an ninh,
bảo mật. Có rất nhiều phương pháp nhận dạng khuôn mặt để nâng cao hiệu
suất tuy nhiên dù ít hay nhiều những phương pháp này đang vấp phải những
thử thách về độ sáng, hướng nghiêng, kích thước ảnh, hay ảnh hưởng của
tham số mơi trường.
Bài tốn Nhận diện khn mặt (Face Recognition) bao gồm nhiều bài
toán khác nhau như: phát hiện mặt người (face detection), đánh dấu (facial


landmarking), trích chọn (rút) đặc trưng (feature extration), gán nhãn, phân
lớp (classification).
Trong thực tế, nhận dạng khuôn mặt người (Face
Recognition) là một hướng nghiên cứu được nhiều nhà khoa học quan tâm,
nghiên cứu để ứng dụng trong thực tiễn. Ở các trường đại học hàng đầu về
Công Nghệ Thông Tin như Massachusetts Institute of Technology (MIT),
Carnegie Mellon University (CMU), Standford, Berkeley và các công ty lớn
như Microsoft, Apple, Google, Facebook đều có các trung tâm về sinh trắc
học (Biometrics Center) và nghiên cứu về nhận dạng khuôn mặt người và nó
đã trở thành một trong những lĩnh vực nghiên cứu chính cho đến nay. Gần
đây, cơng ty Hitachi Kokusai Electric của Nhật mới cho ra đời một camera
giám sát, có thể chụp ảnh và tìm ra 36 triệu khn mặt khác có nét tương tự
trong cơ sở dữ liệu chỉ trong vịng một giây.
Có hai phương pháp nhận dạng phổ biến hiện nay là nhận dạng dựa trên
đặc trưng của các phần tử trên khuôn mặt như biến đổi Gabor Wavelet và
mạng Neural, SVM,…và nhận dạng dựa trên xét tổng thể tồn khn mặt như
phương pháp PCA, LDA, LFA . Trong đó, PCA là phương pháp trích rút đặc
trưng nhằm giảm số chiều của ảnh tuy đơn giản nhưng mang lại hiệu quả tốt.
Hệ thống hoạt động ổn định và có tính thích nghi cao khi dữ liệu đầu vào thay
đổi nhiều.


1.1 Mục đích đề tài
- Xây dựng một dự án phần mềm ứng dụng nhận diện khn mặt
- Tìm hiểu về thư viện OpenCv, phần mềm EmguCV.
- Nghiên cứu phương pháp xác định khuôn mặt (Face Detection)
- Nghiên cứu phương pháp phân tích thành phần chính (Principal
Component Analysic- PCA)

Đối tượng và phạm vi nghiên cứu

a) Đối tượng:
- Các phương pháp, thuật toán phục vụ cho việc phát hiện và nhận dạng
khuôn mặt người trên ảnh.
- Bộ thư viện xử lý ảnh OpenCv và công cụ hỗ trợ EmguCv.
- Bộ CSDL chuẩn Yalefaces, ngồi ra có thêm bộ CSDL sinh viên tự thu
thập.
b) Phạm vi nghiên cứu:
- Tập trung tìm hiểu nhận dạng khn mặt (Face Recognition) chứ khơng
chú trọng tìm hiểu phát hiện khuôn mặt (Face Detection).
- Việc xử lý ảnh, nhận dạng khuôn mặt thỏa mãn các điều kiện:
Ánh sáng bình thường, ngược sáng, ánh sáng đèn điện. (Với bộ
CSDL tự thu thập).
Góc ảnh: Trực diện (frontal) hoặc góc nghiêng khơng q 10o.
Khơng bị che khuất (no occulusion).
Ảnh có chất lượng cao (high quality images).


LỜI CẢM ƠN
Để thực hiện và hoàn thành tốt đồ án này, em đã nhận được sự giúp đỡ và
hướng dẫn rất tận tình của các thầy cơ thuộc Đại học Công Nghệ Thông Tin Và
Truyền Thông Việt Hàn. Em xin cảm ơn các thầy cô thuộc bộ môn chuyên ngành
đã cung cấp cho chúng em các thông tin, kiến thức vô cùng quý báu và cần thiết
trong suốt thời gian q để em có thể thực hiện và hồn thành đồ án của mình. Đặc
biệt em xin chân thành cảm ơn thầy Trần Thế Sơn người đã trực tiếp hướng dẫn
chúng em trong thời gian thực hiện đồ án này.
Cuối cùng, xin chân thành cảm ơn các bạn trong ngành công nghệ thông tin
đã ủng hộ, giúp đỡ, chia sẻ kiến thức, kinh nghiệm và tài liệu có được giúp chúng
tơi trong q trình nghiên cứu và thực hiện đề tài.
Vì lí do giới hạn về mặt thời gian và kiến thức cũng như kinh nghiệm thực
tiễn nên đề tài khơng tránh khỏi những sai xót. Em rất mong nhận được sự thông

cảm của quý thầy cô và mong đón nhận những góp ý của thầy cơ và các bạn.
Em xin chân thành cảm ơn!


NHẬN XÉT
(Của giảng viên hướng dẫn)

………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
Chữ ký của giảng viên hướng dẫn

(Ký và ghi rõ họ tên)


MỤC LỤC
Trang
Mục đích đề tài.............................................................................................
Lý do chọn đề tài..........................................................................................
Đối tượng và phạm vi nghiên cứu................................................................
Chương 1
GIỚI THIỆU............................................................................1
1.1 Bài toán nhận dạng mặt người và những khó khăn...........................1
1.1.1 Bài tốn nhận dạng mặt người....................................................1
1.1.2 Những khăn của hệ thống nhận dạng khuôn mặt........................1
1.2 Tổng quan kiến trúc của một hệ thống nhận dạng mặt người...........2
1.2.1 Ngơn ngữ lập trình......................................................................4
Chương 2
Tổng quan về xử lý ảnh...........................................................5
2.1 Xử lý ảnh, các vấn đề cơ bản trong xử lý ảnh...................................5
2.1.1 Xử lý ảnh là gì ?..........................................................................5
2.1.2 Các vấn đề cơ bản trong xử lý ảnh..............................................7
Chương 3
Làm quen với thư viện Open CV...........................................10
3.1 Giới thiệu về OpenCV.....................................................................10
3.1.1 OpenCV là gì ?..........................................................................10
3.1.2 Cấu trúc tổng quan....................................................................10
3.2 Hướng dẫn sử dụng các thư viện của OpenCV................................11
Chương 4
:Ứng dụng thực nghiệm.........................................................18
4.1 Sử dụng OpenCV và chương trình đơn giản phát hiện khuôn mặt
bằng python..............................................................................................18

4.1.1 Phương pháp Haar like-Adaboost trong Opencv......................18
4.1.2 Chương trình đơn giản phát hiện khn mặt bằng python.......18
Chương 5
Xây dựng chương trình Mơ Phỏng........................................23
5.1 Xây dựng chương trình...................................................................23
5.1.1 Phân tích....................................................................................23
5.2 Thiết kế hệ thống.............................................................................23
5.2.1 Xử lý ảnh đầu vào.....................................................................24
5.2.2 Phát hiện khuôn mặt trong ảnh.................................................26
5.2.3 Xử lý đầu ra..............................................................................28
5.2.4 Thiết kế cơ sở dữ liệu................................................................28
5.2.5 Thiết kế giao diện chương trình................................................28
Chương 6
Kết luận..................................................................................30


Chương 2

GIỚI THIỆU

2.1 Bài toán nhận dạng mặt người và những khó khăn
2.1.1 Bài tốn nhận dạng mặt người
Hệ thống nhận dạng mặt người là một hệ thống nhận vào là một ảnh
hoặc một đoạn video (một dịng các hình ảnh liên tục). Qua xử lý, tính tốn
hệ thống xác định được vị trí mặt người (nếu có) trong ảnh và xác định là
người nào trong số những người mà hệ thống đã được biết (qua quá trình
học) hoặc là người lạ.

Hình 1. Hệ thống nhận dạng mặt người
2.1.2 Những khăn của hệ thống nhận dạng khn mặt.

Bài tốn nhận dạng mặt người là bài toán đã được nghiên cứu từ
những năm 70. Tuy nhiên, đây là một bài toán khó nên những nghiên cứu
hiện tại vẫn chưa đạt được những kết quả mong muốn. Chính vì thế, vấn đề
này vẫn đang được nhiều nhóm trên thế giới quan tâm nghiên cứu. Khó
khăn của bài tốn nhận dạng mặt người có thể kể đến như sau:
a.Tư thế chụp, góc chụp: Ảnh chụp khn mặt có thể thay đổi rất
nhiều bởi vì góc chụp giữa camera và khn mặt. Chẳng hạn như : chụp
thẳng, chụp chéo bên trái 45 độ hay chụp chéo bên phải 45 độ, chụp từ trên
xuống, chụp từ dưới lên,V.v… Với các tư thế khác nhau, các thành phần
1


trên khn mặt như mắt, mũi, miệng, có thể bị khuất một phần hoặc thậm
chí khuất hết.
b. Sự xuất hiện hoặc thiếu một số thành phần của khuôn mặt: các đặc
trưng như : râu mép, râu hàm, mắt kính,v.v… có thể xuất hiện hoặc không.
Vấn đề này làm cho bài tốn càng trở nên khó hơn rất nhiều.
c.Sự biểu cảm của khuôn mặt: Biểu cảm của khuôn mặt con người có
thể làm ảnh hưởng đáng kể lên các thơng số của khuôn mặt. Chẳng hạn,
cùng một khuôn mặt một người, nhưng có thể sẽ rất khác khi họ cười hoặc
sợ hãi, v.v…
d. Sự che khuất: Khn mặt có thể bị che khuất bởi các đối tượng
khác hoặc các khuôn mặt khác.
e. Hướng của ảnh (pose variations): Các ảnh khuôn mặt có thể biến
đổi rất nhiều với các góc quay khác nhau của trục camera. Chẳng hạn chụp
với trục máy ảnh nghiêng làm cho khuôn mặt bị nghiêng so với trục của
ảnh.
f. Điều kiện của ảnh: Ảnh được chụp trong các điều kiện khác nhau
về: chiếu sáng, về tính chất camera (máy kỹ thuật số, máy hồng ngoại,
v.v…), ảnh có chất lượng thấp ảnh hưởng rất nhiều đến chất lượng ảnh

khuôn mặt.
g. Aging condition: Việc nhận dạng ảnh mặt thay đổi theo thời gian
cịn là một vấn đề khó khăn, ngay cả đối với khả năng nhận dạng của con
người.
h. Các hệ thống cực lớn (very large scale systems): Các CSDL ảnh
mặt được test bởi các nhà nghiên cứu còn khá nhỏ (vài trăm tới vài chục
nghìn ảnh mặt), tuy nhiên trên thực tế các CSDL có thể rất lớn, ví dụ CSDL
ảnh mặt của cảnh sát của một đất nước có thể chứa từ hàng triệu tới hơn 1 tỉ
ảnh…
2.2 Tổng quan kiến trúc của một hệ thống nhận dạng mặt người
Một hệ thống nhận dạng mặt người thông thường bao gồm bốn bước xử
lý sau:
1. Phát hiện khuôn mặt (Face Detection).
2. Phân đoạn khuôn mặt (Face Alignment hay Segmentation).
3. Trích chọn đặc trưng (Feature Extraction).
4. Nhận dạng (Recognition) hay Phân lớp khn mặt (Face
Clasaification)

Hình 2. Các bước chính trong một hệ thống nhận dạng khuôn mặt
2


Phát hiện khn mặt dị tìm, định vị những vùng (vị trí) có thể là khn
mặt xuất hiện trong ảnh hoặc các frame video. Các vùng này sẽ được tách
riêng để xử lý. Phân đoạn khuôn mặt sẽ xác định vị trí mắt mũi, miệng và
các thành phần khác của khn mặt và chuyển kết quả này cho bước trích
chọn đặc trưng. Ở bước trích chọn đặc trưng, bằng một phương pháp trích
chọn đặc điểm nào đó (mẫu nhị phân cục bộ-Local Binary Pattern-LBP,
Gabor wavelets…) sẽ được sử dụng với ảnh mặt để trích xuất các thơng tin
đặc trưng cho ảnh từ các thông tin về các thành phần trên khuôn mặt, kết

quả là mỗi ảnh sẽ được biểu diễn dưới dạng một vector đặc trưng (feature
vector). Những vecto đặc trưng này sẽ là dữ liệu đầu vào cho một mơ hình
đã được huấn luyện trước để nhận dạng khn mặt (Face Recognition) hay
phân lớp khuôn mặt (Face Classifition), tức là xác định danh tính (identity)
hay nhãn của ảnh-đó là ảnh của ai. Ở bước nhận dạng khuôn mặt (Face
Recognition), thường thì phương pháp k-láng giềng gần (k-nearest
neighbor:kNN) sẽ được sử dụng.
Bên cạnh những bước chính nêu trên, chúng ta cịn có thể áp dụng thêm
một số bước khác như tiền xử lý, hậu xử lý nhằm làm tăng độ chính xác cho
hệ thống. Ví dụ, sau bước phát hiện khn mặt, ta có thể thực hiện bước
tiền xử lý (Preprocessing) bao gồm các bước căn chỉnh ảnh (face image
alignment) và chuẩn hóa ánh sáng (illumination normalization).
Do một số thơng số như: tư thế khuôn mặt, độ sáng, điều kiện ánh sáng,
v.v… phát hiện khuôn mặt được đánh giá là bước khó khăn và quan trọng
nhất so với các bước còn lại của hệ thống. Tuy nhiên, trong phạm vi đồ án
này, khơng tập trung tìm hiểu bước phát hiện khuôn mặt mà chỉ tập trung
chủ yếu vào bước nhận dạng khuôn mặt.
Dữ liệu cho một hệ thống nhận dạng mặt được chia làm 3 tập: tập huấn
luyện (training set), tập tham chiếu (reference set haygallery set) và tập để
nhận dạng (probe set hay query set, đơi khi cịn gọi là test set). Trong nhiều
hệ thống, tập training trùng với tập reference. Tập training gồm các ảnh
được dùng để huấn luyện (hay học-learning), thông thường tập này được
dùng để sinh ra một không gian con (projection subspace) là một ma trận và
phương pháp hay được sử dụng là PCA (Principal Component Analysis),
WPCA (Whitened PCA), LDA (Linear Discriminant Analysis), KPCA
(Kernel PCA). Tập reference gồm các ảnh đã biết danh tính được chiếu
(projected) vào không gian con ở bước training. Bước training nhằm 2 mục
đích: giảm số chiều (dimension reduction) của các vector đặc điểm (feature
vector) vì các vector này thườngcó độ dài khá lớn (vài nghìn tới vài trăm
nghìn) nên nếu để ngun thì việc tính tốn sẽ rất rất lâu, thứ hai là làm

tăng tính phân biệt (discriminative) giữa các ảnh khác lớp (định danh khác
nhau), ngồi ra có thể làm giảm tính phân biệt giữa các ảnh thuộc về một
lớp (tùy theo phương pháp, ví dụ như Linear Discriminant Analysis LDAcòn gọi là Fisher Linear Discriminant Analysis-Fisherface là một phương
pháp làm việc với tập training mà mỗi đối tượng có nhiều ảnh mặt ở các
điều kiện khác nhau). Sau khi thực hiện chiếu tập reference vào không gian
con, hệ thống lưu lại kết quả là một ma trận với mỗi cột của ma trận là một
3


vector tương ứng với ảnh (định danh đã biết) để thực hiện nhận dạng (hay
phân lớp). Nhận dạng (hay phân lớp) được thực hiện với tập các ảnh probe,
sau khi tiền xử lý xong, mỗi ảnh sẽ được áp dụng phương pháp trích chọn
đặc điểm (như với các ảnh thuộc tập training và reference) và được chiếu
vào không gian con. Tiếp đến việc phân lớp sẽ dựa trên phương pháp k-NN,
định danh của một ảnh cần xác định sẽ được gán là định danh của ảnh có
khoảng cách (distance) gần với nó nhất. Ở đây cần lưu ý là mỗi ảnh là một
vector nên có thể dùng khái niệm hàm khoảng cách giữa hai vector để đo sự
khác biệt giữa các ảnh.
2.2.1 Ngơn ngữ lập trình
Để giải quyết bài tốn nhận dạng khuôn mặt sử dụng thư viện OpenCV,
chúng ta có thể sử dụng các ngơn ngữ lập trình như: .NET C#, VB,
IronPython, Java, C++…
Trong đồ án này ngôn ngữ lập trình được sử dụng là .NET C#, viết trên
phần mềm Visual Studio 2013.

4


Chương 3


Tổng quan về xử lý ảnh

3.1 Xử lý ảnh, các vấn đề cơ bản trong xử lý ảnh
3.1.1 Xử lý ảnh là gì ?
Con người thu nhận thơng tin qua các giác quan, trong đó thị giác
đóng vai trị quan trọng nhất. Những năm trở lại đây với sự phát triển của
phần cứng máy tính, XLA và đồ họa đã phát triển một cách mạnh mẽ và có
nhiều ứng dụng trong cuộc sống. XLA và đồ họa đóng vai trị quan trọng
trong tương tác người máy.[3]
Q trình XLA được xem như là quá trình thao tác ảnh đầu vào
nhằm cho ra kết quả mong muốn. Kết quả đầu ra của một q trình XLA có
thể

một
ảnh
“tốt
hơn”
hoặc
một
kết
luận

Hình 3. Q trình xử lý ảnh

Ảnh có thể xem là tập hợp các điểm ảnh và mỗi điểm ảnh được xem
như là đặc trưng cường độ sáng hay một dấu hiệu nào đó tại một vị trí nào
đó của đối tượng trong khơng gian và nó có thể xem như một hàm n biến
P(c1, c2, …, cn). Do đó, ảnh trong XLA có thể xem như ảnh n chiều. Sơ đồ
tổng quát của một hệ thống XLA:


a. Phần thu nhận ảnh (Image Acquisition).
Ảnh có thể nhận qua camera màu hoặc đen trắng. Thường thì ảnh
nhận qua camera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số
1/25, mỗi ảnh 25 dòng), cũng có loại camera đã số hóa (như loại CCDChange Coupled Device) là loại photodiot tạo cường độ sáng tại mỗi điểm
ảnh.

5


Camera thường dùng là loại quét dòng; ảnh tạo ra có dạng hai chiều.
Chất lượng một ảnh thu nhận được phụ thuộc vào thiết bị thu, môi trường
(ánh sáng, thời tiết).
b. Tiền xử lý (Image Processing).
Sau bộ thu nhận, ảnh có thể bị nhiễu, độ tương phản thấp nên cần đưa
vào bộ tiền xử lý để nâng cao chất lượng. Chức năng chính của bộ tiền xử
lý là lọc nhiễu, nâng độ tương phản để làm ảnh rõ, nét hơn.
c. Phân đoạn (Segmentation) hay phân vùng ảnh.
Phân vùng ảnh là tách một ảnh đầu vào thành các vùng thành phần để
biểu diễn phân tích, nhận dạng ảnh. Ví dụ: để nhận dạng chữ (hoặc mã
vạch) trên phong bì thư cho mục đích phân loại bưu phẩm, cần chia các câu,
chữ, về địa chỉ hoặc tên người thành các từ, các chữ, các số (hoặc các vạch)
riêng biệt để nhận dạng. Đây là phần phức tạp khó khăn nhất trong XLA và
cũng dễ gây lỗi, làm mất độ chính xác của ảnh. Kết quả nhận dạng ảnh phụ
thuộc rất nhiều vào công đoạn này.
d. Biểu diễn ảnh (Image Representation).
Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã
phân đoạn) cộng với mã liên kết với các vùng lân cận. Việc chọn các tính
chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với
việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm
cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh

nhận được. Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu
tả các đặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác.
e. Nhận dạng ảnh và nội suy ảnh (Image Recognition and
Interpretation).
Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu
được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu từ trước).
Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng. Ví dụ: một loạt
chữ số và nét gạch ngang trên phong bì thư có thể được nội suy thành mã
điện thoại. Có nhiều cách phân loại ảnh khác nhau về ảnh. Theo lý thuyết
về nhận dạng, các mơ hình tốn học về ảnh được phân theo hai loại nhận
dạng ảnh cơ bản:
- Nhận dạng theo tham số.
- Nhận dạng theo cấu trúc.
Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp
dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay,
chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng
mã vạch, nhận dạng mặt người…
f. Cơ sở tri thức (Knowledge Base).
Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét,
độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo
theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngồi việc đơn giản
hóa các phương pháp tốn học đảm bảo tiện lợi cho xử lý, người ta mong
muốn bắt chước quy trình tiếp nhận và XLA theo cách của con người.
6


Trong các bước xử lý đó, nhiều khâu hiện nay đã xử lý theo các phương
pháp trí tuệ con người. Vì vậy, ở đây các cơ sở tri thức được phát huy
g. Mơ tả (biểu diễn ảnh).
Từ hình 5, ảnh sau khi số hóa sẽ được lưu vào bộ nhớ, hoặc chuyển

tiếp sang các khâu tiếp theo để phân tích. Nếu lưu trữ ảnh trực tiếp từ các
ảnh thơ, địi hỏi dung lượng bộ nhớ cực lớn, và không hiệu quả theo quan
điểm ứng dụng và công nghệ. Thông thường, các ảnh thơ đó được đặc tả
(biểu diễn lại hay đơn giản là mã hóa) theo các đặc điểm của ảnh được gọi
là các đặc trưng ảnh (Image Features) như: biên ảnh (Boundary), vùng ảnh
(Region). Một số phương pháp biểu diễn thường dùng:
- Biểu diễn bằng mã chạy (Run-Length Code)
- Biểu diễn bằng mã xích (Chaine-Code)
- Biểu diễn bằng mã tứ phân (Quad-Tree Code
Trên đây là các thành phần cơ bản trong các khâu XLA. Trong thực
tế, các quá trình sử dụng ảnh số không nhất thiết phải qua hết các khâu đó,
tùy theo đặc điểm ứng dụng. Hình 5 cho sơ đồ phân tích, XLA và lưu đồ
thơng tin giữa các khối một cách khá đầy đủ. Ảnh sau khi số hóa, được nén,
lưu lại để truyền qua các hệ thống khác sử dụng hoặc xử lý tiếp theo. Mặt
khác, ảnh sau khi số hóa có thể bỏ qua công đoạn nâng cao chất lượng (khi
ảnh đủ chất lượng theo một yêu cầu nào đó) để chuyển tới khâu phân đoạn
hoặc bỏ tiếp khâu phân đoạn chuyển trực tiếp tới khâu trích chọn đặc trưng.
Hình 5 cũng chia các nhánh song song như: nâng cao chất lượng ảnh có hai
nhánh phân biệt: nâng cao chất lượng ảnh (tăng độ sáng, độ tương phản, lọc
nhiễu) hoặc khôi phục ảnh (hồi phục lại ảnh thật khi ảnh gốc bị hỏng) v.v…

Hình 5. Sơ đồ phân tích, xử lý ảnh và lưu đồ thông tin giữa các khối

3.1.2 Các vấn đề cơ bản trong xử lý ảnh
Một số khái niệm cơ bản
- Điểm ảnh :
Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng.
Để xử lý được bằng máy tính (số), ảnh cần phải được số hóa. Số hóa ảnh là
sự biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh
thật về vị trí (khơng gian) và độ sáng (mức xám). Khoảng cách giữa các

điểm ảnh đó được thiết lập sao cho mắt người không phân biệt được ranh
7


giới giữa chúng. Mỗi một điểm như vậy gọi là điểm ảnh (PEL: Picture
Element) hay gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều, mỗi pixel ứng
với cặp tọa độ (x, y)
Định Nghĩa: Điểm ảnh (Pixcel) là một phần tử của ảnh số tại tọa độ
(x, y) với độ xám hoặc màu nhất định. Kích thước và khoảng cách giữa các
điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục
về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật. Mỗi
một phần tử trong ma trận được gọi là một phần tử ảnh.
- Độ phân giải của ảnh.
Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được
ấn định trên một ảnh số được hiển thị.
Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao
cho mắt người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng
cách thích hợp tạo nên một mật độ phân bổ đó chính là độ phân giải và
được phân bố theo trục x và y trong khơng gian hai chiều.
Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic
Adaptor) là một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc
* 200 điểm ảnh (320*200). Rõ ràng, cùng màn hình CGA 12 “ta nhận thấy
mịn hơn màn hình CGA 17” độ phân giải 320*200. Lý do: cùng một mật độ
(độ phân giải) nhưng diện tích mà hình rộng hơn thì độ mịn (liên tục của
các điểm) kém hơn.
- Mức xám của ảnh.
Một điểm ảnh (pixcel) có hai đặc trưng cơ bản là vị trí (x, y) của
điểm ảnh và độ xám của nó. Dưới đây chúng ta xem xét một số khái niệm
và thuật ngữ thường dùng trong XLA.
 Định nghĩa: Mức xám của điểm ảnh là cường độ sáng của nó

được gán bằng giá trị số tại điểm đó.
 Các thang mức xám thông thường: 16,32,64,128, 256 (Mức 256 là
mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8bit) để biểu diễn
mức xám: Mức xám dùng 1 byte biểu diễn: 28 = 256, tức là từ 0 đến 255).
 Ảnh đen trắng: Là ảnh có hai màu đen, trắng (không chứa mầu
khác) với mức xám ở các điểm ảnh có thể khác nhau.
 Ảnh nhị phân: Ảnh chỉ có hai mức đen trắng phân biệt, tức dùng 1
bit mơ tả 21 mức khác nhau. Nói cách khác: mỗi điểm ảnh của ảnh nhị phân
chỉ có thể là 0 hoặc 1.
 Ảnh màu: Trong khuôn khổ lý thuyết 3 màu (Red, Blue, Green) để
tạo nên thế giới màu, người ta thường dùng 3 byte để mô tả mức màu, khi
đó các giá trị màu: 28*3 = 224 ≈ 16,7 triệu màu.
 Định nghĩa ảnh số
Ảnh số là tập hợp các điểm ảnh với mức xám phù hợp dùng để
mô tả ảnh gần với ảnh thật

8


Chương 4

Làm quen với thư viện Open CV
 Giới thiệu về OpenCV
 Hướng dẫn cách sử dụng
 Tổng kết chương

4.1 Giới thiệu về OpenCV
4.1.1 OpenCV là gì ?
OpenCv (Open Source Computer Vision) là một thư viện mã nguồn
mở về thị giác máy với hơn 500 hàm và hơn 2500 các thuật toán đã được

tối ưu về XLA, và các vấn đề liên quan tới thị giác máy. OpenCv được thiết
kế một cách tối ưu, sử dụng tối đa mạnh của các dịng chip đa lõi… để thực
hiện các phép tính toán trong thời gian thực, nghĩa là tốc độ đáp ứng của nó
thể đủ nhanh cho các ứng dụng thơng thường.
OpenCv là thư viện được thiết kế để chạy trên nhiều nền tảng khác
nhau (cross-platform), nghĩa là nó có thể chạy trên hệ điều hành Window,
Linux, Mac, iOS… Việc sử dụng thư viện OpenCv tuân theo các quy định
về sử dụng phần mềm mã nguồn mở BSD do đó bạn có thể sử dụng thư
viện này một cách miễn phí cho các mục đích phi thương mại lẫn thương
mại.
Dự án về OpenCv được khởi động từ những năm 1999, đến năm
2000 nó được giới thiệu trong một hội nghị của IEEE về các vấn đề trong
thị giác máy và nhận dạng, tuy nhiên bản OpenCV 1.0 mãi tới tận năm
2006 mới chính thức được cơng bố và năm 2008 bản 1.1 (prerelease) mới
được ra đời. Tháng 10 năm 2009, bản OpenCV thế hệ thứ hai ra đời
(thường gọi là phiên bản 2.x), phiên bản này có giao diện của C++ (khác
với phiên bản trước có giao diện của C) và có nhiều điểm khác biệt so với
phiên bản thứ nhất.
Thư viện OpenCV ban đầu được sự hỗ trợ từ Intel, sau đó được hỗ
trợ bởi Willow Garage, một phịng thí nghiệm chuyên nghiên cứu về công
nghệ robot. Cho đến nay, OpenCV vẫn là thư viện mở, được phát triển bởi
nguồn quỹ không lợi nhuận (none-profit foundation) và được sự hưởng ứng
rất lớn của cộng đồng.
4.1.2 Cấu trúc tổng quan
Cấu trúc tổng quan của OpenCv bao gồm 5 phần chính. Hình vẽ dưới
đây, mơ tả 4 trong 5 thành phần đó.

9



Hình 7. Các thành phần của thư viện Open CV
Phần CV bao gồm các thư viện cơ bản về XLA và các giải thuật về
thị giác máy tính. MLL 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á 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…).
4.2 Hướng dẫn sử dụng các thư viện của OpenCV.
Để sử dụng các thư viện của OpenCV, có thể tải về một bản cài đặt
OpenCV
bằng
cách
truy
cập
địa
chỉ:
để tải về phiên bản mới nhất.
Sau khi tải về, tiến hành cài đặt bình thường, với thư mục mặc định là
C:\Emgu. Sau đó, cần tiến hành tùy chỉnh để có thể làm việc với OpenCV
qua hai IDE thơng dụng là Microsoft Visual Studio hoặc Eclipse CDT. Tuy
nhiên, việc tùy chỉnh này có thể gây khó khăn cho một số người mới bắt
đầu, vì vậy, ở đây trình bày một cách khác để có thể sử dụng các thư viện
của OpenCV. Đó chính là sử dụng gói phần mềm EmguCV.
EmguCV là một gói bao bên ngồi (wrapper) thư viện xử lý ảnh
OpenCV của Intel, cho phép lập trình viên có thể gọi các hàm của OpenCV
từ trong các ngôn ngữ .NET C#, VB, IronPython… Gói này có thể được
biên dịch trong Mono và chạy trên Linux / Mac OS X.
Việc sử dụng và lập trình với EmguCV cũng rất đơn giản, chỉ cần

thêm các file DLL trong thư mục cài đặt của EmguCV vào chương trình C#
thì có thể gọi tất cả các thuộc tính của EmguCV.
 Cấu trúc của EmguCV gồm hai lớp cơ bản:
Lớp thứ nhất là các cấu trúc, thuộc tính, và các hàm dùng để xử lý
hình ảnh, lấy ảnh…
Lớp thứ hai là lớp cấp cao, với nhiều tính chất phức tạp dùng để nhận
dạng hay xử lý các ma trận, điểm ảnh…
a) Hướng dẫn cài đặt EmguCV
Bước 1: Cài đặt EmguCV 2.4.9
10


- Tải phiên bản EmguCV 2.4.9. Cài đặt vào thư mục mặc định tại: C:\
không nên thay đổi đường dẫn, sử dụng đường dẫn mặc định.
“C:\Emgu\emgucv-windowsuniversal-gpu2.4.9.1847”.

`

- Chọn tất cả các tùy chọn để cài đặt đầy đủ gói
Bước 2 : Thiết lập biến môi trường

11


Thiết lập 3 đường dẫn sau trong biến người dùng và hệ thống:
C:\Emgu\emgucv-windows-universal-gpu
2.4.9.1847\bin;
C:\Emgu\emgucv-windows-universal-gpu
2.4.9.1847\bin\x64;
C:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin\x86

Bước 3: Cấu Hình Visual Studio 2010 (Tương tự với bản 2013). 1. Tạo một
project Window Application mới, đặt tên là “Two Layer”. 2. Trong Solution
Explorer, click phải chuột vào References, chọn Add Reference…

12


3. Chọn tab Browser, duyệt tới thư mục: “C:\Emgu\emgucv-windowsuniversalgpu2.4.9.1847\bin”.
Chọn
3
file:
“Emgu.CV.dll”,”Emgu.CV.UI.dll”,”Emgu.Util.dll”
Sau đó click vào OK

4. Các tham chiếu hiển thị trong Solution Explorer

13


5. Tiếp theo khai báo các thư viện OpenCV mà chúng ta sử dụng
trong mỗi class:
Using
Emgu.CV;
Using
Emgu.CV.Structure;
Using Emgu.Util;
Sau khi thực hiện 5 bước trên, chúng ta có thể sử dụng thư viện của
OpenCV để lập trình
b, Thêm Control của EmguCV vào Toolbox
Trong Toolbox, click phải chuột vào tab bất kỳ, chọn Add tab, gõ

tên EmguCV> Enter.
Click chuột phải lên tab EmguCV vừa tạo, chọn Choose Items…, sau
khi hộp thoại hiển thị, chọn tab .Net Framework components. Click vào
nút “Browse”, duyệt đến thư mục: C:\Emgu\emgucv-windows-universalgpu 2.4.9.1847\bin
Chọn tệp tin Emgu.CV.UI.dll. Nhấn Open. Trong ô Filter, gõ Emgu.
Danh sách các control của thư viện OpenCV sẽ hiển thị ra, chọn tất cả rồi
nhấn OK.
Sử dụng Control:
Chọn tab EmguCV vừa tạo, chọn control cần sử dụng, kéo thả vào
form. Đặt thuộc tính Name và set Text cho control, rồi sử dụng bình thường
như các control khác.

14


C. Một số ví dụ
- Khai báo biến chứa ảnh :
Private Image<Bgr, Byte> MyImage;
Image là một lớp ảnh trong thư viện OpenCV, trong đó Color là hệ
màu, Depth là độ sâu màu.
Dòng bên trên nghĩa là khai báo đối tượng MyImage, là một đối
tượng thuộc lớp ảnh, có hệ màu là RGN (red, green, blue) và độ sâu màu là
Byte, tức là giá trị mỗi pixel nằm trong đoạn [0, 255].
Đối với ảnh xám (grayscale), ta khai báo như sau:
private Image <Gray, Byte> MyImage;
Trong đó giá trị mỗi Pixel là độ sáng tại pixel đó, với 0 là tối (đen), và 255
là sáng nhất (trắng).
- Viết code cho sự kiện bấm nút sẽ hiển thị hộp thoại trong ảnh, sau
đó hiển thị ảnh vừa chọn được lên ImageBox:


15


-

Nội dung chương 3 bao gồm các nội dung chính :
Giới thiệu về bộ thư viện xử lý ảnh OpenCV
Giới thiệu, hướng dẫn cài đặt, sử dụng phần mềm EmguCv là một
phần mềm hỗ trợ giúp người dùng có thể sử dụng bộ thự viện
OpenCV một cách dễ dàng.
Hướng dẫn cách sử dụng bộ thư viện OpenCv trong Visual
Studio(Với hình minh họa là Visual Studio 2010).
Hướng dẫn cách lấy các Control của thư viện OpenCV thêm vào
ToolBox.
Một số đoạn code ví dụ, sử dụng thư viện OpenCV trong chương
trình.

Chương 5

:Ứng dụng thực nghiệm
16


5.1 Sử dụng OpenCV và chương trình đơn giản phát hiện khuôn
mặt bằng python
5.1.1 Phương pháp Haar like-Adaboost trong Opencv
Phương pháp nhận diện khuôn mặt dựa vào đặc trưng Haar like kết hợp
Adaboost được cài sẵn trong bộ thư viện Opencv. Để sử dụng phương pháp này
trong Opencv ta sử dụng hàm detectMultiScale.
Phát hiện khuôn mặt trong một bức ảnh, cách thức là chương trình sẽ tạo

một khung cửa sổ có kích thước xác định chứa một phần của bức ảnh, khung cửa
sổ này chính là “ảnh đầu vào” mà phương pháp Haar like dùng để tính tốn. Khi
qt khung cửa sổ này trên toàn bộ bức ảnh ta sẽ nhận được vô số “ảnh đầu vào”,
với mỗi ảnh đầu vào chương trình sẽ xác nhận xem đó có phải là mặt người hay
không với những bước như trong phần I. Bằng cách thay đổi tỉ lệ và vị trí của
khung cửa sổ này chúng ta có thể phát hiện được tất cả các khn mặt có trong
bức ảnh( tất nhiên cịn phụ thuộc vào độ chính xác của phương pháp).
Minh họa cho cách thức phát hiện mặt người của Opencv qua video:
/>Chi tiết cách thức này được trinh bày trong mục sau.

5.1.2 Chương trình đơn giản phát hiện khn mặt bằng python
 Đây là một chương trình phát hiện khuôn mặt đơn giản với đối
tượng là một ảnh ABC.jpg:
1. import numpy as np
2. import cv2
3. face_cascade
cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
4. eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

=

5. img = cv2.imread('ABC.jpg')
6. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
7. faces = face_cascade.detectMultiScale(gray, 1.3, 5)
8. for (x,y,w,h) in faces:
9.
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
10. roi_gray = gray[y:y+h, x:x+w]
11. roi_color = img[y:y+h, x:x+w]
12. eyes = eye_cascade.detectMultiScale(roi_gray, 1.3, 5)

13. for (ex,ey,ew,eh) in eyes:
14.
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
15. cv2.imshow('ABC',img)
16. cv2.waitKey(0)
17. cv2.destroyAllWindows()

17


Trước khi phân tích chương trình ta tìm hiểu hàm detectMultiScale là
phần tìm kiếm khn mặt, hàm(hay phương thức) này thuộc lớp
CascadeClassifier(lớp phụ vụ tìm kiếm đối tượng của Opencv), hàm có
nguyên mẫu với những tham số như sau:

Tham số cascade chính bộ phân lớp đề cập trong phần I, bộ phận lớp này
được lưu vào các file.xml được xây dựng sẵn trên các bộ cơ sở dữ liệu chuẩn.
Dưới đây là một số bộ phân loại trong thư viện OpenCV.

Như trong bảng khi cần phát hiện các đối tượng khác nhau ta sẽ sử dụng
các bộ phân lớp khác nhau, tức là load các file .xml tương ứng vào chương trình.
Opencv cũng hỗ trợ chúng ta tự xây dựng một bộ phân lớp riêng cho các đối
tượng khác bằng hàm cvCreateHidHaarClassifierCascade, chúng ta có thể xây
dưng các bộ phân loại để phát hiện các đối tượng khác như ôtô, chó, mèo….
Quay lại hàm detectMultiScale, tham số tiếp theo là image chính là bức
ảnh cần phát hiện khn mặt.
scale_factor là tỉ lệ tăng kích thước của khung cửa sổ tìm kiếm. Ví dụ nếu
scale_factor=1.1 thì sau khi qt hết bức ảnh 1 lần, khung cửa sổ sẽ tăng kich
thước lên 10% và thực hiện lần quét tiếp theo. Tham số này ảnh hưởng đến tốc độ
xử lý và độ tin cậy của chương trình. Nếu để nó q lớn thì tốc độ chương trình

sẽ tăng lên do số lần quét giảm đi, tuy nhiên có thể chương trình có thể bỏ qua
khơng phát hiện được một số khn mặt có kích thước nằm giữa 2 khung cửa sổ
liên tiếp do độ tăng kích thước của khung là quá lớn. Nếu để nó q thấp thì ta có
thể khơng bỏ sót bất kì khn mặt nào nhưng chương trình sẽ tốn thời gian hơn vì
tăng số lần quét lên.

18


min_neighbors giá trị tối thiểu số hình chữ nhật lân cận được gộp lại sau
khi quá trình quét đã xong, tham số này sẽ được giải thích rõ hơn trong phần sau.
min_size là kích thước nhỏ nhất của khung cửa sổ phát hiện khuôn mặt,
khung sẽ bắt đầu quét từ kích thước này, mọi khn mặt có diện tích vượt qua
kích thước khung này đều khơng được phát hiện.
Đó những tham số quan trọng của hàm.
Chuyển sang phân tích chương trình:
Dịng 1,2 là phần khai báo chương trình sẽ sử dụng 2 bộ thư viện là
Numpy và Opencv bản 2.x
Dòng 3,4 ta tạo ra 2 đối tượng thuộc lớp CascadeClassifier là face_cascade
và eye_cascade để tìm kiếm mặt và mắt, đồng thời load 2 flie .xml cho 2 đối
tượng này.
Dòng 5 đọc ảnh cần tìm khn mặt vào biến img.
Dịng 6 tạo một biến ảnh gray là ảnh vào chuyển sang dạng xám để thực
hiện tìm kiếm.
Dịng 7 sử dụng hàm detectMultiScale để tìm kiếm các khn mặt trong
ảnh xám gray với các tham số scale_factor=1.3 và min_neighbors=5 bằng bộ
phân lớp của face_cascade.
Dịng 8,9 hàm detectMultiScale sau khi tìm kiếm xong sẽ trả về bộ giá trị
gồm tọa độ gốc của khung chứa khuôn mặt x,y ; chiều dài, rộng của khung w,h.
Các giá trị này nằm trong mảng faces. Cấu trúc for….in sẽ duyệt qua toàn bộ các

bộ giá trị này, với mỗi bộ giá trị ta dùng hàm rectangle để vẽ một hình chữ nhật
lên ảnh ban đầu img với tọa độ 2 điểm trái trên và phải dưới: (x,y),(x+w,y+h).
(0,255,0) là màu sẽ vẽ hình chữ nhật.
Như vậy là đã xác định xong các khn mặt có trong ảnh.
Dịng 10,11 ta tạo ra roi_gray = gray[y:y+h, x:x+w] và roi_color =
img[y:y+h, x:x+w] là 2 biến ảnh màu và ảnh xám các khn mặt đã tìm thấy. Và
việc tìm kiếm mắt được thực hiện trên các khn mặt đã tìm thấy chứ khơng phải
qt tồn bộ ảnh ban đầu như tìm kiếm mặt.
Dịng 12,13,14 tương tự là tìm kiếm và vẽ khung hình chữ nhật chứa mắt
với một màu khác.
Dịng 15 dùng hàm hiển thị ảnh đã vẽ xong lên một cửa sổ window có tên
ABC
Dịng 16,17 đợi ấn nút bất kì để thốt chương trình, xóa cửa sổ hiển thị.
Kết quả chương trình:

19


×