1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu camera 3d, ứng dụng lập trình giao tiếp giữa người và máy bằng các cử chỉ của tay

76 693 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 76
Dung lượng 783,17 KB

Nội dung

Dữ liệu trực quan này, được lấy kết hợp với phần mềm theo dõi chuyển động Intel RealSense, tạo ra một giao diện cảm ứng không cần chạm có khả năng phản hồi theo chuyển động của tay, cánh

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG

KHOA CÔNG NGHỆ THÔNG TIN

NGUYỄN LÊ THIÊN THƠ

TÌM HIỂU CAMERA 3D, ỨNG DỤNG LẬP TRÌNH GIAO TIẾP GIỮA NGƯỜI VÀ MÁY

BẰNG CÁC CỬ CHỈ CỦA TAY

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC NGÀNH CÔNG NGHỆ THÔNG TIN

CÁN BỘ HƯỚNG DẪN:

TS ĐINH ĐỒNG LƯỠNG

NHA TRANG – NĂM 2016

Trang 2

LỜI NÓI ĐẦU

Sự tương tác giữa người sử dụng với máy tính ngày càng trở nên phong phú, đa dạng song hành với sự phát triển của công nghệ thông tin cho đến ngày nay Trong những thập niên 70, bàn phím hầu như là công cụ duy nhất

để điều khiển máy tính Sau đó đến khi giao diện đồ họa phát triển, con chuột máy tính đã được phát minh và hỗ trợ việc tương tác với máy tính trở nên thuận tiện hơn Cùng với sự phát triển của công nghệ, và các thuật toán, con người có thể giao tiếp với máy tính thông qua các màn hình cảm ứng chạm cũng như giọng nói Tháng 04 năm 2010, sự xuất hiện của Camera 3D Kinect – một thiết bị được phát triển bởi Microsoft thực sự là cuộc cách mạng trong lĩnh vực giao tiếp người – máy Đến tháng 01 năm 2014, Intel ra mắt công nghệ Intel RealSense với khả năng cảm nhận không gian 3D góp phần đưa sự tương tác người – máy lên tầm cao mới Tuy xuất hiện đã lâu nhưng Intel RealSense cùng những tiện ích của nó còn khá mới lạ tại Việt Nam, chính vì vậy tôi đã chọn đề tài này với mong muốn tìm hiểu, trải nghiệm công nghệ Intel RealSense và ứng dụng công nghệ này vào việc điều khiển bàn phím, chuột thông qua hình dạng và cử chỉ của bàn tay Từ đó, tôi xây dựng ứng dụng có thể áp dụng vào việc điều khiển trình chiếu Power Point thông qua cử chỉ bàn tay mà không cần đến các thiết bị như bàn phím hay chuột

Em xin gửi đến Thầy TS Đinh Đồng Lưỡng lời cảm ơn chân thành và sâu sắc nhất Nhờ sự hướng dẫn và giúp đỡ tận tình của Thầy trong suốt 15 tuần,

em đã thực hiện và hoàn thành Đồ Án Tốt Nghiệp này Sự nhiệt tình hướng dẫn, chỉ bảo của thầy trong suốt quá trình thực hiện đề tài đã giúp em có thêm rất nhiều động lực, định hướng để hoàn thành đề tài Em xin cảm ơn Thầy! Đồng thời, em xin trân trọng cảm ơn các Thầy Cô của Trường Đại Học Nha Trang nói chung và của Khoa Công Nghệ Thông Tin nói riêng đã tận tình dạy dỗ em suốt quảng thời gian ngồi trên ghế giảng đường đại học

Trang 3

Những kiến thức, kỹ năng mà Thầy Cô đã dạy cho em thực sự khiến em hoàn thiện bản thân hơn trong học tập, làm việc lẫn cuộc sống

Nha Trang, ngày 04 tháng 06 năm 2016

Nguyễn Lê Thiên Thơ

Trang 4

MỤC LỤC

LỜI NÓI ĐẦU 1

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

DANH MỤC HÌNH ẢNH, BẢNG BIỂU 7

CHƯƠNG I TỔNG QUAN 8

1.1 Giới thiệu về Camera 3D 8

1.2 Công nghệ Camera Intel RealSense 3D 10

1.3 Giới thiệu Intel RealSense SDK 11

1.4 Các ứng dụng của Camera 3D hiện tại và tương lai 13

1.5 Yêu cầu đề tài 15

1.6 Phương pháp 16

1.7 Cấu trúc của báo cáo đồ án tốt ngiệp 17

CHƯƠNG II CỞ SỞ LÝ THUYẾT 19

2.1 Ngôn ngữ lập trình C++ 19

2.2 Thư viện OpenCV 21

2.3 Thư viện Intel RealSense SDK 24

2.3.1 Kiến trúc Intel RealSense SDK 24

2.3.2 Các Interface cốt lõi trong Intel RealSense SDK 25

2.4 Mô-đun Hand Tracking 26

CHƯƠNG III KHẢO SÁT BÀI TOÁN 29

3.1 Cấu trúc dữ liệu 29

3.1.1 Dữ liệu 3D 29

3.1.2 Dữ liệu tay – Hand Data 30

3.2 Phương pháp giải quyết 33

Trang 5

3.2.1 Đóng gói dữ liệu 33

3.2.2 Xử lý dữ liệu 37

