SlideShare a Scribd company logo
1 of 57
Download to read offline
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trần Ngọc Linh
XÂY DỰNG HỆ THỐNG PHÂN TÍCH HÌNH ẢNH
TRÊN ROS CHO ROBOT HƯỚNG DẪN VIÊN
LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH
Hà Nội - 2020
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN NGỌC LINH
XÂY DỰNG HỆ THỐNG PHÂN TÍCH HÌNH ẢNH
TRÊN ROS CHO ROBOT HƯỚNG DẪN VIÊN
Ngành: Khoa học máy tính
Chuyên ngành: Khoa học máy tính
Mã số: 8480101.01
LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH
NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. TRẦN QUỐC LONG
Hà Nội - 2020
VIETNAM NATIONAL UNIVERSITY, HANOI
UNIVERSITY OF ENGINEERING AND TECHNOLOGY
i	
	
	 	
LỜI CAM ĐOAN
Tôi xin cam đoan các kết quả thực nghiệm và nghiên cứu mà được trình bày trong luận văn
đều do tôi thực hiện dưới sự hướng dẫn của Tiến sĩ Trần Quốc Long.
Tất cả những tham khảo và những nghiên cứu liên quan trong luận văn đều được trích dẫn
nguồn gốc rõ ràng ở phần tài liệu tham khảo của cuối luận văn. Tôi cam đoan rằng trong
luận văn không có việc sao chép tài liệu và công trình nghiên cứu của người khác mà không
ghi rõ nguồn gốc trích dẫn.
TÁC GIẢ LUẬN VĂN
Trần Ngọc Linh
ii	
	
	
	
LỜI CẢM ƠN
Lời đầu tiên, tôi muốn gửi lời cảm ơn chân thành và sâu sắc đến giáo viên hướng dẫn
của tôi, Tiến sĩ Trần Quốc Long đang công tác tại Khoa Công Nghệ Thông Tin của Trường
Đại học Công nghệ - Đại học Quốc Gia Hà Nội. Thầy đã tận tình hướng dẫn và cho tôi
những lời khuyên bổ ích để giúp tôi có thể hoàn thành luận văn này.
Bên cạnh đó, tôi cũng xin cám ơn Giáo sư, Tiến sĩ Chử Đức Trình và Phó giáo sư,
Tiến sĩ Bùi Thanh Tùng đang công tác tại khoa Điện Tử Viễn Thông của Trường Đại học
Công Nghệ - Đại học Quốc Gia Hà Nội, luôn luôn hỗ trợ đội nhóm phát triển Robot để có
những trang thiết bị cần thiết phục vụ cho việc nghiên cứu phát triển thành công Fuso.
Tôi cũng chân thành cảm ơn hai em Nguyễn Đình Tuân, Phan Hoàng Anh và các em
trong nhóm đề tài “QG.17.69-Nghiên cứu phát triển robot thuyết minh và hướng dẫn” đã
luôn luôn giúp đỡ và hỗ trợ tôi trong quá trình nghiên cứu.
Lời cuối cùng tôi xin cảm ơn gia đình và bạn bè đã ủng hộ, khích lệ tôi trên con đường
học vấn.
Hà Nội, Ngày 30 tháng 6 năm 2020
Trần Ngọc Linh
iii	
	
	 	
TÓM TẮT
Những năm gần đây, với sự phát triển mạnh mẽ và đột phá từ công nghệ, đặc biệt là
trong lĩnh vực trí tuệ nhân tạo, nhiều công việc của con người mà máy tính đã làm rất tốt
như nhận dạng mặt người hay có thể nói chuyện và tương tác giống như Sophia hoặc có thể
hỗ trợ các bác sĩ trong việc chẩn đoán, dự báo và điều trị bệnh. Cùng với xu hướng phát
triển của công nghệ nói chung hay robot trên toàn thế giới nói riêng, robot Fuso đã được
nghiên cứu và phát triển để có thể thay thế con người làm hướng dẫn viên trong các phòng
trưng bày, viện bảo tàng. Robot được chia làm 4 phần khác nhau để phát triển độc lập: hệ
thống xử lý chuyển động, hệ thống xử lý giao diện tương tác, hệ thống phân tích âm thanh
và hệ thống phân tích hình ảnh. Luận văn này tập trung vào phát triển hệ thống phân tích
hình ảnh cho robot, bao gồm 3 mô-đun nhỏ hơn. Thứ nhất, xây dựng mô-đun bộ máy trạng
thái hữu hạn trên ROS để dựng lên tất các trạng thái hoạt động của robot mà ở đó có thể
giao tiếp, trao đổi dữ liệu với các phần khác trong robot cùng hoàn thành một chức năng cụ
thể. Thêm vào đó, xây dựng bộ máy trạng thái hữu hạn giúp cho việc mở rộng, nâng cấp
các chức năng và gỡ lỗi trong quá trình phát triển sẽ dễ dàng hơn. Mô-đun thứ hai là xây
dựng phát hiện hành động vẫy tay dựa trên thông tin khung xương cánh tay được trích xuất
từ kết quả của thuật toán phát hiện khung xương người Openpose. Với mô-đun này giúp
robot có thể phát hiện người cần hỗ trợ qua hành động vẫy tay để tiếp cận và phục vụ. Hiện
tại, phát hiện vẫy tay đạt độ chính xác trung bình xấp xỉ 78% với khoảng cách đến robot từ
1 đến 5 mét. Và cuối cùng là việc xây dựng mô-đun nhận diện mặt người dựa thuật toán
Facenet với độ chính xác 97% giúp cho Fuso có khả năng ghi nhớ khuôn mặt người đã từng
phục vụ để lần sau phục vụ tốt hơn. Với việc xây dựng bộ máy trạng thái hữu hạn và ứng
dụng thuật toán phát hiện vẫy tay và nhận điện khuôn mặt đã giúp Fuso có thể phát hiện
được người vẫy tay cần hỗ trợ, di chuyển đến để nhận diện đối tượng và chào người đó
bằng tên nếu đã biết trước. Hiện tại, robot đã được chạy thử nghiệm ở phòng truyền thống
của Đại Học Quốc Gia Hà Nội.
Từ khóa: Fuso, robot hướng dẫn viên, phân tích hình ảnh
iv	
	
	
MỤC LỤC
Danh mục hình vẽ......................................................................................................................... vi
Danh mục các kí hiệu, viết tắt ................................................................................................... viii
Chương 1 .........................................................................................................................................1
Giới thiệu vấn đề và bài toán cần giải quyết................................................................................1
1.1. Lịch sử hình thành và phát triển của robot............................................................................1
1.2. Giới thiệu bài toán.................................................................................................................2
1.3. Những đóng góp chính..........................................................................................................6
1.4. Cấu trúc luận văn ..................................................................................................................7
Chương 2 ........................................................................................................................................8
Cơ sở lý thuyết ...............................................................................................................................8
2.1. Hệ điều hành Robot – Robot Operating System...................................................................8
2.2. Vectơ hỗ trợ hồi qui (Support Vector Machine - SVM).....................................................12
2.3. Thuật toán xác định khung xương người - OpenPose ........................................................15
2.4. Thuật toán hỗ trợ nhận diện mặt người FaceNet ................................................................17
Chương 3 ......................................................................................................................................22
Thiết kế và cài đặt hệ thống........................................................................................................22
3.1. Kiến trúc tổng quan hệ thống phân tích hình ảnh ...............................................................22
3.2. Mô-đun phát hiện vẫy tay ...................................................................................................29
3.3. Mô-đun nhận dạng mặt người.............................................................................................32
3.4. Xây dựng kịch bản..............................................................................................................34
Chương 4 ......................................................................................................................................40
Kết quả thử nghiệm, ứng dụng và tổng kết...............................................................................40
4.1. Kết quả phát hiện vẫy tay....................................................................................................40
4.2. Kết quả nhận diện mặt người..............................................................................................41
v	
	
	 	
4.3. Ứng dụng thực tiễn .............................................................................................................43
4.4. Tổng kết ..............................................................................................................................45
Tài liệu tham khảo.......................................................................................................................46
vi	
	
	
	
Danh mục hình vẽ
Hình 1-1-Camera Intel Realsense D435 [15] .................................................................................. 6
Hình 2-1-Trao đổi thông tin giữa các node qua Topic .................................................................. 11
Hình 2-2-Trao đổi thông tin giữa các node qua Service................................................................ 12
Hình 2-3-Các đường phân chia hai lớp ......................................................................................... 13
Hình 2-4-Điểm nhiễu nằm gần mặt phân tách (trái) và điểm nhiễu nằm bên mặt phân tách lớp còn
lại (phải)......................................................................................................................................... 14
Hình 2-5-So sánh các thuật toán với OpenPose ............................................................................ 16
Hình 2-6-Sơ đồ tổng quát thuật toán OpenPose............................................................................ 16
Hình 2-7-Cấu trúc mô hình của FaceNet [14]............................................................................... 17
Hình 2-8-Mạng học sâu Inception ResNet V1 [19]....................................................................... 20
Hình 3-1-Thành phần chính của hệ thống ..................................................................................... 23
Hình 3-2-Sơ đồ chuyển trạng thái của máy trạng thái hữu hạn..................................................... 24
Hình 3-3-Thiết kế tệp cài cho việc tự động xây dựng bộ máy trạng thái hữu hạn........................ 25
Hình 3-4-Thiết kế các lớp cho việc tự động xây dựng bộ máy trạng thái hữu hạn....................... 26
Hình 3-5-Mô hình kế thừa của các bài toán phân tích hình ảnh.................................................... 27
Hình 3-6-Các tác vụ đăng kí nhận dữ liệu từ Realsense D435...................................................... 28
Hình 3-7-Sơ đồ tổng quan thuật toán vẫy tay................................................................................ 29
Hình 3-8-Góc tạo thành giữa cánh tay và mặt phẳng ngang khi vẫy ............................................ 30
Hình 3-9-Định danh người qua trục hoành Ox.............................................................................. 31
Hình 3-10-Sơ đồ tổng quát nhận dạng khuôn mặt người .............................................................. 32
Hình 3-11-Tìm mặt người vẫy tay................................................................................................. 33
Hình 3-12-Sơ đồ chuyển trạng thái qua các kịch bản.................................................................... 34
vii	
	
	 	
Hình 3-13-Sơ đồ chuyển trạng thái qua kịch bản phát hiện người vẫy tay ................................... 35
Hình 3-14-Sơ đồ chuyển trạng thái qua kịch bản nhận diện khuôn mặt người............................. 37
Hình 4-1-Kết quả thử nghiệm phát hiện vẫy tay ........................................................................... 40
Hình 4-2-Kết quả huấn luyện nhận dạng mặt người K-Fold......................................................... 42
Hình 4-3-Ảnh nhận diện mặt người trong thực tế ......................................................................... 42
Hình 4-4-Một số hình ảnh của robot Fuso tại triển lãm và trong phòng trưng bày của Đại học
Quốc Gia Hà Nội........................................................................................................................... 44
viii	
	
	
Danh mục các kí hiệu, viết tắt
ROS Robot Operating System – Hệ điều hành Robot
MTCNN Multi-task Cascaded Convolutional Networks
SVM Support Vector Machine
SLAM Simultaneous Localization and Mapping
LFW Labeled Faces in the Wild
1	
	
	
Chương 1
Giới thiệu vấn đề và bài toán cần giải quyết
1.1. Lịch sử hình thành và phát triển của robot
Những năm gần đây, với sự phát triển mạnh mẽ của công nghệ và thời đại 4.0 được
mở ra, con người ngày càng quan tâm đặc biệt đến việc tự động hóa, làm máy móc trở nên
thông minh lên giống như con người để nâng cao hiệu quả sản xuất, phục vụ những nhu
cầu cơ bản cho con người. Và robot đã dần được đưa vào trong các xưởng, trong đời sống
thường ngày. Vậy từ “robot” xuất hiện từ bao giờ? Lịch sử hình thành, phát triển và những
thành tựu nổi bật như thế nào? Phần này sẽ giới thiệu một cách tổng quan nhất về robot. Từ
“robot” được sử dụng đầu tiên vào năm 1921 trong vở kịch “Rossum’s Universal Robots”
của Karel Čapek (1890-1938) – một nhà văn lừng danh người cộng hòa Séc đầu thế kỉ XX.
Từ này xuất phát từ từ “robota” mà theo tiếng địa phương nghĩa là “việc nặng nhọc” hay
“lao động cưỡng bức”. Ngoài ra, một từ khác cũng được sử dụng nhiều là “robotics”. Từ
này lần đầu tiên được dùng bởi nhà văn Isaac Asimov (1920-1992) trong truyện ngắn
“Runaround”. Trong chuyện nhà văn đã định nghĩa ba luật liên quan đến hành vi của robot
mà tương tác với con người mà về sau đã được đặt tên là “Luật của Robotics” (Laws of
Robotics). Dù là từ robot hay robotics thì mục đích chung của hai từ này đều chỉ đến những
công cụ, máy móc có thể thực những công việc một cách tự động để phục vụ cho con người.
Robot ngày càng đóng vai trò quan trọng công nghiệp giúp thúc đẩy sản xuất. Với sự
phát triển của robot, người ta đã chia robot thành 4 thế hệ: Robot thế hệ 1 (1950-1967),
robot thế hệ 2 (1968-1977), robot thế hệ 3 (1978-1999), robot thế hệ 4 (2000-nay) [1].
Robot thế hệ 1 có đặc điểm là được điều khiển bởi những thuật toán đơn giản lập trình sẵn
2	
	
	
và không có khả năng lấy thông tin từ môi trường. Nổi bật trong robot thế hệ đầu là cánh
tay robot có tên UNIMATE. Đây là robot công nghiệp đầu tiên được công nhận do 2 nhà
sáng chế George Devol và Joe Engelberger tạo ra và được lắp ráp sử dụng trong dây chuyền
lắp ráp của hãng sản xuất ô tô General Motors năm 1969. UNIMATE đã giúp hãng cải thiện
khả năng sản xuất. Robot thế hệ thứ 2 với những cảm biến xung quanh đã có thể lấy được
thông tin từ môi trường và đáp ứng lại những thông tin đó. Shakey [2] là robot di động có
cảm biến đầu tiên được nhà nghiên cứu trong viện nghiên cứu của Stanford phát triển.
Robot thế hệ thứ 3 đã có những bộ điều khiển chuyên dụng (những chiếc máy tính) và có
những ngôn ngữ mới cho lập trình điều khiển robot. Đây là thời đại của robot với sự đầu tư
lớn từ các công ty để có thể tự động hóa các việc cơ bản trong dây chuyền lắp ráp. Các
robot phổ biến tự động hóa trong các hoạt động như sơn, di chuyển, lắp ráp. Ngoài ra, robot
được mở rộng sang các lĩnh vực khác như robot giải trí của Sony, AIBO (1999) [3]. Robot
thế hệ thứ 4 có khả năng tính toán vượt trội, không chỉ làm việc với dữ liệu mà nó còn có
khả năng suy luận logic và học hỏi hơn nữa trí tuệ nhân tạo được đưa vào để có thể giải
quyết những bài toán khó trước đây mà lập trình truyền thống khó có thể giải quyết được
với độ chính xác cao. Nổi bật trong thế hệ này có robot ASIMO của tập đoàn Honda hay
robot Roomba là robot hút bụi đầu tiên được giới thiệu hay là xe tự hành của Tesla. Trải
qua các thế hệ robot dần được nâng cấp, sự tự động hóa được nâng cao và sự thông minh
dần được đưa vào để robot có thể phục vụ cho con người trong đời sống thường ngày và
trong công nghiệp có thể nâng cao năng lực sản xuất với những sản phẩm có độ tin cậy cao.
Với tiềm năng phát triển trong tương lai của robot bài toán xây dựng robot thông minh đã
được nghiên cứu và xây dựng.
1.2. Giới thiệu bài toán
Với sự phát triển của tuệ nhân tạo như cuộc cách mạng lần thứ tư (1 – động cơ hơi
nước, 2 – năng lượng điện, 3 – công nghệ thông tin) đã dần biến những điều tưởng rằng chỉ
có trong khoa học viễn tưởng thành hiện thực. Năm 2011, Watson [4] – Một chương trình
phần mềm trí tuệ nhân tạo do IBM phát triển, đã chiến thắng cuộc thi trong chương trình
hỏi đáp trên truyền hình có tên Jeopardy. Còn trong sản phẩm thương mại có trợ lý ảo Siri
của Apple có thể hiểu các câu hỏi của người dùng và phản hồi chính xác điều người dùng
muốn tương tác trên điện thoại di động. Công nghệ xe tự hành của những công ty lớn như
Apple, Tesla, Google, Toyota cũng có những bước tiến vượt bậc nhờ vào những cảm biến
xung quanh ô tô và được huấn luyện với mạng nơ-ron giúp ô tô có khả năng tự học hỏi
3	
	
	 	
được những kĩ năng lái xe. Ngoài ra, năm 2016, AlphaGo do Google DeepMind phát triển
đã làm chấn động thế giới khi đánh bại kỳ thủ cờ vây chuyên nghiệp người Hàn Quốc, Lee
Sedol. Khác với cờ vua là với sức mạnh máy tính hiện nay có thể tính toán được hết số
nước trong cờ vua đi để tìm ra được nước đi tối ưu nhất và dành chiến thắng thì trong cờ
vây số nước đi lớn hơn rất nhiều. Giới hạn dưới về số lượng vị trí nước đi hợp lệ trên bàn
cờ trong cờ vây được ước tính là 2 ∗ 10%&'
, đó là một con số rất lớn để mà máy tính có thể
tính toán được. Chính vì vậy AlphaGo đã được huấn luyện qua mạng nơ-ron học sâu có
giám sát với chuyên gia và học tăng cường. Theo như bài báo [5] thì AlphaGo đạt tỉ lệ chiến
thắng lên đến 99,8%. Đặc biệt hơn hết vào tháng 10 năm 2017, tại Ả Rập Xê Út đã cấp
quyền công dân cho robot đầu tiên trên thế giới có tên là Sophia [6]. Sophia có lớp da được
làm bằng silicon trông giống như da người. Robot có khả năng biểu hiện tổng 62 sắc thái
trên khuôn mặt (như giận, vui, buồn, v.v), hay có khả năng tương tác nói chuyện gần như
con người. Những minh chứng trên cho thấy rằng việc đưa trí tuệ nhân tạo vào robot là một
bước tiến lớn trong quá trình phát triển robot làm cho robot thông minh hơn, gần gũi với
con người hơn để có thể giúp ích cho con người trong đời sống thường ngày như để phục
vụ, tư vấn, chăm sóc sức khỏe, trong giáo dục và trong các ứng dụng dịch vụ chăm sóc
khách hàng.
Đối với nước ta việc sản xuất và ứng dụng robot thông minh vào trong các lĩnh vực
vẫn còn hạn chế. Chủ yếu là trong công nghiệp với những cánh tay robot trong dây truyền
sản xuất được chuyển giao công nghệ từ nước ngoài. Từ những tiềm năng của sự phát triển
robot trên thế giới và những hạn chế trong nước, robot Fuso đã được nghiên cứu, xây dựng
và phát triển để có thể đóng góp một phần nhỏ trong sự phát triển robot của đất nước và đó
cũng là cơ sở nền tảng quan trọng để phát triển các thế hệ robot thông minh sau này. Với
mục tiêu xây dựng robot Fuso có hình dáng giống con người có khả năng làm hướng dẫn
viên trong viện bảo tàng, khu trưng bày hoặc trong các bệnh viện hay siêu thị, trung tâm
thương mại thì robot Fuso cần nhận diện được cử chỉ vẫy tay của con người từ xa và phản
ứng lại những cử chỉ đó, nhận diện được mặt người đã từng gặp và có khả năng di chuyển
linh hoạt đến các địa điểm được yêu cầu của người dùng bằng giọng nói. Về tổng quan
robot được chia thành các phần nhỏ hơn phát triển độc lập: Phần về phân tích hình ảnh để
nhận diện các cử chỉ hành động, khuôn mặt của người dùng; phần về phân tích âm thanh sẽ
phân tích để hiểu các câu, mệnh lệnh; phần về xử lý chuyển động cơ học sẽ nhận các mệnh
lệnh để có thể di chuyển mượt và đúng đến địa điểm yêu cầu; phần xây dựng giao diện
người dùng giúp người dùng có thể tương tác qua màn hình cảm ứng. Và tất các các phần
sẽ giao tiếp với nhau thông qua kênh truyền thông tin topic và service của hệ điều hành
4	
	
	
ROS – Robot Operating System [7]. Trong luận văn này, tôi xin trình bày bày hệ thống
phân tích hình ảnh cho robot. Phân tích hình ảnh được chia ra làm các 3 mô-đun nhỏ: mô-
đun xây dựng bộ máy trạng thái hữu hạn để dựng lên tất các trạng thái hoạt động của robot
mà ở đó có thể giao tiếp, trao đổi dữ liệu với các phần khác trong robot cùng hoàn thành
một chức năng cụ thể. Việc xây dựng bộ máy trạng thái hữu hạn cũng giúp cho việc mở
rộng, nâng cấp của chức năng và gỡ lỗi sẽ dễ dàng hơn; mô-đun nhận diện cử chỉ vẫy tay
sử dụng thuật toán OpenPose tìm khung xương người từ đó tính toán để phát hiện ra dấu
hiệu cử chỉ vẫy tay; mô-đun nhận dạng khuôn mặt dựa trên thuật toán Facenet để tìm vectơ
embedding, vectơ này tiếp tục được đưa vào mô hình SVM [8] đã được huấn luyện trước
để tìm ra tên người vẫy.
Trong quá trình xây dựng phát triển hệ thống thống phân tích hình ảnh cho robot có
một số vấn đề gặp phải:
• Hệ thống phân tích hình ảnh cho robot gồm có các thuật toán khác nhau để thực
hiện các chức năng khác nhau trong việc phân tích hình ảnh trích xuất và biến đổi
thông tin cần thiết để cung cấp cho các bộ phận khác cho robot (như bộ phận điều
khiển di chuyển, bộ phận phân tích âm thanh). Các chức năng trong hệ thống phân
tích hình ảnh không chỉ được thực hiện tuần tự mà còn có thể thực hiện song song
chính vì vậy cần xây dựng hệ thống tổng có thể quản lý, điều khiển các thuật toán
khi nào được thực thi, khi nào dừng lại để đồng nhất trong hành động với các bộ
phận khác của robot. Mặt khác, việc tìm ra lỗi dễ dàng và nhanh chóng cũng cần
thiết trong quá trình phát triển mà bị xảy ra lỗi. Vậy nên bộ máy trạng thái hữu hạn
cần được đưa vào trong việc xây dựng hệ thống tổng quát cho phân tích hình ảnh.
• Trong quá trình tương tác với con người, robot cần phản ứng nhanh chóng nhất để
đáp ứng mệnh lệnh của con người. Vì vậy các thuật toán vừa cần độ chính xác cao
và phản hồi nhanh. Thêm vào đó là những giới hạn phần cứng trên robot đã được
thiết lập sẵn nên trong quá trình phát triển một chức năng thì cần thử nghiệm nhiều
thuật toán khác nhau để so sánh và tìm thuật toán phù hợp nhất, đồng nhất với
môi trường với các thuật toán đã cài đặt trước đó và thiết bị phần cứng xây dựng
nên robot.
1.2.1. Bo mạch Jetson TX2
Bo mạch Jetson TX2 [16] được Nvidia cho ra mắt vào tháng 3 năm 2017. Đây là một
bo mạch có tính toán mạnh mẽ có thể thực hiện được hơn một nghìn tỷ phép tính trong một
5	
	
	 	
giây (1,3 TFLOPS) và sức mạnh tính toán gấp đôi so với Jetson Nano (0,5 TFLOPS). Thiết
bị sinh ra nhằm mục đích chính cho việc phát triển các ứng dụng trí tuệ nhân tạo trên đó
nên phù hợp với định hướng xây dựng robot thông minh như trên đã đề ra. Ngoài ra, nhà
sản xuất Nvidia hỗ trợ bộ công cụ phát triển JetPack SDK mà tích hợp các công cụ và thư
viện cho việc xây dựng nhanh chóng các ứng dụng trí tuệ nhân tạo như:
TensorRT: Có tác dụng tối ưu hiệu năng chạy cho các mạng học sâu như phân loại
ảnh, phân vùng ảnh và nhận diện đối tượng.
cuDNN: Viết tắt của từ CUDA Deep Neural Network là một thư viện cung cấp các
thiết lập được tinh chỉnh cho các thủ tục chuẩn như forward/backward convolution, pooling,
normalization và activation layer từ đó giúp hiệu năng của các ứng dụng trí tuệ nhân tạo tốt
hơn.
CUDA: Là công cụ phát triển cung cấp môi trường phát triển thích hợp cho các nhà
phát triển C/C++ xây dựng các ứng dụng được tăng tốc bởi GPU. Nó bao gồm các thư viện
toán học, công cụ cho gỡ lỗi, tối ưu hiệu năng cho ứng dụng.
ComputerVision(CV): gồm có các gói, thư viện như VisionWorks, OpenCV. Đây là
những gói, thư viện cho thị giác máy, xử lý ảnh và học máy.
Bo mạch Jetson TX2 nhỏ gọn mạnh mẽ và tích hợp nhiều các công cụ, thư viện và
các gói giúp cho việc phát triển các ứng dụng dễ dàng hơn. Bên cạnh bo mạch nhỏ gọn,
mạnh mẽ thì camera có chất lượng hình ảnh tốt rất cần thiết cho bài toán phân tích hình ảnh
cho robot.
1.2.2. Camera RealSense D435
Camera chiều sâu RealSense D435 [15] thuộc dòng D400 của Intel được giới thiệu
vào năm 2018. So với Kinect của Microsoft thì RealSense D435 nhỏ gọn và có thể quan sát
xa hơn. Với Kinect độ sâu mà camera quan sát trong khoảng từ 0,5-4,5m còn đối với
RealSense là 0,11-10m. Với phạm vi rộng thích hợp cho robot quan sát trong môi trường
của một phòng trưng bày hay viện bảo tàng. Chất lượng hình ảnh cho ra của RealSense rất
tốt với độ phân giải 1920x1080 và tốc độ khung hình 30fps. RealseSense D435 cấu tạo gồm
3 camera với 2 camera màu ở 2 bên và 1 camera hồng ngoại. 2 camera màu giúp RealSense
sinh ra những bức ảnh độ sâu còn camera hồng ngoại giúp tinh chỉnh để tăng chất lượng
những bức ảnh độ sâu. Thành phần chính của camera được mô tả như Hình 1-1.
6	
	
	
Hình 1-1-Camera Intel Realsense D435 [15]
Ngoài ra, Intel có hỗ trợ bộ công cụ RealSense SDK 2.0 để có thể dễ dàng làm việc
với RealSense, giúp tinh chỉnh để cho ra được hình ảnh có chất lượng tốt ứng với từng môi
trường, lấy các thông số và hình ảnh của camera.
1.3. Những đóng góp chính
Như ở phần giới thiệu bài toán đã đề cập để xây dựng và phát triển được Fuso thì các
phần được phát triển độc lập nhau và luận văn tập trung chủ yếu xây dựng nên hệ thống
phân tích hình ảnh trên ROS cho robot hướng dẫn viên. Trong đó có 3 mô-đun chính và đó
cũng là những đóng góp chính trong luận văn này. Thứ nhất, xây dựng mô-đun bộ máy
trạng thái hữu hạn mà định nghĩa các trạng thái hoạt động của robot. Với việc xây dựng nên
mô-đun này sẽ giúp hệ thống dễ dàng mở rộng sau này và dễ dàng kiểm soát lỗi khi hệ
thống hoạt động không như mong muốn. Thứ hai, xây dựng mô-đun phát hiện người vẫy
tay dựa trên phương pháp tìm khung xương người OpenPose. Thứ ba, xây dựng mô-đun
nhận dạng khuôn mặt sử dụng mô hình SVM đã được huấn luyện với đầu vào là các vectơ
embedding được trả về từ thuật toán FaceNet.
7	
	
	 	
1.4. Cấu trúc luận văn
Phần còn lại của chương đầu là cấu trúc của luận văn
Chương 1: Giới thiệu vấn đề và bài toán cần giải quyết
Giới thiệu về tổng quan về robot, lịch sử hình thành và phát triển qua các thế hệ robot.
Từ đó, giới thiệu bài toán xây dựng phát triển robot, cụ thể hơn là bài toán phân tích hình
ảnh đầu vào cho robot. Bên cạnh đó, các thiết bị phần cứng và thư viện hỗ trợ để giải quyết
bài toán cũng được giới thiệu.
Chương 2: Cơ sở lý thuyết
Trong chương này tập trung vào giải thích những kiến thức nền tảng. Đầu tiên giới
thiệu về ROS – Robot Operating System gồm có các thành phần cơ bản cấu tạo nên ROS
và những phương thức trao đổi dữ liệu giữa các Node trong ROS hoạt động ra sao. Sau đó
là nêu ra ý tưởng chính và phương pháp của các thuật toán SVM – Support Vector Machine,
OpenPose và FaceNet.
Chương 3: Cài đặt thiết kế hệ thống
Trình bày về thiết kế tổng quan hệ thống với các mô-đun để xây dựng nên bộ phân
tích hình ảnh cho robot. Trình bày về thuật toán, cài đặt cho từng mô-đun. Với OpenPose
để nhận diện khung xương người và những cải tiến để nhận diện hành động vẫy tay của con
người. Với mô-đun nhận dạng mặt người, thuật toán FaceNet của Google được áp dụng để
nhận diện mặt người vẫy tay. Và cuối cùng là những kịch bản xây dựng để chạy robot.
Chương 4: Kết quả thử nghiệm, ứng dụng và tổng kết
Trình bày những kết quả đạt được trong quá trình phát triển và kết quả triển khai trong
thực tiễn. Tóm tắt lại những đóng góp chính trong luận văn, những hạn chế chưa giải quyết
được và định hướng phát triển trong tương lai.
8	
	
	
Chương 2
Cơ sở lý thuyết
2.1. Hệ điều hành Robot – Robot Operating System
ROS – Robot Operating System [7] là một hệ điều hành mã nguồn mở cung cấp một
nền tảng cho việc nghiên cứu và phát triển robot được dễ dàng được tạo bởi phòng nghiên
cứu Willow Garage và đang được phát triển bởi quỹ mã nguồn mở Robotics. Mặc dù gọi là
hệ điều hành tuy nhiên ROS không quản lý các tài nguyên, tiến trình và lập lịch tiến trình
mà ROS cung cấp một lớp gửi nhận dữ liệu có cấu trúc giữa các ứng dụng với nhau, công
cụ giả lập trực quan và kết nối với cộng đồng nghiên cứu robot trên toàn thế giới. Với những
đóng góp lớn từ cộng đồng đặc biệt là từ các viện nghiên cứu và trường đại học hàng đầu
trên thế giới thì việc xây dựng ứng dụng trên robot trên nền ROS sẽ giảm đi một lượng đáng
kể công việc lập trình cơ bản và tập trung được vào công việc nghiên cứu chuyên sâu. Thêm
nữa, ROS hỗ trợ nhiều ngôn ngữ như CC++, Python nên việc bắt đầu tiếp cận và lập trình
với ROS trở nên đơn giản hơn.
2.1.1. Cấu trúc thư mục và các thành phần trong ROS
2.1.1.1. Cấu trúc thư mục trong ROS
Trong ROS, đơn vị chính cho việc tổ chức phần mềm là các package [17]. Mỗi một
package có thể gồm các chương trình gọi là nodes, thư viện phụ thuộc ROS, các tập dữ liệu,
9	
	
	 	
các tệp cấu hình và các dữ liệu khác cần thiết trong hệ thống. Mục đích chính của các
package là cung cấp các chức năng để các phần mềm khác có thể tái sử dụng. Trong thư
mục package thông thường gồm có các thành phần chính: tệp package manifest, các
message type, các service type. Tệp package manifest cung cấp thông tin ngắn gọn về
package như tên package, tác giả, phiên bản, mô tả và các gói phụ thuộc. Các message type
định nghĩa cấu trúc dữ liệu gửi nhận tin qua topic trong ROS. Các service type định nghĩa
cấu trúc dữ liệu gửi nhận cho service trong ROS.
2.1.1.2. Các thành phần trong ROS
Master: là thành phần quan trọng quản lý kết nối truyền tin giữa các nodes. Mọi node
đều phải đăng kí với master khi khai báo, giúp cho master cung cấp thông tin cho các node
còn lại có thể tra cứu, nó giống như một máy chủ DNS. Nếu không có master thì các node
không thể tìm thấy nhau và việc trao đổi thông tin giữa các node đều không thể thực hiện
được.
Nodes: là đơn vị tính toán, xử lý dữ liệu và thực hiện một chức năng cụ thể nào đó.
Thông thường một hệ điều khiển robot thường sẽ bao gồm nhiều nodes mà mỗi nodes lại
chuyên biệt một công việc. Ví dụ như một node điều khiển động cơ bánh xe, một node định
vị, một node lập kế hoạch định hướng đường đi. Mỗi node ROS được xây dựng nhờ sử
dụng thư viện ROS client (roscpp, rospy). Và các node trao đổi dữ liệu với nhau gửi nhận
dữ liệu qua topic hay services. Mỗi node đều có một tên duy nhất trong toàn bộ hệ thống
và tên này chính là định danh để các node khác biết mà có thể giao tiếp với nhau được.
ROS cũng cung cấp công cụ để làm việc dễ dàng với ros qua dòng lệnh rosnode. Ví dụ như
“rosnode list” để liệt kê các node đang hoạt động trong hệ thống, hay “rosnode info node”
để in những thông tin về node.
Messages: Để cho các node có thể trao đổi được dữ liệu cho nhau thì dữ liệu cần có
định dạng thống nhất và messages chính là thành phần quy định định dạng cấu trúc của dữ
liệu mà các node dùng để trao đổi. Trong một message bao gồm một hay nhiều cặp kiểu dữ
liệu và tên dữ liệu đi cùng với nhau. Kiểu dữ liệu có thể là kiểu nguyên thủy mà trong ROS
đã định nghĩa sẵn (như bool, int8, string) hay kiểu người dùng đã định nghĩa trước giống
như kiểu struct trong C/C++. Message được chia ra làm hai dạng chính. Thứ nhất là message
trao đổi qua topic sẽ được định nghĩa trong một tệp riêng có đuôi mở rộng là .msg. Thứ hai
là message được sử dụng qua service cũng được định nghĩa trong một tệp riêng có đuôi mở
rộng là .srv. Điều khác biệt trong message có đuôi .srv là định nghĩa cả cấu dữ liệu trả về
10	
	
	
của service. Hình 2-1 và Hình 2-2 có hình ảnh mô tả message với hình hộp chữ nhật màu
cam không viền.
Topics: Các message có đuôi mở rộng là .msg được trao đổi giữa các node thông qua
topic. Mỗi topic có một tên để định danh và cấu trúc định dạng message tương ứng. Bất kì
node nào trong mạng muốn nhận thông tin thì có thể đăng kí nhận thông tin từ topic. Hay
node nào cần đẩy thông tin lên topic thì cũng có thể đăng kí đẩy thông tin cho topic. Vậy
trong một mạng, một node có thể đăng kí nhận thông tin từ nhiều topic và cũng có thể đăng
kí đẩy thông tin cho nhiều topic. Điều này giúp cho ROS có thể tách biệt nguồn tạo ra thông
tin với bộ phận sử dụng thông tin đó. Topic được xem như là một kênh truyền thông tin
định kiểu mà mỗi kênh truyền có được định danh bởi một tên riêng. Node nào cũng có thể
kết nối để gửi/nhận thông tin qua kênh này, miễn là thông tin cùng kiểu với topic đã định
nghĩa từ trước.
Services: Mô hình truyền thông tin theo qua topic như ở trên trình bày là mô hình rất
linh hoạt tuy nhiên trong một số trường hợp các node cần tương tác theo kiểu yêu cầu/đáp
ứng (request/response) thì mô hình qua topic lại không còn phù hợp nữa. Do vậy, kiểu
truyền dữ liệu service được sinh ra nhằm thực hiện kiểu tương tác yêu cầu/đáp ứng
(request/response). Một node trong mạng sẽ đóng vai trò là service để thực hiện các yêu
cầu từ các node khác gửi lên. Ví dụ, một node A có cung cấp service tính tổng 2 số. Một
node khác là B có thể gửi yêu cầu cho node A với dữ liệu để cho node A tính tổng 2 số và
trả về cho node B. Trong thực tế những yêu cầu thường phức tạp hơn rất nhiều.
Bags: Là một định dạng dùng để lưu và phát lại dữ liệu. Đây là một cơ chế quan trọng
trong việc lưu trữ dữ liệu. Ví dụ như trong phòng lab thiếu thiết bị camera, ta có thể lưu dữ
liệu camera thu được thành tệp .bag và tệp này có thể sử dụng bởi nhiều người mà không
cần đến thiết bị thật trong việc phát triển và kiểm thử robot.
2.1.2. Trao đổi thông tin giữa các node trong ROS
2.1.2.1. Trao đổi thông tin giữa các node qua topics
Để các nodes có thể trao đổi thông tin với nhau qua topics thì các node phải khai báo
với ROS master. Thông thường, một node có vai trò đẩy thông tin lên topic và nhiều node
sẽ đăng kí nhận thông tin từ topic đó. Để một node có thể đẩy thông tin lên thì node đó cần
phải đăng kí thông tin tên topic cần đẩy lên và định dạng dữ liệu đẩy lên (Ví dụ trong
Python: “pub = rospy.Publisher(‘chatter’, String, queue_size=10)”). Trong ví dụ trên, node
11	
	
	 	
muốn đẩy thông tin lên topic có tên là chatter và kiểu định dạng message gửi lên là String.
Còn để một node có thể đăng kí thông tin thì node đó cần đăng kí tên topic nào mà muốn
nhận thông tin, định dạng kiểu dữ liệu nhận về và quan trọng nhất là một hàm trả về dữ liệu
khi có thông tin mới trên topic được đưa lên. (Ví dụ trong Python:
“rospy.Subscriber(‘chatter’, String, callback)”). ở đây callback là một hàm với một tham
số là dữ liệu mà topic trả về. Hình 2-1 mô tả toàn bộ quá trình trao đổi thông tin giữa các
node qua topics.
Hình 2-1-Trao đổi thông tin giữa các node qua Topic
2.1.2.2. Trao đổi thông tin giữa các node với services
Để có thể trao đổi được thông tin giữa các node với services thì cần một node đóng
vai trò là service để tính toán xử lý các yêu cầu từ các node khác. Cũng giống như topic,
node đóng vai trò là service cũng cần phải đăng kí với master tên service, kiểu dữ liệu
service sẽ nhận và hàm xử lý tính toán để trả về yêu cầu (Ví dụ: “serv =
rospy.Service(‘add_two_ints’, AddTwoInts, handle_add_two_ints)”). Trong đó tên
service là ‘add_two_ints’, kiểu dữ liệu nhận là AddTwoInts và hàm handle_add_two_ints
là hàm xử lý yêu cầu và trả về dữ liệu cho các node yêu cầu. Node yêu cầu cũng phải đăng
kí với master (Ví dụ: “add_two_ints = rospy.ServiceProxy(‘add_two_ints’, AddTwoInts)”)
và gửi lên yêu cầu như resp = add_two_ints(1, 2). Hình 2-2 mô tả quá trình trao đổi thông
tin với services.
12	
	
	
Hình 2-2-Trao đổi thông tin giữa các node qua Service
2.2. Vectơ hỗ trợ hồi qui (Support Vector Machine - SVM)
2.2.1. Máy vectơ hỗ trợ hồi quy
Trong bài toán phân lớp nhị phân với dữ liệu gồm có hai lớp và hai lớp này được phân
tách hoàn toàn. Nghĩa là, có một đường thẳng (trong không gian 2 chiều), một mặt phẳng
(trong không gian 3 chiều) hay một siêu phẳng (trong không gian 𝑛	 ≥ 3) phân tách tách
dữ liệu của 2 lớp sao cho các điểm dữ liệu nằm cùng một phía so với mặt phân tách thuộc
cùng một lớp. Tuy nhiên, sẽ có vô số đường thẳng, mặt phẳng, siêu phẳng có thể phân tách
được dữ liệu thành 2 lớp thỏa mãn điều kiện như Hình 2-3 mô tả. Vậy câu hỏi đặt ra rằng:
Đâu là mặt phân tách tốt nhất theo một tiêu chuẩn nào đó? Từ trực quan ta thấy rằng, khoảng
cách từ điểm gần nhất của hai lớp tới mặt phân tách càng xa càng tốt. Và đó cũng chính là
tư tưởng chính của thuật toán SVM [8, 18], tìm mặt phân tách sao cho lề là lớn nhất. Với
lề được định nghĩa là khoảng cách từ điểm dữ liệu gần mặt phân tách nhất tới mặt phân
tách.
13	
	
	 	
Hình 2-3-Các đường phân chia hai lớp
Để xây dựng và giải bài toán phân lớp nhị phân qua thuật toán SVM, chúng ta giả sử
rằng có tập dữ liệu (𝑋,	y) = 2(x%, 𝑦%), (x5, 𝑦5), … (x7, 𝑦7)8 với vectơ x9 ∈	𝑅<
là điểm dữ
liệu đầu vào và 𝑦9 ∈ {−1, 1} là nhãn với 𝑦9 = 	1 nếu điểm x9 thuộc lớp thứ nhất và 𝑦9 =
	−1 nếu điểm x9 thuộc lớp thứ hai. Gọi 𝑊A
