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

Ứng dụng TensorFlow xây dựng hệ thống nhận diện khuôn mặt và phát hiện đối tượng trên robot NAO: báo cáo nghiên cứu khoa học sinh viê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.58 MB, 46 trang )

TRƯỜNG ĐẠI HỌC LẠC HỒNG
KHOA CÔNG NGHỆ THÔNG TIN

-----
----












BÁO CÁO
NGHIÊN CỨU KHOA HỌC
ĐỀ TÀI:

ỨNG DỤNG TENSORFLOW XÂY DỰNG
HỆ THỐNG NHẬN DIỆN KHUÔN MẶT VÀ
PHÁT HIỆN ĐỐI TƯỢNG TRÊN ROBOT NAO

CAO MINH TIÊN

BIÊN HÒA, THÁNG 11/2017


TRƯỜNG ĐẠI HỌC LẠC HỒNG


KHOA CÔNG NGHỆ THÔNG TIN
----- -----

BÁO CÁO
NGHIÊN CỨU KHOA HỌC




ĐỀ TÀI:


ỨNG DỤNG TENSORFLOW
XÂY DỰNG

HỆ THỐNG NHẬN DIỆN KHUÔN MẶT VÀ
PHÁT HIỆN ĐỐI TƯỢNG
TRÊN ROBOT NAO






Sinh viên thực hiện: CAO MINH TIÊN
Giáo viên hướng dẫn: Th.S Nguyễn Minh Sơn

BIÊN HÒA, THÁNG 11/2017



I

LỜI CẢM ƠN
Em xin chân thành cám ơn tất cả các giảng viên trường Đại Học Lạc Hồng,
các thầy cô khoa Công Nghệ Thông Tin đã giảng dạy và hướng dẫn chúng em
trong suốt thời gian chúng em theo học tại trường.
Em xin gởi lời cảm ơn đến Th.S Nguyễn Minh Sơn, là giáo viên đã tận tình
hướng dẫn chúng em hoàn thành đề tài nghiên cứu khoa học này.
Em xin gửi lời cảm ơn đến giáo viên phản biện, KS. Phan Thiện Phước, người
đã tận tình giúp em có thể hoàn thành cuốn báo cáo này một cách tốt nhất.
Em xin cám ơn các thầy, các cô trong khoa Công Nghệ Thông Tin đã có
những ý kiến đóng góp trong các buổi báo cáo tiến độ.
Ngoài ra em xin cám ơn thầy Nguyễn Minh Phúc, giáo viên chủ nhiệm lớp
13SE111 và các bạn trong lớp cùng toàn thể gia đình và người thân đã giúp đỡ,
động viên chúng em trong quá trình thực hiện đề tài này.
Với vốn kiến thức còn hạn chế cùng những điều kiện khách quan không cho
phép, đề tài của em khó tránh khỏi những thiếu sót cũng như chưa đáp ứng đầy đủ
các yêu cầu. Do đó em hy vọng tiếp tục nhận được những ý kiến đóng góp và
hướng dẫn của quý thầy cô để đề tài của em được hoàn thiện hơn.
Em xin chân thành cảm ơn.
Biên Hòa, tháng 11 năm 2017
Sinh viên thực hiện

Cao Minh Tiên


II

MỤC LỤC
LỜI CẢM ƠN ................................................................................................................................ I

MỤC LỤC ..................................................................................................................................... II
DANH MỤC BẢNG ..................................................................................................................... V
DANH MỤC HÌNH ...................................................................................................................... V
PHẦN MỞ ĐẦU ............................................................................................................................ 1

1. Lý do chọn đề tài ............................................................................................... 1
2. Tình hình nghiên cứu ......................................................................................... 1
2.1. Ngoài nước............................................................................................... 2
2.2. Trong nước............................................................................................... 2
3. Mục tiêu nghiên cứu .......................................................................................... 2
4. Đối tượng và phạm vi nghiên cứu ..................................................................... 3
4.1. Đối tượng nghiên cứu .............................................................................. 3
4.2. Phạm vi nghiên cứu ................................................................................. 3
5. Phương pháp nghiên cứu ................................................................................... 3
6. Những đóng góp mới của đề tài và những vấn đề mà đề tài chưa thực hiện được
........................................................................................................................ 3
6.1. Những đóng góp mới ............................................................................... 3
6.2. Những vấn đề chưa thực hiện được ......................................................... 3
7. Kết cấu của đề tài............................................................................................... 3
Chương 1 : Tổng quan lý thuyết ............................................................................. 5
1.1. Tổng quan về Robot NAO........................................................................... 5
1.1.1. Giới thiệu tổng quan về Robot NAO ................................................... 5
1.1.2. Cấu tạo của Robot NAO ...................................................................... 6
1.1.3. NAOqi Framework .............................................................................. 8
1.1.3.1. NAOqi Framework là gì? ............................................................ 8
1.1.3.2. Định nghĩa các thuật ngữ trong NAOqi ....................................... 8
1.1.3.3. Tổng quan về cấu trúc của Robot NAO..................................... 10
1.2. Tổng quan về học máy .............................................................................. 11
1.2.1. Machine learning là gì? ...................................................................... 11
1.2.2. Các phương pháp học máy................................................................. 12

1.2.3. Giới thiệu về phương pháp học máy Supervised Learning ............... 12
1.2.3.1. Supervised Learning là gì? ........................................................ 12
1.2.3.2. Phân loại Supervised Learning .................................................. 12
1.3. Tensorflow ................................................................................................. 12
1.3.1. Tensorflow là gì? ............................................................................... 12
1.3.2. Một số khái niệm cơ bản của Tensorflow .......................................... 13