CHƯƠNG IV XÂY DỰNG MÔ-ĐUN XỬ LÝ 40

4.1 Các định nghĩa hằng số 40

4.2 Các phương thức xử lý 41

4.3 Interface HandDetail 42

4.3.1 Định nghĩa kiểu dữ liệu Enum 42

4.3.2 Thuộc tính 43

4.3.3 Phương thức 45

CHƯƠNG V KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 47

5.1 Kết luận 47

5.2 Hướng phát triển 48

TÀI LIỆU THAM KHẢO 49

PHỤ LỤC 50

Trang 6

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

E3 Electronic Entertainment Expo

CES Consumer Electronics Show

PC Personal Computer

SDK Software Development Kit

USB Universal Serial Bus

OpenCL Open Computing Language

OpenCV Open Computer Vision

XML eXtensible Markup Language

OOP Oject Oriented Programming

Trang 7

DANH MỤC HÌNH ẢNH, BẢNG BIỂU

Hình 1.1: Camera 3D (Kinect) 7

Hình 1.2: Cấu tạo Camera Intel RealSense 3D 8

Hình 1.3: Camera SR300 11

Hình 1.4: Camera R200 12

Hình 1.5: Các game điều khiển bằng cử chỉ và khuôn mặt 14

Hình 1.6: Minh họa các bước xử lý trong chương trình 16

Hình 2.1: Kiến trúc thư viện OpenCV 21

Hình 2.2: Kiến trúc Intel RealSense SDK 23

Hình 2.3: Hệ thống các Interface C++/C# 24

Hình 3.1: Sự khác biệt giữa dữ liệu 2D và 3D 28

Hình 3.2: Minh họa các bước xử lý 32

Hình 3.3: Khuôn mẫu lớp Tree 33

Hình 3.4: Khuôn mẫu lớp Node 33

Hình 3.5: Minh họa cấu trúc dữ liệu dạng cây 34

Hình 3.6: Xây dựng cấu trúc cây 35

Hình 3.7: Minh họa nhánh trong cấu trúc cây 36

Hình 3.8: Minh họa cách xác định tư thế ngón tay 37

Hình 3.9: Minh họa chuyển động của các điểm trên bàn tay 38

Trang 8

CHƯƠNG I TỔNG QUAN

1.1 Giới thiệu về Camera 3D

Kinect (tên gọi trước đó là Project Natal) là thiết bị camera có khả năng thu nhận các cảm biến chuyển động được phát triển bởi Microsoft và được công bố vào tháng 6 năm 2009 tại hội nghị thường niên E3 Thời gian đầu xuất hiện, Kinect là thiết bị chuyên dụng của thế hệ máy Xbox 360, phục vụ cho việc chơi game

Hình 1.1 – Camera 3D (Kinect) Kinect thực sự tạo ra cơn sốt không chỉ trong cộng đồng Game mà cả trong giới nghiên cứu, lập trình viên và nhà thiết kế trên thế giới Kinect đã được ứng dụng vào nhiều lĩnh vực trong đời sống như: giáo dục, y khoa, robot, giao tiếp người – máy

Đầu năm 2014, Intel nâng tầm công nghệ Camera 3D lên tầm cao mới khi giới thiệu chiếc Camera Intel RealSense 3D tại triển lãm CES 2014 Camera 3D có khả năng ghi nhận chiều sâu đối tượng, tương tự mắt con người, ngoài

Trang 9

ra hỗ trợ công nghệ nhận dạng khuôn mặt, khả năng nhận biết cử chỉ của các ngón tay, hiểu và theo dõi cảm xúc trên gương mặt Camera Intel Realsense 3D có các phiên bản dành cho các thiết bị như laptop, All in One, 2in1, tablet

và smartphone

Hình 1.2 – Cấu tạo Camera Intel RealSense 3D Camera Intel RealSense 3D bao gồm 3 thành phần riêng biệt: ống kính thường, ống kính hồng ngoại và ống kính laser hồng ngoại Khi kết hợp với nhau, những ống kính này cho phép thiết bị suy ra chiều sâu bằng cách phát hiện ánh sáng hồng ngoại được phản xạ trở lại từ đối tượng phía trước nó Dữ liệu trực quan này, được lấy kết hợp với phần mềm theo dõi chuyển động Intel RealSense, tạo ra một giao diện cảm ứng không cần chạm có khả năng phản hồi theo chuyển động của tay, cánh tay, đầu và nét mặt người dùng, cho phép họ tương tác với thiết bị một cách dễ dàng

Trang 10

Chiếc Camera Intel RealSense 3D đầu tiên được tích hợp ống kính cảm biến chiều sâu như mắt người cùng độ phân giải full 1080p Thiết bị này còn

có khả năng nhận biết sự chuyển động của ngón tay, cho phép nhận dạng cử động với độ chính xác cao, cũng như hiểu được cử động và cảm xúc trên gương mặt

1.2 Công nghệ Camera Intel RealSense 3D

Công nghệ Camera Intel RealSense 3D, ban đầu được gọi là Intel Perceptual Computing, đây là một nền tảng cho phép con người thực hiện việc tương tác với máy tính thông qua các cử chỉ và cảm xúc trên khuôn mặt qua không giản mở Điều này cho phép con người có thể điều khiển chiếc máy tính của mình, ra lệnh, nhận diện hay quét vật thể qua không gian mà không cần chạm hoặc bấm