x + 𝑏 = 𝑤%𝑥% + 𝑤5𝑥5 + ⋯ + 𝑤7𝑥7 + 𝑏 = 0 là
mặt phẳng phân chia 2 lớp. Vậy khoảng cách từ một điểm đến mặt phẳng phân tách là 𝑑 =
	
|IJxKL	M|
‖I‖O
. Hơn nữa, lớp thứ nhất thuộc lớp dương, và lớp thứ 2 thuộc lớp âm nên chúng ta
có thể viết lại công thức khoảng cách từ một điểm đến mặt phẳng 𝑑 =	
PK(IJxKL	M)
‖I‖O
. Nếu lớp
thứ nhất mà là lớp âm, lớp thứ 2 là lớp dương ta chỉ cần đổi dấu 𝑊 và 𝑏. Vậy khoảng cách
lề của một lớp được tính bởi 𝑚𝑎𝑟𝑔𝑖𝑛 = min
PK(IJxKL	M)
‖I‖O
. Như vậy bài toán tối ưu trong
SVM chính là tìm 𝑊 và 𝑏 sao cho:
(𝑊, 𝑏) = 𝑎𝑟𝑔𝑚𝑎𝑥
I,M
	min
PK(IJxKL	M)
‖I‖O
(2.1)
Vì thay 𝑊 = 𝑘	 × 𝑊 và 𝑏 = 𝑘	 × 	𝑏 với 𝑘 > 0 với thì mặt phân chia không đổi vậy
nên chúng ta có thể giả sử 𝑦9(𝑊A
x9 + 	𝑏) = 1 với những điểm gần mặt phân chia nhất thì
từ công thức (2.1) bài toán trở thành tìm:
(𝑊, 𝑏) = 𝑎𝑟𝑔𝑚𝑎𝑥
I,M
	
%
‖I‖O
(2.2)
Với điều kiện 𝑦9(𝑊A
x9 + 	𝑏) ≥ 1
Hay viết lại công thức (2.2) có:
14	
	
	
(𝑊, 𝑏) = 𝑎𝑟𝑔𝑚𝑖𝑛
I,M
%
5
|𝑊|5
5
(2.3)
Với điều kiện 1 − 	𝑦9(𝑊A
x9 + 	𝑏) ≤ 0
Bài toán này có thể giải được bằng các phương pháp tối ưu hóa. Sau khi giải được bài
toán ta sẽ thu được mặt phân tách để phân tách hai lớp dữ liệu rõ ràng nhất với khoảng cách
từ điểm dữ liệu gần nhất của hai lớp đến mặt phân tách là lớn nhất. Tuy nhiên trên thực tế
có dữ liệu thường có nhiễu ảnh hưởng đến kết quả tìm mặt phân tách sao cho lề đạt cực đại
vậy nên thuật toán lề mềm SVM được sinh ra để khắc phục những nhược điểm đó.
2.2.2. Lề mềm SVM (Soft margin SVM)
Trên thực tế, các điểm dữ liệu ở 2 lớp phân tách nhau hoàn toàn là rất ít mà các lớp sẽ
có các điểm dữ liệu nhiễu như trong Hình 2-4. Những điểm dữ liệu nhiễu này có thể nằm ở
gần mặt phân tách (như Hình 2-4 bên trái) hoặc tệ hơn là có thể nằm ở nửa mặt phẳng của
lớp còn lại (như Hình 2-4 bên phải) dẫn đến việc tìm ra nghiệm tối ưu của bài toán SVM bị
ảnh hưởng hoặc không có nghiệm nếu hai lớp không phân tách tuyến tính. Chính vì vậy, có
thể hi sinh một số điểm nhiễu gần mặt phân tách hoặc nằm ở mặt phẳng của lớp còn lại để
có thể có được lề rộng hơn. Tuy nhiên, không thể hi sinh phần lớn các điểm để có thể có
một lề cực lớn được. Vậy mục tiêu của lề mềm SVM chính là tìm mặt phân cách tối ưu sao
cho có lề cực đại và sự hi sinh tối thiểu.
Hình 2-4-Điểm nhiễu nằm gần mặt phân tách (trái) và
điểm nhiễu nằm bên mặt phân tách lớp còn lại (phải)
Gọi 𝛿9 đo độ hi sinh tương ứng với mỗi điểm x9 trong tập toàn bộ dữ liệu. Nếu điểm
dữ liệu x9 nằm trong vùng an toàn (bên ngoài lề) thì 𝛿9 = 0. Nếu điểm dữ liệu x9	nằm trên
15	
	
	 	
lề nhưng không vượt qua mặt phân cách thì 0	 < 	𝛿9 ≤ 1. Nếu điểm dữ liệu x9 nằm khác
phía so với mặt phân cách thì 𝛿 > 1. Như vậy, với 𝑦9 = ±1 thì 𝛿9 = |𝑊A
x9 + 𝑏	 − 𝑦9|.
Hàm mục tiêu bây giờ ngoài việc tối thiểu hóa như công thức (2.3) chúng ta còn phải
tối thiểu các 𝛿9 để giảm thiểu sự hi sinh. Vậy hàm mục tiêu trở thành
(𝑊, 𝑏, 𝛿) = 𝑎𝑟𝑔𝑚𝑖𝑛
I,M
%
5
|𝑊|5
5
+ 𝐶	 ∑ 𝛿9
c
9d% (2.4)
Với điều kiện 1 + 𝛿9 − 	𝑦9(𝑊A
x9 + 	𝑏) ≤ 0 và −𝛿9 ≤ 0
Trong đó, 𝐶 là một hằng số dương để điều chỉnh điều chỉnh tầm quan trọng giữa
khoảng cách lề cực đại với sự hi sinh. Khi 𝐶 lớn, thì hàm mục tiêu tập trung giảm ∑ 𝛿9
c
9d%
dẫn đến 𝛿9	nhỏ có nghĩa là không có điểm nào phải hi sinh. Ngược lại 𝐶 nhỏ dẫn đến 𝛿9lớn
nghĩa là sự hi sinh lớn. Để tìm được 𝐶 tối ưu, người ta thường sử dụng phương pháp kiểm
định chéo (cross-validation). Cũng giống như bên trên người ta có thể giải được bằng
phương pháp tối ưu để tìm ra nghiệm thỏa mãn công thức (2.4).
2.3. Thuật toán xác định khung xương người - OpenPose
2.3.1. Giới thiệu OpenPose
OpenPose [9] là một thuật toán xác định khung xương của nhiều người trong một bức
ảnh. Khác với các thuật toán xác định khung xương người trước đó [21, 22], tiếp cận theo
hướng từ trên xuống, nghĩa là để tìm khung xương của nhiều người trong một bức ảnh thì
thuật toán sẽ tìm khung xương từng người trong bức ảnh đó. Với phương pháp tiếp cận theo
hướng từ trên xuống có hai nhược điểm rất lớn. Thứ nhất, phải biết trước số lượng người
trong một bức ảnh. Thứ hai, độ phức tạp thời gian chạy để xác định ra tất cả khung xương
người trong một bức ảnh sẽ tăng tuyến tính theo số lượng người có trong bức ảnh. Do đó,
OpenPose đã tiếp cận theo hướng từ dưới lên bằng cách tách được độ phức tạp thời gian
chạy không còn phụ thuộc với số lượng người có trong ảnh. OpenPose xây dựng kiến trúc
để có thể học được mức độ liên kết giữa các khớp trong cơ thể qua các vectơ 2 chiều mà
mã hóa thông tin vị trí và hướng của các khớp cơ thể trên miền ảnh. Sau đó, sử dụng thuật
toán tham lam để xác định cơ thể người mà các khớp đó thuộc về. Với những cải tiến trên,
OpenPose đã có độ chính xác và thời gian vượt xa với các thuật toán xác định khung xương
người đứng đầu trước đó.
16	
	
	
Ngoài ra, tác giả cũng đã thực hiện cài đặt thực tế các thuật toán khác (Alphapose [23]
và HRNet [24]) trên bo mạch Jetson TX2 và kết quả của việc cài đặt được thể hiện qua
Hình 2-5 bên dưới.
Thuật toán Tốc độ khung hình
(fps)
Độ chính xác
(khuỷu tay)
Độ chính xác
(cổ tay)
OpenPose 4,4 – 5,5 77,7 66,8
Alphapose [23] ~1,0 84,0 76,4
HRNet [24] ~1,0 92,8 89,0
Hình 2-5-So sánh các thuật toán với OpenPose
Việc lựa chọn thuật toán tìm khung xương người trong ảnh được đánh giá qua 3 tiêu
chí: tốc độ khung hình, độ chính xác khửu tay, độ chính xác cổ tay. Vì phần cứng của robot
đang sử dụng là bo mạch Jetson TX2 vậy nên cần thiết một mô hình thuật toán có thể xử lý
nhanh trên bo mạch đó. Vậy nên tiêu chí tốc độ khung hình sau khi xử lý được đưa vào.
Thêm nữa, sau khi tìm khung xương người thì 2 vị trí khớp cổ tay, và khớp khuỷu tay được
sử dụng để phát hiện ra hoạt động vẫy tay nên độ chính xác của khuỷu tay và cổ tay cần
được quan tâm. Qua Hình 2-5 thấy được rằng tốc độ khung hình của Openpose cao hơn 2
thuật toán còn lại và độ chính xác của khớp cổ tay và khuỷu tay cao nên Openpose phù hợp
trong việc cài đặt trên Jetson TX2. Ngoài ra, trong quá trình cài đặt, tác giả thấy rằng việc
cài đặt Openpose cũng đơn giản hơn các thuật toán AlphaPose và HRnet vậy nên Openpose
được đưa mô-đun phát hiện hành động vẫy tay mà trong mục 3.2 bên dưới sẽ mô tả chi tiết.
2.3.2. Tổng quan phương pháp xác định khung xương người
Sơ đồ tổng quan của thuật toán OpenPose – xác định khung xương người, được mô tả
qua Hình 2-6.
Hình 2-6-Sơ đồ tổng quát thuật toán OpenPose
17	
	
	 	
Thuật toán nhận đầu vào là một bức ảnh kích cỡ 𝑤 × ℎ và sinh ra vị trí các khớp của
cơ thể cho từng người trong ảnh (Hình 2-6). Bức ảnh đầu vào sẽ được đưa qua 10 lớp đầu
của mạng VGG-19 [10] đã được tinh chỉnh để trích xuất ra các bản đồ đặc trưng (feature
maps). Những bản đồ đặc trưng tiếp tục được đưa vào một mạng tích chập để dự đoán đồng
thời một tập các bản đồ tin cậy (confidence maps) 𝑆 của vị trí các khớp trên cơ thể và một
tập các vectơ 2 chiều 𝐿 mà mã hóa mức độ liên kết giữa các khớp của một bộ phận cơ thể.
Tập 𝑆 = 2𝑆%, 	𝑆5, … , 𝑆j8 có 𝐽 bản đồ tin cậy, trong đó 𝑆l ∈ ℝn	×	o
, 𝑗 ∈ {1 … 𝐽}	. Mà mỗi khớp
tương ứng với một bản đồ tin cậy. Ví dụ như tương ứng với khớp cổ tay của tất cả mọi
người trong ảnh sẽ có một bản đồ tin cậy, tương ứng khớp khuỷu tay của tất cả mọi người
trong ảnh sẽ có một bản đồ tin cậy khác. Tập 𝐿 = (𝐿%, 𝐿5, … , 𝐿q}) có 𝐶 các trường vectơ 2
chiều, trong đó 𝐿r ∈ ℝn	×	o	×	5
, 𝑐 ∈ {1 … 𝐶}, mỗi vị trí trong trường vectơ 𝐿r là một vectơ
2 chiều. Mà mỗi trường vectơ 2 chiều ứng với một bộ phận cơ thể. Ví dụ, cánh tay dưới
được kết nối bởi 2 khớp (khớp cổ tay và khớp khuỷu tay) của tất cả mọi người trong ảnh sẽ
có trường vectơ 2 chiều tương ứng. Cuối cùng các bản đồ tin cậy 𝑆 và các trường vectơ 𝐿
sẽ được sử dụng để suy luận bởi thuật toán tham lam để sinh ra khung xương của từng
người trong một bức ảnh. Thông tin về khung xương người mà thuật toán trả về sẽ được
dùng để nhận diện hành động vẫy tay trong bài luận văn.
2.4. Thuật toán hỗ trợ nhận diện mặt người FaceNet
FaceNet [14] được các kĩ sư Google giới thiệu vào năm 2015, thuật toán tìm cách xây
dựng một không gian vectơ để ánh xạ các ảnh mặt người thành các vectơ trong không gian
mà ở không gian đó thì khoảng cách giữa các vectơ chính là mức độ tương đồng giữa các
khuôn mặt. Khi khoảng cách giữa hai vectơ càng nhỏ nghĩa là hai ảnh mặt khả năng cao
cùng là một người và ngược lại. Kiến trúc tổng quan mạng nơ-ron của FaceNet được thể
hiện trong Hình 2-7.
Hình 2-7-Cấu trúc mô hình của FaceNet [14]
18	
	
	
Đầu vào của mạng là một lô (batch) các ảnh được đưa vào một mạng tích chập sâu để
cho ra vectơ 128 chiều. Vectơ này tiếp tục được chuẩn hóa để có được vectơ embedding.
Để cho mô hình học được các vectơ embedding mà với cùng một người thì khoảng cách
Euclide giữa các vectơ embedding nhỏ và ngược lại thì hàm mất mát bộ ba (triplet loss)
được đưa vào để có thể học được sự giống nhau và khác nhau giữa các khuôn mặt. Nội
dung của phần này tập trung chủ yếu vào việc tác giả xây dựng hàm mất bộ ba và kiến trúc
mạng tích chập được sử dụng để sinh ra vectơ 128 chiều.
2.4.1. Hàm mất mát bộ ba
Ý tưởng đằng sau của hàm mất mát bộ ba là muốn những ảnh khuôn mặt của cùng
một người sẽ gần nhau hơn so với ảnh khuôn mặt của người khác. Theo Hình 2-7, nếu coi
bộ mô hình mạng tích chập sâu và chuẩn hóa vectơ 𝐿2 là một hàm 𝑓 sinh ra vectơ
embedding từ ảnh khuôn mặt 𝑥 ∈	ℝu×7
	thì vectơ embedding được sinh ra bởi mô hình là
