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

ĐỒ ÁN CƠ SỞ - ĐỀ TÀI: XÂY DỰNG PHẦN MỀM NHẬN DIỆN KHUÔN MẶT

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 (605.36 KB, 25 trang )

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

KHOA KHOA HỌC MÁY TÍNH

ĐỒ ÁN CƠ SỞ 5
ĐỀ TÀI: XÂY DỰNG PHẦN MỀM NHẬN
DIỆN KHUÔN MẶT

Sinh viên thực hiện

: HÀ THANH VINH
LÊ THỊ MINH CHAU
Giảng viên hướng dẫn : TS. LÊ VĂN MINH
Lớp
: 18IT1

Đà Nẵng, tháng 05 năm 2021


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

KHOA KHOA HỌC MÁY TÍNH

ĐỒ ÁN CƠ SỞ 5
ĐỀ TÀI: XÂY DỰNG PHẦN MỀM NHẬN
DIỆN KHUÔN MẶT

Đà Nẵng, tháng 05 năm 2021



MỞ ĐẦU

Thế giới ngày nay đã có nhiều phát triển mạnh mẽ về công nghệ thông tin
(CNTT) . Từ một tiềm năng thông tin đang trở thành một tài nguyên thật sự, trở
thành một hàng hóa trong xã hội tạo ra sự thay đổi to lớn trong lực lượng sản
xuất, cơ sở hạ tầng, cấu trúc kinh tế, tính chất lao động và cả cách thức quản lý
trong các lĩnh vực xã hội.
Sự phát triển của internet đã đưa con người vao kỷ nguyên xa lộ thông tin
mạng. Thông qua mạng internet con người có thể mua bán hàng hóa, trao đổi
thơng tin một các rộng rãi trên tồn cầu. Máy tính càng trở nên gần gũi hơn với
cuộc sống của chúng ta, nó tăng khả năng tiếp cận và hỗ trợ những cơng việc
khó khăn và phức tạp trong mọi lĩnh vực của cuộc sống nói chung và cơng tác
quản lí trong các doanh nghiệp, cơ quan nói riêng như bảo mật thơng tin, xem và
cơng tác quản lí trong doanh nghiệp. Đã có nhiều phần mềm được xây dựng để
phục vụ cho tính chất phức tạp của cuộc sống nói chung và cơng tác quản lí
trong các doanh nghiệp, cơ quan.
Trong suốt quá trình học tập, chúng em đã được các thầy cô cung cấp và
truyền đạt những kiến thức cần thiết trong lĩnh vực công nghệ thông tin. Trong
khuôn khổ một đồ án môn học dưới sự hướng dẫn của thây cơ giáo, cùng sự tích
lũy kiến thức nhóm em đã xây dựng đề tài “ Phần mềm nhận diện khuôn mặt “
bằng ngôn ngữ Python.


LỜI CẢM ƠN
Chúng em xin gửi lời cảm ơn chân thành và sâu sắc đến các thầy cô đặc biệt là
giảng viên TS. Lê Văn Minh trong thời gian qua đã giúp đỡ chúng em trong việc hoàn
thành bài báo cáo đồ án cơ sở.
Mặc dù gặp nhiều khó khăn trong việc hoàn thành bài đồ án này, tuy nhiên chúng
em vẫn cố gắng để thực hiện hoàn chỉnh nhất bài báo cáo. Tuy nhiên, vì chưa có đầy đủ

kỹ năng cũng như kinh nghiệm để hoàn thành bài báo cáo đồ án nên em vẫn cịn nhiều
thiếu sót. Rất mong được sự đóng góp ý kiến của thầy cơ để bài báo cáo đồ án được hoàn
thiện hơn, chúng 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áo viên hướng dẫn



MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU...................................................................................1
1. Tổng quan đề tài.............................................................................................1
1.1 Lý do chọn đề tài.....................................................................................1
1.2 Mục dích của đề tài.................................................................................1
1.3 Đối tượng và phạm vi nghiên cứu đề tài.................................................2
1.4 Bài toán nhận diện khn mặt và những khó khăn..................................2
1.5 Nhận dạng (Recognition) hay Phân lớp khuôn mặt (Face Clasaification)
....................................................................................................................... 3
CHƯƠNG 2: TỔNG QUAN VỀ XỬ LÝ ẢNH....................................................7
2.1 Xử lý ảnh, các vấn đề cơ bản trong xử lý ảnh.............................................7
2.1.1 Xử lý ảnh (XLA) là gì ?.......................................................................7
2.1.2 Các vấn đề cơ bản trong xử lý ảnh.....................................................10
2.2 Quan hệ giữa các điểm ảnh.......................................................................10
2.2.2 Các mối liên kết điểm ảnh..................................................................11
2.2.3 Đo khoảng cách giữa các điểm ảnh....................................................11
3.1 Phân tich thiết kế hệ thống........................................................................12
3.2 Demo kết quả............................................................................................13
3.2.1 Demo code.............................................................................................13
3.2.2 Demo sản phẩm......................................................................................15
KẾT LUẬN........................................................................................................16
DANH MỤC TÀI LIỆU THAM KHẢO............................................................17

DANH MỤC CÁC BẢNG


DANH MỤC HÌNH
Hình 1: Hệ thống nhận dạng mặt người.................................................................2
Hình 2: Các bước chính trong một hệ thống nhận dạng khn mặt.......................3
Hình 3: Ngơn ngữ Python......................................................................................5

Hình 4: Visual Studio Code...................................................................................5
Hình 5: Thư viện OpenCV.....................................................................................6
Hình 6: Các thành phần của thư viện OpenCV......................................................6
Hình 7: Quá trình xử lý ảnh...................................................................................7
Hình 8: Các bước cơ bản trong một hệ thống xử lý ảnh.........................................7
Hình 9: Sơ đồ phân tích, xử lý ảnh và lưu đồ thơng tin giữa các khối.................10
Hình 10: Lân cận các điểm ảnh của tọa độ (x, y).................................................11
Hình 11: Sơ đồ ngữ cảnh của hệ thống................................................................12
Hình 12: Sơ đồ khối thực hiện chương trình........................................................12
Hình 13: Sơ đồ hoạt động....................................................................................13


DANH MỤC CỤM TỪ VIẾT TẮT
STT

Cụm từ

Viết tắt


CHƯƠNG 1: GIỚI THIỆU
1. Tổng quan đề tài
1.1 Lý do chọn đề tài
Với sự phát triển không ngừng của khoa học và công nghệ, đặc biệt là với
những chiếc điện thoại thông minh (smartphone) ngày càng hiện đại và được sử
dụng phổ biến trong đời sống con người đã làm cho lượng thơng tin thu được
bằng hình ảnh ngày càng tăng. Theo đó, lĩnh vực xử lý ảnh cũng được chú trọng
phát triển, ứng dụng rộng rãi trong đời sống xã hội hiện đại. Không chỉ dừng lại ở
việc chỉnh sửa, tăng chất lượng hình ảnh mà với cơng nghệ xử lý ảnh hiện nay
chúng ta có thể giải quyết các bài toán nhận dạng chữ viết, nhận dạng dấu vân

tay, nhận dạng khn mặt… Một trong những bài tố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 khn 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.2 Mục dích của đề tài
- Xây dựng một dự án phần mềm ứng dụng nhận dạng khn mặt.
- Tìm hiểu về thư viện OpenCv.
- Tìm hiểu các phương pháp xác định khuôn mặt (Face Detection).
1


- Nghiên cứu phương pháp phân tích thành phần chính (Principal Component
AnalysisPCA).
1.3 Đối tượng và phạm vi nghiên cứu đề tài
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 realtime.
- Bộ thư viện xử lý ảnh OpenCv
- 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 khn 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).
1.4 Bài tốn nhận diện khn mặt và những khó khăn
1.4.1 Bài tốn nhận diện 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