Để làm được điều này, Camera 3D là bộ phận đóng vai trò then chốt trong quá trình hoạt động của Intel RealSense Chức năng của nó là ghi nhận các thao tác, cử chỉ và biểu cảm khuôn mặt của người dùng để từ đó máy tính có thể thực thi các tác vụ theo yêu cầu

Intel RealSense cho phép người dùng tương tác với máy tính (PC để bàn hoặc laptop) thông qua cử chỉ của cơ thể bao gồm hai tay, khuôn mặt, điệu bộ thay thế cho kiểu tương tác với PC, laptop truyền thống qua bàn phím, chuột Như vậy, với thao tác điều khiển mới này thì máy tính sẽ nhận diện qua cử chỉ, khuôn mặt của người dùng Công nghệ này có thể giúp người dùng kích hoạt và mở máy tính bằng chức năng nhận diện khuôn mặt hoặc in văn bản, chơi game, vẽ, ghi chú, thậm chí là chơi nhạc cụ chỉ bằng những cử chỉ tương tác bằng tay mà không cần phải chạm vào máy

RealSense hoạt động bằng cách sử dụng camera trên máy, camera này kết nối với một thư viện trong đó lưu giữ những thông tin được đơn giản hóa về

Trang 11

các trải nghiệm thường ngày của con người như học tập, giao tiếp, chơi game hay bộc lộ cảm xúc vui, buồn, giận dữ Từ đó, máy tính có thể hiểu và thực thi những yêu cầu mà người dùng truyền đạt đến chúng

1.3 Giới thiệu Intel RealSense SDK

Intel RealSense SDK là một thư viện gồm các định nghĩa tiêu chuẩn và các thuật toán nhận diện đối tượng Chúng được sử dụng thông qua các Interface đã được tiêu chuẩn hóa Mục đích của Intel RealSense SDK nhằm che giấu sự phực tạp của các thuật toán, giúp lập trình viên tập trung hơn vào việc sử các thuật toán đó để tạo nên những ứng dụng mang tính thực tế

Intel RealSense SDK có các yêu cầu tối thiểu về phần mềm và phần cứng như sau:

- Hệ điều hành 64 bit Microsoft Windows 8.1 hoặc 10

- Microsoft Visual Studio 2010-2015 với gói cập nhật mới nhất

- Framework Microsoft NET 4.0 dành cho C#

- Unity PRO 4.1.0

- Một trong số các phiên bản trình duyệt sau:

 Microsoft Internet Explorer 11.0.9600

 Microsoft Edge 20.10240.16384.0

 Google Chrome 42.0.2311

 Mozilla Firefox 37.0

- Java JDK 1.7.0_11

Trang 13

Hình 1.4 – Camera R200

1.4 Các ứng dụng của Camera 3D hiện tại và tương lai

Tại CES 2014 với Camera RealSense 3D, Intel và tập đoàn Microsoft đã kết hợp trình diễn một cuộc gọi video (video call) sống động thông qua phần mềm Skype và Lync Chiếc camera đã cho thấy khả năng kiểm soát và xóa

bỏ phông nền phía sau vật thể, chỉ còn thấy người gọi và không bị ảnh hưởng bởi những tác động xung quanh trong suốt quá trình gọi Với khả năng này, người dùng sẽ có nhiều lựa chọn hơn: họ có thể chọn xuất hiện trước màn ảnh cùng với phông nền phía sau hoặc xóa bỏ tất cả để cùng chia sẻ một bài thuyết trình, thưởng thức một bộ phim hoặc cùng xem một sự kiện thể thao

Intel hy vọng rằng từ những ứng dụng nhận dạng cử chỉ, giọng nói và cảm ứng sẽ khuyến khích trẻ em tham gia tích cực hơn trong các trò chơi hữu ích cho việc học tập Để nhấn mạnh tiềm năng trong giáo dục giải trí, Eden công

bố việc hợp tác với Scholastic, công ty xuất bản giáo dục trẻ em và truyền thông toàn cầu, để thiết kế các trải nghiệm tương tác cho hai thương hiệu toàn cầu Clifford Big Red Dog và I Spy, với việc trình diễn chức năng đa người dùng trong một trò chơi Clifford, Intel chứng minh các thiết bị này sẽ giúp các trẻ em từ 3 tuổi trở lên có thể học tập và nâng cao kỹ năng đọc viết thông qua việc sử dụng cánh tay, chuyển động bàn tay, nói chuyện và chạm

Tại triển lãm CES 2016, Intel đã cho ra mắt chiếc smartphone đầu tiên được trang bị Camera Intel RealSense 3D Điều đặc biệt trên Camera

Trang 14

RealSense của Intel là cho phép smartphone có thể nhận diện các vật thể 3D

và cử chỉ Camera RealSense này có tên ZR300, bao gồm một số cảm biến như gia tốc, con quay hồi chuyển, theo dõi chuyển động và mô-đun Camera RealSense R200 Theo Intel, camera RealSense ZR300 hỗ trợ cho Project Tango của Google để theo dõi và đồng bộ hóa thông tin giữa các cảm biến Kết hợp với mức tiêu thụ điện năng thấp, camera này có thể cung cấp những trải nghiệm đa năng, chẳng hạn như lập bản đồ nhà và chuyển hướng, bổ sung khả nằng quét 3D cho các ứng dụng cũng như trải nghiệm thực tế ảo RealSense ZR300 được sản xuất với chất lượng cao và khả năng cho chiều sâu trường ảnh ở độ phân giải VGA 60 khung hình/giây Đây là thiết bị dành cho những ai muốn tạo ra ứng dụng có thể tận dụng lợi thế của Camera RealSense do Intel sản xuất