𝑓(𝑥) ∈	ℝv
và vì đã chuẩn hóa 𝐿2 nên ‖𝑓(𝑥)‖5 = 1. Mục tiêu là muốn mô hình học được
ảnh khuôn mặt của một người cụ thể 𝑥9
w
sẽ gần với tất cả các ảnh khuôn mặt còn lại của
người đó 𝑥9
x
và xa ảnh khuôn mặt của người khác 𝑥9
7
, do đó:
y𝑓(𝑥9
w) − 𝑓2𝑥9
x
8y5
5
+ 𝛼 <	‖𝑓(𝑥9
w) − 𝑓(𝑥9
7)‖5
5
, ∀ |𝑓(𝑥9
w), 𝑓2𝑥9
x
8, 𝑓(𝑥9
7)} ∈ 𝒯 (2.5)
Trong đó 𝛼 là khoảng cách bắt bắt buộc giữa cặp ảnh của cùng một người và cặp ảnh
của hai người khác nhau. 𝒯 là tập bộ ba có thể có trong tập huấn luyện và 𝑁	là số lượng
tập bộ ba. Mục tiêu cần tối thiểu hóa hàm mất mát 𝐿:
𝐿 =	∑ €y𝑓(𝑥9
w) − 𝑓2𝑥9
x
8y5
5
−	‖𝑓(𝑥9
w) − 𝑓(𝑥9
7)‖5
5
+ 	𝛼•
L
c
% (2.6)
Tuy nhiên, việc tìm tất cả các bộ ba trên tập huấn luyện với dữ liệu lớn sẽ tốn rất nhiều
thời gian và hội tụ chậm nên cần có chiến lược lựa chọn bộ ba tốt.
2.4.2. Chiến lược lựa chọn bộ ba
Việc lựa chọn bộ ba rất quan trọng trong việc để mô hình huấn luyện có thể hội tụ
nhanh. Chiến lược để lựa chọn bộ ba này sẽ tìm bộ ba sao cho ảnh khuôn mặt của cùng một
người là khác nhau nhất và ảnh của hai người khác nhau là giống nhau nhất. Điều này tương
tự như việc chọn ảnh khuôn mặt của một người khi hồi nhỏ và khi lớn để tăng độ khó cho
việc học nhưng nếu mô hình có thể học để nhận biết được hai khuôn mặt là cùng một người
thì nó sẽ thông minh hơn. Mặt khác, khi lựa chọn ảnh khuôn mặt của hai người khác nhau
19	
	
	 	
gần giống nhau nhất có nhiều đặc điểm giống nhau mà mô hình vẫn phân biệt được thì giúp
mô hình trở nên tốt hơn. Công thức hóa chiến lược trên, nghĩa là lựa chọn ảnh khuôn mặt
cùng một người 𝑥9
x
sao cho 𝑎𝑟𝑔𝑚𝑎𝑥‚K
ƒ(𝑓(𝑥9
w) − 𝑓2𝑥9
x
8) và ảnh khuôn mặt của người khác
𝑥9
7
sao cho 𝑎𝑟𝑔𝑚𝑖𝑛‚K
„(𝑓(𝑥9
w) − 𝑓(𝑥9
7)) . Với chiến lược lựa chọn bộ ba này sẽ giúp mô
hình học được cả sự giống nhau và lẫn cả sự khác nhau của ảnh khuôn mặt.
Tuy nhiên, để tìm 𝑥9
x
	và 𝑥9