III
1.3.2.1. Tensor ........................................................................................ 13
1.3.2.2. Rank ........................................................................................... 13
1.3.2.3. Shape .......................................................................................... 13
1.3.2.4. TYPE ......................................................................................... 14
1.3.3. Giới thiệu một số bộ dữ liệu mẫu ...................................................... 14
1.4. Giới thiệu về một số phần mềm và thư viện sử dụng trong đề tài ............ 15
1.4.1. Phần mềm Anaconda ......................................................................... 15
1.4.2. Thư viện scikit-learn .......................................................................... 15
1.4.3. Thư viện OpenCV .............................................................................. 15
1.4.4. Thư viện Matplotlib ........................................................................... 15
1.4.5. Thư viện Pillow hay PIL .................................................................... 16
1.4.6. Thư viện Paramiko ............................................................................. 16
1.4.7. Module SCP ....................................................................................... 16
1.4.8. API Googe Text To Speech ............................................................... 16
1.5. Tiểu kết ...................................................................................................... 16
Chương 2 : Xây dựng hệ thống học máy sử dụng thư viện Tensorflow ............... 17
2.1. Cài đặt môi trường lập trình và một số thư viện cần thiết......................... 17
2.1.1. Cài đặt phần mềm Anaconda ............................................................. 17
2.1.2. Cài đặt thư viện Tensorflow............................................................... 17
2.1.3. Cài đặt thư viện Google Text To Speech ........................................... 18
2.1.4. Cài đặt thư viện OpenCV ................................................................... 18

2.1.5. Cài các thư viện hỗ trợ khác .............................................................. 18
2.2. Xây dựng chương trình thu thập dữ liệu hình ảnh khuôn mặt .................. 18
2.2.1. Sử dụng hệ thống camera trong phòng B304..................................... 18
2.2.2. Sử dụng camera trên raspberry pi hoặc camera trên laptop. .............. 20
2.3. Tổ chức dữ liệu trước khi cho học máy..................................................... 21
2.3.1. Tổ chức thư mục hình ảnh ................................................................. 22
2.3.2. Tiến hành xử lý hình ảnh trước khi cho máy học .............................. 23
2.4. Tiến hành cho học máy ............................................................................. 24
2.5. Thử nghiệm nhận diện trên camera ........................................................... 25
2.6. Tiểu kết ...................................................................................................... 27
Chương 3 : Xây dựng ứng dụng nhận diện khuôn mặt trên Robot NAO ............. 28
3.1. Sử dụng NAOqi API để điều khiển Robot chào. ..................................... 28
3.1.1. Xây dựng module truyền hình ảnh từ Robot NAO lên server ........... 28
3.1.2. Xây dựng module chụp hình và lưu khi phát hiện có một khuôn mặt
.......................................................................................................................... 30
3.1.3. Xác định khuôn mặt từ video thu được từ Robot NAO ..................... 31


IV
3.1.4. Xây dựng module cho Robot NAO chào ........................................... 33
3.2. Kết hợp giữa thư viện NAOqi API và Google Text To Speech để giúp Robot
có thể chào được tiếng Việt ......................................................................... 34
3.2.1. Xác định khuôn mặt từ video thu được từ Robot NAO ..................... 34
3.2.2. Xây dựng module tạo ra file âm thanh chào bằng tiếng Việt ............ 34
3.2.3. Xây dựng module gửi file âm thanh từ Robot NAO lên server ......... 35
3.2.4. Xây dựng module đọc file âm thanh cho Robot NAO ...................... 35
3.3. Tiểu kết ...................................................................................................... 36
KẾT LUẬN .................................................................................................................................. 37
TÀI LIỆU THAM KHẢO ............................................................................................................ 38



V

DANH MỤC BẢNG
Bảng 1-1: Một số thông tin cơ bản của Robot NAO ..................................... 5
Bảng 1-2: Thông tin chi tiết số lượng khớp trên Robot NAO ....................... 6
Bảng 1-3: Thông tin chi tiết số lượng một số cảm biến trên Robot NAO ..... 7
Bảng 1-4: Các định nghĩa trong NAOqi ........................................................ 8
Bảng 1-5: Rank, đơn vị số học và ví dụ ....................................................... 13
Bảng 1-6: Shap trong Tensorflow ................................................................ 13
Bảng 1-7: Các kiểu dữ liệu trong Tensorflow ............................................. 14
Bảng 2-1: Thông tin tập dữ liệu học máy trong đề tài ................................. 21
Bảng 2-2: Kết quả kiểm tra độ chính xác của tập dữ liệu của tác giả trên hai
dataset khuôn mặt ................................................................................ 22
Bảng 2-3: Kết quả so sánh độ chính xác trên các tập học có số lượng ảnh
khác nhau ............................................................................................. 26

DANH MỤC HÌNH
Hình 1-1: Robot NAO .................................................................................... 5
Hình 1-2: Cấu tạo Robot NAO ...................................................................... 6
Hình 1-3: Ví trí các camera trên Robot NAO ................................................ 7
Hình 1-4: Cấu trúc tổng quan của Robot NAO............................................ 10
Hình 1-5: Phân loại học máy ....................................................................... 12
Hình 1-6: Phân loại thuật toán Supervised Learning ................................... 12
Hình 2-1: Code thu thập hình ảnh từ video camera phòng B304 ................ 19
Hình 2-2: Code thu thập dữ liệu theo từng người ....................................... 21
Hình 2-3: Quy trình học máy ....................................................................... 22
Hình 2-4: Cấu trúc thư mục và hình ảnh trước khi thực hiện xử lý học
máy ............................................................................................... 22
Hình 2-5: Kết quả Face Detection Data Set and Benchmark năm 2016...... 23

Hình 2-6: Lệnh chạy chương trình tiền xử lý hình ảnh ............................... 23
Hình 2-7: Kết quả thu được sau tiền xử lý ................................................... 23
Hình 2-8: Quy trình nhận diện khuôn mặt ................................................... 25
Hình 2-9: Kết quả sau khi chạy chương trình nhận diện khuôn mặt sau khi
học máy ............................................................................................... 26
Hình 2-10: Kết quả thử nghiệm trên tập học 48 hình ảnh với tập test 12
hình ....................................................................................................... 26
Hình 2-11: Kết quả sau khi chạy chương trình nhận diện khuôn mặt sau khi học
máy .................................................................................................. 26


VI
Hình 3-1: Code xử lý kết nối camera Robot NAO vơi server ..................... 30
Hình 3-2: Kết quả khi chạy chương trình kết nối camera với server ........... 30
Hình 3-3: Xác định bộ giải mã khởi tạo đối tượng VideoWriter để ghi
video .......................................................................................... 30
Hình 3-4: Kiểm tra điều kiện và tiến hành lưu video .................................. 31
Hình 3-5: Code kiểm tra và tạo file lưu trữ danh sách tên Robot NAO gặp
trong ngày............................................................................... 31
Hình 3-6: Code xử lý để đưa ra lời chào cho Robot NAO .......................... 33
Hình 3-7: Code xử lý module cho Robot NAO chào................................... 34
Hình 3-8: Code thực hiện chức năng chuyển văn bản thành âm thanh tiếng
Việt ...................................................................................................... 34
Hình 3-9: Code gửi file âm thanh từ server về Robot NAO ........................ 35
Hình 3-10: Code thực hiện chức năng phát một file âm thanh trên Robot NAO
............................................................................................................. 36