Hiện công nghệ camera Intel Realsense đã được tích hợp vào chiếc máy laptop Lenovo Ideapad 500 với các ứng dụng mang lại trải nghiệm 3D đến người sử dụng:

- Quét khuôn mặt để mở máy truy cập vào Window bằng Window Hello được tích hợp trên Window 10

- Điều khiển bằng cử chỉ để cuộn trang trong trình duyệt hoặc văn bản

- Phần mềm chơi nhạc Kagura

- Các game điều khiển bằng cử chỉ và khuôn mặt: Lego Portal Racers, Warrior Wave, bắn phi thuyền Space Astro Blaster

Trang 15

Hình 1.5 – Các game điều khiển bằng cử chỉ và khuôn mặt

1.5 Yêu cầu đề tài

Nội dung yêu cầu thực hiện trong đề tài:

- Tìm hiểu camera 3D, sự cần thiết của dữ liệu 3D trong việc nhận dạng các đối tượng

- Giới thiệu và trình bày đặc tính của camera 3D Realsense, tìm hiều thư viện SDK hỗ trợ Camera Realsense, cách thu ảnh 3D realtime và trích chọn đặc trưng của tay

- Nhận dạng các tư thế của tay thông qua điểm đặc trưng như keypoint, figuretips, nhận dạng các di chuyển của tay

- Ứng dụng trong giao tiếp người và máy tính thông qua các hình dạng, cử chỉ tay, sử dụng ngôn ngữ lập trình C++

Trang 16

1.6 Phương pháp

Từ khi ra mắt đến nay, công nghệ Intel RealSense đang dần được tích hợp sẵn trong các sản phẩm thương mại cùng những ứng dụng đi kèm mang đến trải nghiệm mới lạ cho người dùng Tuy nhiên, chúng còn khá mới lạ đối với phần lớn người dùng phổ thông đặc biệt là nhận diện hành động cử chỉ qua không gian 3D Do đó, tôi chọn Hand Tracking để ứng dụng Camera Intel RealSense 3D vào việc điều khiển trình chiếu Microsoft Office Power Point bằng cử chỉ tay

Hand Tracking là một thuật ngữ trong lĩnh vực thị giác máy tính (Computer Vision) dùng để chỉ sự nhận diện, theo dõi di chuyển của bàn tay thông qua dữ liệu đầu vào từ thiết bị camera

Thư viện Intel RealSense SDK cung cấp các Interface cho phép người sử dụng truy xuất dữ liệu 3D của bàn tay từ Camera thông qua mô-đun Hand Tracking Do đó, tôi vận dụng thư viện để xây dựng chương trình nhận diện

tư thế và cử chỉ của tay, thông qua đó điều khiển máy tính mà không cần thao tác với chuột hay bàn phím

Chương trình gồm các bước chính sau:

- Bước 1: Thu thập dữ liệu, dữ liệu được lấy từ Camera dưới dạng từng khung ảnh (frame) gồm ảnh 2D và dữ liệu 3D

- Bước 2: Nhận diện các thành phần của tay, chương trình sử dụng các mô-đun Hand Tracking trong thư viện SDK hỗ trợ cùng với việc xử lý để nhận diện các thành phần bàn tay

- Bước 3: Nhận diện các cử điệu tay và ứng dụng điều khiển, chương trình thực hiện xử lý dữ liệu và gọi các phương thức điều khiển máy tính

Trang 17

Hình 1.6 – Minh họa các bước xử lý trong chương trình

1.7 Cấu trúc của báo cáo đồ án tốt ngiệp

Báo cáo này được trình bày thành 5 chương và một phụ lục:

- Chương II: Cơ sở lý thuyết

Phần này tập trung giới thiệu lý thuyết cơ bản được sử dụng trong quá trình tìm hiểu và thực hiện đồ án gồm các kiến thức như:

Trang 18

+ Ngôn ngữ lập trình C++ và phương pháp lập trình hướng đối tượng + Thư viện OpenCV

+ Kiến trúc và những Interface cốt lõi trong Intel RealSense SDK + Mô-đun Hand Tracking trong Intel RealSenseSDK

- Chương III Khảo sát bài toán

Phần này trình bày cách thức lưu trữ dữ liệu 3D, phương pháp xử lý dữ liệu để đưa ra các kết quả nhận diện bàn tay

+ Dữ liệu 3D: sự khác biệt so với dữ liệu 2D và tính cần thiết của dữ liệu 3D, dữ liệu về bàn tay trong – Hand Data trong Intel RealSense SDK

+ Phương pháp giải quyết: cách thức đóng gói dữ liệu và xử lý dữ liệu

để đưa ra các kết quả nhận diện về hình dạng và cử chỉ của bàn tay

- Chương IV Xây dựng mô-đun xử lý HandDetail

Phần này trình bày mô-đun xử lý chính trong chương trình và diễn giải các thành phần bên trong mô-đun

+ Các định nghĩa hằng số

+ Các phương thức xử lý

+ Interface HandDetail