Bài toá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 tố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à khuôn mặt. Chẳng hạn như: chụp thẳng, chụp
chéo bên trái 45o hay chụp chéo bên phải 45o , 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 trên khuôn 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 khn 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
khn 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 khn 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.
1.4.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 khn mặt (Face Alignment hay Segmentation).
3. Trích chọn đặc trưng (Feature Extraction).
1.5 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
3


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 khuôn 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ường có độ 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 LDA- cị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 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.
4


1.5.1 Ngơn ngữ lập trình
Để giải quyết bài tốn nhận dạng khn 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à Python viết trên phần
mềm Visual Studio Code.

Hình 3: Ngơn ngữ Python
1.5.2 Mơi trường lập trình

Hình 4: Visual Studio Code
- Visual Studio Code là một trình soạn thảo mã nguồn miễn phí do Microsoft tạo
cho Windows, Linux và macOS. Các tính năng bao gồm hỗ trợ gỡ lỗi, tơ sáng cú
pháp, hồn thành mã thơng minh, đoạn mã, cấu trúc lại mã và Git được nhúng.
5


Người dùng có thể thay đổi chủ đề, phím tắt, tùy chọn và cài đặt các tiện ích mở
rộng bổ sung chức năng.
- Visual Studio Code bao gồm hỗ trợ cơ bản cho hầu hết các ngơn ngữ lập trình
phổ biến. Hỗ trợ cơ bản này bao gồm tô sáng cú pháp, đối sánh dấu ngoặc, gấp
mã và các đoạn mã có thể định cấu hình. Visual Studio Code cũng đi kèm với
IntelliSense cho JavaScript, TypeScript, JSON, CSS và HTML, cũng như hỗ trợ
gỡ lỗi cho Node.js.

1.5.3 Làm quen với thư viện OpenCV

Hình 5: Thư viện OpenCV
a) 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 tố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.
b) Cấu trúc tổng quan

Hình 6: Các thành phần của thư viện OpenCV

6


CHƯƠNG 2: TỔNG QUAN VỀ XỬ LÝ ẢNH
2.1 Xử lý ảnh, các vấn đề cơ bản trong xử lý ảnh
2.1.1 Xử lý ảnh (XLA) 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.
- Quá 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 quá trình XLA có thể là một ảnh “tốt
hơn” hoặc một kết luận.

Hình 7: 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:

Hình 8: Các bước cơ bản trong một hệ thống xử lý ảnh.

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
7


dịng), cũng có loại camera đã số hóa (như loại CCD-Change Coupled Device) là
loại photodiot tạo cường độ sáng tại mỗi điểm ảnh.
- 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:
8


+ 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. 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 9, ả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
Feature 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 9 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
9


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 9: Sơ đồ phân tích, xử lý ảnh và lưu đồ thơng tin giữa các khối.
2.1.2 Các vấn đề cơ bản trong xử lý ảnh

2.1.2.1 Một số khái niệm cơ bản
- Đ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 (Resolution) của ảnh là mật độ điểm ảnh được ấn định trên một
ảnh số được hiển thị.
- 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, 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 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

2.2 Quan hệ giữa các điểm ảnh
2.2.1 Các lân cận của điểm ảnh
- Giả sử có điểm ảnh p tại tọa độ (x, y) có 4 điểm lân cận gần nhất theo chiều
đứng và ngang (có thể coi như lân cận 4 hướng chính: Đơng, Tây, Nam, Bắc).
{( x-1,y); (x, y-1); (x+1, y); (x, y+1)}= N4(p)
10



- Trong đó, số 1 là giá trị logic; N4(p): tập 4 điểm lân cận của p