1


PHẦN MỞ ĐẦU
1. Lý do chọn đề tài
Trong xã hội hiện đại ngày nay, Robot đang ngày một phát triển, Robot dần
dần thay thế con người thực hiện những công việc mà trước đây con người phải tự
làm. Ví dụ (Nguồn [6]) như:
 Nhà hàng It's More Teatime Than Terminator tại Côn Sơn, Trung Quốc có
hàng chục Robot bé nhỏ dễ thương có thể nấu nướng và phục vụ.
 Công ty Moley Robotics tại London, Anh đã chế tạo ra Robot nấu ăn đầu
tiên.
 Aiko Chihira, một Robot giống hệt như người được Toshiba công bố tại
Triển lãm điện tử CEATEC ngày 7/10/2014. Aiko không nhỉ nhìn, di
chuyển, nói tiếng Nhật một cách trôi chảy, mà còn có thể sử dụng thành
thạo ngôn ngữ ký hiệu.
 Pepper là một nhân viên lễ tân tại bệnh viện CHR Citadel tại Bỉ, với nhiệm
vụ hướng dẫn cho khách. Chú Robot nhỏ mang hình dáng con người này
do hai tập đoàn Aldebaran Robotics của Pháp và SoftBank Group cùng phát
minh ra.
Khi làm việc Robot sẽ luôn học hỏi chứ không phải chỉ làm những việc như
đã lập trình ban đầu. Để Robot có khả năng đó thì một công nghệ đang được nhiều
công ty lớn nghiên cứu được áp dụng lên Robot để xây dựng bộ não cho Robot.
Đó chính là học máy, tiếng Anh là (Machine Learning, viết tắt là MC). Học máy
là một mảng rất khó đối với những người không chuyên. Nhưng hiện nay có rất
nhiều thư viện hỗ trợ cho việc học máy, giúp cho việc xây dựng một hệ thống học
máy trở nên đơn giản hơn như: TensorFlow, Spark MLlib, Scikit-learn, MXNet,
Microsoft Cognitive Toolkit, and Caffe.
Trong những thư viện học máy này, có thư viện TensorFlow, một thư viện
học máy mã nguồn mỡ do Google phát triển, với những ưu điểm của nó như:
 Có thể triển khai trên máy tính hỗ trợ CPU lẫn GPU, trên các thiết bị di
động chỉ với một API duy nhất.
 Hỗ trợ Deep Learning rất tốt.

 Cộng đồng hỗ trợ đông, đặc biệt là trên github.com.
Robot và học máy cũng là những lĩnh vực đang nằm trong xu thế của cuộc
cách mạng công nghiệp 4.0. Để bắt kịp với xu thế đó cùng với mong muốn lập
trình được một Robot có khả năng hỗ trợ con người trong việc tiếp tân đồng thời
giúp tác giả tiếp cận được với một thư viện hỗ trơ, tác giả mong muốn thực hiện
một đề tài với tên là: “Ứng dụng Tensorflow xây dựng hệ thống nhận diện khuôn
mặt và phát hiện đối tượng trên Robot NAO”. Robot NAO và thư viện Tensorflow
là gì? Sẽ được trình bày ở các mục sau.

2. Tình hình nghiên cứu
Trước sự phát triển mạnh mẽ công nghệ cùng với đó là trí tuệ nhân tạo, các
thuật toán nhận diện khuôn mặt ngày càng chính xác hơn và được áp dụng rộng rãi


2
vào đời sống. Các nhà nghiên cứu bắt đầu dành nhiều thời gian cho việc nghiên
cứu về nhận diện khuôn mặt. Trong phần này, tác giả sẽ trình bày qua một số
nghiên cứu về nhận diện khuôn mặt diễn ta trong và ngoài nước.
2.1. Ngoài nước
Trên thế giới hiện nay, những nghiên cứu về nhận diện khuôn đã đạt kết quả
chính các rất cao và áp dụng vào thực tế rất nhiều.
Trong bài báo [1], nhóm tác giả thực hiện đề tài đó đã tiến hành thực hiện
việc học dựa trên mạng lưới xoắn sâu. Để kiểm tra kết quả, họ đã tính độ chính xác
bằng cách tính trung bình đọ chính xác của một trăm khung hình đầu tiên trong
mỗi video mà máy dò khuôn mặt thu lại được. Độ chính xác phân loại họ thu được
là 95,12% ± 0,39. Nếu sử dụng một ngàn khung hình đầu tiên thì kết quả thu được
là 95,18%.
Trong bài báo [5], đây là một bài báo về Deep Face của Facebook. Nhóm
nghiên cứu đã tiến hành cho huấn luyện tập dữ liệu lớn với số lượng ảnh được gắn
nhãn là hơn 4.000 hình. Kết quả của bài báo này thu được với kết quả chính xác

lên đến 97,35%.
2.2. Trong nước
So với thế giới, việc nghiên cứu ứng dụng nhận diện khuôn mặt vào đời sống
chậm hơn hàng chục năm. Nhưng hiện nay, nước ta cũng dần bắt kịp với công
nghệ này.
Trong bài báo “Một phương pháp phân cụm ảnh khuôn mặt hiệu quả trên
mạng xã hội” của các tác giả: Cù Việt Dũng, Nguyễn Hữu Quỳnh, Nguyễn Thị
Thanh Tân trích trong cuốn “Tóm tắt báo cáo Hội nghị khoa học Quốc gia lần thứ
VIII”. Các tác giả đã đề xuất một phương pháp phận cụm hình ảnh khuôn mặt trên
mạng xã hội dựa trên các đặc trưng PCA kết hợp với các ý tưởng phân cụm phân
cấp. Để kiểm tra độ chính xác của thuật toán này, các tác giả nghiên cứu đã sử
dụng bốn tập dữ liệu đó là: faces94, face95, face96 và grimace. Với tổng cộng
7000 hình ảnh được chụp từ 395 người với các trạng thái biểu cảm khác nhau.
Trong trường hợp tốt nhất, kết quả của phương pháp này có độ chính xác lên đến
95%.