- Chương V Kết luận và hướng phát triển

Phần này trình bày các kết quả đạt được, ưu khuyết điểm trong đồ án này, hướng phát triển trong tương lai của đề tài

Trang 19

CHƯƠNG II CỞ SỞ LÝ THUYẾT

2.1 Ngôn ngữ lập trình C++

C++ là một loại ngôn ngữ lập trình Đây là một dạng ngôn ngữ đa mẫu hình tự do có kiểu tĩnh và hỗ trợ lập trình thủ tục, dữ liệu trừu trượng, lập trình hướng đối tượng, và lập trình đa hình

Bjarne Stroustrup của Bell Labs đã phát triển C++ trong suốt thập niên

1980 như là một bản nâng cao của ngôn ngữ C Những bổ sung nâng cao bắt đầu với sự thêm vào của khái niệm lớp, tiếp theo đó là các khái niệm hàm

ảo, chồng toán tử, đa kế thừa, tiêu bản, và xử lý ngoại lệ Tiêu chuẩn của ngôn ngữ C++ đã được thông qua trong năm 1998 như là ISO/IEC 14882:1998 Phiên bản hiện đang lưu hành là phiên bản C++14, ISO/IEC 14882:2014 Hiện tại tiêu chuẩn mới nhất của ngôn ngữ C++ là C++14, phát hành ngày 15/12/2014

Từ thập niên 1990, C++ đã trở thành một trong những ngôn ngữ thương mại phổ biến nhất trong khi đó

C++ dẫn nhập thêm một số chức năng hướng đối tượng lên C, cung cấp khả năng lập trình hướng đối tượng (OOP) cho người sử dụng

OOP là kĩ thuật lập trình hỗ trợ công nghệ đối tượng, giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn Ngoài ra, nhiều người còn cho rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là các phương pháp trước đó

Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm giảm nhẹ các thao tác viết mã cho người lập trình, cho phép họ tạo ra các ứng dụng mà các yếu tố bên ngoài có thể tương tác với các chương trình đó giống như là tương tác với các đối tượng vật lý

Trang 20

Những đối tượng trong một ngôn ngữ OOP là các kết hợp giữa mã và dữ liệu mà chúng được nhìn nhận như là một đơn vị duy nhất Mỗi đối tượng có một tên riêng biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua tên của nó Như vậy, mỗi đối tượng có khả năng nhận vào các thông báo,

xử lý dữ liệu bên trong của nó, và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường

OOP bao gồm 4 tính chất sau:

- Tính trừu tượng (abstraction): là khả năng chương trình bỏ qua một số

khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết Mỗi đối tượng phục vụ như là một

"động tử" có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác Tính chất này thường được gọi là sự trừu tượng của dữ liệu Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi hành Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng

- Tính đóng gói (encapsulation): không cho phép người sử dụng các đối

tượng thay đổi trạng thái nội tại của một đối tượng Chỉ có các phương thức nội tại của đối tượng cho phép thay đổi trạng thái của nó Việc cho phép môi trường bên ngoài tác động lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã Đây là tính chất đảm bảo sự toàn vẹn của đối tượng

- Tính đa hình (polymorphism): thể hiện thông qua việc gửi các thông

điệp (message) Việc gửi các thông điệp này có thể so sánh như việc gọi các hàm bên trong của một đối tượng Các phương thức được dùng trả lời cho

Trang 21

một thông điệp sẽ tùy theo đối tượng mà thông điệp đó được gửi tới sẽ có phản ứng khác nhau Người lập trình có thể định nghĩa một đặc tính (chẳng hạn thông qua tên của các phương thức) cho một loạt các đối tượng gần nhau nhưng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của mỗi đối tượng sẽ tự động xảy ra tương ứng theo đặc tính của từng đối tượng mà không

bị nhầm lẫn

Ví dụ: khi định nghĩa hai đối tượng "hinh_vuong" và "hinh_tron" thì có một phương thức chung là "chu_vi" Khi gọi phương thức này thì nếu đối tượng là "hinh_vuong" nó sẽ tính theo công thức khác với khi đối tượng là

"hinh_tron"

- Tính kế thừa (inheritance): Đặc tính này cho phép một đối tượng có thể

có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại

2.2 Thư viện OpenCV

Thư viện OpenCV (Open Computer Vision library) được phát triển bởi Intel OpenCV là một thư viện mã nguồn mở phục vụ cho việc nghiên cứu hay phát triển về thị giác máy tính, tối ưu hóa xử lý các ứng dụng trong thời gian thực OpenCV Giúp cho việc xây dựng các ứng dụng xử lý ảnh, thị giác máy tính một cách nhanh hơn Thư viện có hơn 500 hàm khác nhau và hơn

2500 các thuật toán đã được tối ưu về hình ảnh, được chia làm nhiều phần phục vụ cho các mục đích khác nhau

OpenCV được viết bằng ngôn ngữ C và C++, được thiết kế để chạy trên nhiều nền tảng khác nhau nghĩa là nó có thể chạy trên hệ điều hành Windows, Linux, Mac, iOS

Trang 22

Hình 2.1 – Kiến trúc thư viện OpenCV

Tổ chức thư viện OpenCV bao gồm 4 mô-đun chính và 2 mô-đun mở rộng:

- CV & CVAUX: hỗ trợ các chức năng cấp cao như nhận dạng khuôn