Hình 10: Lân cận các điểm ảnh của tọa độ (x, y)
- Các lân cận chéo: Các điểm lân cận chéo Np(P) (Có thể coi lân cận chéo là 4
hướng: Đông-Nam, Đông-Bắc, Tây-Nam, Tây-Bắc)
Np(P) = {(x+1,y+1); (x+1, y-1); (x-1, y+1); (x-1, y-1)}
+ Tập kết hợp: N8(p) = N4(p) + Np(p) là tập hợp 8 lân cận của điểm ảnh p.
+ Chú ý: Nếu (x, y) nằm ở biên (mép) ảnh; một số điểm sẽ nằm ngoài ảnh.
2.2.2 Các mối liên kết điểm ảnh
- Các mối liên kết được xác định để xác định giới hạn (Boundaries) của đối
tượng vật thể hoặc xác định vùng trong một ảnh. Một liên kết được đặc trưng bởi
tính liền kề giữa các điểm và mức xám của chúng
- Có 3 loại liên kết.
+ Liên kết 4: Hai điểm ảnh p và q được nói là liên kết 4 với các giá trị cường
độ sáng V nếu q nằm trong một các lân cận của p, tức p thuộc N4(p).
+ Liên kết 8: Hai điểm ảnh p và q nằm trong một các lân cận của p, tức q thuộc
N8(p).
+ Liên kết m (liên kết hỗn hợp): Hai điểm ảnh p và q với các giá trị cường độ
sáng V được nói là liên kết m nếu:
1. q thuộc N4(p) hoặc
2. q thuộc Np(p)
2.2.3 Đo khoảng cách giữa các điểm ảnh
- Định nghĩa: Khoảng cách D(p) giữa hai điểm ảnh p tọa độ (x, y), q tọa độ (s,
t) là hàm khoảng cách (Distance) hoặc Metric nếu:
1. D(p,q) ≥ 0 (Với D(p,q) = 0 nếu và chỉ nếu p = q)
2. D(p,q) = D (p, q)
3. D(p, z) ≤ D(p,q) + D(q, z); z là một điểm ảnh khác.
- Khoảng cách Euclide: Khoảng cách Euclide giữa hai điểm ảnh p(x, y) và
q(s, t) được định nghĩa như sau:

De(p,q) = [(x - s)2 + (y – t)2] 1/2
- Khoảng cách khối: Khoảng cách D4(p,q) được gọi là khoảng cách khối đồ
thị (City-Block Distance) và được xác định như sau:
D4(p,q) = |x - s| + |y - t|
11


CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH
3.1 Phân tich thiết kế hệ thống
3.1.1 Đối tượng sử dụng
- User ( người dùng)
3.1.2 Chức năng chính
- Nhận diện khn mặt
- Điểm danh bằng hình thức nhận diện khn mặt
3.1.3 Phân tích
- Nhiệm vụ chính của chương trình là nhận dạng một khn mặt người xem
khn mặt đó có được biết đến hay chưa. Ngồi ra, chương trình cịn thực hiện
cơng việc phát hiện, tách các khn mặt người (nếu có) từ một ảnh tĩnh, hoặc từ
các frame ảnh thu được từ camera. Sau đó, lưu vào CSDL.

Hình 11: Sơ đồ ngữ cảnh của hệ thống
3.1.4 Sơ đồ khối thực hiện chương trình

Hình 12: Sơ đồ khối thực hiện chương trình
12


3.1.5 Sơ đồ hoạt động

Hình 13: Sơ đồ hoạt động


3.2 Demo kết quả
3.2.1 Demo code
a) face.py
import numpy as np
import cv2
import pickle

total = 430
face_cascade = cv2.CascadeClassifier('F:\Do an 5\cascades\data\haarcascade_frontalface_alt2.xml')
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read("trainner.yml")
with open("labels.pickle","rb") as f:
og_labels = pickle.load(f)
labels ={v:k for k,v in og_labels.items()}
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
while(True):
#Capture frame by frame
ret, frame = cap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
for( x, y, w, h) in faces:
print(x,y,w,h)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h,x:x+w]
id_, conf = recognizer.predict(roi_gray)
if conf>=45 and conf<=85:
print(id_)
print(labels[id_])
font = cv2.FONT_HERSHEY_SIMPLEX

name = labels[id_]
color = (255,255,255)
stroke =2
cv2.putText(frame,name,(x,y), font, 1,color, stroke, cv2.LINE_AA)
img_item = "F:/Do an 5/images/HATHANHVINH_18IT1/"+str(total)+".png"
# img_item = "F:/Do an 5/my_image.png"

13