3. Mục tiêu nghiên cứu
Đề tài thực hiện với các mục tiêu:
 Tìm hiểu về Robot NAO.
 Nghiên cứu về thư viện Tensorflow
 Sử dụng OpenCV nghiên cứu phương pháp truy tìm khuôn mặt như: PCA,
Haar-like, LDA, … để nhận diện khuôn mặt.
 Xây dựng được hệ thống phát hiện và nhận diện khuôn mặt dựa trên Robot
NAO và thư viện Tensorflow.
 Xây dựng chương trình cho Robot NAO nói được tiếng Việt.


3

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

4.1. Đối tượng nghiên cứu
 Phương pháp học máy.
 Thư viện học máy Tensorflow.
 Robot NAO.
 Thư viện xử lý ảnh OpenCV về phát hiện khuôn mặt.
4.2. Phạm vi nghiên cứu
 Môi trường nghiên cứu: Phòng B304, Robot NAO.
 Điều kiện ánh sáng: Phòng B304 được bật tất cả các đèn.
 Số người hệ thống nhận diện được: 50 người
 Số người hệ thống nhận diện được trong một lúc: 1 người trên 1 lần

5. Phương pháp nghiên cứu
 Nghiên cứu về cách thức làm việc với camera và âm thanh trên Robot NAO.
 Nghiên cứu báo cáo – bài báo về phương pháp nhận diện khuôn mặt: [1] [2], [3]
[4].
 Thực nghiệm bộ công cụ thư viện Tensorflow để nhận diện một đối tượng, nhận
diện khuôn mặt.

6. Những đóng góp mới của đề tài và những vấn đề mà đề tài chưa thực hiện
được
6.1. Những đóng góp mới
 Đưa bài toán lý thuyết vào thực tiễn. Cụ thể ứng dụng chào đón khách mời.
 Giúp Robot NAO thông minh hơn.
 Có thể áp dụng sản phẩm vào việc lễ tân.
 Áp dụng công nghệ nhận diện khuôn mặt vào các mục đích khác nhau một
cách dễ dàng.
6.2. Những vấn đề chưa thực hiện được
 Chưa cho Robot chào được nhiều người một lúc.
 Chưa thu thập được nhiều hình ảnh của nhiều người.


7. Kết cấu của đề tài
Luận văn được chia làm ba phần: phần mở đầu, phần nội dung và phần kết
luận.
Phần mở đầu
Nêu lý do chọn đề tài, tổng quan tình hình phát triển, mục tiêu nghiên cứu đề
tài, đối tượng, phạm vi, phương pháp nghiên cứu cũng như những đóng góp mới
của đề tài. Bên cạnh đó cũng chỉ ra mặt hạn chế mà đề tài chưa thực hiện được để
giúp mọi người có cái nhìn rõ hơn.


4
Phần nội dung chính: gồm 3 chương
 Chương 1: Tổng quan lý thuyết
Trong chương này tác giả sẽ giới thiệu về Robot NAO, trình bày tổng quan
về lý thuyết học máy, phát hiện và nhận diện khuôn mặt. Đồng thời sẽ giới thiệu
cơ bản về thư viện học máy Tensorflow và một số thư viện mà tác giả đã sử dụng
trong đề tài cùng với chức năng của những thư viện đó.
 Chương 2: Xây dựng hệ thống học máy
Trong chương này tác giả trình bày chi tiết về phương pháp thu thập dữ liệu
hình ảnh khuôn mặt, cho máy học và nhận diện những khuôn mặt mà máy đã học
được.
 Chương 3: Xây dựng ứng dụng nhận diện khuôn mặt trên Robot NAO
Trong chương này tác giả nêu cách xây dựng chương trình nhận diện khuôn
mặt cho Robot NAO cùng với việc cho Robot NAO chào người mà Robot NAO
nhìn thấy bằng cả hai ngôn ngữ là tiếng Anh và tiếng Việt.
Phần kết luận
Đưa ra những kết luận và kiến nghị về chương trình đã xây dựng.


5


Chương 1 : Tổng quan lý thuyết
1.1. Tổng quan về Robot NAO
Trong những năm gần đây, Robot đang thay thế và hỗ trợ con người trong
nhiều lĩnh vực như sản xuất, công việc nặng nhọc và dịch vụ. Phạm vi ứng dụng
của Robot sẽ được mở rộng hơn trong tương lai gần. Đặc biệt, Robot hình người
đang thu hút nhiều sự chú ý nhất so với các loại Robot khác vì chúng trông giống
con người nên có vẻ thân thiện hơn và được công nhận là phù hợp để giúp đỡ con
người. Ngày càng có nhiều Robot hình người được chế tạo, và trong số đó, Robot
NAO từ công ty Aldebaran Robotics là Robot hình người nổi tiếng nhất thế giới
đang được sử dụng trong giáo dục và nghiên cứu.

Hình 1-1: Robot
Các tương tác đa dạng trên Robot NAONAO.
có thể được thực hiện qua mạng lưới

không dây có dây kích hoạt giao tiếp, camera, cảm biến hồng ngoại, micro, loa và
đèn LED. Phần mềm dựa trên hệ điều hành Linux mã nguồn mở bản nhúng và hỗ
trợ các ngôn ngữ lập trình như C, C++, URBI, Python và Net Framework. Cụ thể
hơn, ta sẽ đi sâu vào phần cứng và phần mềm của Robot.
Dưới đây tác giả chỉ trình bày cấu tạo một cách tổng quan về Robot NAO, để
biết thêm chi tiết có thể truy cập vào
1.1.1. Giới thiệu tổng quan về Robot NAO
Bảng 1-1: Một số thông tin cơ bản của Robot NAO

STT
1
2
3
4

5
6
7
8
9

Thuộc tính
Chiều cao
Đường kính
Cân nặng
Pin
Hệ điều hành
CPU
RAM
Flash
memory
Micro
SDHC

Mô tả
0.573 m
0.275 m
5.4 Kg
21.6 V / 2.25 Ah
Gentoo (GNU/Linux)
ATOM Z530 1.6 GHz CPU
1 GB
2 GB
8 GB