mặt, hiệu chỉnh camera, xử lý ảnh, phân tích chuyển động Trong đó CV là mô-đun ổn định, còn CVAUX chứa các chức năng thử nghiệm để đưa vào phiên bản kế tiếp

- CxCore: tổ chức dữ liệu cơ sở, thực hiện các thuật toán (phép tính ma

trận, tính toán), hỗ trợ chuẩn dữ liệu XML, các thao tác vẽ chú thích

- HighGUI: giúp tạo nhanh giao diện đơn giản và hỗ trợ truy xuất

ảnh/phim từ file hoặc thiết bị ngoại vi

- Hai mô-đun còn lại là MLL và IPP ít được sử dụng hơn Mô-đun MLL

(Machine Learning Library) cung cấp khả năng tự học của thuật toán với chức

năng thống kê phân loại và các thuật toán phân nhóm IPP là mô-đun thương

mại cung cấp các đoạn mã mở rộng đã được tối ưu hóa cho phần cứng của Intel giúp tăng tốc các ứng dụng lớn

Trang 23

Các chức năng của OpenCV tập trung vào thu thập ảnh, xử lý ảnh và các thuật toán phân tích dữ liệu ảnh, bao gồm:

- Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và phim

- Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận, vector, chuỗi, xâu và cây

- Xử lý ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh đổi màu, phóng to thu nhỏ, và hiệu chỉnh histograms

- Xử lý cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không gian 3D, đối chiếu bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặt phẳng, đa giác, ellipse, đường thẳng

- Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và phân tích chuyển động

- Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượt để chỉnh thông số (nếu cần thiết các bạn có thể tự tạo thêm các phím điều khiển thông qua thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như wxWidgets)

- Chức năng vẽ, chú thích lên ảnh

Trang 24

2.3 Thư viện Intel RealSense SDK

2.3.1 Kiến trúc Intel RealSense SDK

Hình 2.2 Kiến trúc Intel RealSense SDK Intel RealSense SDK bao gồm từ nhiều lớp hợp thành, trong đó lớp nền tảng gồm các mô-đun thuật toán (Algorithm Module) và mô-đun vào ra (I/O Module) Các mô-đun vào ra thu thập dữ liệu từ thiết bị đầu vào và gửi dữ liệu đến thiết bị xuất Các mô-đun thuật toán gồm các thuật toán nhận biết và nhận diện các mẫu khác nhau như: nhận diện khuôn mặt, nhận diện hành vi, nhận biết giọng nói

Intel RealSense SDK cho phép ứng dụng (SDK Application) có thể truy cập các tính năng thông qua các Interface tiêu chuẩn (SDK Interfaces) mà không cần can thiệp đến các mô-đun cài đặt bên dưới (SDK Core Modules)

Trang 25

2.3.2 Các Interface cốt lõi trong Intel RealSense SDK

Hình 2.3 Hệ thống các Interface C++/C#

Interface Session quản lý các mô-đun vào ra, mô-đun thuật toán và tất cả các interface trong SDK Đối tượng của Session được khởi tạo qua phương thức CreateInstance(), từ đối tượng này ta có thể tạo đối tượng của các mô-đun khác

Ví dụ: PXCSession *session = PXCSession::CreateInstance();

Interface SenseManager quản lý các interface khác thực hiện các tác vụ như tạo video, bắt đầu, tạm dừng, kết thúc video thông qua các mô-đun vào ra (I/O Modules) Ngoài ra, interface SenseManager còn quản lý các mô-đun thuật toán như mô-đun khuôn mặt (FaceModule), mô-đun bàn tay (HandModule), …

Interface AudioSource quản lý các tác vụ liên quan đến âm thanh, giọng nói

Trang 26

2.4 Mô-đun Hand Tracking

Intel RealSense SDK cung cấp các thuật toán như: face tracking, hand tracking, nhận biết cử chỉ, nhận biết giọng nói, quét 3D và làm rõ chiều sâu Phần này trình bày các tính năng trong Mô-đun Hand Tracking như là theo dõi bàn tay, theo dõi các ngón tay, theo dõi 22 khớp xương trên bàn tay

Interface PXCHandModule được dùng để thiết lập dữ liệu đầu ra của các bàn tay

Interface PXCHandConfiguration được dùng để thiết lập các tùy chọn phương thức theo dõi khác nhau, kích hoạt cử chỉ, hiển thị thông báo và lựa chọn dữ liệu ra

Dữ liệu Hand Tracking

Ứng dụng có thể xác định và trả về một “hand data” cho cả hai bàn tay

thông qua interface PXCHandData

“Hand data” được sử dụng thông qua interface iHand, chúng cung cấp những dữ liệu như sau:

- Dữ liệu chính: hình ảnh và tọa độ thế giới thực đã được tính toán

- Những điểm giới hạn: theo dõi những điểm đặc biệt như là điểm gần nhất, tận cùng trái, phải, trên, dưới và điểm trung tâm nhằm tạo thành mô hình bàn tay

- Phần thân: xác định tay trái hoặc phải

Trang 27

- Hướng lòng bàn tay

- Khớp xương: vị trí mà hướng của bàn tay trong thế giới thực và hệ tọa

độ ảnh

- Bình thường hóa các khớp: tư thế của bàn tay không ảnh hướng đến kích

cỡ của tay, khoảng cách giữa các khớp (độ dài xương) là không thay đổi

