(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông(Luận văn thạc sĩ) Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho Robot chơi cầu lông
TỔNG QUAN
Tổng quan về hướng nghiên cứu
Những năm gần đây lĩnh vực thị giác máy tính phát triển mạnh, có nhiều bài báo, công trình nghiên cứu về lĩnh vực này Một trong những nhánh nhỏ của lĩnh vực này là sử dụng camera 3D (là camera vừa thu ảnh màu và ảnh độ sâu) để phát hiện chuyển động của cơ thể người, xác định vị trí của đối tượng để các ứng dụng điều khiển, ứng dụng game tương tác 3D, xây dựng mô hình 3D và nhận dạng mô hình 3D …
Về công nghệ robot phát cầu lông đã có các công trình nghiên cứu như sau
1.1.1 Tình hình nghiên cứu ngoài nước
Năm 2002, tác giả Jonathan Taryoto đã đưa ra thiết kế về một máy phát cầu lông trong một bài báo “ Shuttlcock launcher and method for launching” Trong bài báo này tác giả sử dụng cơ cấu phát cầu sử dụng hai bánh đà để phát cầu là cơ cấu chính của thiết kế [1]
Trong bài báo “A Study on Projection Performance of Roller Type Badminton Machine and Its Optimization” [2] của nhóm Shinobu Sakai, Ryota Nobe and Koetsu Yamaza năm 2011 cũng đề cập về hiệu suất máy phát cầu lông sử dụng bánh đà và việc tối ưu sản phẩm khi sử dụng hai bánh đà Năm 2012, nhóm tác giả Caroline Cohen, Baptiste Darbois Texier, David Quere và Christophe Clanet đã xác định phương trình động lực học của cầu lông bài báo “Shuttlecock dynamics” [4] khi quả cầu lông được cung cấp một vận tốc ban đầu Một lần nữa, phương trình động lực học của trái cầu lông được nhóm bốn tác giả Caroline Cohen, Baptiste Darbois Texier, David thể hiện qua bài báo “The physics of badminton”[5] được công bố năm 2015
2 Để nhận diện được người, một giải thuật tracking từ camera qua bài báo được công bố năm 2014 “Recognizing Activities Using a Kinect Skeleton tracking and Hidden Markov Models” của nhóm tác giả Armando Nava, Leonardo Garrido and Ramon F Brena Bài báo xác định một số hoạt động của con người dựa vào các thay đổi cấu trúc bộ xương con người [6]
Cũng đựa vào thay đổi cấu trúc bộ xương cơ thể người mà nhóm tác giả PeiFu Tsou, Chao-Cheng Wu đã xác định các động tác trong thể dục nhịp điệu qua bài báo
“Estimation of Calories Consumption for Aerobics Using Kinect based Skeleton Tracking” [7] được công bố năm 2015
Michael Fleder, Sudeep Pillai, Jeremy Scott - MIT CSAIL, 6.870 “3D Object Tracking Using the Kinect” [8] đã nghiên cứu theo dõi đối tượng (tracking) với bài báo Theo dõi đối tượng trong môi trường 2D Đầu tiên mô tả giao diện người dùng và cho người dùng xem dữ liệu 3D Kinect, cho phép người dùng nhanh chóng phân đoạn đám mây điểm của đối tượng mục tiêu Tiếp theo, một thuật toán theo dõi 2D tính một biểu đồ màu của đám mây điểm phân đoạn và tìm kiếm nó trong dữ liệu hình ảnh trực tiếp để đoán vị trí của đối tượng khi nó di chuyển Cuối cùng, giả sử rằng bằng cách đoán này, điểm gần nhất (ICP) thuật toán lặp được sử dụng để ước tính sự biến đổi của đám mây điểm ban đầu của đối tượng trong đám mây điểm trực tiếp Cùng với các tối ưu hóa khác, nhóm tác giả trên kết luận rằng kết hợp theo dõi 2D và ICP cho phép thực hiện theo dõi đối tượng 3D thời gian thực, chính xác bằng Kinect [8]
Trước đây, theo dõi vị trí và tư thế của đối tượng trong không gian 3D nhìn chung bị giới hạn trong các hệ thống có chi phí cao đòi hỏi phải có thiết bị đo đạc cho đối tượng mục tiêu và môi trường của nó Khi Camera Kinect được phát triển chúng cung cấp dữ liệu ảnh độ sâu và dữ liệu ảnh màu RGB, có thể sử dụng dữ liệu này để theo dõi các đối tượng với chi phí thấp mà không cần trang bị thêm bất kỳ thiết bị đo đạc nào Việc sử dụng dữ liệu ảnh độ sâu giúp việc phát hiện đối tượng chính
3 xác hơn ảnh màu truyền thống vì dữ liệu độ sâu không bị ảnh hưởng bởi ánh sáng của môi trường
1.1.2 Tình hình nghiên cứu trong nước
Robot phát cầu lông tự động đã được nghiên cứu và chế tạo bởi tác giả Trần Nguyên Soái với đề tài luận văn Thạc sĩ: “THIẾT KẾ VÀ THI CÔNG ROBOT THÔNG MINH HUẤN LUYỆN CHƠI CẦU LÔNG SỬ DỤNG THUẬT TOÁN NHẬN DẠNG CHUYỂN ĐỘNG 3D” [3] đã được bảo vệ thành công tại trường Đại học Sư Phạm Kỹ Thuật TPHCM năm 2017 Robot phát cầu lông tự động là một dự án nghiên cứu được phân làm 2 đề tài:
1 Thiết kế và thi công Robot thông minh huấn luyện chơi cầu lông sử dụng thuật toán nhận dạng chuyển động 3D [3] (Đi sâu vào tính toán thiết kế cơ khí và áp dụng thuật toán nhận dạng chuyển động người – tập trung nghiên cứu phần cứng Robot)
2 Ứng dụng thuật toán nhận dạng chuyển động của người trong môi trường 3D để huấn luyện cho robot chơi cầu lông (Xây dựng thuật toán, viết chương trình để lấy dữ liệu liệu điều khiển robot – tập trung xây dựng phần mềm cho Robot)
Trong đề của tác giả Trần Nguyên Soái đã thiết kế các chi tiết robot bằng phần mềm Solidwork sau đó gia công và lắp ráp thành Robot phát cầu lông và áp dụng thuật toán nhận dạng chuyển động của người đề lấy dữ liệu tọa độ người chơi trên sân sau đó điều khiển các động cơ của robot qua kit Arduino [3] Đề tài của tác giả thuộc phần thứ 2 của dự án nghiên cứu Robot phát cầu lông tự động, tác giả xây dựng các lưu đồ giải thuật nhận dạng chuyển động người, viết chương trình phần mềm
Với ý tưởng từ các bài báo trên [6], [8] và sử dụng camera Kinect tác giả đã giải quyết bài toán xác định vị trí chuyển động của người trên sân cầu lông theo thời gian thực, với kết quả thu được tọa độ người chơi từ đó làm dữ liệu điều khiển cho
4 máy phát cầu lông phát cầu tới vị trí mong muốn giúp người chơi luyện tập hiệu quả hơn.
Tính cấp thiết của đề tài, ý nghĩa khoa học và thực tiễn của đề tài
Thể thao thành tích cao đòi hỏi phải trang bị các máy móc hiện đại giúp vận động viên luyện tập Bộ môn cầu lông cũng vậy, việc huấn luyện cho vận động viên luyện tập đánh và đập cầu, nếu sử dụng con người để phát cầu cho vận động viên thì điểm rơi của trái cầu thường không chính xác và không bao quát khắp mặt sân, việc chế tạo máy phát cầu lông tự động cho vận động viên luyện tập là cần thiết Ứng dụng thuật toán phát hiện người để xác định vị trí người chơi trên sân từ đó huấn luyện cho máy phát cầu đến những vị trí cách xa vận động viên nhất giúp vận động viên tập luyện tốt từ đó nâng cao thành tích khi thi đấu.
Mục đích nghiên cứu và đối tượng nghiên cứu của đề tài
Với tính cấp thiết và ý nghĩa thực tiễn trên của đề tài, người nghiên cứu đã lựa chọn đề tài “ỨNG DỤNG THUẬT TOÁN NHẬN DẠNG CHUYỂN ĐỘNG CỦA NGƯỜI TRONG MÔI TRƯỜNG 3D ĐỂ HUẤN LUYỆN CHO ROBOT CHƠI CẦU LÔNG” làm đề tài tốt nghiệp thạc sĩ chuyên ngành Kỹ Thuật Điện Tử của mình
Mục đích nghiên cứu là có thể xác định được vị trí tọa độ của người trên sân cầu lông từ đó làm dữ liệu điều khiển máy phát cầu lông phát cầu đến vị trí xa người chơi để nâng hiệu quả luyện tập
Với mục đích như trên người nghiên cứu xác định đối tượng nghiên cứu của mình là các thuật toán phát hiện đối tượng, nhận dạng chuyển động của người.
Nhiệm vụ và giới hạn của đề tài
Nhiệm vụ chính của đề tài là phát hiện được người chơi, xác định tọa độ người chơi trên sân cầu lông và đánh dấu những điểm di chuyển của vận động viên trên sân, tính toán tọa độ những điểm cầu rơi cách xa vận động viên nhất Hiển thị người
5 chơi (ảnh chiều sâu), hiển thị tọa độ người chơi, tọa độ cầu rơi, dấu vết người chơi đã di chuyển trên sân lên giao diện màn hình máy tính
Giới hạn của đề tài là chưa tracking được quỹ đạo của trái cầu lông.
Phương pháp nghiên cứu và nội dung nghiên cứu
Các phương pháp nghiên cứu cho đề tài bao gồm:
- Phương pháp tham khảo tài liệu: Thu thập thông tin kiến thức từ các bài báo khoa học, các sách báo và tài liệu trên internet
- Phương pháp thực nghiệm: dựa vào không gian thực tế, và phạm vi hoạt động của camera, lấy dữ liệu từ camera 3D, xây dựng lưu đồ, xử lý dữ liệu ảnh độ sâu thu được
- Phương pháp thử và sai: dựa vào lưu đồ tiến hành viết lệnh chạy thử và đánh giá kết quả, cứ lặp lại như vậy cho đến khi xác định được tọa độ người chơi, xác định vị trí cầu rơi, đánh dấu sự di chuyển của người chơi trên sân
- Tìm hiểu các kiến thức liên quan như kỹ thuật phân đoạn ảnh, thuật toán randomized decision forest, thuật toán Meanshift, Euclidean Distance, tìm điểm max trong chuỗi - Maximum String Length
- Thiết kế giao diện, xây dựng lưu đồ, viết chương trình và tối ưu chương trình, lấy dữ liệu từ camera 3D, cài đặt thông số, xử lý dữ liệu, hiển thị dữ liệu.
Kế hoạch thực hiện đề tài
Đề tài thực hiện từ tháng 2/2017 đến tháng 8/2017
Tuần 1-2 27/02-12/03 Tìm hiểu các chức năng camera 3D
Tuần 3-4 13/03-26/03 Tìm hiểu lý thuyết, các thuật toán liên quan
Tuần 5-6 27/03-09/04 Tìm hiểu thư viện và cách viết chương trình
OpenNI Tuần 7-8 10/04-23/04 Xây dựng lưu đồ tổng quan
Tuần 9-10 24/04-07/05 Viết chương trình tạo giao diện
Tuần 11-12 08/05-21/05 Viết chương trình hiển thị tọa độ, điểm di chuyển Tuần 13-14 22/05-04/06 Viết chương trình hiển thị tọa độ, điểm di chuyển Tuần 15-16 05/06-18/06 Viết chương trình hiển thị tọa độ, điểm di chuyển Tuần 17-18 19/06-02/07 Chỉnh sửa chương trình
Tuần 19-20 03/07-16/07 Tối ưu chương trình
Tuần 21-22 17/07-30/07 Tối ưu chương trình
CƠ SỞ LÝ THUYẾT
Tìm hiểu về camera 3D Kinect của Microsoft
2.1.1 Giới thiệu tổng quan về camera 3D Kinect của Microsoft
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm 2010 Từ đó đến nay Camera 3D là thiết bị ngày càng phổ biến cho phép các thiết bị kỹ thuật số có khả năng nhìn, cho phép tương tác tự nhiên giữa con người với các thiết bị và giữa các thiết bị và môi trường xung quanh Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game trên Xbox Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ thể người (body skeleton tracking) Ngoài mục đích phát triển chơi trò chơi tương tác, camera 3D còn được sử dụng cho mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ, bám theo người được dùng trong các ứng dụng điều khiển robot tự động và nhiều mục đích khác Hai nhà sản xuất camera 3D nổi tiếng hiện nay là Microsoft và Asus Asus ra đời dòng Asus Xtion Pro Live trong khi đó Microsoft ra mắt dòng camera Kinect Hai dòng sản phẩm này được đánh giá tương đương nhau về tính năng, đều sử dụng công nghệ Light Coding của PrimeSense Lý do chính cho sự thành công của sản phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng cung cấp các thông tin 3D với chất lượng chấp nhận được Hiện tại Microsoft đưa ra 2 phiên bản Kinect: một cho Xbox 360 và một cho PC (Kinect for PC) Microsoft ra mắt bộ công cụ phát triển phần mềm Kinect cho Windows
7 (SDK – Software Developer Kit) ngày 16 tháng 6 năm 2011 Bộ công cụ phát triển phần mềm này cho phép các nhà phát triển viết ứng dụng cho Kinect bằng
8 ngôn ngữ C#, C++/CLI, Visual Basic 2005 Hiện tại, phiên bản mới nhất của bộ phần mềm này là SDK 2.0 và hỗ trợ Windows 10
2.1.2 Các thành phần chính của camera 3D Kinect
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và 1 động cơ điều khiển góc nâng
Hình 2.1: Ảnh màu và ảnh độ sâu thu được từ camera Kinect
Hình 2.2: Mô hình cấu tạo camera Kinect
- Camera ảnh màu: là một camera RGB thông thường có độ phân giải 640x480, có tốc độ khung hình là 30 fps (30 khung hình trên 1s) Với ảnh màu (ảnh11 RGB) thu được, Kinect có thể bắt ảnh của người dùng trong ứng dụng phát hiện người, hệ thống an ninh và nhiều ứng dụng khác
- Cảm biến độ sâu: gồm có một thiết bị chiếu tia hồng ngoại (IR projector) kết hợp với cảm biến hồng ngoại, cho phép thu thập dữ liệu độ sâu Khoảng hoạt động của cảm biến độ sâu có thể được điều khiển bởi nhà sản xuất hoặc bên nhà phát triển thứ ba dựa vào yêu cầu của người dùng Có 2 phạm vi độ sâu mà cảm biến Kinect hỗ trợ:
+ Phạm vi mặc định: có sẵn trong cả hai bộ cảm biến Kinect cho Windows và cảm biến Kinect cho Xbox 360 Khoảng hoạt động ở phạm vi mặc đinh là từ 0,8 m đến 4m
+ Phạm vi gần: chỉ có trong cảm biến Kinect cho Windows Khoảng hoạt động ở phạm vi gần là từ 0,4 m đến 3m
Hình 2.3: Phạm vi độ sâu của cảm biến Kinect
- Dãy đa microphone: Thiết bị Kinect hỗ trợ tuyệt vời cho âm thanh với sự trợ giúp của một dãy microphone Dãy microphone này bao gồm 4 microphone hoạt động ở
16 bit với tốc độ lấy mẫu là 16KHz được đặt theo thứ tự (3 microphone được đặt ở
10 bên phải và 1 chiếc còn lại được đặt ở bên trái ở phía cuối của thiết bị) Dãy Microphone này được dùng trong các ứng dụng điều khiển bằng giọng nói Mục đích của dãy microphone không chỉ là thiết bị lấy âm thanh mà còn là xác hướng của âm thanh tới Ưu điểm chính của việc có một dãy microphone hơn việc chỉ có 1 microphone là việc bắt và nhận giọng nói được hỗ trợ tốt hơn với cơ chế giảm ồn, cắt tiếng vang và công nghệ hình thành chùm âm thanh Nó cho phép thiết bị Kinect có thể là microphone 2 chiều có thể xác định nguồn của âm và nhận diện ra nhiễu và tiếng vang của môi trường Video conferencing (hội nghị truyền hình: sử dụng camera để giao tiếp giữa các nước với nhau hoặc giữa công ty mẹ với các công ty thành viên trên khắp thế giới, hoặc giao tiếp giữa khách hàng và các nhà cung cấp ở các quốc gia, gặp nhiều khách hàng cùng một thời điểm,…) ở văn phòng hay ở nhà cũng là một ứng dụng cực kỳ nỗi bật của dãy microphone này kết hợp với tính năng ảnh màu (ảnh RGB)
- Động cơ điều khiển góc ngẩng: là động cơ DC khá nhỏ, nằm ở đế của cảm biến Kinect Nó có khả năng làm cho cảm biến Kinect hướng đầu lên trên cao và hạ xuống thấp lên tới 27 0 Với khả năng này sẽ giúp cho cảm biến có thể thu được hình ảnh tốt hơn rất nhiều so với khi không có bộ động cơ
2.1.3 Tính toán thông tin độ sâu
+ Nguyên lý các cảm biến độ sâu: Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu bằng công nghệ Light Coding của PrimeSense
Hình 2.4: Minh họa công nghệ Light Coding của PrimeSense
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một camera hồng ngoại để tính khoảng cách Việc tính toán này được thực hiện bằng chip PS1080 Soc của PrimeSen
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định Những đốm sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction gratings) Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu Bản chất của giải thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera và Projector
Hình 2.5: Nguyên lý tạo ảnh độ sâu của cảm biến Kinect
Giả sử rằng bộ phát hồng ngoại phát đi một tia sáng dọc theo đường màu xanh, tia sáng này sẽ được chụp lại dưới dạng một đốm sáng bởi bộ nhận hồng ngoại khi chạm vào bề mặt vật thể trong không gian Ta bắt đầu xét ba mặt phẳng ở ba khoảng cách khác nhau: Mặt phẳng gần Kinect, mặt phẳng ở xa Kinect và mặt phẳng tham chiếu ở giữa hai mặt phẳng trên Trong đó, với mặt phẳng tham chiếu ta có đầy đủ thông tin về khoảng cách của nó Ngoài ra còn có một mặt phẳng nữa được sử dụng là mặt phẳng ảnh của camera hồng ngoại (IR camera), là mặt phẳng hình chiếu của các điểm trong không gian thu về bởi camera hồng ngoại Ta xét trong ba trường hợp khi tia sáng màu xanh chạm vào ba điểm trên ba mặt phẳng lần lượt là A,B,C Ba điểm này được chiếu lên mặt phẳng ảnh tương ứng là A‟, B‟, C‟ Quan sát vị trí của A‟, B‟, C‟ ta rút ra một kết luận: Điểm A càng gần Kinect thì A‟ càng xa B‟ về phía bên phải và ngược lại điểm C càng xa Kinect thì C‟ càng xa bên B‟ về phía bên trái Do đó, khi chúng ta biết được hướng, điểm xuất phát của tia sáng ta dễ dàng tính toán được độ sâu của điểm ảnh Tương tự cách này cho các điểm ảnh còn lại ta tính được độ sâu của toàn bộ ảnh hay khoảng cách đến vật thể Nói thêm người ta có thể quy giá trị độ sâu này về giá trị mét Do một phần của ảnh
13 độ sâu là giá trị nội suy nên người ta không thể mong đợi Kinect cho mọi điểm ảnh giá trị chính xác được Phạm vi hoạt động tốt của Kinect là 1,2m- 3,5m
Hình 2.6: Nguyên tắc tính toán độ sâu ảnh của cảm biến Kinect
Thực hiện các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera và Projector các nhà phát triển đã tính được thông tin chiều sâu của ảnh
Hình 2.7: Các tỉ lệ hình học tính độ sâu ảnh của cảm biến Kinect
Phương pháp cụ thể mà PrimeSense đưa ra như sau:
Ban đầu Projector sẽ phát ra một mảng gồm rất nhiều các đốm hồng ngoại để chiếu vào đối tượng, các đốm sáng này đều có địa chỉ để phân biệt chúng với nhau nhầm tách chúng ra thành các tia sáng đơn lẻ Ta xét trường hợp một đốm hồng ngoại chiếu vào đối tượng, đốm hồng ngoại sẽ đi qua mặt phẳng tham chiếu (ta đã biết khoảng cách từ mặt phẳng này tới máy phát) ta sẽ được điểm x, sau khi qua x tia hồng ngoại sẽ chiếu vào đối tượng rồi phản xạ ngược trở lại IR Sensor, trước khi đến được IR Sensor tia hồng ngoại đó sẽ đi qua một mặt phẳng tham chiếu nữa (mặt phẳng tham chiếu thứ 2 này ta cũng đã biết khoảng cách của nó so với máy thu) nó sẽ cắt mặt phẳng tham chiếu thứ 2 tại x’ Lúc này ta sẽ có được các thông số của f, f’, x, x’, và khoảng cách giữa máy thu và máy phát, sau đó bằng các phép tính toán hình học phẳng cơ bản ta sẽ tính ra được khoảng cách thực sự của điểm ảnh so với tâm Camera
Hình 2.8: Quá trình thu ảnh chiều sâu
Sau khi thu về được hai điểm x và x’ thuật toán bên trong chip PS1080 sẽ tính toán sự chênh lệch giữa x và x’ từ đó suy ra chiều sâu của đối tượng X Công thức tính toán chiều sâu dựa vào:
Hình 2.9: Công thức tính toán chiều sâu
Trong đó: B là khoảng cách giữa Projector và IR Camera đã được biết trước, f là khoảng cách từ Camera đến mặt phẳng tham chiếu cũng đã được biết trước, z là khoảng cách từ đối tượng đến Camera
2.1.4 Các thư viện hỗ trợ
2.1.4.1 Thư viện hỗ trợ tương tác tự nhiên
Thuật toán rừng quyết định ngẫu nhiên - randomized decision forest
- Cây quyết định (Decision Tree) là một cây phân cấp có cấu trúc được dùng để phân lớp các đối tượng dựa vào dãy các luật (series of rules) Các thuộc tính của đối tượng (ngoại trừ thuộc tính phân lớp – Category attribute) có thể thuộc các kiểu dữ liệu khác nhau (kiểu nhị phân, kiểu danh sách, kiểu số thứ tự, kiểu giá trị định lượng) trong khi đó thuộc tính phân lớp phải có kiểu dữ liệu là nhị phân hoặc số thứ tự Tóm lại, cho dữ liệu về các đối tượng gồm các thuộc tính cùng với lớp (classes) của nó, cây quyết định sẽ sinh ra các luật để dự đoán lớp của các đối tượng chưa biết (unseen data)
Trong lĩnh vực học máy, cây quyết định là một kiểu mô hình dự báo (predictive model), nghĩa là một ánh xạ từ các quan sát về một sự vật/hiện tượng tới các kết luận về giá trị mục tiêu của sự vật/hiện tượng Mỗi một nút trong (internal node) tương ứng với một biến; đường nối giữa nó với nút con của nó thể hiện một giá trị cụ thể cho biến đó Mỗi nút lá đại diện cho giá trị dự đoán của biến mục tiêu, cho trước các giá trị của các biến được biểu diễn bởi đường đi từ nút gốc tới nút lá đó
Hình 2.12: Lưu đồ minh họa cây quyết định
2.2.2 Thuật toán rừng quyết định ngẫu nhiên - randomized decision forest
• Tập hợp nhiều cây quyết định taọ thành rừng cây quyết định
Hình 2.13: Lưu đồ minh họa rừng quyết định
Cho các cặp dữ liệu x1, x2, xn và l1, l2, ln cây phát triển bằng cách phân chia dữ liệu đầu vào hoặc không gian
+ fn: Hàm tách (Split function)
+ Pn: Phân bố xác suất lớp (class probability distribution)
Hình 2.14: Lưu đồ minh họa các nút tách (split nodes) và các nút lá (Leaf nodes)
• Chia Node đệ quy: Chia dữ liệu huấn luyện In đến n nút
• Thuật toán thử tất cả các cặp (fn, tn) và chọn các giá trị (fn, tn) tốt nhất để tối đa hoá được lợi ích thông tin thu được
Hình 2.15: Lưu đồ phân loại dữ liệu
|𝐼𝑛|𝐻(𝑃𝐼𝑟(𝐶)) Entropy H được tính như sau:
• Với x và y độc lập, chúng ta xác định: h(x,y) = h(x) + h(y)
• Số lượng thông tin trung bình là:
H: entropy (lượng thông tin trung bình) là lớn khi phân phối được đồng đều hơn Dựa vào thông số H ta chọn ngưỡng tn
Thực tế thuật toán skeleton trong thư viện Kinect sử dụng được Shotton et al, CVPR(2011) mô tả như sau:
Hình 2.16: Lưu đồ rừng quyết định trong mô tả của Shotton et al, CVPR(2011) x x
Thuật toán Learning decision forest điều khiển Kinect đòi hỏi CPU xử lý trong 24.000 giờ ( tương đương gần 3 năm), nhưng chỉ mất một ngày huấn luyện khi sử dụng hàng trăm máy tính cùng một lúc
"Để giảm thời gian huấn luyện xuống, chúng tôi thực hiện một phân phối Tập huấn luyện 3 cây cho độ sâu từ 20 đến 1 triệu hình ảnh mất khoảng một ngày trong một cụm lõi 1000 " [9]
“To keep the training times down we employ a distributed implementation Training
3 trees to depth 20 from 1 million images takes about a day on a 1000 core cluster.”
Theo Shotton et al, CVPR(2011) trình bày, để tạo ra bộ khung xương skeleton gồm
+ Bước 1: thu ảnh độ sâu, sau đó tiến hành phân nhóm các bộ phận trên cơ thể người, và đề xuất các điểm 3D
+ Bước 2: biến đổi hình ảnh các phần thân cơ thể người thành bộ xương
Hình 2.17: Qui trình tracking skeleton Shotton et al, CVPR(2011)
Hình 2.18: Chuyển đổi các vùng trên cơ thể thành các điểm và nối thành bộ khung Shotton et al, CVPR(2011)
Thuật toán Mean shift clusting
- Thuật toán chuyển đổi trung bình là một kỹ thuật phân cụm phi thông số mà không yêu cầu biết trước về số lượng các cụm, và không hạn chế hình dạng của các cụm
- Cho n điểm dữ liệu xi , i = 1, , n trên không gian d chiều R d , ước lượng mật độ hạt nhân đa biến thu được với hạt nhân K (x) và bán kính cửa sổ h là f(x) = 𝑓(𝑥) = 1
𝑛 𝑖=1 Đối với hạt nhân đối xứng vectơ, nó đủ để xác định thông tin của hạt nhân k(x) thỏa mãn
Trong đó 𝐶 𝑘𝑑 là hằng số chuẩn, đảm bảo K (x) là một số nguyên dương Các chế độ của hàm mật độ được đặt tại vị trí không của hàm dốc gradient ∇f (x) = 0 Độ dốc của bộ ước lượng mật độ (1) là
Trong đó 𝑔(𝑠) = −𝑘 (𝑠) ′ Bước đầu tiên cân đối hàm mật độ ước tính ở x với hạt nhân 𝐺(𝑥) = 𝐶 𝑔,𝑑 𝑔(‖𝑥‖ 2 ) và bước tiếp theo là sự dịch chuyển trung bình:
Các vector thay đổi trung bình luôn luôn hướng về hướng tăng tối đa mật độ Thủ tục chuyển đổi trung bình, thu được một cách liên tục
• Tính toán của vector chuyển đổi trung bình 𝒎 𝒉 (𝒙 𝒕 )
• Dịch cửa sổ 𝒙 𝒕+𝟏 = 𝒙 𝒕 + 𝒎 𝒉 (𝒙 𝒕 ) đảm bảo sẽ hội tụ về một điểm mà các gradient của hàm mật độ là zero Quá trình tìm kiếm chế độ chuyển đổi trung bình được minh họa trong Hình 1
Thuật toán mean shift clustering là một ứng dụng thực tế của thủ tục tìm kiếm chế độ phát hiện:
Hình 2.19: Tìm kiếm vùng mật độ điểm lớn trên dữ liệu thực
• Bắt đầu từ các điểm dữ liệu, chạy thủ tục chuyển đổi trung bình để tìm các điểm dừng của hàm mật độ,
• Xén những điểm này bằng cách duy trì chỉ số maxima cục bộ
Tập hợp của tất cả các vị trí hội tụ đến cùng một chế độ xác định lưu vực thu hút của chế độ đó
Các điểm nằm trong cùng một lưu vực thu hút được kết hợp với cùng một cụm
Hình 2.20: Mean shift vector và các vùng cửa sổ
Hình 2.21: Ý nghĩa của các công thức trong thuật toán mean shift
Khoảng cách Eulid
- Trong hệ tọa độ Descartes, nếu điểm có tọa độ p = (p1, p2, , pn) và q = (q1, q2, , qn) là hai điểm trong không gian Euclid n chiều, thì khoảng cách từ p đến q bằng:
Dạng chuẩn Euclid là khoảng cách của một điểm đến điểm gốc trong không gian Euclid:
Trong luận văn tác giả sử dụng công thức khoảng cách Eulid trong không gian 3D để tính khoảng cách từ vị trí người chơi đến các điểm tọa độ cầu rơi từ đó chọn những điểm có khoảng cách xa nhất để điều khiển máy bắn cầu
Khi xét trong hệ tọa độ Descartes vuông góc 3 chiều Oxyz thì ta có khoảng cách giữa hai điểm 𝐴(𝑥 𝑎 , 𝑦 𝑎 , 𝑧 𝑎 ) và 𝐵(𝑥 𝑏 , 𝑦 𝑏 , 𝑧 𝑏 ) như hình 2.22 được tính theo công thức (2.12) [7] như sau:
Hình 2.22: Hệ toạ độ Descartes Oxyz với hai điểm A, B
PHÁT HIỆN CHUYỂN ĐỘNG CƠ THỂ NGƯỜI TRONG KHÔNG
Sơ đồ khối
Hình 3.1: Sơ đồ khối quá trình nhận dạng cơ thể người và cài đặt cho máy phát cầu lông
- Khối thu thập dữ liệu từ camera
Khối này sẽ có nhiệm vụ tính toán và lấy dữ liệu từ camera 3D Asus Xtion Pro Live từ đó xây dựng bản đồ chiều sâu 3D có 3 thông số là tọa độ X, tọa độ Y và Tọa độ z, trong đó X là tọa độ theo khung hình chiều ngang 320 pixel, Y là tọa độ theo khung hình chiều dọc 240 pixel, và Z là khoảng cách từ vật thể đến camera Từ đó ta có không gian 3D của đối tượng và đi thực
Khối thu thập hình ảnh từ camera
Khối nhận dạng tư thế con người
Khối nhận dạng con người
Khối nhận dạng tọa độ người trên sân
Khối cài đặt cho máy phát cầu lông Khối hiển thị
31 hiện các thuật toán học máy để nhận biết được đâu là cơ thể người trong không gian đó
Nếu trong khối này dữ liệu lấy được đáng tin cậy như khoảng cách tối thiểu từ đối tượng đến camera hay điều kiện ánh sáng và các vật thể xung quanh đối tượng không che camera thì quá trình học máy và nhận dạng đối tượng sẽ chính xác và đem lại hiệu quả cao nhất
- Khối nhận dạng tư thế con người
Khối này có chức năng nhận dạng vật đang chuyển động trước camera 3D, nếu đối tượng chuyện chuyển động thì khối này sẽ nhận biết đó có hay không bằng các thuật toán phân ngưỡng đối tượng, nếu có thì bắt đầu cho khối tiếp theo là nhận dạng cơ thể người và gắn bộ xương vào đó
- Khối nhận dạng con người
Khối này có chức năng nhận dạng cơ thể người sau khối nhận dạng tư thế, khối này đem so phân ngưỡng chuyển động đấy với bộ tập mẫu về các tư thế người đã được huấn luyện từ Randonized decision forrest từ đó xác định được các bộ phận trên cơ thể con người từ đó áp dụng thuật toán Mean shift để xây dựng bộ xương Skeleton tracking trên cơ thể con người đó
- Khối nhận dạng tọa độ người trên sân cầu lông
Sau khi có tracking được cơ thể người và xây dựng bộ xương trong không gian 3D thì tiến hành lấy tọa độ cơ thể khớp trọng tâm cơ thể người, đó là khớp hông, từ khớp hông ta có được 3 thông số trong không gian 3D là tọa độ X, Y và Z Để biết được người chơi đang ở vị trí nào trên sân thì ta phải chuyển đổi tọa độ về cùng một đơn vị với sân cầu lông một cách tuyến tính, từ đó áp mới có thể biết được vị trí của người chơi trên sân thực tế
- Khối cài đặt cho máy phát cầu lông
Khối này có tác dụng xác định vị trí mà máy phát sẽ phát cầu đến, bằng cách tính toán vị trí người chơi đang đứng so với các tọa độ cầu đã biết trước bằng các phép tính toán khoảng cách bằng tọa độ từ đó xây dựng thuật toán tìm các tọa độ có khoảng cách xa nhất đến người chơi như công thức toán học
Euclidean Distance, thuật toán tìm giá trị lớn nhất trong chuỗi và lấy ngẫu nhiên một giá trị trong chuỗi giá trị các khoảng cách xa nhất đến đối tượng từ đó phát lệnh xoay các góc và điều chỉnh tốc độ cho máy phát cầu lông
Khối có chức năng hiển thị hình ảnh chiều sâu, phát hiện người chơi trong không gian 3D, tracking bộ xương và hiển thị vị trí người sân cầu lông một cách trực quan.
Khối lấy dữ liệu hình ảnh 3D
Khối lấy hình ành Depth map bao gồm các bước sau
- Cài đặt thư viện Open NI, là thư viện giao tiếp giữa thiết bị dựa trên công nghệ camera 3D của hãng Prime Sense với các ứng dụng dựa trên mã nguồn mở, cho phép lấy dữ liệu từ các thiết bị ngoại vi như camera, microphone… đặc biệt là camera 3D Thư viện hỗ trợ đầy đủ các source để lấy bảng đồ Depth map từ đó để xây dựng được các ứng dụng mà có sử dụng đến không gian 3D
Hình 3.2: Các ứng dụng và khả năng giao tiếp của thư viện Open NI
- Cài đặt bộ phần mềm visual studio để sử dụng thư viện Open NI và viết phần mềm giao tiếp với máy phát cầu lông
Hình 3.3: Phầm mềm visual studio của Microsoft
- Lưu đồ thuật toán lấy hình ảnh 3D
Lưu đồ thuật toán mô tả quy trình lấy dữ liệu từ camera 3D Asus Xtion pro live
Việc lấy hình ảnh chiều sâu đã được nhà sản xuất tích hợp thư viện Open NI, lưu đồ thuật toán bên dưới sẽ chỉ ra quy trình lấy dữ liệu cũng như cách mà tác giả thực hiện để lấy hình ảnh chiều sâu
Hình 3.4: Lưu đồ lấy hình ảnh chiều sâu Đầu tiên ta thiết lập kết nối camera Asus Xtion pro live với máy tính (máy tính đã cài đặt Visual studio và thư viện Open NI) để sử dụng camera thì phải thiết lập cho camera bằng cách khai báo file config cho camera do hãng Prime Sense cung cấp Nếu không được khai báo thì camera sẽ không cho phép lấy dữ liệu và kết nối với thiết bị của hãng
Thiết lập camera 3D Asus no
Gọi Histagram của hình ảnh chiều sâu
Gọi DepthMetadata là bộ lấy dữ liệu từ camera
Gọi biểu đồ thể hiện số lượng điểm ảnh và mức độ sáng tối của ảnh chiều sâu depth map
Tiếp theo là gọi tượng Depthmetadata trong Open NI để lấy hình ảnh chiều sâu của từ camera 3D, tại đây các thuật toán tính toán hình ảnh chiều sâu và lấy hình ảnh chiều sâu về phép toán hình thái học để tạo ra hình ảnh 3D như đã giới thiệu ở chương 2 sẽ được chip PS1080 (PS1080 là chip vi điều khiển mà hãng Prime Sense dùng để tính toán và lập trình cho camera ) của hãng Prime Sense tính toán và thực hiện Bộ thư viện hỗ trợ Open NI sẽ hỗ trợ đối tượng để giao tiếp và lấy dữ liệu từ chip PS1080 để đưa lên máy tính xử lý
Sau khi có được thông tin hình ảnh chiều sâu, thì tiến hành cho hiển thị trên màn hình máy tính một cách trực quang để dể dàng xử lý và hiệu chỉnh
Hình 3.5: Hình ảnh chiều sâu của cầu thang
Hình ảnh chiều sâu của cầu thang đặc trưng được phân đoạn màu vàng trong hình trên cho thấy việc phân đoạn hình ảnh chiều sâu rất tốt có thể dể dàng phân biệt được cầu thang trong không gian trên
Hình 3.6: Hình ảnh chiều sâu trong không gian đó có cánh tay
Khối nhận dạng tư thế người
Khi một đối tượng trước camera sẽ được phân ngưỡng riêng cho đối tượng đó, trong trường hợp này là con người, khi con người chuyển động trong không gian 3D nó sẽ được phân ngưỡng, việc phân ngưỡng này sẽ có được một khung đối tượng gần
37 giống với con người, khung đối tượng sẽ được so sánh với tập mẫu đã được dạy bằng Randomized decision forrest, để tìm ra các bộ phận cơ thể người
Hình 3.7: Phân đoạn con người
Khối nhận dạng và tracking con người
Để bắt được con người và lấy tọa độ người trong không gian hình ảnh Depth map thì hình ảnh sau khi phân đoạn người phải được so sánh với hàng triệu tập mẫu đã được trainning trước đó và các mẫu đó đã được biết trước các khớp
Hình 3.8: Một trong các mẫu người để training đã biết trước các khớp
Lưu đồ thuật toán bắt cơ thể người trong hình ảnh chiều sâu được mô tả như sau:
Hình 3.9: Lưu đồ giải thuật nhận dạng cơ thể và tracking bộ xương
Ban đầu sau khi phân đoạn người chơi, thì sau đó hình ảnh phân đoạn đó sẽ được đưa vào so sánh với tập dữ liệu mẫu training bằng Ramdomized decision forrest để nhận biết được các bộ phận cơ thể người, sau đó các bộ phận đó sẽ dùng thuật toán Meanshift để lấy tọa độ các khớp trên cơ thể người như một bộ xương và sau đó kết thúc quá trình nhận dạng tọa độ người trong không gian.
Khối nhận dạng tọa độ người trên sân
Khối này sẽ có nhiệm vụ tìm được vị trí người chơi trên sân bằng cách chuyển các tọa độ trong bản đồ chiều sâu về cùng thứ nguyên với kích thước trên sân cầu lông là mét
40 Để tuyến tính tọa độ người trong bản đồ chiều sâu và người trên sân cầu lông thì phải quy định kích thước trên sân cầu lông từ trước Do camera 3D đang sử dụng có khoảng cách phát hiện bị giới hạn nên một bên sân cầu lông được quy định có kích thước rộng 5m và dài 6m, trong khi đó bản đồ chiều sâu có kích thước rộng từ 0 đến
320 pixcel và chiều dài là khoảng cách từ đối tượng đến camera, khoảng cách này là khoảng cách theo đường thẳng vuông góc với lưới, không phải là khoảng cách trực tiếp đến camera theo đường chim bay
Hình 3.10: Tọa độ và khoảng cách quy định sân cầu lông
Hình 3.11: Lưu đồ xác định tọa độ người chơi trên sân
Gọi x là tọa độ theo phương ngang của người chơi theo thứ nguyên là mét và N là tọa độ người chơi theo phương ngang theo thứ nguyên pixcel thì: x= (N*5)/320
Gọi y là tọa độ người chơi theo phương dọc theo chiều dài sân và Y là tọa độ lấy được từ bộ xương trong bản đồ chiều sâu thì:
Khối cài đặt cho máy phát cầu lông
Tuyến tính đơn vị pixcel bằng đơn vị mét thực tế trên sân Đưa ra tọa độ người chơi trên sân
Lấy tọa độ thực tế từ camera đơn vị pixcel
43 Để máy phát cầu lông nhận biết được sẽ phát cầu đến vị trí nào thì máy phát cầu phải biết được người chơi đang đứng ở vị trí tọa độ thực tế nào trên sân, phần này đã do khối nhận dạng người chơi trên sân thực hiện Tiếp theo sau khối cài đặt cho máy phát cầu lông sẽ tính toán các khoảng cách từ các tọa độ cầu rơi cho trước đến vị trí tọa độ người chơi trên sân từ các khoảng cách đó tìm ra các tọa độ có khoảng cách xa nhất đến người chơi và phát cầu một điểm ngẫu nhiên xa nhất nào đó
Hình 3.12: Lưu đồ giải thuật cài đặt cho máy phát cầu lông
Dùng Ecidean Distance tính toán khoảng cách từ các tọa độ cầu rơi đến người chơi
Lấy 15 khoảng cách xa nhất
Chọn ngẫu nhiên một điểm
Khối hiển thị
Khối hiển thị với mục đích là hiển thị vị trí người chơi trên sân để giúp cho việc phân tích trở nên trực quan sinh động hơn
Hình 3.13: Hình ảnh chiều sâu và tọa độ người chơi trên sân vị trí 1
Hình 3.14: Hình ảnh chiều sâu và tọa độ người chơi trên sân vị trí 2
CHƯƠNG TRÌNH VÀ HƯỚNG DẪN SỬ DỤNG
Giao diện và chức năng chương trình
Giao diện chương trình được thiết kế gồm 4 phần chính:
- Phần thứ nhất là không gian chiều sâu, nơi hiển thị hình ảnh chiều sâu và người chơi trên sân
- Phần thứ hai là hiển thị vị trí người chơi trên sân, hình ảnh quá trình di chuyển của người chơi trên sân sẽ được đánh dấu màu đỏ
- Phần thứ ba là giới thiệu thông tin và đề tài
- Phần thứ tư là phần khiển là phần có các đối tượng điều khiển để bắt đầu quá trình chạy dừng và đưa dữ liệu từ máy tính xuống máy phát cầu lông
Hình 4.1: Giao diện thiết kế tổng quan Để tìm hiểu kỹ hơn về cách lấy tọa độ cũng như cách phân bố trên giao diện đồ họa ta cùng đi vào chi tiết từng phần như sau
Khung ảnh chiều sâu trong hình có tọa độ 320x240 pixcel trong đó 320 là chiều rộng tương đương với trục x, 240 là chiều cao tương đương với trục y, và z là khoảng cách từ đối tượng đến camera
Hình 4.2: Tọa độ trong khung hình chiều sâu
Khung sân cầu lông được tuyến tính theo kích thước thực tế trong đề tài tác giả chọn kích thước là 5 mét rộng và 6 mét dài để cho phù hợp với vùng hoạt động của camera 3D, trong sân sẽ hiển thị vị trí của người chơi và vị trí các điểm cầu rơi
Do kích thước là tương đối nên vị trí hiển thị cũng là tương đối theo kích thước thực tế của sân cầu lông
Hình 4.3: Sân cầu lông tuyến tính theo kích thước thực tế
Khi người chơi di chuyển trên sân, vị trí người chơi sẽ được đánh dấu bằng những nét màu đỏ như Hình 4.4
Hình 4.4: Đường màu đỏ vẽ lại các vị trí người chơi đã di chuyển trên sân
- Các đối tượng điều khiển và hiển thị
Các đối tượng điều khiển dùng để điều khiển
Hình 4.5: Đối tượng điều khiển và hiển thị
Các tọa độ người chơi và tọa độ cầu rơi được hiển thị trên bản trên
Cách sử dụng chương trình
Khi nhấn Nút nhấn START thì quá trình lấy dữ liệu tọa độ người chơi trên sân bắt đầu và khi đó máy tính sẽ tính toán tọa độ cầu rơi rồi sau đó gửi dữ liệu như góc xoay trái, xoay phải, tốc độ xuống máy phát cầu Khi nhấn Nút nhấn STOP thì tất cả các quá trình sẽ dừng lại