Robot có các cảm biến đa dạng như cảm biến gyro 2 trục, cảm biến siêu
âm.., có thể hoạt động đa phương tiện được thực hiện qua camera, micro và loa.


6
Hệ thống NAO sử dụng hệ điều hành Gentoo Linux. Hoạt động tổng thể của
NAO được quản lý bởi bộ khung NAOqi khi người dùng và hệ thống giao tiếp với
nhau. DCM (bộ quản lý giao tiếp thiết bị - Device Communication Manager) quản
lý giao tiếp giữa các thiết bị NAO như cơ cấu chấp hành và các cảm biến.
Kiến trúc mở được thể hiện một cách đầy hào hứng trong môi trường phát
triển của NAO. Phần mềm và các công cụ phần mềm được cung cấp để có thể sử
dụng với các hệ điều hành Windows, Mac OSX và Linux.
1.1.2. Cấu tạo của Robot NAO
Cấu hình tổng thể

Hình 1-2: Cấu tạo Robot NAO

Bảng 1-2: Thông tin chi tiết số lượng khớp trên Robot NAO và
Bảng 1-3: Thông tin chi tiết số lượng một số cảm biến trên Robot NAO mô tả chi
tiết về các khớp và cảm biến trên robot NAO.
Bảng 1-2: Thông tin chi tiết số lượng khớp trên Robot NAO

STT
1
2
3
4

Vị trí
Đầu

Cánh tay
Hông
Chân

Số lượng
2
12
1
10


7
Bảng 1-3: Thông tin chi tiết số lượng một số cảm biến trên Robot NAO

STT
1
2
3
4
5
6
7
8

Tên cảm biến
Hiệu ứng Hall
Tiếp xúc
Hồng ngoại
Siêu âm
Con quay hồi chuyển 2 trục

Gia tốc 3 trục
Giảm áp
Giảm xóc

Số lượng
32
3
2
2
1
2
8
2

Ngoài ra còn có camera (2), micro (4), loa (2) cho việc xử lý hình ảnh và
giọng nói.
Phần đầu của NAO có một hệ thống nhúng để điều khiển toàn diện, một
vi điều khiển ARM trong ngực để điều khiển động cơ và năng lượng.
Hệ thống thị giác
Robot NAO có 2 camera như:

Hình 1-3: Ví trí các camera trên Robot NAO

 Camera trên tập trung vào phía trước trong khi camera dưới tập trung vào
phần chân.
 Hệ thống thị giác có thể được dùng để thực hiện nhận diện điểm mốc, nhận
diện gương mặt, nhận diện vật thể, ghi hình.
Âm thanh
 Robot NAO có 4 micro: một ở mỗi bên tai, một ở phía trước và một ở sau
đầu.

 Có 2 loa: mỗi loa gắn tương ứng với một bên tai.
 Các loa có thể được sử dụng để chơi nhạc và đọc văn bản do người dùng nhập.
Bốn micro có thể sử dụng để ghi âm giọng nói, chúng còn có chức năng nhận
diện vị trí phát ra âm thanh.


8
Phần mềm
NAO cung cấp các phần mềm phát triển là Choregraphe, NAOqi, và Monitor.
Choregraphe là một phần mềm đồ họa cho phép người dùng có thể lập trình
với Robot NAO một cách đơn giản bằng các thao tác kéo thả. NAOqi là một
framework cho phép người dùng có thể lập trình cho Robot NAO thông qua một
file python, địa chỉ IP và Port của Robot NAO. NAOqi cũng là phương thức chính
tác giả dùng để lập trình cho Robot NAO trong đề tài của tác giả. Ở mục1.1.3 tác
giả sẽ nói rõ hơn về NAOqi.
1.1.3. NAOqi Framework
1.1.3.1. NAOqi Framework là gì?
NAOqi là tên của phần mềm chạy trên Robot NAO và điều khiển nó.
NAOqi Framework là một framework được sử dụng để lập trình trên Robot
NAO.
Framework này cho phép giao tiếp đồng nhất giữa các module khác
nhau (chuyển động, âm thanh, video), lập trình đồng nhất và chia sẻ thông
tin đồng nhất.
1.1.3.2. Định nghĩa các thuật ngữ trong NAOqi
Bảng 1-4: Các định nghĩa trong NAOqi

Broker là một chương trình tiếp nhận và
thực hiện các lệnh từ các địa chỉ IP và cổng cụ
thể. NAOqi($AL_DIR/bin) được gọi là «main
Broker


broker.»

(broker

chính)

Audioout(TextToSpeech) là một broker độc
lập kết nối tới NAOqi.
Module (mô đun) là một lớp bao gồm
các hàm cho chuyển động của Robot (bao gồm
Module (lớp
chuyên biệt
cho
ALModule)

motion, TextToSpeech, led, vv). Thư viện gọi
ra từ $AL_DIR/modules/lib/autoload.ini cũng
được gọi là một mô đun. Khi gọi ra một thư
viện từ NAOqi, các đối tượng của mô đun
được khởi tạo một cách có hệ thống. Các mô
đun luôn được kết nối với các broker.
Proxy được sử dụng để truy cập vào mô

Proxy

đun. Để gọi ra một phương thức từ mô đun,
bạn phải tạo một proxy cho mô đun.



9
CMake tạo ra dự án phù hợp cho hệ điều
hành mong muốn (OSX, Linux, Win32) và
CMake

IDE (Visual Studio,
Eclipse, vv). NAOqi yêu cầu CMake
phiên bản 2.6 hoặc cao hơn.
Các chức năng Remote là các hàm được

Remote

thực hiện trong các mô đun có thể thực hiện
khác.

Cross
compile

Biên dịch các mô đun được sử dụng
trong Robot.
Công cụ của Aldebaran tạo ra các cử

Choregraphe

động lớp trên.
Công cụ của Aldebaran để hình dung ra

Monitor
Critical
section


các camera, bộ nhớ v...v... của NAO.
Mã lệnh không thể được thực hiện trong
hai tiểu trình.
Chuyển đổi các giá trị cảm biến NAO

Extractor

thành dữ liệu có thể dùng bởi bộ nhớ của
NAO.
Bộ nhớ của NAO có thể được truy cập

ALMemory

bởi mọi mô đun, mô đun từ xa, các công cụ từ
xa, và các Robot NAO khác.