- Dữ liệu ngón tay: độ cong và khoảng cách từ đầu ngon tay đến trọng tâm bàn tay

- Hình ảnh: mặt nạ bàn tay cho phép tách hình ảnh bàn tay với nền

- Độ mở của bàn tay: cho biết bàn tay đang xòe năm ngón hay đang nắm chặt

Gesture Tracking

Sử dụng interface PXCHandData để truy cập thông tin cử chỉ tay

Thông báo

Mô-đun này giúp ứng dụng nhận được các thông báo như:

- Nhận biết và theo dõi bàn tay: báo cho ứng dụng biết rằng bàn tay nhận diện được đang được theo dõi

- Xác định tay: cho ứng dụng biết rằng dữ liệu về bàn tay đã sẵn có

- Theo dõi viền: báo cho ứng dụng khi bạn tay được theo dõi đi ra ngoài vùng theo dõi

Chọn lọc điểm

Tính năng chọn lọc điểm cung cấp thông tin của các điểm ảnh trong phạm

vi chiều sâu cho phép Tính năng này không bao gồm tính năng theo dõi khớp xương hay theo dõi cử chỉ bàn tay

Chọn lọc viền

Tính năng chọn lọc viền cung cấp thông tin về viền của các điểm ảnh Tương tự như chọn lọc điểm, chọn lọc viền không bao gồm theo dỗi khớp xương hay theo dỗi cử chỉ

Trang 28

Tiện ích tối ưu dữ liệu

Tiện ích được sử dụng để giảm thiểu dữ liệu nhiễu, hỗ trợ các loại điểm

dữ liệu 1D, 2D, 3D với các thuật toán như: ổn định hóa, làm mượt hình dạng, làm mịn và làm mượt động tác

Trang 29

CHƯƠNG III KHẢO SÁT BÀI TOÁN

3.1 Cấu trúc dữ liệu

3.1.1 Dữ liệu 3D

Hình ảnh được thể hiện trên mặt phẳng 2 chiều nhưng tạo cảm giác như một không gian ba chiều cho người xem bởi màu sắc của các điểm ảnh Tuy nhiên, bản chất lưu trữ dữ liệu của hình ảnh đơn thuần gồm tọa độ điểm ảnh (x, y) và màu sắc Do đó, ta không thể xác định được khoảng cách tuyệt đối giữa các điểm trên thế giới thực thông qua dữ liệu 2D, nhưng dữ liệu 3D có khả năng thực hiện điều đó nhờ thông số chiều sâu tương ứng với từng điểm ảnh Đây cũng chính là sự khác biệt căn bản giữa dữ liệu 2D và 3D

Hình 3.1 – Sự khác biệt giữa dữ liệu 2D và 3D

Intel RealSense SDK cung cấp các cấu trúc dữ liệu để lưu trữ dữ liệu 3D thông qua các Interface như PXCdefs, PXCHandData:

PXCdefs – Interface định nghĩa lại các kiểu dữ liệu nguyên thủy thành

các kiểu dữ liệu mang tên có cấu trúc Tất cả các kiểu dữ liệu nguyên thủy đều có tiền tố PXC, ngoài ra còn có các cấu trúc dữ liệu phức tạp khác với

tiền tố PXC được định nghĩa bằng từ khóa struct

Trang 30

Ví dụ:

struct PXCPoint3DF32 {

pxcF32 x, y, z;

};

Cấu trúc PXCPoint3DF32 định nghĩa dữ liệu của một điểm trong không

gian ba chiều trên thế giới thực gồm các tọa độ x, y, z có kiểu dữ liệu là Float Trong đó, z là khoảng cách từ điểm đó đến camera trong thế giới thực

3.1.2 Dữ liệu tay – Hand Data

Dữ liệu tay được Intel RealSense SDK hỗ trợ thông qua Interface PXCHandData:

PXCHandData – Interface chứa tất cả dữ liệu đầu ra của các Mô-đun xử

lý Hand Tracking Mỗi đối tượng thuộc lớp PXCHandData lưu trữ thông tin của một Frame nhất định – dữ liệu thu thập, suy ra được từ một khung hình của Camera

, JOINT_CENTER /// The center of the palm

, JOINT_THUMB_BASE /// Thumb finger joint 1 (base)

, JOINT_THUMB_JT1 /// Thumb finger joint 2

, JOINT_THUMB_JT2 /// Thumb finger joint 3

, JOINT_THUMB_TIP /// Thumb finger joint 4 (fingertip)

, JOINT_INDEX_BASE /// Index finger joint 1 (base)

, JOINT_INDEX_JT1 /// Index finger joint 2

Trang 31

, JOINT_INDEX_JT2 /// Index finger joint 3

, JOINT_INDEX_TIP /// Index finger joint 4 (fingertip)

, JOINT_MIDDLE_BASE /// Middle finger joint 1 (base)

, JOINT_MIDDLE_JT1 /// Middle finger joint 2

, JOINT_MIDDLE_JT2 /// Middle finger joint 3

, JOINT_MIDDLE_TIP /// Middle finger joint 4 (fingertip)

, JOINT_RING_BASE /// Ring finger joint 1 (base)

, JOINT_RING_JT1 /// Ring finger joint 2

, JOINT_RING_JT2 /// Ring finger joint 3