7
trên toàn bộ dữ liệu huấn luyện sẽ gặp phải vấn đề rằng
khi dữ liệu huấn luyện lớn thì chi phí tính toán cũng sẽ lớn khi phải duyệt toàn bộ dữ liệu
huấn luyện và nếu ảnh khuôn mặt 𝑥9
x
, 𝑥9
7
tìm được bị đánh sai nhãn hoặc có chất lượng thấp
thì việc huấn luyện cũng sẽ bị ảnh hưởng. Chính vì vậy để giải quyết vấn đề này thay vì
tìm và trên toàn bộ dữ liệu huấn luyện thì sẽ chỉ tìm trên các lô nhỏ (mini-batch) trong
quá trình huấn luyện. Thêm vào đó, trên thực tế để hiệu quả hơn thì việc lựa chọn ảnh khuôn
mặt 𝑥9
7
chỉ cần thỏa mãn: y𝑓(𝑥9
w) − 𝑓2𝑥9
x
8y5
5
<	‖𝑓(𝑥9
w) − 𝑓(𝑥9
7)‖5
5
để tránh hội tụ cục bộ
trong quá trình huấn luyện. Cùng với chiến lược lựa chọn bộ ba cần có mạng tích chập sâu
tốt có nhiều cải tiến. Chi tiết kiến trúc mạng tích chập sâu được mô tả qua hình chữ nhật
màu xám trong Hình 2-7 được nêu ở phần sau.
20	
	
	
2.4.3. Kiến trúc mạng
Hình 2-8-Mạng học sâu Inception ResNet V1 [19]
21	
	
	 	
Xây dựng hàm mất mát và chiến lược lựa chọn bộ ba chính là trọng tâm của thuật toán
FaceNet. Với chiến lược đó tác giả đã thử với các kiến trúc mạng khác nhau như mạng của
2 tác giả Zeiler&Fergus [11] đạt 87% hay mạng dựa trên GoogleLeNet [12] đạt 89,4%.
Còn trong bài luận văn sẽ sử dụng mô hình đã huấn luyện trước với kiến trúc mạng
Inception ResNet V1 [19] đã đạt độ chính xác 99,65% trên tập LFW. Kiến trúc mạng của
Inception ResNet V1 được mô tả qua Hình 2-8. Mạng gồm có các khối Inception-resnet A,
B, C với các kích thước kernel khác nhau 1	 × 1, 3	 × 	3 và các kernel xếp chồng nhau
(1	 × 1, 3	 × 3, 3	 × 3), (1	 × 1, 1	 × 7, 7	 × 1) và (1	 × 1, 1	 × 3, 3	 × 1) giúp cho mạng
có thể học được đặc trưng trong ảnh từ vùng ảnh có kích thước nhỏ đến vùng ảnh có kích
thước lớn từ đó giúp mạng có thể học được nhiều thông tin nhất có thể. Kết hợp với ý tưởng
của mạng ResNet với những kết nối tắt (skip connection) giúp mạng sâu tăng độ sâu mà
quá trình huấn luyện độ chính xác không bị bão hòa nhanh chóng. Còn khối Reduction A,
B và Block-8 giúp mạng giảm chiều dữ liệu. Với những ưu điểm từ kiến trúc của mạng
Inception ResNet V1 nên nó thích hợp cho bài toán nhận dạng mặt người.
22	
	
	
Chương 3
Thiết kế và cài đặt hệ thống
Chương này tập trung vào việc trình bày kiến trúc tổng quan hệ thống, thuật toán phát
hiện vẫy tay, nhận dạng mặt người và các kịch bản được xây dựng trong robot.
3.1. Kiến trúc tổng quan hệ thống phân tích hình ảnh
3.1.1. Các trạng thái và bộ máy trạng thái hữu hạn
Xây dựng lên phần mềm trong robot yêu cầu cần có một kiến trúc rõ ràng, dễ mở rộng
và dễ dàng gỡ lỗi nếu chương trình có xảy ra lỗi. Thêm vào đó nữa, trong robot có nhiều
bộ phận và để thực hiện một công việc nào đó có thể cần sự phối hợp của các bộ phận, gửi
nhận thông tin với nhau để có những thông tin cần thiết mà hoàn thành công việc. Chính vì
vậy, bộ máy trạng thái hữu hạn được đưa vào trong việc xây dựng robot. Với việc đưa bộ
máy trạng thái vào robot thì với mỗi hành động của robot sẽ được định nghĩa bởi một chuỗi
trạng thái mà ở mỗi trạng thái sẽ có chức năng tương ứng để góp phần hoàn thành một hành
động. Công việc này giống như tư tưởng chia để trị, một hành động sẽ được chia nhỏ thành
các hoạt động nhỏ thực hiện chức năng nhất định. Khi có lỗi xảy ra dựa vào robot đang ở
trạng thái nào thì việc tìm và gỡ lỗi sẽ dễ dàng hơn. Robot được chia thành nhiều hệ thống
nhỏ, mỗi hệ thống nhỏ quản lý các phần khác nhau của robot đều được tổ chức dưới dạng
bộ máy trạng thái hữu hạn để quản lý các hoạt động của bộ phận đó. Có các hệ thống như
quản lý âm thanh để quản lý việc thuyết trình, nói chuyện của robot, hay hệ thống quản lý
di chuyển để quản lý, điều khiển hoạt động của mô-tơ bánh xe. Ngoài ra còn có các hệ
thống khác như hệ thống quản lý màn hình trước ngực để người dùng có thể tương tác qua
màn hình cảm ứng. Đặc biệt, phần này sẽ trình bày kiến trúc tổng quan của hệ thống phân
tích hình ảnh. Hệ thống gồm 2 thành phần chính:
23	
	
	 	
LogicControler: Phần này có vai trò chính trong việc xử lý logic của toàn bộ hệ
thống, gửi nhận thông tin cho các hệ thống khác. Ví dụ như gửi thông tin góc và khoảng
cách của người vẫy tay cho hệ thống di chuyển để hệ thống tính toán và tìm đường đi.
StateMachine: phần này có vai trò định nghĩa các trạng thái và sự kiện chuyển trạng
thái dựa vào dữ liệu của trong và ngoài hệ thống. Trong mỗi trạng thái (State), thì sẽ cần
định nghĩa công việc trong 2 hàm quan trọng là: enter_state và while_state. Enter_state là
sẽ định nghĩa các công việc chủ yếu liên quan đến khởi tạo khi vào trạng thái đó. Còn
while_state là công việc chính cần thực hiện trong trạng thái đó.
Ngoài ra, để có thể xây dựng máy trạng thái hữu hạn một cách tự động và nhanh hơn
thì tệp cài đặt đã được sinh ra mà trong đó định nghĩa tổng quát nhất và đơn giản về các
trạng thái, các sự kiện chuyển trạng thái; gửi, nhận dữ liệu và logic khi vào một trạng thái
nào do hàm nào xử lý. Những tệp này sẽ được sử dụng để có thể tự động xây nên
StateMachine và đường gửi nhận dữ liệu của hệ thống.
Hình 3-1-Thành phần chính của hệ thống
Mô hình tổng quan của hệ thống được mô tả qua Hình 3-1 StateController và
LogicController có vai trò như bên trên đã nói. Còn thành phần TopicIn là những topic mà
hệ thống phân tích hình ảnh đăng kí để lấy dữ liệu từ các hệ thống khác. Còn TopicOut
chính là những thông tin sau khi hệ thống đã xử lý và muốn gửi ra bên ngoài để các hệ
thống khác có được thông tin và sử dụng. Chi tiết của phần StateController được mô tả qua
Hình 3-2.
24	
	
	
Hình 3-2-Sơ đồ chuyển trạng thái của máy trạng thái hữu hạn
Mô hình gồm có 4 trạng thái lớn: IDLE, HAND_WAVING, DETECT_MOTION,
FACE_ID. IDLE là trạng thái robot nghỉ và lắng nghe các yêu cầu từ hệ thống khác như từ
hệ thống quản lý di chuyển. Trạng thái HAND_WAVING sẽ xử lý, tải mô hình để nhận
diện hành động vẫy tay. Trạng thái DETECT_MOTION để xác định xem có chuyển động
hay không. Trạng thái FACE_ID để nhận diện mặt người trước robot. Để vào mỗi trạng
thái đều cần sự kiện để kích hoạt như sự kiện VISION_HAND_WAVING thì máy trạng
thái chuyển từ IDLE sang HAND_WAVING. Và khi hoàn thành việc nhận diện hành động
vẫy tay thì sự kiện VISION_EV_DONE được kích hoạt để chuyển trạng thái từ
HAND_WAVING về lại IDLE. Với việc định nghĩa ra các trạng và việc di chuyển giữa
các trạng thái thì sẽ dễ dàng trong việc quản lý. Dễ dàng định nghĩa được các công việc cần
phải làm trong từ trạng thái mà robot vào. Thêm vào đó nữa, khi lỗi xảy ra việc truy vết,
tìm và gỡ lỗi sẽ đơn giản hơn. Đặc biệt việc mở rộng chức năng cho robot thì chỉ việc định
nghĩa thêm các trạng thái mới mà không bị ảnh hưởng đến những chức năng và phần đã
phát triển. Để xây dựng bộ máy trạng thái hữu hạn nhanh chóng tệp cài đặt định nghĩa các
trạng thái và di chuyển trạng thái đã được sinh ra để tự động hóa việc xây dựng bộ máy
trạng thái.
25	
	
	 	
3.1.2. Tự động xây dựng bộ máy trạng thái dựa trên tệp cài đặt
Trong quá trình phát triển, việc xây dựng bộ máy trạng thái hữu hạn có thể tự động
hóa qua tệp cài đặt. Từ tệp cài đặt định nghĩa toàn bộ trạng thái và luồng di chuyển của các
trạng thái khi có các sự kiện được định nghĩa như Hình 3-3.
Hình 3-3-Thiết kế tệp cài cho việc tự động xây dựng bộ máy trạng thái hữu hạn
Tệp định nghĩa trạng thái bắt đầu với từ khóa “init_state” và toàn bộ trạng thái trong
hệ thống với từ khóa “state” và các sự kiện chuyển trạng thái trong từng trạng thái được
định nghĩa với từ khóa “event_id”. Ở mỗi trạng thái sẽ định nghĩa 2 hàm “enter_state” và
“enter_while” sẽ được thực thi khi vào trạng thái đó. Ví dụ trong trạng thái “IDLE” thì
“enter_state” sẽ ứng với hàm “enter_state_idle”, còn “enter_while” sẽ ứng với hàm
“enter_while_idle” sẽ được thực thi nếu vào trạng thái “IDLE”. Còn để từ một trạng thái
có thể chuyển sang trạng thái khác thì quá trình chuyển trạng thái này được định nghĩa qua
từ khóa “event_id” qua tệp cài đặt. Ở mỗi trạng thái có các danh sách các trạng thái sẽ
chuyển tới. Ví dụ ở trạng thái “IDLE” khi gặp sự kiện “VISION_MOTION” thì sẽ chuyển
{
"TX2Controller": {
"events_class": "VISION_CONTROLLER_EVTS",
"init_state": "IDLE",
"state":
{
"IDLE": {
"input_keys": ["idle_in"], "output_keys":["idle_out"],
"enter_state": "enter_state_idle", "enter_while": "enter_while_idle"},
"HAND_WAVING": {
"input_keys": ["hand_waving_in"], "output_keys":["hand_waving_out"],
"enter_state": "enter_state_hand_waving", "enter_while": "enter_while_hand_waving"},
...
},
"event_id": {
"IDLE": [
{"id_name": "VISION_MOTION", "dst": "DETECT_MOTION", "des": ""},
{"id_name": "VISION_FACE_ID", "dst": "FACE_ID", "des": ""},
...
],
"HAND_WAVING": [{"id_name": "VISION_EV_DONE", "dst": "IDLE", "des": ""}],
...
},
"outcomes": ["outcome"]
}
}
26	
	
	
sang trạng thái “DETECT_MOTION”, còn gặp sự kiện “VISION_FACE_ID” thì sẽ chuyển
sang trạng thái “FACE_ID”. Việc định nghĩa ra tệp cài đặt như Hình 3-3 đưa cho người
phát triển cái nhìn tổng quát về hệ thống, luồng di chuyển trạng thái và đặc biệt khi cần
thêm hay chỉnh sửa chỉ cần sửa tệp nội dung tệp cài đặt mà không ảnh hưởng đến mã lệnh
đã viết trước đó. Để đọc nội dung trong tệp và tự động xây dựng nên bộ máy trạng thái hữu
hạn thì các lớp đã được thiết kế như Hình 3-4.
Hình 3-4-Thiết kế các lớp cho việc tự động xây dựng bộ máy trạng thái hữu hạn
Theo Hình 3-4, lớp “State” có tác dụng định nghĩa một trạng thái trong bộ máy trạng
thái hữu hạn. Lớp này gồm có 2 hàm “__init__” và “execute”. Hàm “__init__” có tác dụng
khởi tạo đầu ra của một trạng thái. Ví dụ như ở trạng thái “IDLE” có thể di chuyển sang
trạng thái “VISION_MOTION” hay “VISION_FACE_ID” thì đầu ra của trạng thái “IDLE”
là mảng có 2 phần tử “VISION_MOTION” và “VISION_FACE_ID”. Còn hàm “execute”
có tác dụng thực thi các công việc khi ở state đó. Để phù hợp hơn trong hệ thống phân tích
hình ảnh khi có những trường hợp cần quá trình khởi tạo trước khi bắt đầu thực thi hàm
“execute” như việc tải một mô hình thì lớp “BaseState” đã được sinh ra để kế thừa lớp
“State” và cài đè lại hàm “execute”.
Với 2 lớp “State” và “BaseState” đã có thể sinh ra được thực thể trạng thái, tuy nhiên
để từ các trạng thái có thể di chuyển qua các trạng thái khác cần có lớp
“BaseStateController”. Lớp “BaseStateController” có các hàm “__build_statemachine” và
27	
	
	 	
“deploy”. Hàm “__build_statemachine” có nhiệm vụ lấy các thông tin từ tệp cài đặt bên
trên để tạo ra các thực thể trạng thái và ngoài ra chuẩn bị cho quá trình xây dựng trạng thái.
Còn hàm “deploy” có nhiệm vụ xây dựng nên luồng di chuyển trạng thái và tạo nên bộ máy
trạng thái hữu hạn hoàn chỉnh.
3.1.3. Xây dựng các lớp cho phân tích hình ảnh
Trong hệ thống phân tích hình ảnh cho robot sẽ có 3 mô hình lớn: MotionDetection,
HandWaving, FaceId. Trong đó, mô hình MotionDetection dùng để phát hiện chuyển động
để đưa robot từ trạng thái ngủ sang trạng thái sẵn sàng nhận lệnh. Còn mô hình HandWaving
để phát hiện người vẫn tay và mô hình FaceId nhận diện khuôn mặt người đứng trước robot.
Tất cả nhưng mô hình này đều có những đặc điểm chung là cần tải mô hình hay trả về kết
quả chính vì vậy một lớp trừu tượng đã được tạo ra như trong Hình 3-5.
Hình 3-5-Mô hình kế thừa của các bài toán phân tích hình ảnh
Lớp trừu tượng được thiết kế là lớp VisionTask như trong Hình 3-5 mô tả. Lớp này
sẽ gồm có 3 phương thức trừu tượng mà các lớp kế thừa nó bắt buộc phải cài đặt và nhiệm
vụ của từng hàm cụ thể là:
• Hàm start(): Dùng để tải mô hình và các cài đặt liên quan tới tác vụ mô hình.
• Hàm get_result(input_data): Dùng để lấy kết quả đầu ra của mô hình với đầu
vào tham số input_data. Input_data có thể là ảnh như trong bài toán phát hiện
vẫy tay (HandWaving) và nhận diện khuôn mặt người (FaceId) hoặc cũng có
thể là 2 ảnh như trong bài toán phát hiện chuyển động (MotionDetection).
28	
	
	
• Hàm end(): Dùng để xóa mô hình hay các cài đặt liên quan mà đã được cài ở
hàm start(). Mục đích chính của hàm này là để giải phóng bộ nhớ để thực hiện
các tác vụ tiếp theo.
3.1.4. Truyền dữ liệu từ camera Realsense D435
Với camera RealsenseD435, khi bất kì tác vụ nào đang hoạt động sử dụng đến camera
thì tác vụ khác sẽ không sử dụng được hay nói cách khác trong một thời điểm camera
Realsense chỉ cho phép một tác vụ có thể lấy ảnh. Ví dụ khi tác vụ HandWaving đang sử
dụng camera thì tác vụ khác là FaceId sẽ không thể sử dụng được camera ấy chính vì vậy
để cho các tác vụ khác đều dùng được camera cùng thời điểm thì dữ liệu ảnh của camera
đã được đưa lên topic để cho các tác vụ cần dùng đến camera chỉ cần vào đăng kí nhận dữ
liệu từ topic đẩy lên như trong Hình 3-6.
Hình 3-6-Các tác vụ đăng kí nhận dữ liệu từ Realsense D435
Để có thể đẩy được dữ liệu của camera lên topic như ý tưởng trên, thư viện
realsense2_camera [20] đã được sử dụng. Thư viện này do chính Intel xây dựng trên ROS
cung cấp các thông tin về ảnh màu, ảnh độ sâu, thông tin camera qua các topic. Tuy nhiên,
trong hệ thống chỉ quan tâm đến dữ liệu trả về là thông tin về ảnh màu và thông tin về ảnh
độ sâu với 2 topic mà thư viện cung cấp:
• Ảnh màu: /camera/color/image_raw
• Ảnh độ sâu: /camera/depth/image_rect_raw
29	
	
	 	
3.2. Mô-đun phát hiện vẫy tay
Các thuật toán hiện nay chủ yếu tập trung vào việc nhận diện cử chỉ tay mà đầu vào
là vùng ảnh bàn tay với khoảng cách gần từ 1-2 mét nên việc sử dụng các thuật toán trên
để phát hiện vẫy tay là không phù hợp. Thêm vào đó nữa, robot hướng dẫn viên cần phát
hiện người vẫy tay ở khoảng cách xa hơn lên đến tận 5 mét. Chính vì vậy với khoảng cách
đó, phát hiện vẫy tay cần đầu vào với vùng ảnh rộng hơn – vùng ảnh của cả cánh tay người.
Từ cử động của cánh tay người sẽ được sử dụng để phát hiện cử chỉ vẫy tay. Với thuật toán
OpenPose – xác định khung xương cơ thể người, để lấy khung xương cánh tay sử dụng cho
việc tính toán và phát hiện cử chỉ vẫy tay.
3.2.1. Thuật toán phát hiện vẫy tay dựa trên khung xương cánh tay
Sơ đồ tổng quan thuật toán phát hiện vẫy tay được mô tả dưới Hình 3-7.
Hình 3-7-Sơ đồ tổng quan thuật toán vẫy tay
Ban đầu các ảnh màu liên tiếp từ camera được đưa vào thuật toán OpenPose. Dựa trên
thuật toán OpenPose thì vị trí của các khớp trên cơ thể của một người bất kỳ trong Hình 3-
7 (đường màu xanh lục và xanh lam) sẽ được lấy. Tuy nhiên, chúng ta cần phát hiện vẫy
tay vậy nên chúng ta chỉ quan tâm đến vị trí 2 khớp ở 2 cánh tay: Khớp cổ tay, khớp khuỷu.
Thông tin vị trí của các ảnh liên tiếp sẽ được đưa vào thuật toán vẫy tay để xác định xem
có ai vẫy tay trong bức ảnh hay không. Nếu có thì vị trí người vẫy tay trong ảnh sẽ được
lấy để gửi lên topic cho các phần khác sử dụng. Để hiểu thuật toán vẫy tay hoạt động ra sao
thì đầu tiên, trước hết chúng ta định nghĩa hành động vẫy tay là như nào? Vẫy tay là hành
động đưa tay lên phía trên và liên tục di chuyển cánh tay từ trái qua phải và ngược lại. Dựa
trên đặc điểm trên thì điều kiện để nhận biết hành động vẫy tay khi đồng thời thỏa mãn hai
30	
	
	
điều kiện: Thứ nhất, độ mở của cánh tay của người vẫy phải lớn hơn một ngưỡng nhất định
và thứ hai, việc đưa tay sang bên trái và sang bên phải một cách liên tục phải lặp lại trên
hai lần.
Hình 3-8-Góc tạo thành giữa cánh tay và mặt phẳng ngang khi vẫy
Như Hình 3-8 bên trên, khi đưa cánh tay lên thì giữa cánh tay và mặt phẳng ngang sẽ
tạo thành một góc 𝛼 với 0° ≤ 𝛼 ≤ 180°, góc sẽ tăng dần từ trái qua phải. Hiệu của 2 góc
tạo cánh tay được tạo thành ở 2 khung hình liên tiếp là Δ‰. Vậy khi cánh tay đưa từ trái qua
phải thì Δ‰ ≥ 0. Vì góc 𝛼 của khung hình sau luôn lớn hơn góc 𝛼 của khung hình trước.
Và ngược lại khi đưa cánh tay từ phải qua trái thì Δ‰ ≤ 0. Khi vẫy tay, tay sẽ được đưa từ
biên trái sang biên phải và ngược lại. Để phát hiện được tay đến hai biên của 2 góc
(𝛼u97	, 𝛼uw‚) ta dựa vào bất đẳng thức (3.1).
ΔŠ‹ướr 	×	Δo9ệ7	Šạ9 ≤ 0 (3.1)
Để cho dễ hiểu và tránh gây nhầm lẫn 𝛼 ở dưới đã bị bỏ đi ở bất đẳng thức (3.1). Bất
đẳng thức (3.1) thể hiện thời điểm mà cánh tay đang đưa từ biên trở về. Khi
ΔŠ‹ướr 	×	Δo9ệ7	Šạ9 ≤ 0 và Δo9ệ7	Šạ9 > 0 thì nghĩa là cánh tay đang ở phía biên bên trái. 𝛼u97
sẽ được gán lại bằng giá trị 𝛼o9ệ7	Šạ9. Còn khi ΔŠ‹ướr 	×	Δo9ệ7	Šạ9 ≤ 0 và Δo9ệ7	Šạ9 < 0 thì
nghĩa là cánh tay đang ở phía biên bên phải, 𝛼uw‚ sẽ được gán lại bằng giá trị 𝛼o9ệ7	Šạ9. Nếu
𝛼uw‚ − 𝛼u97 > 𝐶, trong đó 𝐶 là một ngưỡng cho trước thì sẽ tính vẫy tay được nửa chu kì.
Khi vẫy tay được một chu kì thì hành động vẫy tay được nhận diện.
Trong thực tế, khi con người vẫy tay không phải đứng yên tại chỗ mà họ có thể vừa
di chuyển vừa vẫy tay trong khi lại gần robot. Thêm vào đó, kết quả của thuật toán
OpenPose sẽ trả về là một mảng danh sách người có trong ảnh, ứng với mỗi người là một
mảng vị trí các khớp của người đó, mà thứ tự danh sách người giữa hai khung hình liên tiếp
có thể khác nhau. Ví dụ một người ở khung hình trước có thứ tự là 0 trong danh sách thì
chưa chắc ở khung hình sau đã có thứ tự là 0 trong danh sách. Chính vì vậy cần phải định
31	
	
	 	
danh những người ở trong danh sách để khi qua các khung hình thì có thể nhận diện được
người đó qua định danh và tính toán để phát hiện người đó có vẫy tay hay không. Nhận
thấy rằng, trong hai khung hình liên tiếp thì nội dung trong bức ảnh có sự thay đổi nhỏ
chính vì vậy để định danh từng người trong danh sách thì giá trị trung bình 𝑥̅	=	𝑥% + 𝑥5 +
⋯ + 𝑥7 theo trục hoành 𝑂𝑥 từ các vị trí khớp của người đó như trong Hình 3.9 bên dưới
mô tả. Ở khung hình sau người có giá trị định danh gần nhất với giá trị định danh của người
khung hình trước thì được coi là cùng một người. Với việc thêm định danh, thuật toán có
thể nhận diện hành động vẫy tay kể cả khi người vẫy tay vẫn đang di chuyển.
Hình 3-9-Định danh người qua trục hoành Ox
32	
	
	
3.3. Mô-đun nhận dạng mặt người
Sau khi phát hiện người vẫy tay thành công thì robot sẽ di chuyển để tiếp cận đối
tượng vẫy tay. Khi đến trước mặt hệ thống sẽ nhận diện khuôn mặt của người vẫy. Hệ thống
sẽ tự động cắt vùng ảnh chứa người vẫy tay và gửi cho mô-đun nhận dạng mặt người. Sơ
đồ tổng quát của mô-đun nhận dạng mặt người được thể hiện như Hình 3-10.
Hình 3-10-Sơ đồ tổng quát nhận dạng khuôn mặt người
Đầu vào là một bức ảnh có chứa mặt người. Đầu ra là tên của người trong ảnh, nếu
người trong ảnh mà robot chưa từng gặp thì sẽ là một giá trị “trống”. Như trong Hình 3-10
sơ đồ nhận nhận dạng khuôn mặt người được chia làm 2 pha: pha huấn luyện và pha triển
khai. Với pha huấn luyện dữ liệu được sử dụng để huấn luyện mô hình SVM để nhận dạng
khuôn mặt người, còn với pha triển khai mô hình SVM đã được xây dựng từ pha huấn luyện
sẽ sử dụng để nhận diện mặt khuôn người. Với pha huấn luyện được thể hiện bởi vùng bao
quanh màu đỏ như Hình 3-10. Các bước trong pha huấn luyện được tóm tắt như sau. Ảnh
được đưa vào mô hình MTCNN [13] đã được huấn luyện sẵn để phát hiện khuôn mặt người
có trong ảnh. Sau đó, ảnh khuôn mặt người được cắt ra và điều chỉnh lại về kích thước
180	 × 180. Ảnh sau khi được đưa về kích thước 180	 × 	180 sẽ đưa vào mạng FaceNet
đã được huấn luyện trước để lấy vectơ embedding 128 chiều và được lưu lại vào dữ liệu để
huấn luyện. Tập dữ liệu được sử dụng để huấn luyện ra mô hình SVM để nhận dạng mặt
người. Còn đối với pha triển khai cũng sẽ có các bước giống như pha huấn luyện. Ảnh được
đưa qua mạng MTCNN để phát hiện khuôn mặt, ảnh khuôn mặt tiếp tục được đưa qua
33	
	
	 	
FaceNet để lấy vectơ embedding. Và vectơ embedding đưa vào mô hình SVM đã được
huấn luyện trước từ pha huấn luyện để nhận diện khuôn mặt người. Mô hình nhận diện
đúng hay sai đều được lưu lại dữ liệu để phục vụ cho huấn luyện cải tiến mô hình trong
tương lai.
Như bên trên đã trình bày, để phát hiện mặt người mô-đun này sử dụng MTCNN. Tuy
nhiên, nếu trong ảnh mà có nhiều khuôn mặt người thì MTCNN sẽ trả về một mảng khuôn
mặt người gồm có vị trí và kích cỡ ảnh mặt người. Do vậy cần tìm người vẫy tay trong số
những khuôn mặt mà MTCNN trả về. Như ở trên đã nêu, sau khi vẫy tay thì robot di chuyển
đến trước mặt người vẫy tay nên mặt người vẫy tay sẽ là người gần với tâm của bức ảnh
nhất. Giả sử rằng trong ảnh có 𝑛 khuôn mặt đã được thuật toán MTCNN phát hiện ra thì
ảnh mặt người 𝑖 sẽ có tọa độ là (𝑥9, 𝑦9)	và có kích thước thước là (𝑤9, ℎ9). Vậy tâm bức ảnh
mặt người 𝑖 là 𝑐𝑥9 =
‚KLnK
5
, 𝑐𝑦9 =
PKLoK
5
. Tâm của ảnh là 𝑐𝑥 =
‚Ln
5
, 𝑐𝑦 =
PLo
5
. Vậy khoảng
cách từ tâm ảnh mặt người đến tâm ảnh tổng thể có khoảng cách 𝑑9 =
’(𝑐𝑥 − 𝑐𝑥9)5 + (𝑐𝑦 − 𝑐𝑦9)5. Vậy với 𝑚𝑖𝑛(𝑑', 𝑑%, … , 𝑑7) chính là mặt người sẽ được nhận
diện. Hình 3-11 mô tả cách tìm mặt ở trung tâm ảnh như bên trên trình bày.
Hình 3-11-Tìm mặt người vẫy tay
34	
	
	
3.4. Xây dựng kịch bản
Phần này tập trung vào việc mô tả các kịch bản và quá trình chạy thuật toán các kịch
bản. Tất cả các kịch bản được mô tả một cách tổng quát qua Hình 3-12.
Hình 3-12-Sơ đồ chuyển trạng thái qua các kịch bản
Theo Hình 3-12, gồm có bộ máy trạng thái hữu hạn nằm trên PI (Sử dụng để điều
khiển động cơ di chuyển) và bộ máy trạng thái trên Jetson TX2 để phân tích hình cho robot.
Hai bộ máy trạng thái hữu hạn trao đổi thông tin qua Topic với kí hiệu mũi tên nét gạch đứt
màu da cam như trên Hình 3-12. Còn mũi tên liền màu đen thể hiện sự kiện chuyển trạng
thái nội bộ trong bộ máy trạng thái hữu hạn trên Jetson TX2. Luồng kịch bản chi tiết được
thể hiện chi tiết ở phần sau.
35	
	
	 	
3.4.1. Kịch bản phát hiện người vẫy tay
Mô tả
Kịch bản này cho phép robot phát hiện người cần trợ giúp. Khi robot đang đứng yên
mà có chuyển động trong phạm vi robot quan sát thì robot bắt đầu quan sát xem khu vực
quan sát của robot có ai cần trợ giúp qua hành động vẫy tay. Nếu có người trong khu vực
quan sát có người vẫy tay thì robot sẽ xác định vị trí của người cần trợ giúp và tiến lại gần.
Các luồng trạng thái được mô tả qua Hình 3.13.
Hình 3-13-Sơ đồ chuyển trạng thái qua kịch bản phát hiện người vẫy tay
36	
	
	
Các luồng sự kiện
Kịch bản này bắt đầu khi robot khởi động các bộ phận đã sẵn sàng hoạt động. Bộ máy
trên PI gửi một message VISION_MOTION lên cho bộ máy trên Jetson TX2. Theo Hình
3-13, hoạt động chuyển trạng thái sẽ được thực hiện như sau.
1. Đầu tiên bộ máy trạng thái trên Jetson TX2 ở trạng thái IDLE nhận message
VISION_MOTION từ PI.
2. Bộ máy trạng thái trên Jetson TX2 chuyển trạng thái từ IDLE sang
DETECT_MOTION
3. Bộ máy ở trạng thái DETECT_MOTION sẽ khởi động và chạy thuật toán phát
hiện chuyển động.
4. Nếu phát hiện có chuyển động thì bộ máy trạng thái sẽ gửi message
VISION_HAVING_MOTION cho bộ máy trên PI và chuyển trạng thái trên
Jetson TX2 từ DETECT_MOTION về lại IDLE.
5. Bộ máy trên PI tiếp tục gửi message VISON_HAND_WAVING cho bộ máy
trên Jetson TX2.
6. Bộ máy trên Jetson TX2 chuyển trạng thái từ IDLE sang HAND_WAVING.
7. Bộ máy ở trạng thái HAND_WAVING sẽ bắt đầu chạy thuật toán phát hiện
người vẫy tay.
8. Nếu phát hiện có người vẫy tay thì robot sẽ xác định vị trí người vẫy tay trong
phòng và gửi message VISON_HAVING_WAVING <position> cho bộ máy
trên PI. Đồng thời bộ máy chuyển từ trạng thái HAND_WAVING về lại trạng
thái IDLE.
Các yêu cầu
Khi nhiều người cùng vẫy tay gọi robot thì robot sẽ ưu tiên phục vụ cho người vẫy
đầu tiên.
37	
	
	 	
3.4.2. Kịch bản nhận diện khuôn mặt người vẫy tay
Kịch bản này cho phép robot nhận diện khuôn mặt người vẫy tay. Với mục đích lấy
thông tin người vẫy tay và chào người vẫy tay nếu đã biết từ trước, còn nếu chưa biết robot
sẽ hỏi tên và lưu lại hình ảnh để huấn luyện cho việc nhận diện khuôn mặt lần sau. Sau khi
vẫy tay robot sẽ xác định được vị trí của người vẫy tay dựa vào khoảng cách giữa người
vẫy tay và robot cùng với góc tạo thành giữa hướng hình của robot và người vẫy tay trong
đó robot chính là tâm của góc đó. Hai thông tin này sẽ được cho máy PI (nơi điều khiển bộ
phận chuyển động của robot) để tính toán ra vị trí của người vẫy trong bản đồ 3D và tiếp
cận người đó. Khi tiếp cận thành công robot bắt đầu nhận dạng khuôn mặt người đó. Luồng
chuyển trạng thái chi tiết của kịch bản nhận diện mặt người được mô tả qua Hình 3-14.
Hình 3-14-Sơ đồ chuyển trạng thái qua kịch bản nhận diện khuôn mặt người
38	
	
	
3.4.2.1. Kịch bản nhận diện người vẫy tay đã biết từ trước
Mô tả
Kịch bản này cho phép robot nhận diện mặt người vẫy tay đã biết từ trước. Với mục
đích lấy thông tin người vẫy tay và chào người vẫy tay bằng tên của họ. Thêm vào đó, khi
xác định được thông tin người vẫy robot có thể tìm lịch sử phục vụ người của mình để hiểu
người vẫy tay đang quan tâm đến những hiện vật, thông tin nào để từ đó có thể phục vụ tốt
hơn.
Các luồng sự kiện
Kịch bản này bắt đầu khi bộ máy trên PI gửi một message VISION_FACE_ID cho bộ
máy trên Jetson TX2. Theo Hình 3-14, các hoạt động chuyển trạng thái được thực hiện như
sau.
1. Đầu tiên bộ máy trạng thái trên Jetson TX2 nhận message VISION_FACE_ID
từ PI.
2. Bộ máy trạng thái trên Jetson TX2 chuyển trạng thái từ IDLE sang trạng thái
FACE_ID.
3. Bộ máy ở trạng thái FACE_ID sẽ chạy thuật toán nhận diện khuôn mặt.
4. Nếu đã nhận diện được mặt người vẫn tay thì bộ máy gửi message
EV_FACE_ID<face_key> cho bộ máy trên PI và đồng thời chuyển trạng thái
từ FACE_ID thành trạng thái IDLE.
Các yêu cầu
Mức độ chắc chắn mặt người vẫn tay nằm trong bộ dữ liệu mặt người đã gặp phải lớn
hơn 50%.
39	
	
	 	
3.4.2.2. Kịch bản người vẫy tay là người lạ
Mô tả
Kịch bản này cho phép robot ghi nhớ mặt của người lạ để lần sau gặp thì robot có thể
chào bằng tên.
Các luồng sự kiện
Kịch bản này bắt đầu khi bộ máy trên PI gửi một message VISION_FACE_ID cho bộ
máy trên Jetson TX2. Theo Hình 3-14, các hoạt động chuyển trạng thái được thực hiện như
sau.
1. Đầu tiên bộ máy trạng thái trên Jetson TX2 nhận message VISION_FACE_ID
từ PI.
2. Bộ máy trạng thái trên Jetson TX2 chuyển trạng thái từ IDLE sang trạng thái
FACE_ID.
3. Bộ máy ở trạng thái FACE_ID sẽ chạy thuật toán nhận diện khuôn mặt.
4. Nếu không xác định được mặt người vẫn thị bộ máy gửi message
EV_FACE_ID_NOT_SURE<key_face> và chuyển trạng thái từ FACE_ID
thành trạng thái IDLE.
Các yêu cầu
Ảnh mặt người lạ được lưu cho việc huấn luyện lần sau.
40	
	
	
Chương 4
Kết quả thử nghiệm, ứng dụng và tổng kết
Chương này đưa ra kết quả thử nghiệm của thuật toán phát hiện vẫy tay, thuật toán
nhận diện mặt người và ứng dụng của robot vào trong thực tiễn.
4.1. Kết quả phát hiện vẫy tay
Kết quả thử nghiệm vẫy tay được thực hiện tại Phòng trưng bày của Đại học Quốc
Gia Hà Nội. Thử nghiệm sẽ đo độ chính xác thuật toán vẫy tay theo khoảng cách 1-5 mét.
Một người sẽ đứng trước mặt robot ở những trị trí cách robot với khoảng cách 1m; 1,5m;…;
5m và ở mỗi khoảng người đứng trước mặt thực hiện vẫy tay 60 lần. Với mỗi lần vẫy tay
kết quả được ghi nhận lại robot có phát hiện vẫy tay hay không và ghi lại kết quả để thống
kê. Hình 4-1 mô tả kết quả thử nghiệm vẫy tay.
Hình 4-1-Kết quả thử nghiệm phát hiện vẫy tay
0.85 0.866 0.916 0.883 0.866 0.8 0.783
0.566 0.533
0
0.2
0.4
0.6
0.8
1
1.2
1 m 1.5 m 2 m 2.5 m 3 m 3.5 m 4m 4.5 m 5 m
41	
	
	 	
Theo Hình 4-1, thấy rằng kết quả vẫy tay ở khoảng cách từ 1-3,5 mét đều có độ chính
xác trên 80%. Độ chính xác tăng dần theo khoảng cách trong khoảng 1-2 mét và đạt độ
chính xác cao nhất ở khoảng cách 2 mét với độ chính xác là 91,6%. Ở khoảng cách 1 và 1,5
mét độ chính xác lại thấp hơn ở khoảng cách 2 mét là do khi người vẫn tay đứng gần robot
thì camera không thể thu hết toàn bộ hình ảnh cánh tay dẫn đến việc nhận diện khung xương
cánh tay có độ chính xác thấp hơn và việc tính toán để phát hiện vẫy tay cũng giảm xuống.
Còn ở khoảng cách 2 mét so với robot thì khoảng cách đủ gần để camera robot có thể thu
hết toàn bộ cánh tay và độ chính xác đạt cao nhất như ở trên đã nói. Từ khoảng cách lớn
hơn 2 mét độ chính xác có xu hướng giảm dần. Đặc biệt ở khoảng cách 4,5 và 5 mét độ
chính xác giảm còn lần lượt là 56,6% và 53,3%. Nguyên nhân là do ở khoảng cách xa dần
thì cánh tay cũng nhỏ dần dẫn đến việc nhận diện các khớp cổ tay và khuỷu tay của thuật
toán Openpose có độ chính xác thấp dần đến tính toán phát hiện vẫy có độ chính xác thấp.
Độ chính xác trung bình của thử nghiệm qua các khoảng cách khác nhau là xấp xỉ 78%.
4.2. Kết quả nhận diện mặt người
Dữ liệu huấn luyện gồm có 36 khuôn mặt người thực tế của các thành viên trong đề
tài và đã được chỉnh về kích thước 180	 × 180. Tổng số dữ liệu ảnh khuôn mặt người lớn
hơn 1000 ảnh. Do số lượng ảnh ít nên trong quá trình huấn luyện thì ảnh mặt người của mỗi
người được làm giàu lên bằng cách sử dụng thư viện imgaug trong python để dịch trái, dịch
phải, xoay, lật, làm mờ, thêm và giảm sáng. Vậy mỗi người có thêm 50 ảnh mặt người đã
làm giàu. Sau khi có được tập ảnh dữ liệu khuôn mặt người đã giàu. Toàn bộ ảnh sẽ được
đưa qua thuật toán Facenet để sinh ra vectơ embedding và được lưu lại dưới định dạng .npy
và theo cấu trúc thư mục của ảnh. Ví dụ như một ảnh mặt người có tên là 1.png và có nhãn
là 1 thì sẽ được lưu trong thư mục có cấu trúc dataset/1/1.png và vectơ embedding được
lưu trong thư mục có cấu trúc là embedding/1/1.npy. Việc sinh ra thêm thư mục lưu vectơ
embedding nhằm mục đích chính là khi thêm dữ liệu ảnh khuôn mặt vào một lớp đã có thì
không phải chạy lại toàn bộ cả thư mục của lớp đó để sinh ra vectơ embedding của toán bộ
ảnh mà chỉ cần chạy phần dữ liệu ảnh khuôn mặt thêm mới để sinh ra vectơ embedding.
Vectơ embedding sinh sẽ được sử dụng để huấn luyện mô hình SVM. Trong quá trình huấn
luyện sử dụng kĩ thuật K-Fold với 𝑘 = 5 và được chạy lại 6 lần. Kĩ thuật K-Fold với 𝑘 = 5
nghĩa là sẽ chia tập dữ liệu thành 5 phần bằng nhau trong đó 4 phần sẽ sử dụng để huấn
luyện mô hình SVM và 1 phần còn lại sẽ được sử dụng để đánh giá mô hình. Ví dụ với
fold-1 thì 4 phần dữ liệu là (2,3,4,5) sẽ được dùng để huấn luyện và 1 phần dữ liệu là (1) sẽ
42	
	
	
được dùng để đánh giá. Với fold-2 thì 4 phần dữ liệu là (1,3,4,5) sẽ được dùng để huấn
luyện và 1 phần dữ liệu là (2) sẽ được dùng để đánh giá. Tương tự cho các fold còn lại, kết
quả thử nghiệm được thể hiện theo Hình 4.2.
Số lần
Fold 1 2 3 4 5 6
1 0,9758 0,9838 0,9717 0,9637 0,9596 0,9879
2 0,9751 0,9502 0,9585 0,9834 0,9792 0,9668
3 0,9533 0,9502 0,9661 0,9703 0,9661 0,9668
4 0,9868 0,9606 0,9912 0,9737 0,9825 0,9737
5 0,9681 0,9909 0,9727 0,9681 0,9727 0,9737
Hình 4-2-Kết quả huấn luyện nhận dạng mặt người K-Fold
Theo kết quả Hình 4-2, qua các lần thử nghiệm cho thấy rằng độ chính xác của nhận
diện nằm trong khoảng từ 95% đến 99% với độ lệch chuẩn là 1%. Qua đó thấy được rằng
nhận diện khuôn mặt của hệ thống có độ chính xác cao và ổn định. Độ chính xác trung bình
của hệ thống với 6 lần chạy là 97,11%. Hình 4-3 là hình ảnh chạy thực tế nhận diện khuôn
mặt người tại phòng trưng bày của Đại Học Quốc Gia Hà Nội.
Hình 4-3-Ảnh nhận diện mặt người trong thực tế
43	
	
	 	
4.3. Ứng dụng thực tiễn
Robot đã được chạy thử nghiệm ở phòng truyền thống của Đại Học Quốc Gia Hà Nội.
Ngoài ra được trưng bày tại Triển lãm 60 năm thành tựu khoa học và công nghệ nhân kỷ
niệm 60 năm thành lập Bộ Khoa học và Công nghệ. Hình 4-4 là một số hình ảnh Fuso tại
triển lãm và tại phòng trưng bày của Đại học Quốc Gia Hà Nội. Với Hình 4-4 (a) là hình
ảnh Fuso tại triển lãm và Hình 4-4 (b) tại phòng trưng bày. Hình 4-4 (c) và (d) là hình ảnh
người vào phòng trưng bày và chuẩn bị thực hiện việc vẫy tay. Hình 4-4 (e), (f), (g), (h) là
hình ảnh người thực hiện vẫy tay và robot tiếp cận người vẫy tay và nhận dạng khuôn mặt
đối tượng. Hình 4-4 (i), (j), (k) là hình ảnh robot thuyết trình tại các khu vực trưng bày.
(b)
(a) (c)
(d) (e)
Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên
Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên
Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên
Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên

More Related Content

What's hot

Đồ Án Tốt Nghiệp KCD2 MOBILE ROBOT_10215412052019
Đồ Án Tốt Nghiệp KCD2 MOBILE ROBOT_10215412052019Đồ Án Tốt Nghiệp KCD2 MOBILE ROBOT_10215412052019
Đồ Án Tốt Nghiệp KCD2 MOBILE ROBOT_10215412052019PinkHandmade
 
Điều khiển trượt cho robot 2 bậc tự do.pdf
Điều khiển trượt cho robot 2 bậc tự do.pdfĐiều khiển trượt cho robot 2 bậc tự do.pdf
Điều khiển trượt cho robot 2 bậc tự do.pdfMan_Ebook
 
tinh-toan-dong-hoc-va-dieu-khien-robot-scara
tinh-toan-dong-hoc-va-dieu-khien-robot-scaratinh-toan-dong-hoc-va-dieu-khien-robot-scara
tinh-toan-dong-hoc-va-dieu-khien-robot-scara5 Phút Giải Lao
 
Robot tu hanh 4 banh da huong
Robot tu hanh 4 banh da huongRobot tu hanh 4 banh da huong
Robot tu hanh 4 banh da huongLhthang Ktv
 
Robot Scara - Tính Toán Động Học & Điều Khiển
Robot Scara - Tính Toán Động Học & Điều KhiểnRobot Scara - Tính Toán Động Học & Điều Khiển
Robot Scara - Tính Toán Động Học & Điều KhiểnPHÚ QUÝ ĐINH
 
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...Man_Ebook
 
Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp một số công nghệ ...
Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp một số công nghệ ...Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp một số công nghệ ...
Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp một số công nghệ ...Man_Ebook
 
Bao cao thuc tap nghành điều khiển tự động k44ddk
Bao cao thuc tap  nghành điều khiển tự động k44ddkBao cao thuc tap  nghành điều khiển tự động k44ddk
Bao cao thuc tap nghành điều khiển tự động k44ddkhoangtrong58
 
Đề cương môn xử lý ảnh
Đề cương môn xử lý ảnhĐề cương môn xử lý ảnh
Đề cương môn xử lý ảnhJean Valjean
 
Bảo dưỡng và thử nghiệm thiết bị trong hệ thống điện, Lê Văn Doanh và các tác...
Bảo dưỡng và thử nghiệm thiết bị trong hệ thống điện, Lê Văn Doanh và các tác...Bảo dưỡng và thử nghiệm thiết bị trong hệ thống điện, Lê Văn Doanh và các tác...
Bảo dưỡng và thử nghiệm thiết bị trong hệ thống điện, Lê Văn Doanh và các tác...Man_Ebook
 
Đồ án Thiết kế hệ thống tưới cây tự động sử dụng Arduino
Đồ án Thiết kế hệ thống tưới cây tự động sử dụng ArduinoĐồ án Thiết kế hệ thống tưới cây tự động sử dụng Arduino
Đồ án Thiết kế hệ thống tưới cây tự động sử dụng ArduinoVerdie Carter
 

What's hot (20)

Đồ Án Tốt Nghiệp KCD2 MOBILE ROBOT_10215412052019
Đồ Án Tốt Nghiệp KCD2 MOBILE ROBOT_10215412052019Đồ Án Tốt Nghiệp KCD2 MOBILE ROBOT_10215412052019
Đồ Án Tốt Nghiệp KCD2 MOBILE ROBOT_10215412052019
 
Điều khiển thiết bị điện tử bằng Android thông qua Bluetooth, 9đ
Điều khiển thiết bị điện tử bằng Android thông qua Bluetooth, 9đĐiều khiển thiết bị điện tử bằng Android thông qua Bluetooth, 9đ
Điều khiển thiết bị điện tử bằng Android thông qua Bluetooth, 9đ
 
Đề tài: Hệ thống định mức và chiết rót chai tự động, HAY, 9đ
Đề tài: Hệ thống định mức và chiết rót chai tự động, HAY, 9đĐề tài: Hệ thống định mức và chiết rót chai tự động, HAY, 9đ
Đề tài: Hệ thống định mức và chiết rót chai tự động, HAY, 9đ
 
Điều khiển trượt cho robot 2 bậc tự do.pdf
Điều khiển trượt cho robot 2 bậc tự do.pdfĐiều khiển trượt cho robot 2 bậc tự do.pdf
Điều khiển trượt cho robot 2 bậc tự do.pdf
 
tinh-toan-dong-hoc-va-dieu-khien-robot-scara
tinh-toan-dong-hoc-va-dieu-khien-robot-scaratinh-toan-dong-hoc-va-dieu-khien-robot-scara
tinh-toan-dong-hoc-va-dieu-khien-robot-scara
 
Robot tu hanh 4 banh da huong
Robot tu hanh 4 banh da huongRobot tu hanh 4 banh da huong
Robot tu hanh 4 banh da huong
 
Robot Scara - Tính Toán Động Học & Điều Khiển
Robot Scara - Tính Toán Động Học & Điều KhiểnRobot Scara - Tính Toán Động Học & Điều Khiển
Robot Scara - Tính Toán Động Học & Điều Khiển
 
Đề tài: Ứng dụng xử lý ảnh thiết kế mạch chống trộm thông minh
Đề tài: Ứng dụng xử lý ảnh thiết kế mạch chống trộm thông minhĐề tài: Ứng dụng xử lý ảnh thiết kế mạch chống trộm thông minh
Đề tài: Ứng dụng xử lý ảnh thiết kế mạch chống trộm thông minh
 
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAYĐề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
 
Đề tài: Nhận dạng mặt người trên matlab, HOT, 9đ
Đề tài: Nhận dạng mặt người trên matlab, HOT, 9đĐề tài: Nhận dạng mặt người trên matlab, HOT, 9đ
Đề tài: Nhận dạng mặt người trên matlab, HOT, 9đ
 
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
Thiết kế mạch đo nhiệt độ sử dụng board arduino, hiển thị trên 4 led 7 thanh ...
 
Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp một số công nghệ ...
Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp một số công nghệ ...Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp một số công nghệ ...
Nghiên cứu, thiết kế, chế tạo mobile robot tự hành tích hợp một số công nghệ ...
 
Bao cao thuc tap nghành điều khiển tự động k44ddk
Bao cao thuc tap  nghành điều khiển tự động k44ddkBao cao thuc tap  nghành điều khiển tự động k44ddk
Bao cao thuc tap nghành điều khiển tự động k44ddk
 
luan van thac si giam sat nhiet do am va dieu khien thiet bi dien qua internet
luan van thac si giam sat nhiet do am va dieu khien thiet bi dien qua internetluan van thac si giam sat nhiet do am va dieu khien thiet bi dien qua internet
luan van thac si giam sat nhiet do am va dieu khien thiet bi dien qua internet
 
Đề tài: Thiết kế và thi công cân điện tử, HAY, 9đ
Đề tài: Thiết kế và thi công cân điện tử, HAY, 9đĐề tài: Thiết kế và thi công cân điện tử, HAY, 9đ
Đề tài: Thiết kế và thi công cân điện tử, HAY, 9đ
 
Đề cương môn xử lý ảnh
Đề cương môn xử lý ảnhĐề cương môn xử lý ảnh
Đề cương môn xử lý ảnh
 
Bảo dưỡng và thử nghiệm thiết bị trong hệ thống điện, Lê Văn Doanh và các tác...
Bảo dưỡng và thử nghiệm thiết bị trong hệ thống điện, Lê Văn Doanh và các tác...Bảo dưỡng và thử nghiệm thiết bị trong hệ thống điện, Lê Văn Doanh và các tác...
Bảo dưỡng và thử nghiệm thiết bị trong hệ thống điện, Lê Văn Doanh và các tác...
 
Đồ án Thiết kế hệ thống tưới cây tự động sử dụng Arduino
Đồ án Thiết kế hệ thống tưới cây tự động sử dụng ArduinoĐồ án Thiết kế hệ thống tưới cây tự động sử dụng Arduino
Đồ án Thiết kế hệ thống tưới cây tự động sử dụng Arduino
 
Đề tài: Mô hình đếm, phân loại sản phẩm theo cân nặng màu sắc
Đề tài: Mô hình đếm, phân loại sản phẩm theo cân nặng màu sắcĐề tài: Mô hình đếm, phân loại sản phẩm theo cân nặng màu sắc
Đề tài: Mô hình đếm, phân loại sản phẩm theo cân nặng màu sắc
 
Đề tài: Phần mềm quản lý thông tin sinh viên, HOT, 9đ
Đề tài: Phần mềm quản lý thông tin sinh viên, HOT, 9đĐề tài: Phần mềm quản lý thông tin sinh viên, HOT, 9đ
Đề tài: Phần mềm quản lý thông tin sinh viên, HOT, 9đ
 

Similar to Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên

Nghiên cứu xây dựng giải thuật điều khiển và mô phỏng hoạt động hệ thống robo...
Nghiên cứu xây dựng giải thuật điều khiển và mô phỏng hoạt động hệ thống robo...Nghiên cứu xây dựng giải thuật điều khiển và mô phỏng hoạt động hệ thống robo...
Nghiên cứu xây dựng giải thuật điều khiển và mô phỏng hoạt động hệ thống robo...Man_Ebook
 
Giáo Trình Một Số Ứng Dụng Mạng Nơron Xây Dựng Mô Hình Nhận Dạng Và Dự Báo - ...
Giáo Trình Một Số Ứng Dụng Mạng Nơron Xây Dựng Mô Hình Nhận Dạng Và Dự Báo - ...Giáo Trình Một Số Ứng Dụng Mạng Nơron Xây Dựng Mô Hình Nhận Dạng Và Dự Báo - ...
Giáo Trình Một Số Ứng Dụng Mạng Nơron Xây Dựng Mô Hình Nhận Dạng Và Dự Báo - ...Man_Ebook
 
Đồ án - Nhập môn Kỹ thuật điện - HUST
Đồ án - Nhập môn Kỹ thuật điện - HUSTĐồ án - Nhập môn Kỹ thuật điện - HUST
Đồ án - Nhập môn Kỹ thuật điện - HUSTKhang Nguyen
 
Nghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay.pdf
Nghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay.pdfNghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay.pdf
Nghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay.pdfTieuNgocLy
 
Báo Cáo Đồ Án Chuyên Ngành thiết kế nhà thông minh.docx
Báo Cáo Đồ Án Chuyên Ngành thiết kế nhà thông minh.docxBáo Cáo Đồ Án Chuyên Ngành thiết kế nhà thông minh.docx
Báo Cáo Đồ Án Chuyên Ngành thiết kế nhà thông minh.docxyoshinochan276
 
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...nataliej4
 
Thiết kế và chế tạo cánh tay robot 3 bậc tự do ứng dụng trong phân loại sản p...
Thiết kế và chế tạo cánh tay robot 3 bậc tự do ứng dụng trong phân loại sản p...Thiết kế và chế tạo cánh tay robot 3 bậc tự do ứng dụng trong phân loại sản p...
Thiết kế và chế tạo cánh tay robot 3 bậc tự do ứng dụng trong phân loại sản p...Man_Ebook
 
LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂY
LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂYLUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂY
LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂYssuserc1c2711
 
Giáo trình Kỹ thuật Robot.pdf
Giáo trình Kỹ thuật Robot.pdfGiáo trình Kỹ thuật Robot.pdf
Giáo trình Kỹ thuật Robot.pdfMan_Ebook
 
Luan van hadoop-final
Luan van hadoop-finalLuan van hadoop-final
Luan van hadoop-finalnobjta2015
 
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...Man_Ebook
 
Thiết kế và chế tạo cánh tay robot 5 bậc tự do, NGUYỄN TRỌNG TUẤN ANH.pdf
Thiết kế và chế tạo cánh tay robot 5 bậc tự do, NGUYỄN TRỌNG TUẤN ANH.pdfThiết kế và chế tạo cánh tay robot 5 bậc tự do, NGUYỄN TRỌNG TUẤN ANH.pdf
Thiết kế và chế tạo cánh tay robot 5 bậc tự do, NGUYỄN TRỌNG TUẤN ANH.pdfMan_Ebook
 
đạI học đà nẵngkhoa công nghệ thông tin và truyền thông báo cáo đồ án cơ sở 5...
đạI học đà nẵngkhoa công nghệ thông tin và truyền thông báo cáo đồ án cơ sở 5...đạI học đà nẵngkhoa công nghệ thông tin và truyền thông báo cáo đồ án cơ sở 5...
đạI học đà nẵngkhoa công nghệ thông tin và truyền thông báo cáo đồ án cơ sở 5...jackjohn45
 

Similar to Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên (20)

Luận văn: Theo dõi đối tượng dựa trên giải thuật di truyền, HAY
Luận văn: Theo dõi đối tượng dựa trên giải thuật di truyền, HAYLuận văn: Theo dõi đối tượng dựa trên giải thuật di truyền, HAY
Luận văn: Theo dõi đối tượng dựa trên giải thuật di truyền, HAY
 
Nghiên cứu xây dựng giải thuật điều khiển và mô phỏng hoạt động hệ thống robo...
Nghiên cứu xây dựng giải thuật điều khiển và mô phỏng hoạt động hệ thống robo...Nghiên cứu xây dựng giải thuật điều khiển và mô phỏng hoạt động hệ thống robo...
Nghiên cứu xây dựng giải thuật điều khiển và mô phỏng hoạt động hệ thống robo...
 
Hệ thống tự động phân luồng câu hỏi và giải đáp yêu cầu, 9đ
Hệ thống tự động phân luồng câu hỏi và giải đáp yêu cầu, 9đHệ thống tự động phân luồng câu hỏi và giải đáp yêu cầu, 9đ
Hệ thống tự động phân luồng câu hỏi và giải đáp yêu cầu, 9đ
 
Giáo Trình Một Số Ứng Dụng Mạng Nơron Xây Dựng Mô Hình Nhận Dạng Và Dự Báo - ...
Giáo Trình Một Số Ứng Dụng Mạng Nơron Xây Dựng Mô Hình Nhận Dạng Và Dự Báo - ...Giáo Trình Một Số Ứng Dụng Mạng Nơron Xây Dựng Mô Hình Nhận Dạng Và Dự Báo - ...
Giáo Trình Một Số Ứng Dụng Mạng Nơron Xây Dựng Mô Hình Nhận Dạng Và Dự Báo - ...
 
Đồ án - Nhập môn Kỹ thuật điện - HUST
Đồ án - Nhập môn Kỹ thuật điện - HUSTĐồ án - Nhập môn Kỹ thuật điện - HUST
Đồ án - Nhập môn Kỹ thuật điện - HUST
 
Nghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay.pdf
Nghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay.pdfNghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay.pdf
Nghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay.pdf
 
Báo Cáo Đồ Án Chuyên Ngành thiết kế nhà thông minh.docx
Báo Cáo Đồ Án Chuyên Ngành thiết kế nhà thông minh.docxBáo Cáo Đồ Án Chuyên Ngành thiết kế nhà thông minh.docx
Báo Cáo Đồ Án Chuyên Ngành thiết kế nhà thông minh.docx
 
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
 
Thiết kế và chế tạo cánh tay robot 3 bậc tự do ứng dụng trong phân loại sản p...
Thiết kế và chế tạo cánh tay robot 3 bậc tự do ứng dụng trong phân loại sản p...Thiết kế và chế tạo cánh tay robot 3 bậc tự do ứng dụng trong phân loại sản p...
Thiết kế và chế tạo cánh tay robot 3 bậc tự do ứng dụng trong phân loại sản p...
 
LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂY
LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂYLUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂY
LUẬN VĂN THẠC SĨ: ỨNG DỤNG HỌC SÂU TRONG PHÂN LOẠI TRÁI CÂY
 
Giáo trình Kỹ thuật Robot.pdf
Giáo trình Kỹ thuật Robot.pdfGiáo trình Kỹ thuật Robot.pdf
Giáo trình Kỹ thuật Robot.pdf
 
Kiểm chứng các chương trình phần mềm hướng khía cạnh, HAY
Kiểm chứng các chương trình phần mềm hướng khía cạnh, HAYKiểm chứng các chương trình phần mềm hướng khía cạnh, HAY
Kiểm chứng các chương trình phần mềm hướng khía cạnh, HAY
 
Luan van hadoop-final
Luan van hadoop-finalLuan van hadoop-final
Luan van hadoop-final
 
Xây dựng qui trình chuẩn hóa dữ liệu quan trắc môi trường, HAY
Xây dựng qui trình chuẩn hóa dữ liệu quan trắc môi trường, HAYXây dựng qui trình chuẩn hóa dữ liệu quan trắc môi trường, HAY
Xây dựng qui trình chuẩn hóa dữ liệu quan trắc môi trường, HAY
 
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
Thiết kế và chế tạo cánh tay robot 5 bậc tự do phân loại sản phẩm ứng dụng cô...
 
Thiết kế và chế tạo cánh tay robot 5 bậc tự do, NGUYỄN TRỌNG TUẤN ANH.pdf
Thiết kế và chế tạo cánh tay robot 5 bậc tự do, NGUYỄN TRỌNG TUẤN ANH.pdfThiết kế và chế tạo cánh tay robot 5 bậc tự do, NGUYỄN TRỌNG TUẤN ANH.pdf
Thiết kế và chế tạo cánh tay robot 5 bậc tự do, NGUYỄN TRỌNG TUẤN ANH.pdf
 
Đề tài: Hệ thống hỗ trợ quản lý cung cấp phim theo yêu cầu, HOT
Đề tài: Hệ thống hỗ trợ quản lý cung cấp phim theo yêu cầu, HOTĐề tài: Hệ thống hỗ trợ quản lý cung cấp phim theo yêu cầu, HOT
Đề tài: Hệ thống hỗ trợ quản lý cung cấp phim theo yêu cầu, HOT
 
Luận văn: Ứng dụng công nghệ Webrtc cho giải pháp cộng tác, 9đ
Luận văn: Ứng dụng công nghệ Webrtc cho giải pháp cộng tác, 9đLuận văn: Ứng dụng công nghệ Webrtc cho giải pháp cộng tác, 9đ
Luận văn: Ứng dụng công nghệ Webrtc cho giải pháp cộng tác, 9đ
 
Kiểm chứng các hệ thống thời gian thực sử dụng uppaal, HAY
Kiểm chứng các hệ thống thời gian thực sử dụng uppaal, HAYKiểm chứng các hệ thống thời gian thực sử dụng uppaal, HAY
Kiểm chứng các hệ thống thời gian thực sử dụng uppaal, HAY
 
đạI học đà nẵngkhoa công nghệ thông tin và truyền thông báo cáo đồ án cơ sở 5...
đạI học đà nẵngkhoa công nghệ thông tin và truyền thông báo cáo đồ án cơ sở 5...đạI học đà nẵngkhoa công nghệ thông tin và truyền thông báo cáo đồ án cơ sở 5...
đạI học đà nẵngkhoa công nghệ thông tin và truyền thông báo cáo đồ án cơ sở 5...
 

More from Man_Ebook

BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdfBÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdfMan_Ebook
 
TL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
TL Báo cáo Thực tập tại Nissan Đà Nẵng.docTL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
TL Báo cáo Thực tập tại Nissan Đà Nẵng.docMan_Ebook
 
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdfGiáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdf
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdfGiáo trình mô động vật - Trường ĐH Cần Thơ.pdf
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdfGiáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdfGiáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdfGiáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdfGiáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình Linux và phần mềm nguồn mở.pdf
Giáo trình Linux và phần mềm nguồn mở.pdfGiáo trình Linux và phần mềm nguồn mở.pdf
Giáo trình Linux và phần mềm nguồn mở.pdfMan_Ebook
 
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdfGiáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lý thuyết điều khiển tự động.pdf
Giáo trình lý thuyết điều khiển tự động.pdfGiáo trình lý thuyết điều khiển tự động.pdf
Giáo trình lý thuyết điều khiển tự động.pdfMan_Ebook
 
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdfGiáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdfGiáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdfMan_Ebook
 
Giáo trình lập trình cho thiết bị di động.pdf
Giáo trình lập trình cho thiết bị di động.pdfGiáo trình lập trình cho thiết bị di động.pdf
Giáo trình lập trình cho thiết bị di động.pdfMan_Ebook
 
Giáo trình lập trình web - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình web  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình web  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình web - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lập trình .Net - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình .Net  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình .Net  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình .Net - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lập trình song song - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình song song  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình song song  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình song song - Trường ĐH Cần Thơ.pdfMan_Ebook
 
Giáo trình lập trình hướng đối tượng.pdf
Giáo trình lập trình hướng đối tượng.pdfGiáo trình lập trình hướng đối tượng.pdf
Giáo trình lập trình hướng đối tượng.pdfMan_Ebook
 
Giáo trình lập trình hướng đối tượng Java.pdf
Giáo trình lập trình hướng đối tượng Java.pdfGiáo trình lập trình hướng đối tượng Java.pdf
Giáo trình lập trình hướng đối tượng Java.pdfMan_Ebook
 
Giáo trình kỹ thuật phản ứng - Trường ĐH Cần Thơ.pdf
Giáo trình kỹ thuật phản ứng  - Trường ĐH Cần Thơ.pdfGiáo trình kỹ thuật phản ứng  - Trường ĐH Cần Thơ.pdf
Giáo trình kỹ thuật phản ứng - Trường ĐH Cần Thơ.pdfMan_Ebook
 

More from Man_Ebook (20)

BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdfBÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
BÀI GIẢNG MÔN HỌC CƠ SỞ NGÔN NGỮ, Dùng cho hệ Cao đẳng chuyên nghiệp.pdf
 
TL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
TL Báo cáo Thực tập tại Nissan Đà Nẵng.docTL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
TL Báo cáo Thực tập tại Nissan Đà Nẵng.doc
 
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdfGiáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
Giáo trình thực vật học 2 - Trường ĐH Cần Thơ.pdf
 
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdf
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdfGiáo trình mô động vật - Trường ĐH Cần Thơ.pdf
Giáo trình mô động vật - Trường ĐH Cần Thơ.pdf
 
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdfGiáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ hệ thống A - Trường ĐH Cần Thơ.pdf
 
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdfGiáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
Giáo trình ngôn ngữ mô hình hóa UML - Trường ĐH Cần Thơ.pdf
 
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdfGiáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
Giáo trình nguyên lý máy học - Trường ĐH Cần Thơ.pdf
 
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdfGiáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
Giáo trình mô hình hóa quyết định - Trường ĐH Cần Thơ.pdf
 
Giáo trình Linux và phần mềm nguồn mở.pdf
Giáo trình Linux và phần mềm nguồn mở.pdfGiáo trình Linux và phần mềm nguồn mở.pdf
Giáo trình Linux và phần mềm nguồn mở.pdf
 
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdfGiáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
Giáo trình logic học đại cương - Trường ĐH Cần Thơ.pdf
 
Giáo trình lý thuyết điều khiển tự động.pdf
Giáo trình lý thuyết điều khiển tự động.pdfGiáo trình lý thuyết điều khiển tự động.pdf
Giáo trình lý thuyết điều khiển tự động.pdf
 
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdfGiáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
Giáo trình mạng máy tính - Trường ĐH Cần Thơ.pdf
 
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdfGiáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
Giáo trình lý thuyết xếp hàng và ứng dụng đánh giá hệ thống.pdf
 
Giáo trình lập trình cho thiết bị di động.pdf
Giáo trình lập trình cho thiết bị di động.pdfGiáo trình lập trình cho thiết bị di động.pdf
Giáo trình lập trình cho thiết bị di động.pdf
 
Giáo trình lập trình web - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình web  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình web  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình web - Trường ĐH Cần Thơ.pdf
 
Giáo trình lập trình .Net - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình .Net  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình .Net  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình .Net - Trường ĐH Cần Thơ.pdf
 
Giáo trình lập trình song song - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình song song  - Trường ĐH Cần Thơ.pdfGiáo trình lập trình song song  - Trường ĐH Cần Thơ.pdf
Giáo trình lập trình song song - Trường ĐH Cần Thơ.pdf
 
Giáo trình lập trình hướng đối tượng.pdf
Giáo trình lập trình hướng đối tượng.pdfGiáo trình lập trình hướng đối tượng.pdf
Giáo trình lập trình hướng đối tượng.pdf
 
Giáo trình lập trình hướng đối tượng Java.pdf
Giáo trình lập trình hướng đối tượng Java.pdfGiáo trình lập trình hướng đối tượng Java.pdf
Giáo trình lập trình hướng đối tượng Java.pdf
 
Giáo trình kỹ thuật phản ứng - Trường ĐH Cần Thơ.pdf
Giáo trình kỹ thuật phản ứng  - Trường ĐH Cần Thơ.pdfGiáo trình kỹ thuật phản ứng  - Trường ĐH Cần Thơ.pdf
Giáo trình kỹ thuật phản ứng - Trường ĐH Cần Thơ.pdf
 

Recently uploaded

GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxAnAn97022
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfVyTng986513
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...Nguyen Thanh Tu Collection
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docxTHAO316680
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGPHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGhoinnhgtctat
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 

Recently uploaded (20)

1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptx
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGPHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 

Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên

  • 1. ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trần Ngọc Linh XÂY DỰNG HỆ THỐNG PHÂN TÍCH HÌNH ẢNH TRÊN ROS CHO ROBOT HƯỚNG DẪN VIÊN LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH Hà Nội - 2020
  • 2. ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TRẦN NGỌC LINH XÂY DỰNG HỆ THỐNG PHÂN TÍCH HÌNH ẢNH TRÊN ROS CHO ROBOT HƯỚNG DẪN VIÊN Ngành: Khoa học máy tính Chuyên ngành: Khoa học máy tính Mã số: 8480101.01 LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. TRẦN QUỐC LONG Hà Nội - 2020 VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY
  • 3. i LỜI CAM ĐOAN Tôi xin cam đoan các kết quả thực nghiệm và nghiên cứu mà được trình bày trong luận văn đều do tôi thực hiện dưới sự hướng dẫn của Tiến sĩ Trần Quốc Long. Tất cả những tham khảo và những nghiên cứu liên quan trong luận văn đều được trích dẫn nguồn gốc rõ ràng ở phần tài liệu tham khảo của cuối luận văn. Tôi cam đoan rằng trong luận văn không có việc sao chép tài liệu và công trình nghiên cứu của người khác mà không ghi rõ nguồn gốc trích dẫn. TÁC GIẢ LUẬN VĂN Trần Ngọc Linh
  • 4. ii LỜI CẢM ƠN Lời đầu tiên, tôi muốn gửi lời cảm ơn chân thành và sâu sắc đến giáo viên hướng dẫn của tôi, Tiến sĩ Trần Quốc Long đang công tác tại Khoa Công Nghệ Thông Tin của Trường Đại học Công nghệ - Đại học Quốc Gia Hà Nội. Thầy đã tận tình hướng dẫn và cho tôi những lời khuyên bổ ích để giúp tôi có thể hoàn thành luận văn này. Bên cạnh đó, tôi cũng xin cám ơn Giáo sư, Tiến sĩ Chử Đức Trình và Phó giáo sư, Tiến sĩ Bùi Thanh Tùng đang công tác tại khoa Điện Tử Viễn Thông của Trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội, luôn luôn hỗ trợ đội nhóm phát triển Robot để có những trang thiết bị cần thiết phục vụ cho việc nghiên cứu phát triển thành công Fuso. Tôi cũng chân thành cảm ơn hai em Nguyễn Đình Tuân, Phan Hoàng Anh và các em trong nhóm đề tài “QG.17.69-Nghiên cứu phát triển robot thuyết minh và hướng dẫn” đã luôn luôn giúp đỡ và hỗ trợ tôi trong quá trình nghiên cứu. Lời cuối cùng tôi xin cảm ơn gia đình và bạn bè đã ủng hộ, khích lệ tôi trên con đường học vấn. Hà Nội, Ngày 30 tháng 6 năm 2020 Trần Ngọc Linh
  • 5. iii TÓM TẮT Những năm gần đây, với sự phát triển mạnh mẽ và đột phá từ công nghệ, đặc biệt là trong lĩnh vực trí tuệ nhân tạo, nhiều công việc của con người mà máy tính đã làm rất tốt như nhận dạng mặt người hay có thể nói chuyện và tương tác giống như Sophia hoặc có thể hỗ trợ các bác sĩ trong việc chẩn đoán, dự báo và điều trị bệnh. Cùng với xu hướng phát triển của công nghệ nói chung hay robot trên toàn thế giới nói riêng, robot Fuso đã được nghiên cứu và phát triển để có thể thay thế con người làm hướng dẫn viên trong các phòng trưng bày, viện bảo tàng. Robot được chia làm 4 phần khác nhau để phát triển độc lập: hệ thống xử lý chuyển động, hệ thống xử lý giao diện tương tác, hệ thống phân tích âm thanh và hệ thống phân tích hình ảnh. Luận văn này tập trung vào phát triển hệ thống phân tích hình ảnh cho robot, bao gồm 3 mô-đun nhỏ hơn. Thứ nhất, xây dựng mô-đun bộ máy trạng thái hữu hạn trên ROS để dựng lên tất các trạng thái hoạt động của robot mà ở đó có thể giao tiếp, trao đổi dữ liệu với các phần khác trong robot cùng hoàn thành một chức năng cụ thể. Thêm vào đó, xây dựng bộ máy trạng thái hữu hạn giúp cho việc mở rộng, nâng cấp các chức năng và gỡ lỗi trong quá trình phát triển sẽ dễ dàng hơn. Mô-đun thứ hai là xây dựng phát hiện hành động vẫy tay dựa trên thông tin khung xương cánh tay được trích xuất từ kết quả của thuật toán phát hiện khung xương người Openpose. Với mô-đun này giúp robot có thể phát hiện người cần hỗ trợ qua hành động vẫy tay để tiếp cận và phục vụ. Hiện tại, phát hiện vẫy tay đạt độ chính xác trung bình xấp xỉ 78% với khoảng cách đến robot từ 1 đến 5 mét. Và cuối cùng là việc xây dựng mô-đun nhận diện mặt người dựa thuật toán Facenet với độ chính xác 97% giúp cho Fuso có khả năng ghi nhớ khuôn mặt người đã từng phục vụ để lần sau phục vụ tốt hơn. Với việc xây dựng bộ máy trạng thái hữu hạn và ứng dụng thuật toán phát hiện vẫy tay và nhận điện khuôn mặt đã giúp Fuso có thể phát hiện được người vẫy tay cần hỗ trợ, di chuyển đến để nhận diện đối tượng và chào người đó bằng tên nếu đã biết trước. Hiện tại, robot đã được chạy thử nghiệm ở phòng truyền thống của Đại Học Quốc Gia Hà Nội. Từ khóa: Fuso, robot hướng dẫn viên, phân tích hình ảnh
  • 6. iv MỤC LỤC Danh mục hình vẽ......................................................................................................................... vi Danh mục các kí hiệu, viết tắt ................................................................................................... viii Chương 1 .........................................................................................................................................1 Giới thiệu vấn đề và bài toán cần giải quyết................................................................................1 1.1. Lịch sử hình thành và phát triển của robot............................................................................1 1.2. Giới thiệu bài toán.................................................................................................................2 1.3. Những đóng góp chính..........................................................................................................6 1.4. Cấu trúc luận văn ..................................................................................................................7 Chương 2 ........................................................................................................................................8 Cơ sở lý thuyết ...............................................................................................................................8 2.1. Hệ điều hành Robot – Robot Operating System...................................................................8 2.2. Vectơ hỗ trợ hồi qui (Support Vector Machine - SVM).....................................................12 2.3. Thuật toán xác định khung xương người - OpenPose ........................................................15 2.4. Thuật toán hỗ trợ nhận diện mặt người FaceNet ................................................................17 Chương 3 ......................................................................................................................................22 Thiết kế và cài đặt hệ thống........................................................................................................22 3.1. Kiến trúc tổng quan hệ thống phân tích hình ảnh ...............................................................22 3.2. Mô-đun phát hiện vẫy tay ...................................................................................................29 3.3. Mô-đun nhận dạng mặt người.............................................................................................32 3.4. Xây dựng kịch bản..............................................................................................................34 Chương 4 ......................................................................................................................................40 Kết quả thử nghiệm, ứng dụng và tổng kết...............................................................................40 4.1. Kết quả phát hiện vẫy tay....................................................................................................40 4.2. Kết quả nhận diện mặt người..............................................................................................41
  • 7. v 4.3. Ứng dụng thực tiễn .............................................................................................................43 4.4. Tổng kết ..............................................................................................................................45 Tài liệu tham khảo.......................................................................................................................46
  • 8. vi Danh mục hình vẽ Hình 1-1-Camera Intel Realsense D435 [15] .................................................................................. 6 Hình 2-1-Trao đổi thông tin giữa các node qua Topic .................................................................. 11 Hình 2-2-Trao đổi thông tin giữa các node qua Service................................................................ 12 Hình 2-3-Các đường phân chia hai lớp ......................................................................................... 13 Hình 2-4-Điểm nhiễu nằm gần mặt phân tách (trái) và điểm nhiễu nằm bên mặt phân tách lớp còn lại (phải)......................................................................................................................................... 14 Hình 2-5-So sánh các thuật toán với OpenPose ............................................................................ 16 Hình 2-6-Sơ đồ tổng quát thuật toán OpenPose............................................................................ 16 Hình 2-7-Cấu trúc mô hình của FaceNet [14]............................................................................... 17 Hình 2-8-Mạng học sâu Inception ResNet V1 [19]....................................................................... 20 Hình 3-1-Thành phần chính của hệ thống ..................................................................................... 23 Hình 3-2-Sơ đồ chuyển trạng thái của máy trạng thái hữu hạn..................................................... 24 Hình 3-3-Thiết kế tệp cài cho việc tự động xây dựng bộ máy trạng thái hữu hạn........................ 25 Hình 3-4-Thiết kế các lớp cho việc tự động xây dựng bộ máy trạng thái hữu hạn....................... 26 Hình 3-5-Mô hình kế thừa của các bài toán phân tích hình ảnh.................................................... 27 Hình 3-6-Các tác vụ đăng kí nhận dữ liệu từ Realsense D435...................................................... 28 Hình 3-7-Sơ đồ tổng quan thuật toán vẫy tay................................................................................ 29 Hình 3-8-Góc tạo thành giữa cánh tay và mặt phẳng ngang khi vẫy ............................................ 30 Hình 3-9-Định danh người qua trục hoành Ox.............................................................................. 31 Hình 3-10-Sơ đồ tổng quát nhận dạng khuôn mặt người .............................................................. 32 Hình 3-11-Tìm mặt người vẫy tay................................................................................................. 33 Hình 3-12-Sơ đồ chuyển trạng thái qua các kịch bản.................................................................... 34
  • 9. vii Hình 3-13-Sơ đồ chuyển trạng thái qua kịch bản phát hiện người vẫy tay ................................... 35 Hình 3-14-Sơ đồ chuyển trạng thái qua kịch bản nhận diện khuôn mặt người............................. 37 Hình 4-1-Kết quả thử nghiệm phát hiện vẫy tay ........................................................................... 40 Hình 4-2-Kết quả huấn luyện nhận dạng mặt người K-Fold......................................................... 42 Hình 4-3-Ảnh nhận diện mặt người trong thực tế ......................................................................... 42 Hình 4-4-Một số hình ảnh của robot Fuso tại triển lãm và trong phòng trưng bày của Đại học Quốc Gia Hà Nội........................................................................................................................... 44
  • 10. viii Danh mục các kí hiệu, viết tắt ROS Robot Operating System – Hệ điều hành Robot MTCNN Multi-task Cascaded Convolutional Networks SVM Support Vector Machine SLAM Simultaneous Localization and Mapping LFW Labeled Faces in the Wild
  • 11. 1 Chương 1 Giới thiệu vấn đề và bài toán cần giải quyết 1.1. Lịch sử hình thành và phát triển của robot Những năm gần đây, với sự phát triển mạnh mẽ của công nghệ và thời đại 4.0 được mở ra, con người ngày càng quan tâm đặc biệt đến việc tự động hóa, làm máy móc trở nên thông minh lên giống như con người để nâng cao hiệu quả sản xuất, phục vụ những nhu cầu cơ bản cho con người. Và robot đã dần được đưa vào trong các xưởng, trong đời sống thường ngày. Vậy từ “robot” xuất hiện từ bao giờ? Lịch sử hình thành, phát triển và những thành tựu nổi bật như thế nào? Phần này sẽ giới thiệu một cách tổng quan nhất về robot. Từ “robot” được sử dụng đầu tiên vào năm 1921 trong vở kịch “Rossum’s Universal Robots” của Karel Čapek (1890-1938) – một nhà văn lừng danh người cộng hòa Séc đầu thế kỉ XX. Từ này xuất phát từ từ “robota” mà theo tiếng địa phương nghĩa là “việc nặng nhọc” hay “lao động cưỡng bức”. Ngoài ra, một từ khác cũng được sử dụng nhiều là “robotics”. Từ này lần đầu tiên được dùng bởi nhà văn Isaac Asimov (1920-1992) trong truyện ngắn “Runaround”. Trong chuyện nhà văn đã định nghĩa ba luật liên quan đến hành vi của robot mà tương tác với con người mà về sau đã được đặt tên là “Luật của Robotics” (Laws of Robotics). Dù là từ robot hay robotics thì mục đích chung của hai từ này đều chỉ đến những công cụ, máy móc có thể thực những công việc một cách tự động để phục vụ cho con người. Robot ngày càng đóng vai trò quan trọng công nghiệp giúp thúc đẩy sản xuất. Với sự phát triển của robot, người ta đã chia robot thành 4 thế hệ: Robot thế hệ 1 (1950-1967), robot thế hệ 2 (1968-1977), robot thế hệ 3 (1978-1999), robot thế hệ 4 (2000-nay) [1]. Robot thế hệ 1 có đặc điểm là được điều khiển bởi những thuật toán đơn giản lập trình sẵn
  • 12. 2 và không có khả năng lấy thông tin từ môi trường. Nổi bật trong robot thế hệ đầu là cánh tay robot có tên UNIMATE. Đây là robot công nghiệp đầu tiên được công nhận do 2 nhà sáng chế George Devol và Joe Engelberger tạo ra và được lắp ráp sử dụng trong dây chuyền lắp ráp của hãng sản xuất ô tô General Motors năm 1969. UNIMATE đã giúp hãng cải thiện khả năng sản xuất. Robot thế hệ thứ 2 với những cảm biến xung quanh đã có thể lấy được thông tin từ môi trường và đáp ứng lại những thông tin đó. Shakey [2] là robot di động có cảm biến đầu tiên được nhà nghiên cứu trong viện nghiên cứu của Stanford phát triển. Robot thế hệ thứ 3 đã có những bộ điều khiển chuyên dụng (những chiếc máy tính) và có những ngôn ngữ mới cho lập trình điều khiển robot. Đây là thời đại của robot với sự đầu tư lớn từ các công ty để có thể tự động hóa các việc cơ bản trong dây chuyền lắp ráp. Các robot phổ biến tự động hóa trong các hoạt động như sơn, di chuyển, lắp ráp. Ngoài ra, robot được mở rộng sang các lĩnh vực khác như robot giải trí của Sony, AIBO (1999) [3]. Robot thế hệ thứ 4 có khả năng tính toán vượt trội, không chỉ làm việc với dữ liệu mà nó còn có khả năng suy luận logic và học hỏi hơn nữa trí tuệ nhân tạo được đưa vào để có thể giải quyết những bài toán khó trước đây mà lập trình truyền thống khó có thể giải quyết được với độ chính xác cao. Nổi bật trong thế hệ này có robot ASIMO của tập đoàn Honda hay robot Roomba là robot hút bụi đầu tiên được giới thiệu hay là xe tự hành của Tesla. Trải qua các thế hệ robot dần được nâng cấp, sự tự động hóa được nâng cao và sự thông minh dần được đưa vào để robot có thể phục vụ cho con người trong đời sống thường ngày và trong công nghiệp có thể nâng cao năng lực sản xuất với những sản phẩm có độ tin cậy cao. Với tiềm năng phát triển trong tương lai của robot bài toán xây dựng robot thông minh đã được nghiên cứu và xây dựng. 1.2. Giới thiệu bài toán Với sự phát triển của tuệ nhân tạo như cuộc cách mạng lần thứ tư (1 – động cơ hơi nước, 2 – năng lượng điện, 3 – công nghệ thông tin) đã dần biến những điều tưởng rằng chỉ có trong khoa học viễn tưởng thành hiện thực. Năm 2011, Watson [4] – Một chương trình phần mềm trí tuệ nhân tạo do IBM phát triển, đã chiến thắng cuộc thi trong chương trình hỏi đáp trên truyền hình có tên Jeopardy. Còn trong sản phẩm thương mại có trợ lý ảo Siri của Apple có thể hiểu các câu hỏi của người dùng và phản hồi chính xác điều người dùng muốn tương tác trên điện thoại di động. Công nghệ xe tự hành của những công ty lớn như Apple, Tesla, Google, Toyota cũng có những bước tiến vượt bậc nhờ vào những cảm biến xung quanh ô tô và được huấn luyện với mạng nơ-ron giúp ô tô có khả năng tự học hỏi
  • 13. 3 được những kĩ năng lái xe. Ngoài ra, năm 2016, AlphaGo do Google DeepMind phát triển đã làm chấn động thế giới khi đánh bại kỳ thủ cờ vây chuyên nghiệp người Hàn Quốc, Lee Sedol. Khác với cờ vua là với sức mạnh máy tính hiện nay có thể tính toán được hết số nước trong cờ vua đi để tìm ra được nước đi tối ưu nhất và dành chiến thắng thì trong cờ vây số nước đi lớn hơn rất nhiều. Giới hạn dưới về số lượng vị trí nước đi hợp lệ trên bàn cờ trong cờ vây được ước tính là 2 ∗ 10%&' , đó là một con số rất lớn để mà máy tính có thể tính toán được. Chính vì vậy AlphaGo đã được huấn luyện qua mạng nơ-ron học sâu có giám sát với chuyên gia và học tăng cường. Theo như bài báo [5] thì AlphaGo đạt tỉ lệ chiến thắng lên đến 99,8%. Đặc biệt hơn hết vào tháng 10 năm 2017, tại Ả Rập Xê Út đã cấp quyền công dân cho robot đầu tiên trên thế giới có tên là Sophia [6]. Sophia có lớp da được làm bằng silicon trông giống như da người. Robot có khả năng biểu hiện tổng 62 sắc thái trên khuôn mặt (như giận, vui, buồn, v.v), hay có khả năng tương tác nói chuyện gần như con người. Những minh chứng trên cho thấy rằng việc đưa trí tuệ nhân tạo vào robot là một bước tiến lớn trong quá trình phát triển robot làm cho robot thông minh hơn, gần gũi với con người hơn để có thể giúp ích cho con người trong đời sống thường ngày như để phục vụ, tư vấn, chăm sóc sức khỏe, trong giáo dục và trong các ứng dụng dịch vụ chăm sóc khách hàng. Đối với nước ta việc sản xuất và ứng dụng robot thông minh vào trong các lĩnh vực vẫn còn hạn chế. Chủ yếu là trong công nghiệp với những cánh tay robot trong dây truyền sản xuất được chuyển giao công nghệ từ nước ngoài. Từ những tiềm năng của sự phát triển robot trên thế giới và những hạn chế trong nước, robot Fuso đã được nghiên cứu, xây dựng và phát triển để có thể đóng góp một phần nhỏ trong sự phát triển robot của đất nước và đó cũng là cơ sở nền tảng quan trọng để phát triển các thế hệ robot thông minh sau này. Với mục tiêu xây dựng robot Fuso có hình dáng giống con người có khả năng làm hướng dẫn viên trong viện bảo tàng, khu trưng bày hoặc trong các bệnh viện hay siêu thị, trung tâm thương mại thì robot Fuso cần nhận diện được cử chỉ vẫy tay của con người từ xa và phản ứng lại những cử chỉ đó, nhận diện được mặt người đã từng gặp và có khả năng di chuyển linh hoạt đến các địa điểm được yêu cầu của người dùng bằng giọng nói. Về tổng quan robot được chia thành các phần nhỏ hơn phát triển độc lập: Phần về phân tích hình ảnh để nhận diện các cử chỉ hành động, khuôn mặt của người dùng; phần về phân tích âm thanh sẽ phân tích để hiểu các câu, mệnh lệnh; phần về xử lý chuyển động cơ học sẽ nhận các mệnh lệnh để có thể di chuyển mượt và đúng đến địa điểm yêu cầu; phần xây dựng giao diện người dùng giúp người dùng có thể tương tác qua màn hình cảm ứng. Và tất các các phần sẽ giao tiếp với nhau thông qua kênh truyền thông tin topic và service của hệ điều hành
  • 14. 4 ROS – Robot Operating System [7]. Trong luận văn này, tôi xin trình bày bày hệ thống phân tích hình ảnh cho robot. Phân tích hình ảnh được chia ra làm các 3 mô-đun nhỏ: mô- đun xây dựng bộ máy trạng thái hữu hạn để dựng lên tất các trạng thái hoạt động của robot mà ở đó có thể giao tiếp, trao đổi dữ liệu với các phần khác trong robot cùng hoàn thành một chức năng cụ thể. Việc xây dựng bộ máy trạng thái hữu hạn cũng giúp cho việc mở rộng, nâng cấp của chức năng và gỡ lỗi sẽ dễ dàng hơn; mô-đun nhận diện cử chỉ vẫy tay sử dụng thuật toán OpenPose tìm khung xương người từ đó tính toán để phát hiện ra dấu hiệu cử chỉ vẫy tay; mô-đun nhận dạng khuôn mặt dựa trên thuật toán Facenet để tìm vectơ embedding, vectơ này tiếp tục được đưa vào mô hình SVM [8] đã được huấn luyện trước để tìm ra tên người vẫy. Trong quá trình xây dựng phát triển hệ thống thống phân tích hình ảnh cho robot có một số vấn đề gặp phải: • Hệ thống phân tích hình ảnh cho robot gồm có các thuật toán khác nhau để thực hiện các chức năng khác nhau trong việc phân tích hình ảnh trích xuất và biến đổi thông tin cần thiết để cung cấp cho các bộ phận khác cho robot (như bộ phận điều khiển di chuyển, bộ phận phân tích âm thanh). Các chức năng trong hệ thống phân tích hình ảnh không chỉ được thực hiện tuần tự mà còn có thể thực hiện song song chính vì vậy cần xây dựng hệ thống tổng có thể quản lý, điều khiển các thuật toán khi nào được thực thi, khi nào dừng lại để đồng nhất trong hành động với các bộ phận khác của robot. Mặt khác, việc tìm ra lỗi dễ dàng và nhanh chóng cũng cần thiết trong quá trình phát triển mà bị xảy ra lỗi. Vậy nên bộ máy trạng thái hữu hạn cần được đưa vào trong việc xây dựng hệ thống tổng quát cho phân tích hình ảnh. • Trong quá trình tương tác với con người, robot cần phản ứng nhanh chóng nhất để đáp ứng mệnh lệnh của con người. Vì vậy các thuật toán vừa cần độ chính xác cao và phản hồi nhanh. Thêm vào đó là những giới hạn phần cứng trên robot đã được thiết lập sẵn nên trong quá trình phát triển một chức năng thì cần thử nghiệm nhiều thuật toán khác nhau để so sánh và tìm thuật toán phù hợp nhất, đồng nhất với môi trường với các thuật toán đã cài đặt trước đó và thiết bị phần cứng xây dựng nên robot. 1.2.1. Bo mạch Jetson TX2 Bo mạch Jetson TX2 [16] được Nvidia cho ra mắt vào tháng 3 năm 2017. Đây là một bo mạch có tính toán mạnh mẽ có thể thực hiện được hơn một nghìn tỷ phép tính trong một
  • 15. 5 giây (1,3 TFLOPS) và sức mạnh tính toán gấp đôi so với Jetson Nano (0,5 TFLOPS). Thiết bị sinh ra nhằm mục đích chính cho việc phát triển các ứng dụng trí tuệ nhân tạo trên đó nên phù hợp với định hướng xây dựng robot thông minh như trên đã đề ra. Ngoài ra, nhà sản xuất Nvidia hỗ trợ bộ công cụ phát triển JetPack SDK mà tích hợp các công cụ và thư viện cho việc xây dựng nhanh chóng các ứng dụng trí tuệ nhân tạo như: TensorRT: Có tác dụng tối ưu hiệu năng chạy cho các mạng học sâu như phân loại ảnh, phân vùng ảnh và nhận diện đối tượng. cuDNN: Viết tắt của từ CUDA Deep Neural Network là một thư viện cung cấp các thiết lập được tinh chỉnh cho các thủ tục chuẩn như forward/backward convolution, pooling, normalization và activation layer từ đó giúp hiệu năng của các ứng dụng trí tuệ nhân tạo tốt hơn. CUDA: Là công cụ phát triển cung cấp môi trường phát triển thích hợp cho các nhà phát triển C/C++ xây dựng các ứng dụng được tăng tốc bởi GPU. Nó bao gồm các thư viện toán học, công cụ cho gỡ lỗi, tối ưu hiệu năng cho ứng dụng. ComputerVision(CV): gồm có các gói, thư viện như VisionWorks, OpenCV. Đây là những gói, thư viện cho thị giác máy, xử lý ảnh và học máy. Bo mạch Jetson TX2 nhỏ gọn mạnh mẽ và tích hợp nhiều các công cụ, thư viện và các gói giúp cho việc phát triển các ứng dụng dễ dàng hơn. Bên cạnh bo mạch nhỏ gọn, mạnh mẽ thì camera có chất lượng hình ảnh tốt rất cần thiết cho bài toán phân tích hình ảnh cho robot. 1.2.2. Camera RealSense D435 Camera chiều sâu RealSense D435 [15] thuộc dòng D400 của Intel được giới thiệu vào năm 2018. So với Kinect của Microsoft thì RealSense D435 nhỏ gọn và có thể quan sát xa hơn. Với Kinect độ sâu mà camera quan sát trong khoảng từ 0,5-4,5m còn đối với RealSense là 0,11-10m. Với phạm vi rộng thích hợp cho robot quan sát trong môi trường của một phòng trưng bày hay viện bảo tàng. Chất lượng hình ảnh cho ra của RealSense rất tốt với độ phân giải 1920x1080 và tốc độ khung hình 30fps. RealseSense D435 cấu tạo gồm 3 camera với 2 camera màu ở 2 bên và 1 camera hồng ngoại. 2 camera màu giúp RealSense sinh ra những bức ảnh độ sâu còn camera hồng ngoại giúp tinh chỉnh để tăng chất lượng những bức ảnh độ sâu. Thành phần chính của camera được mô tả như Hình 1-1.
  • 16. 6 Hình 1-1-Camera Intel Realsense D435 [15] Ngoài ra, Intel có hỗ trợ bộ công cụ RealSense SDK 2.0 để có thể dễ dàng làm việc với RealSense, giúp tinh chỉnh để cho ra được hình ảnh có chất lượng tốt ứng với từng môi trường, lấy các thông số và hình ảnh của camera. 1.3. Những đóng góp chính Như ở phần giới thiệu bài toán đã đề cập để xây dựng và phát triển được Fuso thì các phần được phát triển độc lập nhau và luận văn tập trung chủ yếu xây dựng nên hệ thống phân tích hình ảnh trên ROS cho robot hướng dẫn viên. Trong đó có 3 mô-đun chính và đó cũng là những đóng góp chính trong luận văn này. Thứ nhất, xây dựng mô-đun bộ máy trạng thái hữu hạn mà định nghĩa các trạng thái hoạt động của robot. Với việc xây dựng nên mô-đun này sẽ giúp hệ thống dễ dàng mở rộng sau này và dễ dàng kiểm soát lỗi khi hệ thống hoạt động không như mong muốn. Thứ hai, xây dựng mô-đun phát hiện người vẫy tay dựa trên phương pháp tìm khung xương người OpenPose. Thứ ba, xây dựng mô-đun nhận dạng khuôn mặt sử dụng mô hình SVM đã được huấn luyện với đầu vào là các vectơ embedding được trả về từ thuật toán FaceNet.
  • 17. 7 1.4. Cấu trúc luận văn Phần còn lại của chương đầu là cấu trúc của luận văn Chương 1: Giới thiệu vấn đề và bài toán cần giải quyết Giới thiệu về tổng quan về robot, lịch sử hình thành và phát triển qua các thế hệ robot. Từ đó, giới thiệu bài toán xây dựng phát triển robot, cụ thể hơn là bài toán phân tích hình ảnh đầu vào cho robot. Bên cạnh đó, các thiết bị phần cứng và thư viện hỗ trợ để giải quyết bài toán cũng được giới thiệu. Chương 2: Cơ sở lý thuyết Trong chương này tập trung vào giải thích những kiến thức nền tảng. Đầu tiên giới thiệu về ROS – Robot Operating System gồm có các thành phần cơ bản cấu tạo nên ROS và những phương thức trao đổi dữ liệu giữa các Node trong ROS hoạt động ra sao. Sau đó là nêu ra ý tưởng chính và phương pháp của các thuật toán SVM – Support Vector Machine, OpenPose và FaceNet. Chương 3: Cài đặt thiết kế hệ thống Trình bày về thiết kế tổng quan hệ thống với các mô-đun để xây dựng nên bộ phân tích hình ảnh cho robot. Trình bày về thuật toán, cài đặt cho từng mô-đun. Với OpenPose để nhận diện khung xương người và những cải tiến để nhận diện hành động vẫy tay của con người. Với mô-đun nhận dạng mặt người, thuật toán FaceNet của Google được áp dụng để nhận diện mặt người vẫy tay. Và cuối cùng là những kịch bản xây dựng để chạy robot. Chương 4: Kết quả thử nghiệm, ứng dụng và tổng kết Trình bày những kết quả đạt được trong quá trình phát triển và kết quả triển khai trong thực tiễn. Tóm tắt lại những đóng góp chính trong luận văn, những hạn chế chưa giải quyết được và định hướng phát triển trong tương lai.
  • 18. 8 Chương 2 Cơ sở lý thuyết 2.1. Hệ điều hành Robot – Robot Operating System ROS – Robot Operating System [7] là một hệ điều hành mã nguồn mở cung cấp một nền tảng cho việc nghiên cứu và phát triển robot được dễ dàng được tạo bởi phòng nghiên cứu Willow Garage và đang được phát triển bởi quỹ mã nguồn mở Robotics. Mặc dù gọi là hệ điều hành tuy nhiên ROS không quản lý các tài nguyên, tiến trình và lập lịch tiến trình mà ROS cung cấp một lớp gửi nhận dữ liệu có cấu trúc giữa các ứng dụng với nhau, công cụ giả lập trực quan và kết nối với cộng đồng nghiên cứu robot trên toàn thế giới. Với những đóng góp lớn từ cộng đồng đặc biệt là từ các viện nghiên cứu và trường đại học hàng đầu trên thế giới thì việc xây dựng ứng dụng trên robot trên nền ROS sẽ giảm đi một lượng đáng kể công việc lập trình cơ bản và tập trung được vào công việc nghiên cứu chuyên sâu. Thêm nữa, ROS hỗ trợ nhiều ngôn ngữ như CC++, Python nên việc bắt đầu tiếp cận và lập trình với ROS trở nên đơn giản hơn. 2.1.1. Cấu trúc thư mục và các thành phần trong ROS 2.1.1.1. Cấu trúc thư mục trong ROS Trong ROS, đơn vị chính cho việc tổ chức phần mềm là các package [17]. Mỗi một package có thể gồm các chương trình gọi là nodes, thư viện phụ thuộc ROS, các tập dữ liệu,
  • 19. 9 các tệp cấu hình và các dữ liệu khác cần thiết trong hệ thống. Mục đích chính của các package là cung cấp các chức năng để các phần mềm khác có thể tái sử dụng. Trong thư mục package thông thường gồm có các thành phần chính: tệp package manifest, các message type, các service type. Tệp package manifest cung cấp thông tin ngắn gọn về package như tên package, tác giả, phiên bản, mô tả và các gói phụ thuộc. Các message type định nghĩa cấu trúc dữ liệu gửi nhận tin qua topic trong ROS. Các service type định nghĩa cấu trúc dữ liệu gửi nhận cho service trong ROS. 2.1.1.2. Các thành phần trong ROS Master: là thành phần quan trọng quản lý kết nối truyền tin giữa các nodes. Mọi node đều phải đăng kí với master khi khai báo, giúp cho master cung cấp thông tin cho các node còn lại có thể tra cứu, nó giống như một máy chủ DNS. Nếu không có master thì các node không thể tìm thấy nhau và việc trao đổi thông tin giữa các node đều không thể thực hiện được. Nodes: là đơn vị tính toán, xử lý dữ liệu và thực hiện một chức năng cụ thể nào đó. Thông thường một hệ điều khiển robot thường sẽ bao gồm nhiều nodes mà mỗi nodes lại chuyên biệt một công việc. Ví dụ như một node điều khiển động cơ bánh xe, một node định vị, một node lập kế hoạch định hướng đường đi. Mỗi node ROS được xây dựng nhờ sử dụng thư viện ROS client (roscpp, rospy). Và các node trao đổi dữ liệu với nhau gửi nhận dữ liệu qua topic hay services. Mỗi node đều có một tên duy nhất trong toàn bộ hệ thống và tên này chính là định danh để các node khác biết mà có thể giao tiếp với nhau được. ROS cũng cung cấp công cụ để làm việc dễ dàng với ros qua dòng lệnh rosnode. Ví dụ như “rosnode list” để liệt kê các node đang hoạt động trong hệ thống, hay “rosnode info node” để in những thông tin về node. Messages: Để cho các node có thể trao đổi được dữ liệu cho nhau thì dữ liệu cần có định dạng thống nhất và messages chính là thành phần quy định định dạng cấu trúc của dữ liệu mà các node dùng để trao đổi. Trong một message bao gồm một hay nhiều cặp kiểu dữ liệu và tên dữ liệu đi cùng với nhau. Kiểu dữ liệu có thể là kiểu nguyên thủy mà trong ROS đã định nghĩa sẵn (như bool, int8, string) hay kiểu người dùng đã định nghĩa trước giống như kiểu struct trong C/C++. Message được chia ra làm hai dạng chính. Thứ nhất là message trao đổi qua topic sẽ được định nghĩa trong một tệp riêng có đuôi mở rộng là .msg. Thứ hai là message được sử dụng qua service cũng được định nghĩa trong một tệp riêng có đuôi mở rộng là .srv. Điều khác biệt trong message có đuôi .srv là định nghĩa cả cấu dữ liệu trả về
  • 20. 10 của service. Hình 2-1 và Hình 2-2 có hình ảnh mô tả message với hình hộp chữ nhật màu cam không viền. Topics: Các message có đuôi mở rộng là .msg được trao đổi giữa các node thông qua topic. Mỗi topic có một tên để định danh và cấu trúc định dạng message tương ứng. Bất kì node nào trong mạng muốn nhận thông tin thì có thể đăng kí nhận thông tin từ topic. Hay node nào cần đẩy thông tin lên topic thì cũng có thể đăng kí đẩy thông tin cho topic. Vậy trong một mạng, một node có thể đăng kí nhận thông tin từ nhiều topic và cũng có thể đăng kí đẩy thông tin cho nhiều topic. Điều này giúp cho ROS có thể tách biệt nguồn tạo ra thông tin với bộ phận sử dụng thông tin đó. Topic được xem như là một kênh truyền thông tin định kiểu mà mỗi kênh truyền có được định danh bởi một tên riêng. Node nào cũng có thể kết nối để gửi/nhận thông tin qua kênh này, miễn là thông tin cùng kiểu với topic đã định nghĩa từ trước. Services: Mô hình truyền thông tin theo qua topic như ở trên trình bày là mô hình rất linh hoạt tuy nhiên trong một số trường hợp các node cần tương tác theo kiểu yêu cầu/đáp ứng (request/response) thì mô hình qua topic lại không còn phù hợp nữa. Do vậy, kiểu truyền dữ liệu service được sinh ra nhằm thực hiện kiểu tương tác yêu cầu/đáp ứng (request/response). Một node trong mạng sẽ đóng vai trò là service để thực hiện các yêu cầu từ các node khác gửi lên. Ví dụ, một node A có cung cấp service tính tổng 2 số. Một node khác là B có thể gửi yêu cầu cho node A với dữ liệu để cho node A tính tổng 2 số và trả về cho node B. Trong thực tế những yêu cầu thường phức tạp hơn rất nhiều. Bags: Là một định dạng dùng để lưu và phát lại dữ liệu. Đây là một cơ chế quan trọng trong việc lưu trữ dữ liệu. Ví dụ như trong phòng lab thiếu thiết bị camera, ta có thể lưu dữ liệu camera thu được thành tệp .bag và tệp này có thể sử dụng bởi nhiều người mà không cần đến thiết bị thật trong việc phát triển và kiểm thử robot. 2.1.2. Trao đổi thông tin giữa các node trong ROS 2.1.2.1. Trao đổi thông tin giữa các node qua topics Để các nodes có thể trao đổi thông tin với nhau qua topics thì các node phải khai báo với ROS master. Thông thường, một node có vai trò đẩy thông tin lên topic và nhiều node sẽ đăng kí nhận thông tin từ topic đó. Để một node có thể đẩy thông tin lên thì node đó cần phải đăng kí thông tin tên topic cần đẩy lên và định dạng dữ liệu đẩy lên (Ví dụ trong Python: “pub = rospy.Publisher(‘chatter’, String, queue_size=10)”). Trong ví dụ trên, node
  • 21. 11 muốn đẩy thông tin lên topic có tên là chatter và kiểu định dạng message gửi lên là String. Còn để một node có thể đăng kí thông tin thì node đó cần đăng kí tên topic nào mà muốn nhận thông tin, định dạng kiểu dữ liệu nhận về và quan trọng nhất là một hàm trả về dữ liệu khi có thông tin mới trên topic được đưa lên. (Ví dụ trong Python: “rospy.Subscriber(‘chatter’, String, callback)”). ở đây callback là một hàm với một tham số là dữ liệu mà topic trả về. Hình 2-1 mô tả toàn bộ quá trình trao đổi thông tin giữa các node qua topics. Hình 2-1-Trao đổi thông tin giữa các node qua Topic 2.1.2.2. Trao đổi thông tin giữa các node với services Để có thể trao đổi được thông tin giữa các node với services thì cần một node đóng vai trò là service để tính toán xử lý các yêu cầu từ các node khác. Cũng giống như topic, node đóng vai trò là service cũng cần phải đăng kí với master tên service, kiểu dữ liệu service sẽ nhận và hàm xử lý tính toán để trả về yêu cầu (Ví dụ: “serv = rospy.Service(‘add_two_ints’, AddTwoInts, handle_add_two_ints)”). Trong đó tên service là ‘add_two_ints’, kiểu dữ liệu nhận là AddTwoInts và hàm handle_add_two_ints là hàm xử lý yêu cầu và trả về dữ liệu cho các node yêu cầu. Node yêu cầu cũng phải đăng kí với master (Ví dụ: “add_two_ints = rospy.ServiceProxy(‘add_two_ints’, AddTwoInts)”) và gửi lên yêu cầu như resp = add_two_ints(1, 2). Hình 2-2 mô tả quá trình trao đổi thông tin với services.
  • 22. 12 Hình 2-2-Trao đổi thông tin giữa các node qua Service 2.2. Vectơ hỗ trợ hồi qui (Support Vector Machine - SVM) 2.2.1. Máy vectơ hỗ trợ hồi quy Trong bài toán phân lớp nhị phân với dữ liệu gồm có hai lớp và hai lớp này được phân tách hoàn toàn. Nghĩa là, có một đường thẳng (trong không gian 2 chiều), một mặt phẳng (trong không gian 3 chiều) hay một siêu phẳng (trong không gian 𝑛 ≥ 3) phân tách tách dữ liệu của 2 lớp sao cho các điểm dữ liệu nằm cùng một phía so với mặt phân tách thuộc cùng một lớp. Tuy nhiên, sẽ có vô số đường thẳng, mặt phẳng, siêu phẳng có thể phân tách được dữ liệu thành 2 lớp thỏa mãn điều kiện như Hình 2-3 mô tả. Vậy câu hỏi đặt ra rằng: Đâu là mặt phân tách tốt nhất theo một tiêu chuẩn nào đó? Từ trực quan ta thấy rằng, khoảng cách từ điểm gần nhất của hai lớp tới mặt phân tách càng xa càng tốt. Và đó cũng chính là tư tưởng chính của thuật toán SVM [8, 18], tìm mặt phân tách sao cho lề là lớn nhất. Với lề được định nghĩa là khoảng cách từ điểm dữ liệu gần mặt phân tách nhất tới mặt phân tách.
  • 23. 13 Hình 2-3-Các đường phân chia hai lớp Để xây dựng và giải bài toán phân lớp nhị phân qua thuật toán SVM, chúng ta giả sử rằng có tập dữ liệu (𝑋, y) = 2(x%, 𝑦%), (x5, 𝑦5), … (x7, 𝑦7)8 với vectơ x9 ∈ 𝑅< là điểm dữ liệu đầu vào và 𝑦9 ∈ {−1, 1} là nhãn với 𝑦9 = 1 nếu điểm x9 thuộc lớp thứ nhất và 𝑦9 = −1 nếu điểm x9 thuộc lớp thứ hai. Gọi 𝑊A x + 𝑏 = 𝑤%𝑥% + 𝑤5𝑥5 + ⋯ + 𝑤7𝑥7 + 𝑏 = 0 là mặt phẳng phân chia 2 lớp. Vậy khoảng cách từ một điểm đến mặt phẳng phân tách là 𝑑 = |IJxKL M| ‖I‖O . Hơn nữa, lớp thứ nhất thuộc lớp dương, và lớp thứ 2 thuộc lớp âm nên chúng ta có thể viết lại công thức khoảng cách từ một điểm đến mặt phẳng 𝑑 = PK(IJxKL M) ‖I‖O . Nếu lớp thứ nhất mà là lớp âm, lớp thứ 2 là lớp dương ta chỉ cần đổi dấu 𝑊 và 𝑏. Vậy khoảng cách lề của một lớp được tính bởi 𝑚𝑎𝑟𝑔𝑖𝑛 = min PK(IJxKL M) ‖I‖O . Như vậy bài toán tối ưu trong SVM chính là tìm 𝑊 và 𝑏 sao cho: (𝑊, 𝑏) = 𝑎𝑟𝑔𝑚𝑎𝑥 I,M min PK(IJxKL M) ‖I‖O (2.1) Vì thay 𝑊 = 𝑘 × 𝑊 và 𝑏 = 𝑘 × 𝑏 với 𝑘 > 0 với thì mặt phân chia không đổi vậy nên chúng ta có thể giả sử 𝑦9(𝑊A x9 + 𝑏) = 1 với những điểm gần mặt phân chia nhất thì từ công thức (2.1) bài toán trở thành tìm: (𝑊, 𝑏) = 𝑎𝑟𝑔𝑚𝑎𝑥 I,M % ‖I‖O (2.2) Với điều kiện 𝑦9(𝑊A x9 + 𝑏) ≥ 1 Hay viết lại công thức (2.2) có:
  • 24. 14 (𝑊, 𝑏) = 𝑎𝑟𝑔𝑚𝑖𝑛 I,M % 5 |𝑊|5 5 (2.3) Với điều kiện 1 − 𝑦9(𝑊A x9 + 𝑏) ≤ 0 Bài toán này có thể giải được bằng các phương pháp tối ưu hóa. Sau khi giải được bài toán ta sẽ thu được mặt phân tách để phân tách hai lớp dữ liệu rõ ràng nhất với khoảng cách từ điểm dữ liệu gần nhất của hai lớp đến mặt phân tách là lớn nhất. Tuy nhiên trên thực tế có dữ liệu thường có nhiễu ảnh hưởng đến kết quả tìm mặt phân tách sao cho lề đạt cực đại vậy nên thuật toán lề mềm SVM được sinh ra để khắc phục những nhược điểm đó. 2.2.2. Lề mềm SVM (Soft margin SVM) Trên thực tế, các điểm dữ liệu ở 2 lớp phân tách nhau hoàn toàn là rất ít mà các lớp sẽ có các điểm dữ liệu nhiễu như trong Hình 2-4. Những điểm dữ liệu nhiễu này có thể nằm ở gần mặt phân tách (như Hình 2-4 bên trái) hoặc tệ hơn là có thể nằm ở nửa mặt phẳng của lớp còn lại (như Hình 2-4 bên phải) dẫn đến việc tìm ra nghiệm tối ưu của bài toán SVM bị ảnh hưởng hoặc không có nghiệm nếu hai lớp không phân tách tuyến tính. Chính vì vậy, có thể hi sinh một số điểm nhiễu gần mặt phân tách hoặc nằm ở mặt phẳng của lớp còn lại để có thể có được lề rộng hơn. Tuy nhiên, không thể hi sinh phần lớn các điểm để có thể có một lề cực lớn được. Vậy mục tiêu của lề mềm SVM chính là tìm mặt phân cách tối ưu sao cho có lề cực đại và sự hi sinh tối thiểu. Hình 2-4-Điểm nhiễu nằm gần mặt phân tách (trái) và điểm nhiễu nằm bên mặt phân tách lớp còn lại (phải) Gọi 𝛿9 đo độ hi sinh tương ứng với mỗi điểm x9 trong tập toàn bộ dữ liệu. Nếu điểm dữ liệu x9 nằm trong vùng an toàn (bên ngoài lề) thì 𝛿9 = 0. Nếu điểm dữ liệu x9 nằm trên
  • 25. 15 lề nhưng không vượt qua mặt phân cách thì 0 < 𝛿9 ≤ 1. Nếu điểm dữ liệu x9 nằm khác phía so với mặt phân cách thì 𝛿 > 1. Như vậy, với 𝑦9 = ±1 thì 𝛿9 = |𝑊A x9 + 𝑏 − 𝑦9|. Hàm mục tiêu bây giờ ngoài việc tối thiểu hóa như công thức (2.3) chúng ta còn phải tối thiểu các 𝛿9 để giảm thiểu sự hi sinh. Vậy hàm mục tiêu trở thành (𝑊, 𝑏, 𝛿) = 𝑎𝑟𝑔𝑚𝑖𝑛 I,M % 5 |𝑊|5 5 + 𝐶 ∑ 𝛿9 c 9d% (2.4) Với điều kiện 1 + 𝛿9 − 𝑦9(𝑊A x9 + 𝑏) ≤ 0 và −𝛿9 ≤ 0 Trong đó, 𝐶 là một hằng số dương để điều chỉnh điều chỉnh tầm quan trọng giữa khoảng cách lề cực đại với sự hi sinh. Khi 𝐶 lớn, thì hàm mục tiêu tập trung giảm ∑ 𝛿9 c 9d% dẫn đến 𝛿9 nhỏ có nghĩa là không có điểm nào phải hi sinh. Ngược lại 𝐶 nhỏ dẫn đến 𝛿9lớn nghĩa là sự hi sinh lớn. Để tìm được 𝐶 tối ưu, người ta thường sử dụng phương pháp kiểm định chéo (cross-validation). Cũng giống như bên trên người ta có thể giải được bằng phương pháp tối ưu để tìm ra nghiệm thỏa mãn công thức (2.4). 2.3. Thuật toán xác định khung xương người - OpenPose 2.3.1. Giới thiệu OpenPose OpenPose [9] là một thuật toán xác định khung xương của nhiều người trong một bức ảnh. Khác với các thuật toán xác định khung xương người trước đó [21, 22], tiếp cận theo hướng từ trên xuống, nghĩa là để tìm khung xương của nhiều người trong một bức ảnh thì thuật toán sẽ tìm khung xương từng người trong bức ảnh đó. Với phương pháp tiếp cận theo hướng từ trên xuống có hai nhược điểm rất lớn. Thứ nhất, phải biết trước số lượng người trong một bức ảnh. Thứ hai, độ phức tạp thời gian chạy để xác định ra tất cả khung xương người trong một bức ảnh sẽ tăng tuyến tính theo số lượng người có trong bức ảnh. Do đó, OpenPose đã tiếp cận theo hướng từ dưới lên bằng cách tách được độ phức tạp thời gian chạy không còn phụ thuộc với số lượng người có trong ảnh. OpenPose xây dựng kiến trúc để có thể học được mức độ liên kết giữa các khớp trong cơ thể qua các vectơ 2 chiều mà mã hóa thông tin vị trí và hướng của các khớp cơ thể trên miền ảnh. Sau đó, sử dụng thuật toán tham lam để xác định cơ thể người mà các khớp đó thuộc về. Với những cải tiến trên, OpenPose đã có độ chính xác và thời gian vượt xa với các thuật toán xác định khung xương người đứng đầu trước đó.
  • 26. 16 Ngoài ra, tác giả cũng đã thực hiện cài đặt thực tế các thuật toán khác (Alphapose [23] và HRNet [24]) trên bo mạch Jetson TX2 và kết quả của việc cài đặt được thể hiện qua Hình 2-5 bên dưới. Thuật toán Tốc độ khung hình (fps) Độ chính xác (khuỷu tay) Độ chính xác (cổ tay) OpenPose 4,4 – 5,5 77,7 66,8 Alphapose [23] ~1,0 84,0 76,4 HRNet [24] ~1,0 92,8 89,0 Hình 2-5-So sánh các thuật toán với OpenPose Việc lựa chọn thuật toán tìm khung xương người trong ảnh được đánh giá qua 3 tiêu chí: tốc độ khung hình, độ chính xác khửu tay, độ chính xác cổ tay. Vì phần cứng của robot đang sử dụng là bo mạch Jetson TX2 vậy nên cần thiết một mô hình thuật toán có thể xử lý nhanh trên bo mạch đó. Vậy nên tiêu chí tốc độ khung hình sau khi xử lý được đưa vào. Thêm nữa, sau khi tìm khung xương người thì 2 vị trí khớp cổ tay, và khớp khuỷu tay được sử dụng để phát hiện ra hoạt động vẫy tay nên độ chính xác của khuỷu tay và cổ tay cần được quan tâm. Qua Hình 2-5 thấy được rằng tốc độ khung hình của Openpose cao hơn 2 thuật toán còn lại và độ chính xác của khớp cổ tay và khuỷu tay cao nên Openpose phù hợp trong việc cài đặt trên Jetson TX2. Ngoài ra, trong quá trình cài đặt, tác giả thấy rằng việc cài đặt Openpose cũng đơn giản hơn các thuật toán AlphaPose và HRnet vậy nên Openpose được đưa mô-đun phát hiện hành động vẫy tay mà trong mục 3.2 bên dưới sẽ mô tả chi tiết. 2.3.2. Tổng quan phương pháp xác định khung xương người Sơ đồ tổng quan của thuật toán OpenPose – xác định khung xương người, được mô tả qua Hình 2-6. Hình 2-6-Sơ đồ tổng quát thuật toán OpenPose
  • 27. 17 Thuật toán nhận đầu vào là một bức ảnh kích cỡ 𝑤 × ℎ và sinh ra vị trí các khớp của cơ thể cho từng người trong ảnh (Hình 2-6). Bức ảnh đầu vào sẽ được đưa qua 10 lớp đầu của mạng VGG-19 [10] đã được tinh chỉnh để trích xuất ra các bản đồ đặc trưng (feature maps). Những bản đồ đặc trưng tiếp tục được đưa vào một mạng tích chập để dự đoán đồng thời một tập các bản đồ tin cậy (confidence maps) 𝑆 của vị trí các khớp trên cơ thể và một tập các vectơ 2 chiều 𝐿 mà mã hóa mức độ liên kết giữa các khớp của một bộ phận cơ thể. Tập 𝑆 = 2𝑆%, 𝑆5, … , 𝑆j8 có 𝐽 bản đồ tin cậy, trong đó 𝑆l ∈ ℝn × o , 𝑗 ∈ {1 … 𝐽} . Mà mỗi khớp tương ứng với một bản đồ tin cậy. Ví dụ như tương ứng với khớp cổ tay của tất cả mọi người trong ảnh sẽ có một bản đồ tin cậy, tương ứng khớp khuỷu tay của tất cả mọi người trong ảnh sẽ có một bản đồ tin cậy khác. Tập 𝐿 = (𝐿%, 𝐿5, … , 𝐿q}) có 𝐶 các trường vectơ 2 chiều, trong đó 𝐿r ∈ ℝn × o × 5 , 𝑐 ∈ {1 … 𝐶}, mỗi vị trí trong trường vectơ 𝐿r là một vectơ 2 chiều. Mà mỗi trường vectơ 2 chiều ứng với một bộ phận cơ thể. Ví dụ, cánh tay dưới được kết nối bởi 2 khớp (khớp cổ tay và khớp khuỷu tay) của tất cả mọi người trong ảnh sẽ có trường vectơ 2 chiều tương ứng. Cuối cùng các bản đồ tin cậy 𝑆 và các trường vectơ 𝐿 sẽ được sử dụng để suy luận bởi thuật toán tham lam để sinh ra khung xương của từng người trong một bức ảnh. Thông tin về khung xương người mà thuật toán trả về sẽ được dùng để nhận diện hành động vẫy tay trong bài luận văn. 2.4. Thuật toán hỗ trợ nhận diện mặt người FaceNet FaceNet [14] được các kĩ sư Google giới thiệu vào năm 2015, thuật toán tìm cách xây dựng một không gian vectơ để ánh xạ các ảnh mặt người thành các vectơ trong không gian mà ở không gian đó thì khoảng cách giữa các vectơ chính là mức độ tương đồng giữa các khuôn mặt. Khi khoảng cách giữa hai vectơ càng nhỏ nghĩa là hai ảnh mặt khả năng cao cùng là một người và ngược lại. Kiến trúc tổng quan mạng nơ-ron của FaceNet được thể hiện trong Hình 2-7. Hình 2-7-Cấu trúc mô hình của FaceNet [14]
  • 28. 18 Đầu vào của mạng là một lô (batch) các ảnh được đưa vào một mạng tích chập sâu để cho ra vectơ 128 chiều. Vectơ này tiếp tục được chuẩn hóa để có được vectơ embedding. Để cho mô hình học được các vectơ embedding mà với cùng một người thì khoảng cách Euclide giữa các vectơ embedding nhỏ và ngược lại thì hàm mất mát bộ ba (triplet loss) được đưa vào để có thể học được sự giống nhau và khác nhau giữa các khuôn mặt. Nội dung của phần này tập trung chủ yếu vào việc tác giả xây dựng hàm mất bộ ba và kiến trúc mạng tích chập được sử dụng để sinh ra vectơ 128 chiều. 2.4.1. Hàm mất mát bộ ba Ý tưởng đằng sau của hàm mất mát bộ ba là muốn những ảnh khuôn mặt của cùng một người sẽ gần nhau hơn so với ảnh khuôn mặt của người khác. Theo Hình 2-7, nếu coi bộ mô hình mạng tích chập sâu và chuẩn hóa vectơ 𝐿2 là một hàm 𝑓 sinh ra vectơ embedding từ ảnh khuôn mặt 𝑥 ∈ ℝu×7 thì vectơ embedding được sinh ra bởi mô hình là 𝑓(𝑥) ∈ ℝv và vì đã chuẩn hóa 𝐿2 nên ‖𝑓(𝑥)‖5 = 1. Mục tiêu là muốn mô hình học được ảnh khuôn mặt của một người cụ thể 𝑥9 w sẽ gần với tất cả các ảnh khuôn mặt còn lại của người đó 𝑥9 x và xa ảnh khuôn mặt của người khác 𝑥9 7 , do đó: y𝑓(𝑥9 w) − 𝑓2𝑥9 x 8y5 5 + 𝛼 < ‖𝑓(𝑥9 w) − 𝑓(𝑥9 7)‖5 5 , ∀ |𝑓(𝑥9 w), 𝑓2𝑥9 x 8, 𝑓(𝑥9 7)} ∈ 𝒯 (2.5) Trong đó 𝛼 là khoảng cách bắt bắt buộc giữa cặp ảnh của cùng một người và cặp ảnh của hai người khác nhau. 𝒯 là tập bộ ba có thể có trong tập huấn luyện và 𝑁 là số lượng tập bộ ba. Mục tiêu cần tối thiểu hóa hàm mất mát 𝐿: 𝐿 = ∑ €y𝑓(𝑥9 w) − 𝑓2𝑥9 x 8y5 5 − ‖𝑓(𝑥9 w) − 𝑓(𝑥9 7)‖5 5 + 𝛼• L c % (2.6) Tuy nhiên, việc tìm tất cả các bộ ba trên tập huấn luyện với dữ liệu lớn sẽ tốn rất nhiều thời gian và hội tụ chậm nên cần có chiến lược lựa chọn bộ ba tốt. 2.4.2. Chiến lược lựa chọn bộ ba Việc lựa chọn bộ ba rất quan trọng trong việc để mô hình huấn luyện có thể hội tụ nhanh. Chiến lược để lựa chọn bộ ba này sẽ tìm bộ ba sao cho ảnh khuôn mặt của cùng một người là khác nhau nhất và ảnh của hai người khác nhau là giống nhau nhất. Điều này tương tự như việc chọn ảnh khuôn mặt của một người khi hồi nhỏ và khi lớn để tăng độ khó cho việc học nhưng nếu mô hình có thể học để nhận biết được hai khuôn mặt là cùng một người thì nó sẽ thông minh hơn. Mặt khác, khi lựa chọn ảnh khuôn mặt của hai người khác nhau
  • 29. 19 gần giống nhau nhất có nhiều đặc điểm giống nhau mà mô hình vẫn phân biệt được thì giúp mô hình trở nên tốt hơn. Công thức hóa chiến lược trên, nghĩa là lựa chọn ảnh khuôn mặt cùng một người 𝑥9 x sao cho 𝑎𝑟𝑔𝑚𝑎𝑥‚K ƒ(𝑓(𝑥9 w) − 𝑓2𝑥9 x 8) và ảnh khuôn mặt của người khác 𝑥9 7 sao cho 𝑎𝑟𝑔𝑚𝑖𝑛‚K „(𝑓(𝑥9 w) − 𝑓(𝑥9 7)) . Với chiến lược lựa chọn bộ ba này sẽ giúp mô hình học được cả sự giống nhau và lẫn cả sự khác nhau của ảnh khuôn mặt. Tuy nhiên, để tìm 𝑥9 x và 𝑥9 7 trên toàn bộ dữ liệu huấn luyện sẽ gặp phải vấn đề rằng khi dữ liệu huấn luyện lớn thì chi phí tính toán cũng sẽ lớn khi phải duyệt toàn bộ dữ liệu huấn luyện và nếu ảnh khuôn mặt 𝑥9 x , 𝑥9 7 tìm được bị đánh sai nhãn hoặc có chất lượng thấp thì việc huấn luyện cũng sẽ bị ảnh hưởng. Chính vì vậy để giải quyết vấn đề này thay vì tìm và trên toàn bộ dữ liệu huấn luyện thì sẽ chỉ tìm trên các lô nhỏ (mini-batch) trong quá trình huấn luyện. Thêm vào đó, trên thực tế để hiệu quả hơn thì việc lựa chọn ảnh khuôn mặt 𝑥9 7 chỉ cần thỏa mãn: y𝑓(𝑥9 w) − 𝑓2𝑥9 x 8y5 5 < ‖𝑓(𝑥9 w) − 𝑓(𝑥9 7)‖5 5 để tránh hội tụ cục bộ trong quá trình huấn luyện. Cùng với chiến lược lựa chọn bộ ba cần có mạng tích chập sâu tốt có nhiều cải tiến. Chi tiết kiến trúc mạng tích chập sâu được mô tả qua hình chữ nhật màu xám trong Hình 2-7 được nêu ở phần sau.
  • 30. 20 2.4.3. Kiến trúc mạng Hình 2-8-Mạng học sâu Inception ResNet V1 [19]
  • 31. 21 Xây dựng hàm mất mát và chiến lược lựa chọn bộ ba chính là trọng tâm của thuật toán FaceNet. Với chiến lược đó tác giả đã thử với các kiến trúc mạng khác nhau như mạng của 2 tác giả Zeiler&Fergus [11] đạt 87% hay mạng dựa trên GoogleLeNet [12] đạt 89,4%. Còn trong bài luận văn sẽ sử dụng mô hình đã huấn luyện trước với kiến trúc mạng Inception ResNet V1 [19] đã đạt độ chính xác 99,65% trên tập LFW. Kiến trúc mạng của Inception ResNet V1 được mô tả qua Hình 2-8. Mạng gồm có các khối Inception-resnet A, B, C với các kích thước kernel khác nhau 1 × 1, 3 × 3 và các kernel xếp chồng nhau (1 × 1, 3 × 3, 3 × 3), (1 × 1, 1 × 7, 7 × 1) và (1 × 1, 1 × 3, 3 × 1) giúp cho mạng có thể học được đặc trưng trong ảnh từ vùng ảnh có kích thước nhỏ đến vùng ảnh có kích thước lớn từ đó giúp mạng có thể học được nhiều thông tin nhất có thể. Kết hợp với ý tưởng của mạng ResNet với những kết nối tắt (skip connection) giúp mạng sâu tăng độ sâu mà quá trình huấn luyện độ chính xác không bị bão hòa nhanh chóng. Còn khối Reduction A, B và Block-8 giúp mạng giảm chiều dữ liệu. Với những ưu điểm từ kiến trúc của mạng Inception ResNet V1 nên nó thích hợp cho bài toán nhận dạng mặt người.
  • 32. 22 Chương 3 Thiết kế và cài đặt hệ thống Chương này tập trung vào việc trình bày kiến trúc tổng quan hệ thống, thuật toán phát hiện vẫy tay, nhận dạng mặt người và các kịch bản được xây dựng trong robot. 3.1. Kiến trúc tổng quan hệ thống phân tích hình ảnh 3.1.1. Các trạng thái và bộ máy trạng thái hữu hạn Xây dựng lên phần mềm trong robot yêu cầu cần có một kiến trúc rõ ràng, dễ mở rộng và dễ dàng gỡ lỗi nếu chương trình có xảy ra lỗi. Thêm vào đó nữa, trong robot có nhiều bộ phận và để thực hiện một công việc nào đó có thể cần sự phối hợp của các bộ phận, gửi nhận thông tin với nhau để có những thông tin cần thiết mà hoàn thành công việc. Chính vì vậy, bộ máy trạng thái hữu hạn được đưa vào trong việc xây dựng robot. Với việc đưa bộ máy trạng thái vào robot thì với mỗi hành động của robot sẽ được định nghĩa bởi một chuỗi trạng thái mà ở mỗi trạng thái sẽ có chức năng tương ứng để góp phần hoàn thành một hành động. Công việc này giống như tư tưởng chia để trị, một hành động sẽ được chia nhỏ thành các hoạt động nhỏ thực hiện chức năng nhất định. Khi có lỗi xảy ra dựa vào robot đang ở trạng thái nào thì việc tìm và gỡ lỗi sẽ dễ dàng hơn. Robot được chia thành nhiều hệ thống nhỏ, mỗi hệ thống nhỏ quản lý các phần khác nhau của robot đều được tổ chức dưới dạng bộ máy trạng thái hữu hạn để quản lý các hoạt động của bộ phận đó. Có các hệ thống như quản lý âm thanh để quản lý việc thuyết trình, nói chuyện của robot, hay hệ thống quản lý di chuyển để quản lý, điều khiển hoạt động của mô-tơ bánh xe. Ngoài ra còn có các hệ thống khác như hệ thống quản lý màn hình trước ngực để người dùng có thể tương tác qua màn hình cảm ứng. Đặc biệt, phần này sẽ trình bày kiến trúc tổng quan của hệ thống phân tích hình ảnh. Hệ thống gồm 2 thành phần chính:
  • 33. 23 LogicControler: Phần này có vai trò chính trong việc xử lý logic của toàn bộ hệ thống, gửi nhận thông tin cho các hệ thống khác. Ví dụ như gửi thông tin góc và khoảng cách của người vẫy tay cho hệ thống di chuyển để hệ thống tính toán và tìm đường đi. StateMachine: phần này có vai trò định nghĩa các trạng thái và sự kiện chuyển trạng thái dựa vào dữ liệu của trong và ngoài hệ thống. Trong mỗi trạng thái (State), thì sẽ cần định nghĩa công việc trong 2 hàm quan trọng là: enter_state và while_state. Enter_state là sẽ định nghĩa các công việc chủ yếu liên quan đến khởi tạo khi vào trạng thái đó. Còn while_state là công việc chính cần thực hiện trong trạng thái đó. Ngoài ra, để có thể xây dựng máy trạng thái hữu hạn một cách tự động và nhanh hơn thì tệp cài đặt đã được sinh ra mà trong đó định nghĩa tổng quát nhất và đơn giản về các trạng thái, các sự kiện chuyển trạng thái; gửi, nhận dữ liệu và logic khi vào một trạng thái nào do hàm nào xử lý. Những tệp này sẽ được sử dụng để có thể tự động xây nên StateMachine và đường gửi nhận dữ liệu của hệ thống. Hình 3-1-Thành phần chính của hệ thống Mô hình tổng quan của hệ thống được mô tả qua Hình 3-1 StateController và LogicController có vai trò như bên trên đã nói. Còn thành phần TopicIn là những topic mà hệ thống phân tích hình ảnh đăng kí để lấy dữ liệu từ các hệ thống khác. Còn TopicOut chính là những thông tin sau khi hệ thống đã xử lý và muốn gửi ra bên ngoài để các hệ thống khác có được thông tin và sử dụng. Chi tiết của phần StateController được mô tả qua Hình 3-2.
  • 34. 24 Hình 3-2-Sơ đồ chuyển trạng thái của máy trạng thái hữu hạn Mô hình gồm có 4 trạng thái lớn: IDLE, HAND_WAVING, DETECT_MOTION, FACE_ID. IDLE là trạng thái robot nghỉ và lắng nghe các yêu cầu từ hệ thống khác như từ hệ thống quản lý di chuyển. Trạng thái HAND_WAVING sẽ xử lý, tải mô hình để nhận diện hành động vẫy tay. Trạng thái DETECT_MOTION để xác định xem có chuyển động hay không. Trạng thái FACE_ID để nhận diện mặt người trước robot. Để vào mỗi trạng thái đều cần sự kiện để kích hoạt như sự kiện VISION_HAND_WAVING thì máy trạng thái chuyển từ IDLE sang HAND_WAVING. Và khi hoàn thành việc nhận diện hành động vẫy tay thì sự kiện VISION_EV_DONE được kích hoạt để chuyển trạng thái từ HAND_WAVING về lại IDLE. Với việc định nghĩa ra các trạng và việc di chuyển giữa các trạng thái thì sẽ dễ dàng trong việc quản lý. Dễ dàng định nghĩa được các công việc cần phải làm trong từ trạng thái mà robot vào. Thêm vào đó nữa, khi lỗi xảy ra việc truy vết, tìm và gỡ lỗi sẽ đơn giản hơn. Đặc biệt việc mở rộng chức năng cho robot thì chỉ việc định nghĩa thêm các trạng thái mới mà không bị ảnh hưởng đến những chức năng và phần đã phát triển. Để xây dựng bộ máy trạng thái hữu hạn nhanh chóng tệp cài đặt định nghĩa các trạng thái và di chuyển trạng thái đã được sinh ra để tự động hóa việc xây dựng bộ máy trạng thái.
  • 35. 25 3.1.2. Tự động xây dựng bộ máy trạng thái dựa trên tệp cài đặt Trong quá trình phát triển, việc xây dựng bộ máy trạng thái hữu hạn có thể tự động hóa qua tệp cài đặt. Từ tệp cài đặt định nghĩa toàn bộ trạng thái và luồng di chuyển của các trạng thái khi có các sự kiện được định nghĩa như Hình 3-3. Hình 3-3-Thiết kế tệp cài cho việc tự động xây dựng bộ máy trạng thái hữu hạn Tệp định nghĩa trạng thái bắt đầu với từ khóa “init_state” và toàn bộ trạng thái trong hệ thống với từ khóa “state” và các sự kiện chuyển trạng thái trong từng trạng thái được định nghĩa với từ khóa “event_id”. Ở mỗi trạng thái sẽ định nghĩa 2 hàm “enter_state” và “enter_while” sẽ được thực thi khi vào trạng thái đó. Ví dụ trong trạng thái “IDLE” thì “enter_state” sẽ ứng với hàm “enter_state_idle”, còn “enter_while” sẽ ứng với hàm “enter_while_idle” sẽ được thực thi nếu vào trạng thái “IDLE”. Còn để từ một trạng thái có thể chuyển sang trạng thái khác thì quá trình chuyển trạng thái này được định nghĩa qua từ khóa “event_id” qua tệp cài đặt. Ở mỗi trạng thái có các danh sách các trạng thái sẽ chuyển tới. Ví dụ ở trạng thái “IDLE” khi gặp sự kiện “VISION_MOTION” thì sẽ chuyển { "TX2Controller": { "events_class": "VISION_CONTROLLER_EVTS", "init_state": "IDLE", "state": { "IDLE": { "input_keys": ["idle_in"], "output_keys":["idle_out"], "enter_state": "enter_state_idle", "enter_while": "enter_while_idle"}, "HAND_WAVING": { "input_keys": ["hand_waving_in"], "output_keys":["hand_waving_out"], "enter_state": "enter_state_hand_waving", "enter_while": "enter_while_hand_waving"}, ... }, "event_id": { "IDLE": [ {"id_name": "VISION_MOTION", "dst": "DETECT_MOTION", "des": ""}, {"id_name": "VISION_FACE_ID", "dst": "FACE_ID", "des": ""}, ... ], "HAND_WAVING": [{"id_name": "VISION_EV_DONE", "dst": "IDLE", "des": ""}], ... }, "outcomes": ["outcome"] } }
  • 36. 26 sang trạng thái “DETECT_MOTION”, còn gặp sự kiện “VISION_FACE_ID” thì sẽ chuyển sang trạng thái “FACE_ID”. Việc định nghĩa ra tệp cài đặt như Hình 3-3 đưa cho người phát triển cái nhìn tổng quát về hệ thống, luồng di chuyển trạng thái và đặc biệt khi cần thêm hay chỉnh sửa chỉ cần sửa tệp nội dung tệp cài đặt mà không ảnh hưởng đến mã lệnh đã viết trước đó. Để đọc nội dung trong tệp và tự động xây dựng nên bộ máy trạng thái hữu hạn thì các lớp đã được thiết kế như Hình 3-4. Hình 3-4-Thiết kế các lớp cho việc tự động xây dựng bộ máy trạng thái hữu hạn Theo Hình 3-4, lớp “State” có tác dụng định nghĩa một trạng thái trong bộ máy trạng thái hữu hạn. Lớp này gồm có 2 hàm “__init__” và “execute”. Hàm “__init__” có tác dụng khởi tạo đầu ra của một trạng thái. Ví dụ như ở trạng thái “IDLE” có thể di chuyển sang trạng thái “VISION_MOTION” hay “VISION_FACE_ID” thì đầu ra của trạng thái “IDLE” là mảng có 2 phần tử “VISION_MOTION” và “VISION_FACE_ID”. Còn hàm “execute” có tác dụng thực thi các công việc khi ở state đó. Để phù hợp hơn trong hệ thống phân tích hình ảnh khi có những trường hợp cần quá trình khởi tạo trước khi bắt đầu thực thi hàm “execute” như việc tải một mô hình thì lớp “BaseState” đã được sinh ra để kế thừa lớp “State” và cài đè lại hàm “execute”. Với 2 lớp “State” và “BaseState” đã có thể sinh ra được thực thể trạng thái, tuy nhiên để từ các trạng thái có thể di chuyển qua các trạng thái khác cần có lớp “BaseStateController”. Lớp “BaseStateController” có các hàm “__build_statemachine” và
  • 37. 27 “deploy”. Hàm “__build_statemachine” có nhiệm vụ lấy các thông tin từ tệp cài đặt bên trên để tạo ra các thực thể trạng thái và ngoài ra chuẩn bị cho quá trình xây dựng trạng thái. Còn hàm “deploy” có nhiệm vụ xây dựng nên luồng di chuyển trạng thái và tạo nên bộ máy trạng thái hữu hạn hoàn chỉnh. 3.1.3. Xây dựng các lớp cho phân tích hình ảnh Trong hệ thống phân tích hình ảnh cho robot sẽ có 3 mô hình lớn: MotionDetection, HandWaving, FaceId. Trong đó, mô hình MotionDetection dùng để phát hiện chuyển động để đưa robot từ trạng thái ngủ sang trạng thái sẵn sàng nhận lệnh. Còn mô hình HandWaving để phát hiện người vẫn tay và mô hình FaceId nhận diện khuôn mặt người đứng trước robot. Tất cả nhưng mô hình này đều có những đặc điểm chung là cần tải mô hình hay trả về kết quả chính vì vậy một lớp trừu tượng đã được tạo ra như trong Hình 3-5. Hình 3-5-Mô hình kế thừa của các bài toán phân tích hình ảnh Lớp trừu tượng được thiết kế là lớp VisionTask như trong Hình 3-5 mô tả. Lớp này sẽ gồm có 3 phương thức trừu tượng mà các lớp kế thừa nó bắt buộc phải cài đặt và nhiệm vụ của từng hàm cụ thể là: • Hàm start(): Dùng để tải mô hình và các cài đặt liên quan tới tác vụ mô hình. • Hàm get_result(input_data): Dùng để lấy kết quả đầu ra của mô hình với đầu vào tham số input_data. Input_data có thể là ảnh như trong bài toán phát hiện vẫy tay (HandWaving) và nhận diện khuôn mặt người (FaceId) hoặc cũng có thể là 2 ảnh như trong bài toán phát hiện chuyển động (MotionDetection).
  • 38. 28 • Hàm end(): Dùng để xóa mô hình hay các cài đặt liên quan mà đã được cài ở hàm start(). Mục đích chính của hàm này là để giải phóng bộ nhớ để thực hiện các tác vụ tiếp theo. 3.1.4. Truyền dữ liệu từ camera Realsense D435 Với camera RealsenseD435, khi bất kì tác vụ nào đang hoạt động sử dụng đến camera thì tác vụ khác sẽ không sử dụng được hay nói cách khác trong một thời điểm camera Realsense chỉ cho phép một tác vụ có thể lấy ảnh. Ví dụ khi tác vụ HandWaving đang sử dụng camera thì tác vụ khác là FaceId sẽ không thể sử dụng được camera ấy chính vì vậy để cho các tác vụ khác đều dùng được camera cùng thời điểm thì dữ liệu ảnh của camera đã được đưa lên topic để cho các tác vụ cần dùng đến camera chỉ cần vào đăng kí nhận dữ liệu từ topic đẩy lên như trong Hình 3-6. Hình 3-6-Các tác vụ đăng kí nhận dữ liệu từ Realsense D435 Để có thể đẩy được dữ liệu của camera lên topic như ý tưởng trên, thư viện realsense2_camera [20] đã được sử dụng. Thư viện này do chính Intel xây dựng trên ROS cung cấp các thông tin về ảnh màu, ảnh độ sâu, thông tin camera qua các topic. Tuy nhiên, trong hệ thống chỉ quan tâm đến dữ liệu trả về là thông tin về ảnh màu và thông tin về ảnh độ sâu với 2 topic mà thư viện cung cấp: • Ảnh màu: /camera/color/image_raw • Ảnh độ sâu: /camera/depth/image_rect_raw
  • 39. 29 3.2. Mô-đun phát hiện vẫy tay Các thuật toán hiện nay chủ yếu tập trung vào việc nhận diện cử chỉ tay mà đầu vào là vùng ảnh bàn tay với khoảng cách gần từ 1-2 mét nên việc sử dụng các thuật toán trên để phát hiện vẫy tay là không phù hợp. Thêm vào đó nữa, robot hướng dẫn viên cần phát hiện người vẫy tay ở khoảng cách xa hơn lên đến tận 5 mét. Chính vì vậy với khoảng cách đó, phát hiện vẫy tay cần đầu vào với vùng ảnh rộng hơn – vùng ảnh của cả cánh tay người. Từ cử động của cánh tay người sẽ được sử dụng để phát hiện cử chỉ vẫy tay. Với thuật toán OpenPose – xác định khung xương cơ thể người, để lấy khung xương cánh tay sử dụng cho việc tính toán và phát hiện cử chỉ vẫy tay. 3.2.1. Thuật toán phát hiện vẫy tay dựa trên khung xương cánh tay Sơ đồ tổng quan thuật toán phát hiện vẫy tay được mô tả dưới Hình 3-7. Hình 3-7-Sơ đồ tổng quan thuật toán vẫy tay Ban đầu các ảnh màu liên tiếp từ camera được đưa vào thuật toán OpenPose. Dựa trên thuật toán OpenPose thì vị trí của các khớp trên cơ thể của một người bất kỳ trong Hình 3- 7 (đường màu xanh lục và xanh lam) sẽ được lấy. Tuy nhiên, chúng ta cần phát hiện vẫy tay vậy nên chúng ta chỉ quan tâm đến vị trí 2 khớp ở 2 cánh tay: Khớp cổ tay, khớp khuỷu. Thông tin vị trí của các ảnh liên tiếp sẽ được đưa vào thuật toán vẫy tay để xác định xem có ai vẫy tay trong bức ảnh hay không. Nếu có thì vị trí người vẫy tay trong ảnh sẽ được lấy để gửi lên topic cho các phần khác sử dụng. Để hiểu thuật toán vẫy tay hoạt động ra sao thì đầu tiên, trước hết chúng ta định nghĩa hành động vẫy tay là như nào? Vẫy tay là hành động đưa tay lên phía trên và liên tục di chuyển cánh tay từ trái qua phải và ngược lại. Dựa trên đặc điểm trên thì điều kiện để nhận biết hành động vẫy tay khi đồng thời thỏa mãn hai
  • 40. 30 điều kiện: Thứ nhất, độ mở của cánh tay của người vẫy phải lớn hơn một ngưỡng nhất định và thứ hai, việc đưa tay sang bên trái và sang bên phải một cách liên tục phải lặp lại trên hai lần. Hình 3-8-Góc tạo thành giữa cánh tay và mặt phẳng ngang khi vẫy Như Hình 3-8 bên trên, khi đưa cánh tay lên thì giữa cánh tay và mặt phẳng ngang sẽ tạo thành một góc 𝛼 với 0° ≤ 𝛼 ≤ 180°, góc sẽ tăng dần từ trái qua phải. Hiệu của 2 góc tạo cánh tay được tạo thành ở 2 khung hình liên tiếp là Δ‰. Vậy khi cánh tay đưa từ trái qua phải thì Δ‰ ≥ 0. Vì góc 𝛼 của khung hình sau luôn lớn hơn góc 𝛼 của khung hình trước. Và ngược lại khi đưa cánh tay từ phải qua trái thì Δ‰ ≤ 0. Khi vẫy tay, tay sẽ được đưa từ biên trái sang biên phải và ngược lại. Để phát hiện được tay đến hai biên của 2 góc (𝛼u97 , 𝛼uw‚) ta dựa vào bất đẳng thức (3.1). ΔŠ‹ướr × Δo9ệ7 Šạ9 ≤ 0 (3.1) Để cho dễ hiểu và tránh gây nhầm lẫn 𝛼 ở dưới đã bị bỏ đi ở bất đẳng thức (3.1). Bất đẳng thức (3.1) thể hiện thời điểm mà cánh tay đang đưa từ biên trở về. Khi ΔŠ‹ướr × Δo9ệ7 Šạ9 ≤ 0 và Δo9ệ7 Šạ9 > 0 thì nghĩa là cánh tay đang ở phía biên bên trái. 𝛼u97 sẽ được gán lại bằng giá trị 𝛼o9ệ7 Šạ9. Còn khi ΔŠ‹ướr × Δo9ệ7 Šạ9 ≤ 0 và Δo9ệ7 Šạ9 < 0 thì nghĩa là cánh tay đang ở phía biên bên phải, 𝛼uw‚ sẽ được gán lại bằng giá trị 𝛼o9ệ7 Šạ9. Nếu 𝛼uw‚ − 𝛼u97 > 𝐶, trong đó 𝐶 là một ngưỡng cho trước thì sẽ tính vẫy tay được nửa chu kì. Khi vẫy tay được một chu kì thì hành động vẫy tay được nhận diện. Trong thực tế, khi con người vẫy tay không phải đứng yên tại chỗ mà họ có thể vừa di chuyển vừa vẫy tay trong khi lại gần robot. Thêm vào đó, kết quả của thuật toán OpenPose sẽ trả về là một mảng danh sách người có trong ảnh, ứng với mỗi người là một mảng vị trí các khớp của người đó, mà thứ tự danh sách người giữa hai khung hình liên tiếp có thể khác nhau. Ví dụ một người ở khung hình trước có thứ tự là 0 trong danh sách thì chưa chắc ở khung hình sau đã có thứ tự là 0 trong danh sách. Chính vì vậy cần phải định
  • 41. 31 danh những người ở trong danh sách để khi qua các khung hình thì có thể nhận diện được người đó qua định danh và tính toán để phát hiện người đó có vẫy tay hay không. Nhận thấy rằng, trong hai khung hình liên tiếp thì nội dung trong bức ảnh có sự thay đổi nhỏ chính vì vậy để định danh từng người trong danh sách thì giá trị trung bình 𝑥̅ = 𝑥% + 𝑥5 + ⋯ + 𝑥7 theo trục hoành 𝑂𝑥 từ các vị trí khớp của người đó như trong Hình 3.9 bên dưới mô tả. Ở khung hình sau người có giá trị định danh gần nhất với giá trị định danh của người khung hình trước thì được coi là cùng một người. Với việc thêm định danh, thuật toán có thể nhận diện hành động vẫy tay kể cả khi người vẫy tay vẫn đang di chuyển. Hình 3-9-Định danh người qua trục hoành Ox
  • 42. 32 3.3. Mô-đun nhận dạng mặt người Sau khi phát hiện người vẫy tay thành công thì robot sẽ di chuyển để tiếp cận đối tượng vẫy tay. Khi đến trước mặt hệ thống sẽ nhận diện khuôn mặt của người vẫy. Hệ thống sẽ tự động cắt vùng ảnh chứa người vẫy tay và gửi cho mô-đun nhận dạng mặt người. Sơ đồ tổng quát của mô-đun nhận dạng mặt người được thể hiện như Hình 3-10. Hình 3-10-Sơ đồ tổng quát nhận dạng khuôn mặt người Đầu vào là một bức ảnh có chứa mặt người. Đầu ra là tên của người trong ảnh, nếu người trong ảnh mà robot chưa từng gặp thì sẽ là một giá trị “trống”. Như trong Hình 3-10 sơ đồ nhận nhận dạng khuôn mặt người được chia làm 2 pha: pha huấn luyện và pha triển khai. Với pha huấn luyện dữ liệu được sử dụng để huấn luyện mô hình SVM để nhận dạng khuôn mặt người, còn với pha triển khai mô hình SVM đã được xây dựng từ pha huấn luyện sẽ sử dụng để nhận diện mặt khuôn người. Với pha huấn luyện được thể hiện bởi vùng bao quanh màu đỏ như Hình 3-10. Các bước trong pha huấn luyện được tóm tắt như sau. Ảnh được đưa vào mô hình MTCNN [13] đã được huấn luyện sẵn để phát hiện khuôn mặt người có trong ảnh. Sau đó, ảnh khuôn mặt người được cắt ra và điều chỉnh lại về kích thước 180 × 180. Ảnh sau khi được đưa về kích thước 180 × 180 sẽ đưa vào mạng FaceNet đã được huấn luyện trước để lấy vectơ embedding 128 chiều và được lưu lại vào dữ liệu để huấn luyện. Tập dữ liệu được sử dụng để huấn luyện ra mô hình SVM để nhận dạng mặt người. Còn đối với pha triển khai cũng sẽ có các bước giống như pha huấn luyện. Ảnh được đưa qua mạng MTCNN để phát hiện khuôn mặt, ảnh khuôn mặt tiếp tục được đưa qua
  • 43. 33 FaceNet để lấy vectơ embedding. Và vectơ embedding đưa vào mô hình SVM đã được huấn luyện trước từ pha huấn luyện để nhận diện khuôn mặt người. Mô hình nhận diện đúng hay sai đều được lưu lại dữ liệu để phục vụ cho huấn luyện cải tiến mô hình trong tương lai. Như bên trên đã trình bày, để phát hiện mặt người mô-đun này sử dụng MTCNN. Tuy nhiên, nếu trong ảnh mà có nhiều khuôn mặt người thì MTCNN sẽ trả về một mảng khuôn mặt người gồm có vị trí và kích cỡ ảnh mặt người. Do vậy cần tìm người vẫy tay trong số những khuôn mặt mà MTCNN trả về. Như ở trên đã nêu, sau khi vẫy tay thì robot di chuyển đến trước mặt người vẫy tay nên mặt người vẫy tay sẽ là người gần với tâm của bức ảnh nhất. Giả sử rằng trong ảnh có 𝑛 khuôn mặt đã được thuật toán MTCNN phát hiện ra thì ảnh mặt người 𝑖 sẽ có tọa độ là (𝑥9, 𝑦9) và có kích thước thước là (𝑤9, ℎ9). Vậy tâm bức ảnh mặt người 𝑖 là 𝑐𝑥9 = ‚KLnK 5 , 𝑐𝑦9 = PKLoK 5 . Tâm của ảnh là 𝑐𝑥 = ‚Ln 5 , 𝑐𝑦 = PLo 5 . Vậy khoảng cách từ tâm ảnh mặt người đến tâm ảnh tổng thể có khoảng cách 𝑑9 = ’(𝑐𝑥 − 𝑐𝑥9)5 + (𝑐𝑦 − 𝑐𝑦9)5. Vậy với 𝑚𝑖𝑛(𝑑', 𝑑%, … , 𝑑7) chính là mặt người sẽ được nhận diện. Hình 3-11 mô tả cách tìm mặt ở trung tâm ảnh như bên trên trình bày. Hình 3-11-Tìm mặt người vẫy tay
  • 44. 34 3.4. Xây dựng kịch bản Phần này tập trung vào việc mô tả các kịch bản và quá trình chạy thuật toán các kịch bản. Tất cả các kịch bản được mô tả một cách tổng quát qua Hình 3-12. Hình 3-12-Sơ đồ chuyển trạng thái qua các kịch bản Theo Hình 3-12, gồm có bộ máy trạng thái hữu hạn nằm trên PI (Sử dụng để điều khiển động cơ di chuyển) và bộ máy trạng thái trên Jetson TX2 để phân tích hình cho robot. Hai bộ máy trạng thái hữu hạn trao đổi thông tin qua Topic với kí hiệu mũi tên nét gạch đứt màu da cam như trên Hình 3-12. Còn mũi tên liền màu đen thể hiện sự kiện chuyển trạng thái nội bộ trong bộ máy trạng thái hữu hạn trên Jetson TX2. Luồng kịch bản chi tiết được thể hiện chi tiết ở phần sau.
  • 45. 35 3.4.1. Kịch bản phát hiện người vẫy tay Mô tả Kịch bản này cho phép robot phát hiện người cần trợ giúp. Khi robot đang đứng yên mà có chuyển động trong phạm vi robot quan sát thì robot bắt đầu quan sát xem khu vực quan sát của robot có ai cần trợ giúp qua hành động vẫy tay. Nếu có người trong khu vực quan sát có người vẫy tay thì robot sẽ xác định vị trí của người cần trợ giúp và tiến lại gần. Các luồng trạng thái được mô tả qua Hình 3.13. Hình 3-13-Sơ đồ chuyển trạng thái qua kịch bản phát hiện người vẫy tay
  • 46. 36 Các luồng sự kiện Kịch bản này bắt đầu khi robot khởi động các bộ phận đã sẵn sàng hoạt động. Bộ máy trên PI gửi một message VISION_MOTION lên cho bộ máy trên Jetson TX2. Theo Hình 3-13, hoạt động chuyển trạng thái sẽ được thực hiện như sau. 1. Đầu tiên bộ máy trạng thái trên Jetson TX2 ở trạng thái IDLE nhận message VISION_MOTION từ PI. 2. Bộ máy trạng thái trên Jetson TX2 chuyển trạng thái từ IDLE sang DETECT_MOTION 3. Bộ máy ở trạng thái DETECT_MOTION sẽ khởi động và chạy thuật toán phát hiện chuyển động. 4. Nếu phát hiện có chuyển động thì bộ máy trạng thái sẽ gửi message VISION_HAVING_MOTION cho bộ máy trên PI và chuyển trạng thái trên Jetson TX2 từ DETECT_MOTION về lại IDLE. 5. Bộ máy trên PI tiếp tục gửi message VISON_HAND_WAVING cho bộ máy trên Jetson TX2. 6. Bộ máy trên Jetson TX2 chuyển trạng thái từ IDLE sang HAND_WAVING. 7. Bộ máy ở trạng thái HAND_WAVING sẽ bắt đầu chạy thuật toán phát hiện người vẫy tay. 8. Nếu phát hiện có người vẫy tay thì robot sẽ xác định vị trí người vẫy tay trong phòng và gửi message VISON_HAVING_WAVING <position> cho bộ máy trên PI. Đồng thời bộ máy chuyển từ trạng thái HAND_WAVING về lại trạng thái IDLE. Các yêu cầu Khi nhiều người cùng vẫy tay gọi robot thì robot sẽ ưu tiên phục vụ cho người vẫy đầu tiên.
  • 47. 37 3.4.2. Kịch bản nhận diện khuôn mặt người vẫy tay Kịch bản này cho phép robot nhận diện khuôn mặt người vẫy tay. Với mục đích lấy thông tin người vẫy tay và chào người vẫy tay nếu đã biết từ trước, còn nếu chưa biết robot sẽ hỏi tên và lưu lại hình ảnh để huấn luyện cho việc nhận diện khuôn mặt lần sau. Sau khi vẫy tay robot sẽ xác định được vị trí của người vẫy tay dựa vào khoảng cách giữa người vẫy tay và robot cùng với góc tạo thành giữa hướng hình của robot và người vẫy tay trong đó robot chính là tâm của góc đó. Hai thông tin này sẽ được cho máy PI (nơi điều khiển bộ phận chuyển động của robot) để tính toán ra vị trí của người vẫy trong bản đồ 3D và tiếp cận người đó. Khi tiếp cận thành công robot bắt đầu nhận dạng khuôn mặt người đó. Luồng chuyển trạng thái chi tiết của kịch bản nhận diện mặt người được mô tả qua Hình 3-14. Hình 3-14-Sơ đồ chuyển trạng thái qua kịch bản nhận diện khuôn mặt người
  • 48. 38 3.4.2.1. Kịch bản nhận diện người vẫy tay đã biết từ trước Mô tả Kịch bản này cho phép robot nhận diện mặt người vẫy tay đã biết từ trước. Với mục đích lấy thông tin người vẫy tay và chào người vẫy tay bằng tên của họ. Thêm vào đó, khi xác định được thông tin người vẫy robot có thể tìm lịch sử phục vụ người của mình để hiểu người vẫy tay đang quan tâm đến những hiện vật, thông tin nào để từ đó có thể phục vụ tốt hơn. Các luồng sự kiện Kịch bản này bắt đầu khi bộ máy trên PI gửi một message VISION_FACE_ID cho bộ máy trên Jetson TX2. Theo Hình 3-14, các hoạt động chuyển trạng thái được thực hiện như sau. 1. Đầu tiên bộ máy trạng thái trên Jetson TX2 nhận message VISION_FACE_ID từ PI. 2. Bộ máy trạng thái trên Jetson TX2 chuyển trạng thái từ IDLE sang trạng thái FACE_ID. 3. Bộ máy ở trạng thái FACE_ID sẽ chạy thuật toán nhận diện khuôn mặt. 4. Nếu đã nhận diện được mặt người vẫn tay thì bộ máy gửi message EV_FACE_ID<face_key> cho bộ máy trên PI và đồng thời chuyển trạng thái từ FACE_ID thành trạng thái IDLE. Các yêu cầu Mức độ chắc chắn mặt người vẫn tay nằm trong bộ dữ liệu mặt người đã gặp phải lớn hơn 50%.
  • 49. 39 3.4.2.2. Kịch bản người vẫy tay là người lạ Mô tả Kịch bản này cho phép robot ghi nhớ mặt của người lạ để lần sau gặp thì robot có thể chào bằng tên. Các luồng sự kiện Kịch bản này bắt đầu khi bộ máy trên PI gửi một message VISION_FACE_ID cho bộ máy trên Jetson TX2. Theo Hình 3-14, các hoạt động chuyển trạng thái được thực hiện như sau. 1. Đầu tiên bộ máy trạng thái trên Jetson TX2 nhận message VISION_FACE_ID từ PI. 2. Bộ máy trạng thái trên Jetson TX2 chuyển trạng thái từ IDLE sang trạng thái FACE_ID. 3. Bộ máy ở trạng thái FACE_ID sẽ chạy thuật toán nhận diện khuôn mặt. 4. Nếu không xác định được mặt người vẫn thị bộ máy gửi message EV_FACE_ID_NOT_SURE<key_face> và chuyển trạng thái từ FACE_ID thành trạng thái IDLE. Các yêu cầu Ảnh mặt người lạ được lưu cho việc huấn luyện lần sau.
  • 50. 40 Chương 4 Kết quả thử nghiệm, ứng dụng và tổng kết Chương này đưa ra kết quả thử nghiệm của thuật toán phát hiện vẫy tay, thuật toán nhận diện mặt người và ứng dụng của robot vào trong thực tiễn. 4.1. Kết quả phát hiện vẫy tay Kết quả thử nghiệm vẫy tay được thực hiện tại Phòng trưng bày của Đại học Quốc Gia Hà Nội. Thử nghiệm sẽ đo độ chính xác thuật toán vẫy tay theo khoảng cách 1-5 mét. Một người sẽ đứng trước mặt robot ở những trị trí cách robot với khoảng cách 1m; 1,5m;…; 5m và ở mỗi khoảng người đứng trước mặt thực hiện vẫy tay 60 lần. Với mỗi lần vẫy tay kết quả được ghi nhận lại robot có phát hiện vẫy tay hay không và ghi lại kết quả để thống kê. Hình 4-1 mô tả kết quả thử nghiệm vẫy tay. Hình 4-1-Kết quả thử nghiệm phát hiện vẫy tay 0.85 0.866 0.916 0.883 0.866 0.8 0.783 0.566 0.533 0 0.2 0.4 0.6 0.8 1 1.2 1 m 1.5 m 2 m 2.5 m 3 m 3.5 m 4m 4.5 m 5 m
  • 51. 41 Theo Hình 4-1, thấy rằng kết quả vẫy tay ở khoảng cách từ 1-3,5 mét đều có độ chính xác trên 80%. Độ chính xác tăng dần theo khoảng cách trong khoảng 1-2 mét và đạt độ chính xác cao nhất ở khoảng cách 2 mét với độ chính xác là 91,6%. Ở khoảng cách 1 và 1,5 mét độ chính xác lại thấp hơn ở khoảng cách 2 mét là do khi người vẫn tay đứng gần robot thì camera không thể thu hết toàn bộ hình ảnh cánh tay dẫn đến việc nhận diện khung xương cánh tay có độ chính xác thấp hơn và việc tính toán để phát hiện vẫy tay cũng giảm xuống. Còn ở khoảng cách 2 mét so với robot thì khoảng cách đủ gần để camera robot có thể thu hết toàn bộ cánh tay và độ chính xác đạt cao nhất như ở trên đã nói. Từ khoảng cách lớn hơn 2 mét độ chính xác có xu hướng giảm dần. Đặc biệt ở khoảng cách 4,5 và 5 mét độ chính xác giảm còn lần lượt là 56,6% và 53,3%. Nguyên nhân là do ở khoảng cách xa dần thì cánh tay cũng nhỏ dần dẫn đến việc nhận diện các khớp cổ tay và khuỷu tay của thuật toán Openpose có độ chính xác thấp dần đến tính toán phát hiện vẫy có độ chính xác thấp. Độ chính xác trung bình của thử nghiệm qua các khoảng cách khác nhau là xấp xỉ 78%. 4.2. Kết quả nhận diện mặt người Dữ liệu huấn luyện gồm có 36 khuôn mặt người thực tế của các thành viên trong đề tài và đã được chỉnh về kích thước 180 × 180. Tổng số dữ liệu ảnh khuôn mặt người lớn hơn 1000 ảnh. Do số lượng ảnh ít nên trong quá trình huấn luyện thì ảnh mặt người của mỗi người được làm giàu lên bằng cách sử dụng thư viện imgaug trong python để dịch trái, dịch phải, xoay, lật, làm mờ, thêm và giảm sáng. Vậy mỗi người có thêm 50 ảnh mặt người đã làm giàu. Sau khi có được tập ảnh dữ liệu khuôn mặt người đã giàu. Toàn bộ ảnh sẽ được đưa qua thuật toán Facenet để sinh ra vectơ embedding và được lưu lại dưới định dạng .npy và theo cấu trúc thư mục của ảnh. Ví dụ như một ảnh mặt người có tên là 1.png và có nhãn là 1 thì sẽ được lưu trong thư mục có cấu trúc dataset/1/1.png và vectơ embedding được lưu trong thư mục có cấu trúc là embedding/1/1.npy. Việc sinh ra thêm thư mục lưu vectơ embedding nhằm mục đích chính là khi thêm dữ liệu ảnh khuôn mặt vào một lớp đã có thì không phải chạy lại toàn bộ cả thư mục của lớp đó để sinh ra vectơ embedding của toán bộ ảnh mà chỉ cần chạy phần dữ liệu ảnh khuôn mặt thêm mới để sinh ra vectơ embedding. Vectơ embedding sinh sẽ được sử dụng để huấn luyện mô hình SVM. Trong quá trình huấn luyện sử dụng kĩ thuật K-Fold với 𝑘 = 5 và được chạy lại 6 lần. Kĩ thuật K-Fold với 𝑘 = 5 nghĩa là sẽ chia tập dữ liệu thành 5 phần bằng nhau trong đó 4 phần sẽ sử dụng để huấn luyện mô hình SVM và 1 phần còn lại sẽ được sử dụng để đánh giá mô hình. Ví dụ với fold-1 thì 4 phần dữ liệu là (2,3,4,5) sẽ được dùng để huấn luyện và 1 phần dữ liệu là (1) sẽ
  • 52. 42 được dùng để đánh giá. Với fold-2 thì 4 phần dữ liệu là (1,3,4,5) sẽ được dùng để huấn luyện và 1 phần dữ liệu là (2) sẽ được dùng để đánh giá. Tương tự cho các fold còn lại, kết quả thử nghiệm được thể hiện theo Hình 4.2. Số lần Fold 1 2 3 4 5 6 1 0,9758 0,9838 0,9717 0,9637 0,9596 0,9879 2 0,9751 0,9502 0,9585 0,9834 0,9792 0,9668 3 0,9533 0,9502 0,9661 0,9703 0,9661 0,9668 4 0,9868 0,9606 0,9912 0,9737 0,9825 0,9737 5 0,9681 0,9909 0,9727 0,9681 0,9727 0,9737 Hình 4-2-Kết quả huấn luyện nhận dạng mặt người K-Fold Theo kết quả Hình 4-2, qua các lần thử nghiệm cho thấy rằng độ chính xác của nhận diện nằm trong khoảng từ 95% đến 99% với độ lệch chuẩn là 1%. Qua đó thấy được rằng nhận diện khuôn mặt của hệ thống có độ chính xác cao và ổn định. Độ chính xác trung bình của hệ thống với 6 lần chạy là 97,11%. Hình 4-3 là hình ảnh chạy thực tế nhận diện khuôn mặt người tại phòng trưng bày của Đại Học Quốc Gia Hà Nội. Hình 4-3-Ảnh nhận diện mặt người trong thực tế
  • 53. 43 4.3. Ứng dụng thực tiễn Robot đã được chạy thử nghiệm ở phòng truyền thống của Đại Học Quốc Gia Hà Nội. Ngoài ra được trưng bày tại Triển lãm 60 năm thành tựu khoa học và công nghệ nhân kỷ niệm 60 năm thành lập Bộ Khoa học và Công nghệ. Hình 4-4 là một số hình ảnh Fuso tại triển lãm và tại phòng trưng bày của Đại học Quốc Gia Hà Nội. Với Hình 4-4 (a) là hình ảnh Fuso tại triển lãm và Hình 4-4 (b) tại phòng trưng bày. Hình 4-4 (c) và (d) là hình ảnh người vào phòng trưng bày và chuẩn bị thực hiện việc vẫy tay. Hình 4-4 (e), (f), (g), (h) là hình ảnh người thực hiện vẫy tay và robot tiếp cận người vẫy tay và nhận dạng khuôn mặt đối tượng. Hình 4-4 (i), (j), (k) là hình ảnh robot thuyết trình tại các khu vực trưng bày. (b) (a) (c) (d) (e)