LPC

Thủ tục gọi hàm lân cận

IPC

Giao tiếp liên quá trình.

IPPC

Thủ tục gọi liên quá trình

RPC


Thủ tục gọi hàm từ xa

Smart
pointer

Trỏ tới vị trí loại bỏ và xóa bộ nhớ xảy
ra tự động.


10
Mutex

Quản lý các phần quan trọng.

1.1.3.3. Tổng quan về cấu trúc của Robot NAO

Hình 1-4: Cấu trúc tổng quan của Robot NAO

Phần này sẽ giải thích lý thuyết về cấu trúc NAOqi. Đầu tiên, sẽ xác
định các thành phần phân phối và vai trò của mô đun và giải thích một số
cách tương tác giữa chúng.
Bộ khung NAOqi hoạt động bằng cách để Choregraphe, Monitor, mô
đun chuyển động và mô đun âm thanh truyền thông tin cho nhau. NAOqi
được thực hiện bằng cách để Broker truyền thông tin và lệnh. Tất cả các phần
tử trong Hình 1-4: Cấu trúc tổng quan của Robot NAO hoạt động cùng nhau
để thực hiện nhiều động tác đa dạng. Các thành phần cấu hình nên bộ khung
NAOqi được giải thích sau đây.
 Module: Module vừa là một lớp và một thư viện sử dụng hàm và API
(giao diện lập trình ứng dụng– Application Programming Interface)

được định nghĩa trọng ALModule để lấy thông tin hay điều khiển theo
từng mô đun.


11
 Giao tiếp (Communication): Giao tiếp sử dụng Thủ tục gọi hàm lân
cận (LPC) hoặc Thủ tục gọi hàm từ xa (RPC) để kết nối tới NAO và
trao đổi thông tin.
 ALmemory: ALMemory là bộ nhớ của Robot. Bất kỳ mô đun nào
cũng có thể sử dụng hay đọc dữ liệu này và có thể theo dõi các sự kiện.
Nó có thể được gọi ra khi một sự kiện xảy ra. ALMemory là một mảng
của ALValue.
 Nội quan (Introspection): Nội quan là yếu tố mặc định giám sát các
hàm cho API của Robot, dung lượng bộ nhớ, giám sát và các cử động.
Robot nhận ra tất cả các hàm API có thể sử dụng Ngoài ra, những gì
tạo ra một thư viện sẽ tự động xóa các hàm API liên quan. Các hàm
được định nghĩa trong mô đun có thể được thêm vào API bằng cách
dùng BIND_METHOD. BIND_METHOD được định nghĩa trong
almodule.h.
 Trình thông dịch Python (Python interpreter): Là một trình thông
dịch được dùng để thông dịch và xử lý các lệnh Python trong NAOqi.
 Lớp bao gói Python (Python wrapper): Lớp bao gói Python cho phép
bạn sử dụng các hàm với cùng tên trong cả C++ và Python.
 XML: XML là một hình thức được sử dụng để lưu dữ liệu tương thích.
 proxy: Tất cả các mô đun của Aldebaran đều đã được mô đun hóa.
Thay vì trực tiếp tham chiếu đến các tập tin mô đun khác, bạn có thể
yêu cầu Proxy tìm mô đun tương ứng. Nếu mô đun không tồn tại, một
ngoại lệ sẽ xuất hiện. Người dùng có thể gọi hàm hay mô đun tương
ứng qua Proxy từ hai broker độc lập, mainBroker( gọi hàm lân cận) và
myBroker( gọi hàm từ xa).

 ALValue: Để tương thích, một số mô đun hoặc phương thức của
NAOqi được lưu theo một kiểu dữ liệu cụ thể trong ALValue.
1.2. Tổng quan về học máy
1.2.1. Machine learning là gì?
 Machine learning là một loại trí tuệ nhân tạo (AI) cho phép các ứng dụng phần
mềm trở nên chính xác hơn trong dự đoán các kết quả mà không được lập trình
rõ ràng.
 Tiền đề cơ bản của việc học máy là xây dựng các thuật toán có thể nhận dữ liệu
đầu vào và sử dụng phân tích thống kê để dự đoán một giá trị đầu ra trong phạm
vi chấp nhận được.
 Để hiểu rõ hơn về học máy, truy cập trang web [8].


12
1.2.2. Các phương pháp học
máy
Trong bốn phương pháp
học máy trong Hình 1-5, phương
pháp học máy Supervised
Learning hay còn gọi là học có
giám sát sẽ được tác giả chọn để
thực hiện đề tài vì phương pháp
này cho phép tác giả có thể kiểm
soát được dữ liệu học một cách
chính xác. Vì vậy trong luận văn
này chỉ xin phép trình bày về
phương pháp này.

Hình 1-5: Phân loại học máy


1.2.3. Giới thiệu về phương pháp học máy Supervised Learning
1.2.3.1. Supervised Learning là gì?
 Supervised Learning là một hệ thống được cung cấp trước đầu vào và đầu ra.
 Dữ liệu đầu vào và đầu ra được phân loại và dán nhãn để tạo cơ sở cho quá
trình xử lý dữ liệu trong tương lai.
Ví dụ: Trong đề tài của tác giả, dữ liệu đầu vào là hình ảnh của 50 người, hình
ảnh của người nào sẽ được bố trí ở thư mục của người đó, tên của thư mục chính
là tên của người đó.
 Thuật toán Supervised Learning
Regression: Kết quả trả về là một số
thực dao động trong (−∞,∞). Ví dụ:
Các hệ thống dự đoán giá xăng, giá cổ
phiếu. Mỗi ngày nó sẽ đưa ra các dự
đó về giá cho ngày hôm sau.
 Thuật toán Supervised Learning
Classification: Kết quả trả về của nó là
một trong tất cả các nhãn hệ thống đã
được học. Ví dụ: Trong hệ thống nhận
diện khuôn mặt, sau khi hệ thống đã
học được một số khuôn mặt. Khi ta
đưa vào một tấm ảnh khuôn mặt đã
được học thì kết quả trả về sẽ là nhãn của
khuôn mặt đó.

Supervised Learning

1.2.3.2. Phân loại Supervised Learning

Regression
Classification


Hình 1-6: Phân loại thuật toán
Supervised Learning

 Bài toán nhận diện khuôn mặt cũng là bài toán mà tác giả sẽ