cv2.imwrite(img_item, roi_gray)
total+=1
color = (255,0,0)
stroke = 2
end_cord_x = x+w
end_cord_y = y+h
cv2.rectangle(frame, (x,y), (end_cord_x,end_cord_y),color , stroke)
cv2.imshow('frame',frame)
if cv2.waitKey(20) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

b) facetrain.py
import cv2
import numpy as np
from PIL import Image #pillow package
import os
# Path for face image databas
dir_path = os.path.dirname(os.path.realpath(__file__))

path = dir_path+'\images\HATHANHVINH_18IT1\ '
path_trainer = dir_path+'\dataTrainer\ '
recognizer = cv2.face.LBPHFaceRecognizer_create()
detector =cv2.CascadeClassifier('F:\Do an 5\cascades\data\haarcascade_frontalface_alt2.xml')
# function to get the images and label data
def getImagesAndLabels(path):
imagePaths = [os.path.join(path,f) for f in os.listdir(path)]
faceSamples=[]
ids = []
for imagePath in imagePaths:
PIL_img = Image.open(imagePath).convert('L') # convert it to grayscale
img_numpy = np.array(PIL_img,'uint8')
id = int(os.path.split(imagePath)[-1].split(".")[0])
faces = detector.detectMultiScale(img_numpy)
for (x,y,w,h) in faces:
faceSamples.append(img_numpy[y:y+h,x:x+w])
ids.append(id)
return faceSamples,ids
print ("\n [INFO] Training faces. It will take a few seconds. Wait ...")
faces,ids = getImagesAndLabels(path)
recognizer.train(faces, np.array(ids))
print(path_trainer)
# Save the model into trainer/trainer.yml
recognizer.write('trainer.yml') # recognizer.save() worked on Mac, but not on Pi
# Print the numer of faces trained and end program
print("\n [INFO] {0} faces trained. Exiting Program".format(len(np.unique(ids))))

14



3.2.2 Demo sản phẩm

15


KẾT LUẬN
- Báo cáo đồ án mơn học đã trình bày các kiến thức cơ bản để giải quyết bài
toán nhận dạng khuôn mặt người. Từ kết quả thực nghiệm cho thấy, độ chính xác
của chương trình tương đối cao khoảng 80% nhận dạng đúng.
- Tuy nhiên, do thời hạn thời gian hạn chế nên chương trình vẫn cịn nhiều
nhược điểm và nhiều ý tưởng chưa được thực hiện. Để chương trình có thể được
sử dụng vào trong thực tế, cần giải quyết những nhược điểm mà phần mềm còn
gặp phải, thực hiện các ý tưởng mới nhằm năng cao tốc độ, hiệu suất và độ chính
xác của chương trình.
Các ý tưởng mới:
- Các Button mở ra các form để xem thông tin của tập training set và thông tin
đối tượng sẽ được chuyển sang các tab, nhằm làm gọn chương trình.
- Sẽ tiến hành làm việc với cơ sở dữ liệu là một thư mục trong máy tính.
- Nhận dạng mặt người qua webcam. Ta đã thực hiện được cơng việc mở
camera, thu dịng hình ảnh, hiển thị lên Imagebox và phát hiện các mặt người có
trong đó. Cơng việc mới cần thực hiện ở đây là, sau khi phát hiện, xác định được
vị trí các khn mặt trong ảnh. Chương trình sẽ tự động thực hiện việc nhận dạng
và hiển thị kết quả ngay trên dịng hình ảnh của camera. Đó là, nếu có thơng tin
của người trong hình, thì hiển thị dịng chữ là tên và id của người đó, ngược lại
thì hiển thị dịng chữ “Unknow”. Ta có thể ứng dụng chức năng này trong việc
điểm danh sinh viên trong các trường đại học.

1

16



DANH MỤC TÀI LIỆU THAM KHẢO
/>-pca-eigen-face-matlab-code-on-orl-database/
/>Csharp /> />%C6%B0%C6%A1 ng_sai\

- “Ứng dụng xử lý ảnh trong thực tế với thư viện OpenCV C/C++”

17


×