, JOINT_RING_TIP /// Ring finger joint 4 (fingertip)

, JOINT_PINKY_BASE /// Pinky finger joint 1 (base)

, JOINT_PINKY_JT1 /// Pinky finger joint 2

, JOINT_PINKY_JT2 /// Pinky finger joint 3

, JOINT_PINKY_TIP /// Pinky finger joint 4 (fingertip)

};

enum JointType lưu trữ giá trị loại điểm khớp mà HandModule xác định

được như: cổ tay, trọng tâm bàn tay, các khớp trên ngón tay

HandData::JointType jointType = 0; giá trị 0 tương ứng với HandData::JOINT_WRIST – cho biết điểm này là cổ tay

HandData::JointType jointType = 2; giá trị 2 tương ứng với

HandData:: JOINT_THUMB_BASE – cho biết điểm này là khớp thứ nhất của ngón tay cái

Tương ứng từ 0 cho đến 21 là 22 điểm khớp khác nhau trên bàn tay

Trang 32

PXCPoint4DF32 localRotation; /* A quaternion representing the local 3D orientation of the joint, relative to its parent joint */

PXCPoint4DF32 globalOrientation; /* A quaternion representing the global 3D orientation, relative to the "world" y axis */

PXCPoint3DF32 speed; /* The speed of the joints in 3D world coordinates (X speed, Y speed, Z speed, in meters/second) */

};

Struct JointData lưu trữ dữ liệu một điểm khớp xương trên bàn tay, gồm

nhiều thông tin, tọa độ thuộc các hệ tọa độ khác nhau như: tọa độ trên thế giới thực – positionWorld, tọa độ trên ảnh 2D bao gồm cả độ sâu điểm ảnh – positionImage, …

Trang 33

3.2 Phương pháp giải quyết

Hình 3.2 – Minh họa các bước xử lý Xây dựng chương trình gồm các bước xử lý chính như:

- Đóng gói dữ liệu

- Xử lý dữ liệu, đưa ra các kết quả nhận diện về hình dạng, cử chỉ tay

- Dựa vào kết quả nhận diện, gọi các phương thức điều khiển đến máy tính (thiết bị)

3.2.1 Đóng gói dữ liệu

Các điểm khớp trên bàn tay thực chất là các dữ liệu rời rạc Vì vậy, ta cần cấu trúc hóa việc lưu trữ để phục vụ cho việc truyền nhận dữ liệu giữa các phương thức trong chương trình

Trang 34

Khuôn mẫu lớp Tree<> được định nghĩa như một thùng chứa dữ liệu mà

dữ liệu lưu trữ tùy thuộc vào tham số truyền vào khi khai báo Ngoài ra,

Tree<> còn có các phương thức thiết lập và truy xuất giá trị

Hình 3.3 – Khuôn mẫu lớp Tree

Hình 3.4 – Khuôn mẫu lớp Node

Trang 35

Mỗi Node<> trong Tree<PXCHandData::JointData> gồm dữ liệu JointData tại Node đó (m_nodeValue) và vector<Node<>> chứa các Node

con trực thuộc (m_nodes)

Tree<PXCHandData::JointData> hình thành nên cấu trúc dữ liệu dạng

cây lưu trữ dữ liệu các khớp trên một bàn tay

Hình 3.5 – Minh họa cấu trúc dữ liệu dạng cây

Trang 36

Hình 3.6 – Xây dựng cấu trúc cây Theo đoạn chương trình trên, dữ liệu điểm cổ tay bạn đầu được gán cho biến jointData Sau đó, chương trình khai báo biến rootDataNode cùng phương thức thiết lập mặc định và giá trị được gán vào rootDataNode là jointData (dữ liệu điểm cổ tay)

Vòng lặp for tuần tự truy xuất dữ liệu các điểm trên bàn tay dựa vào tham

số HandData::JointType Tương ứng với mỗi lần thực hiện vòng lặp, ta có được một nhánh trong cấu trúc cây như dưới đây:

rootDataNode  dataNode3  dataNode2  dataNode1  dataNode

Trang 37

Hình 3.7 – Minh họa nhánh trong cấu trúc cây

3.2.2 Xử lý dữ liệu

Mô-đun HandDetail có 2 tiên ích xử lý chính gồm: nhận diện hình dạng

và nhận diện cử chỉ của bàn tay

Nhận diện hình dạng tay

Mỗi điểm khớp trên bàn tay có tạo độ nhất định trong không gian 3D Từ

đó, ta có thể áp dụng công thức tính khoảng cách giữa 2 điểm trong không gian ba chiều

Trang 38

Hình 3.8 – Minh họa cách xác định tư thế ngón tay Khi bàn tay đang duỗi thẳng, độ dài đoạn A sẽ xấp xỉ giá trị B + C + D Khi ngón tay cái gập vào lòng bàn tay, giá trị A sẽ rất nhỏ so với B + C + D

Từ đó, ta đưa ra tỷ lệ tương đối A / B+C+D để xác định một ngón tay đang

duỗi thẳng

Nhận diện cử chỉ tay

Dữ liệu từ Camera được truy xuất liên tục và các biến lưu trữ được cập nhật liên tục Một điểm chuyển động hay tọa độ của chúng thay đổi theo thời gian, tức dữ liệu sẽ thay đổi trên từng khung hình (Frame)

Ngày đăng: 28/10/2016, 10:19

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w