thực hiện trong đề tài nghiên cứu.
1.3. Tensorflow
1.3.1. Tensorflow là gì?
 TensorFlow ™ là một thư viện phần mềm nguồn mở do Nhóm Google Brain phát
triển để tính toán bằng số liệu sử dụng các đồ thị lưu lượng dữ liệu.


13
 Hiện tại Tensorflow hỗ trợ trên 3 nền tảng:
-

Trên máy tính: Hộ trợ Windows, Linux, Mac OS. Chạy trên CPU hoặc
GPU.

-

Trên điện thoại: Hỗ trợ Android, iOS.

-

Trên hệ thống nhúng: Hỗ trợ trên Raspberry Pi.

 Phần hướng dẫn cài đặt sẽ được tác giả trình bày ở mục 2.1.2.
1.3.2. Một số khái niệm cơ bản của Tensorflow
1.3.2.1. Tensor

-

Tensor đại diện cho tất cả các loại dữ liệu được sử dụng trong
Tensorflow.

-

Trao đổi dữ liệu là trao đổi tensor.

-

Tensor là một mảng n chiều.

-

Tensor có 3 thuộc tính: Rank, Shap, Type.

1.3.2.2. Rank
-

Rank là số chiều của dữ liệu.
Bảng 1-5: Rank, đơn vị số học và ví dụ

Rank

Đơn vị
số học

Ví dụ


0

Scalar

S = 123

1

Vector

V = [1,2,3]

2

Matrix

M=[[1,2,3],[4,5,6],[7,8,9]]

3

3Tensor

T=
[[4],[5],[6]],[[7],[8],[9]]]

n

nTensor

n chiều


[[[1],[2],[3]],

1.3.2.3. Shape
-

Shap là số chiều của tensor.
Bảng 1-6: Shap trong Tensorflow

Rank

Shap

Số
chiều
0-D

0

[]

1

[D0]

1-D

2

[D0, D1]


2-D

3

[D0, D1, D2]

3-D

Ví dụ
1 tensor 1
shap [5]
1 tensor 1
shap [5]
1 tensor 2
shap [3,4]
1 tensor 3
shap [1,4,3]

chiều có
chiều có
chiều có
chiều có


14
n

[D0, D1, ...,
[D(n-1)]


n-D

1 tensor n chiều có
shap [D0, D1, ...,
[D(n-1)]

1.3.2.4. TYPE
-

Là kiểu dữ liệu số trong tensor.
Bảng 1-7: Các kiểu dữ liệu trong Tensorflow

Kiểu dữ liệu

Kiểu dữ liệu python

DT_FLOAT

tf.float32

DT_DOUBLE

tf.

DT_INT8

tf.int

DT_INT16


tf.int

DT_INT32

tf.int

DT_INT64

tf.int

DT_UINT8

tf.uint8

DT_STRING

tf.string

DT_BOOL

tf.bool

DT_COMPLEX64

tf.complex64

DT_QINT8

tf.qint8


DT_QINT32

tf.qint32

DT_QUINT8

tf.quint8

1.3.3. Giới thiệu một số bộ dữ liệu mẫu
Trong Tensorflow hiện có thể sử dụng được rất nhều bộ dữ liệu mẫu như:
-

Iris: một bộ dữ liệu nhỏ về hoa;

-

MNIST: một bộ dữ liệu về chữ viết tay.

-

CIFAR-10: tập dữ liệu CIFAR-10 bao gồm 60000 hình ảnh 32x32 màu
trong 10 lớp, với 6000 hình ảnh trên mỗi lớp. Có 50000 hình ảnh đào tạo
và 10000 hình ảnh thử nghiệm. Mười tập dữ liệu này gồm: máy bay, ô tô,
chim, mèo, nai ,ếch, ngựa, tàu chở hàng.

-

CASIA-WebFace:


Hiện nay, công nghệ Big Data và mạng lưới thần kinh sâu đang được
đẩy mạnh phát triển. Chính vì vậy, hiệu quả nhận biết khuôn mặt cũng ngày
càng chính xác hơn. Sử dụng các dataset lớn nhưng không được công khai,
một số nhóm nghiên cứu đã đạt được hiệu suất rất cao trên Labeled Faces in
the Wild (LFW) đạt được từ 97% - 99%. Mặc dù có nhiều triển khai mã nguồn
mở của CNN, nhưng không có tập dữ liệu khuôn mặt lớn nào được công khai.
Tình hình hiện tại, những tổ chức nghiên cứu về nhận diện khuôn mặt công
nhận rằng dữ liệu khuôn mặt quan trọng hơn thuật toán. Đây chính là nguyên
nhân hình thành nên tập dữ liệu CASIA-WebFace.


15
Tập dữ liệu CASIA-WebFace được nhóm nghiên cứu bằng cách thu thập
hình ảnh bán tự động trên Internet. Hiện tại bộ dữ liệu chứa khoảng 10.575
đối tượng và 494.414 hình ảnh.
-

Bộ dữ liệu khuôn mặt MS-Celeb-1M:

Tập dữ liệu này chưa khoảng 100.000 người nổi tiếng. Các hình ảnh
được thu thập qua internet, mỗi người chứa khoảng 100 tấm hình.
1.4. Giới thiệu về một số phần mềm và thư viện sử dụng trong đề tài
1.4.1. Phần mềm Anaconda
Anaconda là một phần mềm là một phân phối Python đặc biệt phổ biến cho
phân tích dữ liệu và tính toán khoa học. Nó có chứa cuda, một bộ quả lý các gói
cài đặt: NumPy, SciPy, Matplotlib, Pandas, IPython, Cython, scikit-learn ... giúp
cho cho việc cài đặt các thư viện này một cách dễ dàng. Đây cũng chính là lý do
tác giả dùng Anaconda để cài đặt các thư viện khác. Việc cài đặt phần mềm này sẽ
được trình bày ở mục 2.1.1 trong báo cáo này. Dưới đây là một số thông tin về
phần mềm anaconda:

-

Anaconda là một dự án nguồn mở được phát triển bởi tập đoàn Continuum
Analytics.

-

Hỗ trợ trên ba nền tảng: Windowns, Mac OS X và Linux.
1.4.2. Thư viện scikit-learn
Scikit-learn (trước đây là scikits.learn) là một thư viện phần mềm học máy
miễn phí cho ngôn ngữ lập trình Python. Nó có các thuật toán như: phân loại, hồi
qui và phân cụm hỗ trợ các vector machines, random forests, gradient boosting,
k-means and DBSCAN và được thiết kế để tương tác với các thư viện số và khoa
học trên Python NumPy và SciPy. Phần hướng dẫn cài đặt sẽ được tác giả trình
bày ở mục 2.1.5
Trong đề tài, tác giả sử dụng thư viện scikit-learn vào để xử lý vector
machines.
1.4.3. Thư viện OpenCV
OpenCV (Open Source Computer Vision Library) là một thư viện mã nguồn
mỡ về thị giác máy tính, được phát hành dưới giấy phép BSD, miễn phí cho cả
việc học tập lẫn thương mại. Hỗ trợ lập trình trên các ngôn ngữ: C ++, C, Python
và Java. Có thể cài đặt trên các nền tảng Windows, Linux, Mac OS, iOS và
Android. OpenCV được thiết kế để mang lại hiệu quả trong việc tính toán và tập
trung mạnh vào các ứng dụng thời gian thực.
Trong đề tài này, tác giả sử dụng OpneCV chủ yếu để phát hiện khuôn mặt.
Hướng dẫn cài OpenCV sẽ được tác giả trình bày trong mục 2.1.4.
1.4.4. Thư viện Matplotlib
Matplotlib là một thư viện vẽ đồ thị Python 2D. Matplotlib có thể được sử
dụng trong các mã Python, Python và Ipython shell, các máy chủ ứng dụng web...
Matplotlib là một lựa chọn tùy chọn để hiển thị khung hình từ video hoặc

hình ảnh. Đây cũng là lý mục đích của tác giả cài thư viện này. Hướng dẫn cài đặt
thư viện này được tác giả trình bày ở mục 2.1.5.


16
1.4.5. Thư viện Pillow hay PIL
PIL là một thư viện hình ảnh Python được phát triển bởi Fredrik Lundh và
cộng tác viên của ông. Thư viện này có các chức năng xử lý hình ảnh cơ bản như
thay đổi kích thước ảnh, cắt ảnh. Đây cũng là chức năng mà tác giả sử dụng thư
viện này trong đề tài. Hướng dẫn cài được tác giả trình bày ở mục 2.1.5.
1.4.6. Thư viện Paramiko
Paramiko là một ứng dụng Python (2.7, 3.4+) của giao thức SSHv2, cung cấp
cả chức năng client và server. Trong đề tài này, tác giả ứng dụng paramiko kết hợp
với module SCP ở mục 1.4.7 để gửi và nhận file. Hướng dẫn cài đặt thư viện được
tác giả trình bày ở mục 2.1.5.
1.4.7. Module SCP
Module scp.py sử dụng phương thức vận chuyển paramiko để gửi và nhận
tệp thông qua giao thức scp1. Đây là giao thức được tham chiếu từ chương trình
openssh scp. Hướng dẫn cài đặt được tác giả trình bày ở mục 2.1.5.
1.4.8. API Googe Text To Speech
API Google Text To Speech là một thư viện cho phép chuyển các văn bản
thành giọng nói. API này không giới hạn độ dài văn bản, hỗ trợ hơn bốn mươi
ngôn ngữ trên thế giới và đặc biệt là hoàn toàn miễn phí. Trong đề tài này, tác giả
sử dụng thư viện này để chuyển các đoạn văn bản tiếng Việt thành âm thanh nhằm
mục đích cho Robot NAO nói tiếng Việt.
1.5. Tiểu kết
Qua chương này, tác giả đã nêu lên một số cơ sở lý thuyết và một số thư viện,
phần mềm được sử dụng trong đề tài. Trong chương tiếp theo, tác giả sẽ tiến hành
vào thực hiện thu thập dữ liệu, tiến hành cho học máy và thử nghiệm.



17

Chương 2 : Xây dựng hệ thống học máy sử dụng thư viện
Tensorflow
Để xây dựng hệ thống học máy sử dụng Tensorflow, tác giả chia ra bốn bước sau:
 Thu thập dữ liệu hình ảnh theo khuôn mặt
 Xử lý hình ảnh trước khi cho học máy
 Tiến hành cho học máy
 Thử nghiệm
Trước khi tiến hành thực hiện các bước này, tác giả cần cài đặt môi trường
lập trình và một số thư viện cần thiết. Sau đây là quy trình xây dựng hệ thống học
máy.
2.1. Cài đặt môi trường lập trình và một số thư viện cần thiết
2.1.1. Cài đặt phần mềm Anaconda
Để cài đặt phần mềm này trên hệ điều hành Windows, truy cập vào website:
tiến hành tải Anaconda về và cài đặt như
một phần mềm bình thường. Để cài đặt trên hệ điều hành Ubuntu, truy cập website
[9] và làm theo hướng dẫn.
2.1.2. Cài đặt thư viện Tensorflow
Để cài đặt, thực hiện các bước sau:
-

Tạo môi trường lập trình python phiên bản 3.6.3 có tên là facerecognition
(Có thể thay bằng tên khác) bằng conda chứa trong Anaconda đã cài đặt:

(C:\Users\minht\Anaconda3) C:\>conda create --name Tensorflow
python=3.6.3
-


Sau khi cài đặt xong môi trường lập trình python 3.6.3, tiến hành kích hoạt
môi trường này bằng câu lệnh:

# Trên nền tảng windown
(C:\Users\minht\Anaconda3) C:\>activate Tensorflow
(Tensorflow)C:> # Giao diện command line sẽ thay đổi giống thế này
#Trên nền tảng Ubuntu
(Tensorflow)serverb304@serverb304:~$ source activate Tensorflow
(Tensorflow)serverb304@serverb304:~$Giao diện command line sẽ
thay đổi giống thế này
-

Cuối cùng là cài đặt thư viện Tensorflow bằng lệnh:
(Tensorflow)C:> pip install --ignore-installed --upgrade Tensorflow

-

Để kiểm tra kết quả cài đặt, tiến hành nhập lệnh python, sau đó, gõ tiếp
import Tensorflow as tf. Nếu chương trình không báo lỗi gì thì việc cài
đặt đã thành công.


×