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

Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học

64 901 1

Đ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

Tiêu đề Điều Khiển Robot Bằng Phương Pháp Xác Định Số Lượng Ngón Tay
Trường học Trường Đại học Lạc Hồng
Chuyên ngành Khoa học Máy tính và Công nghệ Thông tin
Thể loại Nghiên cứu Khoa học
Năm xuất bản 2023
Thành phố Bình Dương
Định dạng
Số trang 64
Dung lượng 2,36 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nghành xử lý ảnh đã phát triển hơn những gì mong đợi với những ứng dụng trong thực tế về tất cả các lĩnh vực như: ứng dụng xử lý ảnh vào giám sát giao thông, điều khiển máy móc công nghi

Trang 1

PHẦN MỞ ĐẦU

1 Lý do chọn đề tài

Xử lý ảnh là một trong những ngành khoa học đã đem lại cho con người những bước tiến vượt bậc mang tính cách mạng, nó đã đưa con người tiến sang một kỉ nguyên mới Một vài năm trở lại đây công nghệ thông tin cùng với sự phát triển của nó đã kéo theo sự phát triển của hàng loạt các ngành khoa học trong nhiều lĩnh vực khác nhau như sinh học, kinh tế, viễn thông, quân sự, giải trí… có những bước tiến nhanh hơn so với đúng quy trình mà đáng ra phải trải qua Với sự phát triển ngày càng hoàn thiện của công nghệ phần cứng, công nghệ phần mềm cũng đang có những bước tiến quan trọng đóng góp một phần không nhỏ cho sự phát triển của xã hội loài người đặc biệt là lĩnh vực xử lý ảnh

Nghành xử lý ảnh cũng đã đồng hành cùng trường đại học Lạc Hồng trong những cuộc thi Robocon, góp phần thêm những chiến thắng cho những đội Robocon Lạc Hồng

Nghành xử lý ảnh đã phát triển hơn những gì mong đợi với những ứng dụng trong thực tế về tất cả các lĩnh vực như: ứng dụng xử lý ảnh vào giám sát giao thông, điều khiển máy móc công nghiệp, ngăn chặn website cấm bằng phương pháp phát hiện màu da, máy chuẩn đoán bệnh trong y học, thẻ gửi xe thông minh, chơi game tương tác ….Tất cả đó là xử lý ảnh

Xử lý ảnh ra đời mục tiêu đầu tiên là dành cho robot, với mong muốn robot

sẽ làm giảm bớt công việc lao động chân tay cho con người và làm thay con người những công việc nguy hiểm Để thực hiện điều đó, điều khiển robot từ xa là một trong những yêu cầu đòi hỏi độ chính xác cao

Với mong muốn tìm hiểu nhiều hơn nữa về nghành xử lý ảnh và mong muốn đóng góp thêm một phương pháp điều khiển robot cho nghành xử lý ảnh

Nhóm em đã mạnh dạn đề xuất đề tài: “Điều khiển robot bằng phương pháp xác định số lượng ngón tay”

Trang 2

2 Lịch sử nghiên cứu

2.1 Trên thế giới

Trong quá trình nghiên cứu nhóm em đã tham khảo một vài chương trình demo và tham khảo một số bài báo của nước ngoài

Bài báo “A fast algorithm for vision-based hand gesture recognition for robot

control ”(Asanterabi Malima, Erol Özgür, and Müjdat Çetin Faculty of Engineering and Natural Sciences, Sabancı University, Tuzla, İstanbul, Turkey) đã nêu ra phương

pháp đếm số lượng ngón tay bằng phương pháp nhận dạng màu da Phương pháp đã đưa ra được cách nhận dạng ngón tay chính xác nhưng trong môi trường lý tưởng và phải trải qua giai đoạn học dữ liệu Nhược điểm chính của phương pháp này là phụ thuộc quá nhiều vào môi trường ánh sáng Một khi CSDL học được và môi trường thực nghiệm có độ chênh lệch lớn thì kết quả số lượng ngón tay không chính xác

Bài báo “Robust Hand Gesture Recognition with Kinect Sensor” và bài báo

“Zhou Ren Jingjing Meng Junsong Yua, Nanyang Technological University, 50 Nanyang Avenue, Singapore 639798” đã đưa ra phương pháp nhận dạng cử chỉ bàn

tay bằng Kinect Sensor Nhóm tác giả đã xử lý rất tốt việc nhận dạng bàn tay và những cử chỉ của nó cũng như đếm được số lượng ngón tay, nhưng mức độ chính xác còn chưa cao Đề tài của nhóm tác giả này chỉ nghiên cứu chưa được ứng dụng thực tế

Bài báo “Hand gesture recognition using Kinect Heng Du, TszHang To”, đã

nêu ra phương pháp nhận dạng bàn tay bằng Kinect Sensor Tổng thể quy trình công việc như sau:

Hình 1: Tổng thể quy trình công việc

Trang 3

Hình 2: Năm bước trích xuất bàn tay

Đã có những đề tài liên quan tới xử lý ảnh, như các đề tài điều khiển các ứng dụng window, điều khiển robot bằng phương pháp nhận dạng cử chỉ bàn tay….Đa số các phương pháp nhận dạng bằng màu da, nhưng chưa có đề tài điều khiển robot bằng phương pháp nhận dạng số lượng ngón tay bằng Kinect Sensor

2.2 Trong nước

Cũng có một số đề tài nhận dạng khuôn mặt nhưng dùng mạng nơron Chưa

có đề tài nào nghiên cứu về đếm số lượng ngón tay và ứng dụng vào việc điều khiển robot

2.3 Trong trường đại học Lạc Hồng

Cùng với sự phát triển nghành xử lý ảnh, trường đại học Lạc Hồng đã có những đề tài có tính áp dụng thực tế: đề tài phát hiện biển số xe, xác định vật cản

dành cho người mù, đề tài điều khiển chuột….Nhưng đề tài “Điều khiển robot bằng

phương pháp hiện số lượng ngón tay” chưa được thực hiện tại trường Đại học Lạc

Hồng Hi vọng đề tài sẽ góp phần mới mẻ vào lịch sử nghiên cứu cho xử lý ảnh của

trường

3 Mục tiêu nghiên cứu

Đề tài được thực hiện với mục tiêu xây dựng chương trình cho phép điều khiển di chuyển của robot bằng phương pháp đếm số lượng ngón tay theo các chỉ thị sau:

+ Một ngón tay: Robot tiến

Trang 4

+ Hai ngón tay: Robot lùi

+ Ba ngón tay: Robot rẽ trái

+ Bốn ngón tay: Robot rẽ phải

+ Năm ngón tay: Robot dừng

+ Ngoài ra còn có các tín hiệu mở và ngưng truyền tín hiệu (ngừng phát sóng) Điều khiển robot chỉ qua tâm tới số lượng ngón tay mà không cần qua tâm tới vị trí của những ngón tay:

(a) Hai ngón tay

(b) Ba ngón tay

(c) Bốn ngón tay

Hình 3: Những vị trí ngón tay khác nhau nhưng cho cùng kết quả

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

+ Đối tượng nghiên cứu: Phương pháp đếm số lượng ngón tay, phương pháp điều

khiển robot, thư viện OpenCV, CL NUI Platform, thiết bị Kinect Sensor, giao tiếp cổng RS232 điều khiển Robot bằng sóng RF

Trang 5

+ Phạm vi nghiên cứu: điều khiển robot bằng phương pháp đếm số lượng ngón

tay

5 Phương pháp nghiên cứu

+ Tìm hiều các phương pháp điều khiển robot trong và ngoài nước, đưa ra những

ưu và nhược điểm của các phương pháp đó

+ Tìm hiều kỹ về đặc trưng và các thông số màu da con người

+ Nghiên cứu các phương pháp nhận dạng bàn tay

+ Tham khảo các bài báo nghiên cứu về điều khiển vật thể bằng phương pháp nhận dạng cử chỉ bàn tay

+ Phát triển những tính năng và những ứng dụng nổi bật của chương trình

+ Tham khảo những đề tài đã được thực hiện về Kinect

6 Những đóng góp mới của đề tài và những vấn đề mà đề tài chưa làm được

+ Đề tài đã xây dựng thành công phương pháp điều khiển robot bằng nhận dạng số lượng ngón tay, góp thêm một phương pháp điều khiển robot nữa cho việc điều khiển robocon Lạc Hồng và cho ngành xử lý ảnh

+ Ngoài ra đề tài cũng đã xây dựng thêm được những ứng dụng mở rộng về vấn đề điều khiển: điều khiển Powerpoint bằng số lượng các ngón tay, điều khiển chương trình nghe nhạc Window Media Player và chương trình KM Player bằng

số lượng ngón tay

+ Qua quá trình thực nghiệm chương trình có thể nhận dạng bàn tay chính xác và đếm đúng số lượng ngón tay khoảng 98% trong mọi môi trường

+ Vấn đề mà nhóm chưa thực hiện được là kết hợp số lượng ngón tay với các cử

chỉ khác của bàn tay để có thể điều khiển các chương trình, máy móc phức tạp

Kết cấu của đề tài

Luận văn được chia thành 3 phần: Phần mở đầu, phần nội dung và phần kết luận

Phần mở đầu:

Nêu lý do chọn đề tài, tổng quan tình hình phát triển, mục tiêu nghiên cứu đề tài, đối tượng, phạm vi, phương pháp nghiên cứu cũng như những đóng góp mới của đề

Trang 6

tài Bên cạnh đó cũng chỉ ra mặt hạn chế mà đề tài chưa thực hiện được để giúp mọi người có cái nhìn rõ hơn

Phần nội dung: Gồm 3 chương

Chương 1: Giới thiệu tổng quan

Giới thiệu tổng quan về lịch sử, cấu trúc của thư viện mã nguồn mở OpenCV

Giới thiệu đặc điểm, cấu tạo, và cách thức sử dụng Camera Kinect

Giới thiệu về thư viện CL-NUI Platform

Giới thiệu về những ứng dụng của OpenCV, Kinect vào thực tế

Giới thiệu về cổng RS232, sóng RF

Chương 2: Đếm số lượng ngón tay bằng phương pháp phát hiện màu da

Trong chương này chương trình sẽ trình bày những đặc trưng của màu da, phương pháp phát hiện bàn tay, tách bàn tay ra khỏi ảnh, đếm số lượng ngón tay bằng phương pháp phát hiện màu da Đếm số lượng ngón tay sử dụng camera Kinect và

xử lý ảnh độ sâu

Chương 3: Xây dựng chương trình

Nêu những thuật toán, các bước thực hiện chương trình

Nêu cách xây dựng chương trình và các chức năng mà chương trình hỗ trợ

Các ứng dụng mở rộng đã được thực hiện và các ứng dụng có thể mở rộng của chương trình

Phần kết luận: Đánh giá chương trình

Đưa ra những kết luận và hướng phát triển về chương trình đã xây dựng

Trang 7

CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN 1.1 Thư viện mã nguồn mở OpenCV

OpenCV (Open Source Computer Vision) là một mã nguồn mở của Intel viết cho ngành xử lý ảnh OpenCV gồm các hàm được xây dựng cho việc xử lý thị giác máy thời gian thực (Real time computer vision) Các thuật toán xử lý ảnh thông thường lẫn cao cấp đều được tối ưu hóa bởi các nhà phát triển thư viện thành các hàm đơn giản cho người dùng dễ dàng sử dụng OpenCV có thể chạy trên nền tảng Linux, Windows, Mac

OS X và hỗ trợ rất nhiều ngôn ngữ như C/C++, Python, Ruby, Java

Ngoài ra Intel còn cung cấp thêm một thư viện Intel’s Intergrated Performance Primitives (IPP) nhằm mục đích tự động tối ưu hơn nữa trên kiến trúc của Intel Tuy nhiên thư viện này là bản thương mại của Intel

Thư viện OpenCV có hơn 500 hàm và được chia thành nhiều lĩnh vực như trong

an ninh, y tế, robot, xử lý ảnh,…

1.1.1 Lịch sử phát triển của OpenCV

Lịch sử phát triển của OpenCV được biểu hiện qua sơ đồ sau:

Hình 1.1: Lịch sử phát triển của OpenCV [13]

Trang 8

OpenCV ra đời là một sáng kiến nghiên cứu của Intel nhằm mục đích đẩy mạnh các ứng dụng của xử lý ảnh chuyên sâu Hướng tới mục tiêu này, Intel đã đưa

ra nhiều dự án bao gồm xử lý ảnh theo thời gian thực, và những ứng dụng xử lý và hiển thị ảnh 3D

OpenCV bao gồm các hàm đã được viết sẵn vì vậy một người lập trình thay vì phải xây dựng lại chức năng thì có thể dùng các hàm có sẵn của OpenCV

1.1.2 Kiến trúc của OpenCV

OpenCV có cấu trúc gồm 5 thành phần chính, 4 thành phần trong số đó được thể hiện

+ Hiểu chỉnh máy quay và xây dựng hình ảnh 3D

Thành phần ML(Machine Learning) bao gồm:

+ Normal Bayes Classifier

Trang 9

+ Stereo Correspondence Functions

+ View Morphing Functions

+ 3D Tracking Functions

+ Eigen Objects (PCA) Functions

+ Embedded Hidden Markov Model Functions

Hình 1.2: Kiến trúc cơ bản của OpenCV

Trang 10

1.1.3 Các ứng dụng của OpenCV

Sự ra đời của thư viện mã nguồn mở OpenCV đã tiết kiệm được thời gian cho các lập trình viên với trên 500 phương thức được lập trình sẵn về:

+ Xử lý hình ảnh và video như là: tạo, xóa, sửa, chuyển đổi, sao chép…

+ Lấy hình ảnh, video từ các thiết bị máy ảnh, camera, tập tin…

+ Theo dõi đối tượng

Dựa trên thư viện mã nguồn mở OpenCV đã và đang xây dựng được rất nhiều các ứng dụng vào trong thực tế và đa dạng trong các lĩnh vực: y tế, giáo dục, quốc phòng

+ Phát hiện đối tượng

Thư viện mã nguồn mở OpenCV có thể lập trình trên nhiều hệ điều hành khác nhau

và cho nhiều ngôn ngữ khác nhau: Window, Linux, Android… Các ngôn ngữ như: C/C++, Java, C#,…

1.2 Thiết bị Kinect Sensor

1.2.1 Giới thiệu thiết bị Kinect Sensor

Hình 1.3: Thiết bị Kinect

Trang 11

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 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)

Kinect đang giữ kỷ lục Guiness thế giới về “Thiết bị điện tử được tiêu thụ nhanh nhất” với 8 triệu sản phẩm trong 60 ngày Hơn mười triệu sản phẩm Kinect đã được phân phối trên thế giới vào thời điểm ngày 9 tháng 3 năm 2011 Bên cạnh phục

vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), theo dõi cử động cơ thể (body tracking) và nhiều mục đích khác 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

1.2.2 Cấu tạo của Kinect

+ Kinect gồm có: RGB camera, cảm biến độ sâu (3D Depth Sensors), dãy microphone (Multi-array Mic) và động cơ điều khiển góc ngẩng (Motorized Tilt)

+ RGB Camera: như một camera thông thường, có độ phân giải 480x640 với tốc độ 30

fps

Hình 1.4: Cấu tạo của Kinect

Trang 12

+ Cảm biến độ sâu: độ sâu được thu về nhờ sự kết hợp của hai cảm biến là đèn chiếu

hồng ngoại (IR Projector) và camera hồng ngoại (IR camera)

+ Dãy đa microphone: gồm bốn microphone được bố trí dọc Kinect như trên hình

1.4, được dùng vào các ứng dụng điều khiển bằng giọng nói

+ Động cơ điều khiển góc ngẩng: là loại động cơ DC khá nhỏ, cho phép ta điều chỉnh

camera lên xuống để bảo đảm camera có được góc nhìn tốt nhất

+ Một trong những đặc tính quan trọng nhất của Kinect đó là thu về giá trị độ sâu hay giá trị khoảng cách tới vật thể trong thế giới thực

Hình 1.5: Cấu tạo bên trong Kinect: RGB, IR camera và IR projector [16]

1.2.3 Tính toán độ sâu của Kinect

Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để cho ra giá trị

độ sâu ảnh bằng công nghệ Light Coding của PrimeSense

Khác với kỹ thuật Stereo Camera với việc dùng cặp camera giống nhau để xây dựng nên bản đồ độ sâu, hay kỹ thuật Time-Of-Flight (TOF) định nghĩa khoảng cách bằng ước lượng thời gian di chuyển của tia sáng đi và về trong không gian, kỹ thuật Light Coding dùng một 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 toán khoảng cách Công việc tính toán này được thực hiện bên trong Kinect bằng chip PS1080 SoC của PrimeSense Công nghệ mới này được cho là đáp ứng chính xác hơn, giá cả rẻ hơn cho việc sử dụng ở môi trường trong nhà 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

Trang 13

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 1.6: Quá trình thu về bản đồ độ sâu của Camera Kinect

Hình 1.7: Mẫu hình được chiếu bởi projector và chụp lại bằng IR camera

Hình 1.7 cho ta thấy rõ mẫu hình tập hợp các đốm sáng từ Projector và được chụp lại bởi IR camera Để hiểu cách thức Kinect ước lượng khoảng cách tới vật thể

Trang 14

trong môi trường như thế nào, ta quan sát hình 1.8 trong trường hợp phân tích với một điểm đơn giản

Hình 1.8: Tính toán khoảng cách tới một điểm chiếu từ Projector

Ta giả sử Projector phát đi một tia sáng dọc đường màu xanh lá, nó sẽ được chụp lại dưới dạng một đốm sáng bởi IR camera khi chạm vào bề mặt vật thể trong không gian Ta xét ba mặt phẳng ở ba khoảng cách khác nhau: mặt phẳng gần Kinect (close plane), mặt phẳng ở xa Kinect (distant plane) và mặt phẳng tham chiếu (reference plane) ở giữa hai mặt phẳng trên Trong đó, mặt phẳng tham chiếu ngầm được biết trước bên trong Kinect với đầy đủ thông tin về khoảng cách Ngoài ra, ta cũng đề cập thêm mặt phẳng ảnh (Image Plane) của 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 IR camera Ta xét trong ba trường hợp khi tia sáng màu xanh lá 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í A’, B’ và C’, ta có nhận xét: điểm A càng gần Kinect (hay close plane 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 (hay distant plane càng xa Kinect) thì C’ càng xa B’ về phía bên trái Từ đó: khi ta biết

Trang 15

trước hướng, điểm xuất phát của tia sáng từ Projector và vị trí B’ là hình chiếu của điểm B trên mặt phẳng tham chiếu lên mặt phẳng ảnh, ta hoàn toàn có thể tính toán được độ sâu ảnh hay khoảng cách tới vật thể

Kinect làm điều tương tự với tập hợp các đốm sáng còn lại phát đi từ projector, với mặt phẳng tham chiếu biết trước Nó tìm điểm là tâm của đốm sáng mà

IR camera chụp lại được và điểm tương đồng của đốm sáng đó trên mặt phẳng tham chiếu (ví dụ: hình 1.8 ta có A và B, C và B là các cặp điểm tương đồng), để tìm khoảng chênh lệch giữa hai điểm này theo chiều ngang khi chiếu về trên mặt phẳng ảnh và lưu ý là giá trị chênh lệch này được tính bằng đơn vị pixel Tập hợp của tất cả các giá trị chênh lệch từ tập hợp đốm sáng, sẽ tạo nên bản đồ độ chênh lệch (disparity map), giá trị này càng lớn thì khoảng cách hay giá trị độ sâu ảnh (depth) càng lớn, từ

đó mà ta xây dựng được bản đồ độ sâu (depth map) với giá trị tính bằng mét thực sự Tuy nhiên, do tập hợp số lượng đốm sáng phát đi từ projector nhỏ hơn so với tổng số pixel trên mặt phẳng ảnh của IR camera nên một phần giá trị độ sâu ảnh còn lại sẽ được nội suy

Theo tính toán của Nicolas Burrus, một trong những người mở đường cho việc tìm hiểu về Kinect qua các thí nghiệm của ông Ông đã công thức hóa được quan hệ

giữa giá trị khoảng cách thật z tính bằng mét và giá trị độ chênh lệch d:

−0.0030711016 ∗ 𝑑 + 3.3309495161Trong đó d là con số nguyên biểu diễn dưới dạng 11 bit, tức khoảng thay đổi

từ 0÷2047 Với kết quả đo đạc thực nghiệm trên thư viện OpenNI, giá trị z biến thiên trong khoảng 0.5÷6.0 mét và bản đồ độ sâu ổn định trong khoảng 0.5÷5.0 mét Do đó, giá trị d thực sự biến thiên trong khoảng từ 434÷1030 Như vậy, trong không gian từ 0÷0.5 mét phía trước Kinect, Kinect không thể đưa về bản đồ độ sâu

1.2.4 Môi trường hoạt động của Kinect

Kinect là thiết bị được thiết kế cho việc sử dụng ở môi trường trong nhà Ở môi trường ngoài trời, kết quả thử nghiệm cho bản đồ độ sâu không chính xác vào thời điểm ánh sáng mạnh, nhưng cho kết quả chấp nhận được khi ánh sáng yếu (vào thời điểm buổi chiều tối)

Trang 16

1.2.5 Ứng dụng Kinect vào thực tế

Sự ra đời của Camera Kinect đã làm thay đổi hoàn toàn các phương thức lập trình trong xử lý ảnh Nếu như trước đây phải dùng đến 2 camera và nhiều thuật toán phức tạp để tính được độ sâu thì bây giờ chỉ cần dùng Camera Kinect là có thể lấy được ảnh độ sâu một cách dễ dàng

Camera Kinect được sử dụng để xây dựng nhiều ứng dụng và rất nhiều các lĩnh vực Từ việc hỗ trợ trẻ khuyết tật, giúp bác sĩ trong phòng phẫu thuật cho tới cải thiện môi trường giáo dục, tiềm năng của Kinect đã vươn lên ngoài việc ứng dụng vào game XBox Với Kinect, nghệ sĩ có thể chơi nhạc cụ, một giáo viên trình diễn chuỗi liên kết hóa học, bác sĩ phẫu thuật lật ảnh X quang hay kỹ thuật viên từ xa điều khiển robot tháo ngòi một quả bom Kinect ứng dụng trong giáo dục, y tế, quân sự và

nhiều lĩnh vực khác

1.3 CL NUI Platform

CL NUI Platform bao gồm một SDK API và một trình điều khiển ổn định về phần cứng Microsoft Kinect (Xbox NUI Audio, NUI Camera, NUI Motor và gia tốc) các thiết bị trên máy tính Windows

Với CL NUI Platform người dùng có thể kiểm soát các máy ảnh, di chuyển lên hoặc xuống động cơ hay thay đổi gia tốc và màu sắc đèn LED của Kinect

Với CL NUI Platform và các phương thức đã được cung cấp sẵn, người lập trình

có thể lấy được ảnh từ Camera Kinect một cách linh hoạt, tùy ý và không phụ thuộc vào bộ SDK Kinect Sensor

Trang 17

115kbit/s với một số thiết bị đặc biệt Ý nghĩa của chuẩn truyền thông nối tiếp nghĩa là trong một thời điểm chỉ có một bit được gửi đi dọc theo đường truyền

Có hai phiên bản RS232 được lưu hành trong thời gian tương đối dài là RS232B và RS232C Nhưng cho đến nay thì phiên bản RS232B cũ thì ít được dùng còn RS232C hiện vẫn được dùng và tồn tại thường được gọi là tên ngẵn gọn là chuẩn RS232

Các máy tính thường có 1 hoặc 2 cổng nối tiếp theo chuẩn RS232C được gọi là cổng Com Chúng được dùng ghép nối cho chuột, modem, thiết bị đo lường Trên main máy tính có loại 9 chân hoặc lại 25 chân tùy vào đời máy và main của máy tính Việc thiết

kế giao tiếp với cổng RS232 cũng tương đối dễ dàng, đặc biệt khi chọn chế độ hoạt động

là không đồng bộ và tốc độ truyền dữ liệu thấp

1.4.1.2 Ưu điểm của giao diện nối tiếp RS232

Khả năng chống nhiễu của các cổng nối tiếp cao

Thiết bị ngoại vi có thể tháo lắp ngay cả khi máy tính đang được cấp điện

Các mạch điện đơn giản có thể nhận được điện áp nguồn nuôi qua công nối tiếp

1.4.1.3 Những đặc điểm cần lưu ý về chuẩn RS232

Trong chuẩn RS232 có mức giới hạn trên và dưới (logic 0 và 1) là +-12V Hiện nay đang được cố định trở kháng tải trong phạm vi từ 3000Ω - 7000Ω

Mức logic 1 có điện áp nằm trong khoảng -3V đến - Ω 12V, mức logic 0 từ +-3V đến 12V

Tốc độ truyền nhận dữ liệu cực đại là 100kbps ( ngày nay có thể lớn hơn)

Các lối vào phải có điện dung nhỏ hơn 2500pF

Trở kháng tải phải lớn hơn 3000Ω nhưng phải nhỏ hơn 7000Ω

Độ dài của cáp nối giữa máy tính và thiết bị ngoại vi ghép nối qua cổng nối tiếp RS232 không vượt qua 15m nếu chúng ta không sử dụng model

Các giá trị tốc độ truyền dữ liệu chuẩn :

Trang 18

tính Khi đó các cổng Com đó được đánh dấu là Com 1, Com 2, Com 3 Trên đó có 2 loại đầu nối được sử dụng cho cổng nối tiếp RS232 loại 9 chân (DB9) hoặc 25 chân (DB25) Tuy hai loại đầu nối này có cùng song song nhưng hai loại đầu nối này được phân biệt bởi cổng đực (DB9) và cổng cái (DB25)

Ta xét sơ đồ chân cổng Com 9 chân:

Hình 1.9: Cấu tạo chân cổng Com

Trên là các kí hiệu chân và hình dạng của cổng DB9

Chức năng của các chân như sau:

+ Chân 1 : Data Carrier Detect (DCD) : Phát tín hiệu mang dữ liệu

+ Chân 2: Receive Data (RxD) : Nhận dữ liệu

+ Chân 3 : Transmit Data (TxD) : Truyền dữ liệu

+ Chân 4 : Data Termial Ready (DTR) : Đầu cuối dữ liệu sẵn sàng được kích hoạt bởi bộ phận khi muốn truyền dữ liệu

+ Chân 5 : Singal Ground ( SG) : Mass của tín hiệu

+ Chân 6 : Data Set Ready (DSR) : Dữ liệu sẵn sàng, được kích hoạt bởi bộ truyền khi nó sẵn sàng nhận dữ liệu

+ Chân 7 : Request to Send : yêu cầu gửi, bộ truyền đặt đường này lên mức hoạt động khi sẵn sàng truyền dữ liệu

+ Chân 8 : Clear To Send (CTS) : Xóa để gửi, bộ nhận đặt đường này lên mức kích hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận tín hiệu

+ Chân 9 : Ring Indicate (RI) : Báo chuông cho biết là bộ nhận đang nhận tín hiệu rung chuông

Còn DB28 bây giờ hầu hết các main mới ra đều không có cổng này nữa [12]

Trang 19

1.4.2 Sóng RF

Sóng RF (Radio Frequency) hay còn gọi là Tần số sóng Radio hiện nay đang được

sử dụng rộng rãi trong các thiết bị điều khiển từ xa do khả năng truyền nhận tốt trong các môi trường cũng như khả năng thi công dễ dàng Hơn nữa bộ phát và thu sóng RF cũng đang có mặt rộng rãi trên thị trường, giá thành dễ chấp nhận và tiện sử dụng

Có khả năng truyền xa với khoảng cách tới 100m

Có thể truyền xuyên tường, kính…

Nhưng có thể bị nhiễu do bên ngoài có rất nhiều các thiết bị máy móc sử dụng tần

số khác nhau [1]

Trang 20

CHƯƠNG 2: ĐẾM SỐ LƯỢNG NGÓN TAY BẰNG PHƯƠNG PHÁP PHÁT HIỆN MÀU DA

Ngoài phương pháp phát hiện con người, khuôn mặt hoặc thành phần trên cơ thể bằng cách áp dụng phương pháp dựa trên khung xương, mạng nơron thì phương pháp phát hiện màu da để nhận biết cơ thể người là một phương pháp phổ biến trong nghành

xử lý ảnh ngày nay Phương pháp này đang được ứng dụng và sử dụng rộng rãi trong nhiều ứng dụng liên quan đến xử lý ảnh phục vụ cuộc sống

Để tính toán được số lượng ngón tay, thì việc đầu tiên là phải phát hiện được bàn tay trong ảnh và tách được bàn tay đó ra khỏi môi trường (nền của ảnh) Sau khi đã tách ra được bàn tay thì mọi việc tính toán số liệu sẽ dựa vào bàn tay vừa tách được Mục đích chương 2 là phân tích phương pháp phát hiện bàn tay, tách bàn tay ra khỏi

ảnh và đếm số lượng ngón tay bằng phương pháp phát hiện màu da

2.1 Đặc trưng của màu da

Màu da và những kết cấu của nó là những tín hiệu, đặc điểm mà con người sự

dụng để suy ra nhiều khía cạnh liên quan tới các vấn đề về văn hóa, dân tộc

Màu da và các đặc điểm đó có thể là một dấu hiệu của một chủng tộc, sức khỏe, tuổi tác, vẻ đẹp

Hình 2.1: Những màu da khác nhau của con người

Qua hình ảnh hoặc video, màu da là dấu hiệu tồn tại của con người trong các phương tiện truyền thông Có rất nhiều ứng dụng liên quan tới màu da và các phương tiện truyền thông trong đó đáng kể nhất là ứng dụng phát hiện màu da để xác định hình ảnh khỏa thân trên Internet và nhận dạng khuôn mặt Và việc phát hiện màu da cũng đã

là một đặc trưng quan trọng trong ngành nhận dạng và xử lý ảnh ngày nay

Để phát hiện được màu da người ta sử dụng phương tìm những pixel trong ảnh có khả năng thuộc về màu da Tuy nhiên việc phát hiện pixel màu da không phải là điều đơn

Trang 21

giản vì sự xuất hiện của da trong một hình ảnh phụ thuộc vào các điều kiện chiếu sáng (chiếu sáng hình học và màu sắc), nơi ảnh được chụp Điều đó có nghĩa là sự lựa chọn không gian, điều kiện ánh sáng sẽ ảnh hưởng đến hiệu suất của da và độ nhảy cảm của

nó cũng thay đổi theo điều kiện ánh sáng

Hình 2.2: Mẫu màu da trên bàn tay được chụp trong 3 môi trường với điều kiện

ánh sáng khác nhau:

Hình 2.2 (a) – Môi trường ánh sáng bình thường

Hình 2.2 (b) – Môi trường ánh sáng có mặt trời (ánh sáng mạnh)

Hình 2.2(c) – Môi trường ánh sáng lúc trời tối

2.2 Phát hiện bàn tay trong ảnh

Phát hiện màu da là quá trình của việc tìm kiếm các pixel có thông số trùng với thông số của màu da trong ảnh hoặc video Quá trình này thường được sử dụng như là một bước tiền xử lý để tìm thấy các khu vực có sự xuất hiện khuôn mặt hoặc tay chân con người trong hình ảnh hay trong các phương tiện tiện truyền thông Phân loại màu

da là xác định một ranh giới quyết định lớp màu da trong không gian màu dựa trên một

cơ sở dữ liệu đã được học các điểm ảnh màu da cụ thể Trong phương pháp, nhóm em

xác định màu da dựa vào các thông số R, G, B để tính toán các số liệu cụ thể Phát hiện bàn tay trong ảnh được chia thành 2 giai đoạn

2.2.1 Giai đoạn học dữ liệu

Giai đoạn học dữ liệu được chia thành 3 bước:

Bước 1: Thu thập một CSDL các mẫu ảnh nhỏ (có màu da) từ nhiều hình ảnh được

chụp trong nhiều điều kiện ánh sáng, môi trường khác nhau

Trang 22

Hình 2.3: Cơ sở dữ liệu tĩnh thu thập được từ camera

trong nhiều môi trường khác nhau

Bước 2: Chọn một không gian màu phù hợp (mục đích là trung hòa tất cả các môi

trường vừa học thành một không gian chuẩn)

Bước 3: Học các thông số của lớp da

Hình 2.4: Các thông số của da sau quá trình học dữ liệu

Trang 23

Các thông số trong hình 2.4 chính là ma trận các điểm ảnh có môi trường trung hòa với tất các môi trường đã học ở bước 1

2.2.2 Giai đoạn phát hiện màu da

Hình 2.5: Các giá trị có được khi kết thúc quá trình học dữ liệu

Quá trình học dữ liệu kết thúc ta thu được các thông số:

+ minR, minG, minB: Giá trị nhỏ nhất của R, G, B

+ minDiff = maxRGB - minRGB

+ minRTruG = R – G

Trang 24

Khi có ảnh đầu vào, ta duyệt qua tất cả các pixel của ảnh, với từng pixel ảnh ta so sánh

các giá trị với điều kiện sau:

Nếu các điều kiện sau cùng xẩy ra thì màu của pixel đó có khả năng là màu da

2.3 Sơ đồ hoạt động của phương pháp phát hi ện màu da

Hình 2.6: Sơ đồ hoạt động của phương phát hiện màu da

Trang 25

Giải thích sơ đồ: Sau quá trình học dữ liệu, ta thu được một môi trường trung hòa

Khi đưa bàn tay đầu vào,việc phát hiện màu da sẽ được tiến hành bằng cách duyệt qua các pixel ảnh Kiểm tra với dữ liệu đã được học, nếu pixel đang xét là da sẽ được gán giá trị là 0, những pixel còn lại sẽ được gán là 1 Kết qua ta thu được một ảnh đã phân ngưỡng Sau đó tiến hành loại bỏ những khu vực bị lỗi của ảnh vừa phân ngưỡng

Sau khi đã có được bàn tay đã phân ngưỡng hoàn thiện, ta tiến hành tính CoG và khoảng cách xa nhất từ CoG tới các đầu ngón tay (Dmax)

Xây dựng một vòng tròn màu đỏ bán kính 0.7*Dmax Xác định thành phần liên thông giữa ảnh mà trắng và vòng tròn màu đỏ Số lượng thành phần liên thông chính trừ đi một chính là số lượng ngón tay

2.4 Tách bàn tay ra khỏi ảnh

Quá trình phát hiện bàn tay đã cho ta các thông số màu da, đồng thời các thông

số đó chính là ngưỡng để chúng ta có thể tách bàn tay ra khỏi nền của ảnh Quá trình tách bàn tay ra khỏi ảnh được thực hiện qua các bước sau:

Bước 1: Phân ngưỡng bàn tay

Đây là quá trình tách biệt bàn tay và nền của hình ảnh Quá trình này được thực hiện bằng cách duyệt qua từng pixel trong ảnh đầu vào, với mỗi pixel kiểm tra có phải

là màu da hay không Những pixel là màu da sẽ được đưa vào một ngưỡng và những pixel không phải là màu da sẽ được xét là 0 Kết quả là ta được một hình ảnh đen trắng Tuy nhiên quá trình này sẽ có những sai sót vì có những pixel gần giống màu da, vì lý

do đó ta phải xử lý những pixel ảnh bị lỗi này

Hình 2.7: Phân ngưỡng bàn tay (chưa xóa bỏ các vùng bị lỗi)

Trang 26

Hình 2.6 (a) - Hình ảnh bàn tay đầu vào

Hình 2.6 (b) - Hình ảnh bàn tay đã phân ngưỡng nhưng chưa xóa các phân vùng bị lỗi

Bước 2: Phân vùng bàn tay và xóa bỏ các khu vực bị lỗi

Ý tưởng của việc xóa bỏ phân vùng lỗi là phân đoạn bàn tay thành từng vùng Giả sử các thành phần liên thông màu trắng đại diện cho các vùng thuộc về bàn tay Vì vậy ta sự dụng một miền giá trị phân ngưỡng có kích thước tương ứng để giảm bớt những phân vùng bị lỗi Và giá trị ngưỡng được chọn là 20% tổng số lượng điểm ảnh màu trắng

Hình 2.8: Biểu đồ phân tán cường độ điểm ảnh của các thành phần màu đỏ so với màu

xanh lá cây của các vùng là màu da và các vùng không là màu da cho 3 mẫu bàn tay

Tới đây ta đã tách được bàn tay ra khỏi ảnh, và sự dụng ảnh này để xử lý các bước còn lại

Trang 27

2.5 Xác định trọng tâm bàn tay và khoảng cách xa nhất từ trọng tâm

Công thức tính trọng tâm bàn tay (CoG) đã phân ngưỡng như sau:

Hình 2.9: Công thức tính trọng tâm bàn tay với f(x,y) là ảnh đầu vào

Hình 2.10: Hình ảnh bàn tay sau khi tính được trọng tâm

Sau khi tính được trọng tâm CoG, ta tiến hành tính khoảng cách xa nhất tính từ trọng tâm bàn tay, thông thường khoảng cách này là từ CoG tới ngón tay dài nhất trong từng

cử chỉ cụ thể bằng công thức toán học:

𝑑 = √(𝑥2− 𝑥1)2+ (𝑦2− 𝑦1)2

Trang 28

Hình 2.11: Hình ảnh bàn tay sau khi tính được CoG

và khoảng cách xa nhất tính CoG

Hình 2.12: Trọng tâm CoG và các khoảng cách có thể tính từ CoG

Trang 29

Trong hình 2.11, khoảng cách từ CoG tới Tip Points là những khoảng cách lớn nhất có thể, còn khoảng cách từ CoG tới Tip Points nào là trong từng điều khiển cụ thể

2.6 Đếm số lượng ngón tay

Để xác định số lượng ngón tay việc đầu tiên ta xây dựng vòng tròn màu đỏ bán

kính 0.7 * D m ax với Dmax chính là khoảng cách xa nhất tính từ CoG tới các Tip Points trong từng điều khiển cụ thể (hình 2.11) Giá trị 0.7 đảm bảo vòng tròn sẽ luôn cắt ngang các ngón tay

Sau khi xây dựng vòng tròn màu đỏ, ta dùng toán tử XOR của OpenCV giữa vòng tròn màu đỏ với ảnh màu trắng ta được những nơi giao nhau với các ngón tay Những nơi giao nhau tạo nên màu Cyan

Hình 2.13: Màu Cyan

Hình 2.14: Hình ảnh bàn tay sau khi vẽ vòng tròn

Trang 30

Thành phần liên thông màu Cyan là những pixel màu Cyan liền kề nhau Quan sát bàn tay đã vẽ vòng tròn màu đỏ, ta thấy số lượng ngón tay chính là số lượng thành phần liên thông màu Cyan trừ đi một (Trừ đi một là trừ đi thành phần liên thông màu Cyan ở

2.7.2 Nhược điểm

+ Phải trải qua giai đoạn học dữ liệu

+ Khó khăn trong việc tìm ra được một môi trường trung hòa cho tất cả các mẫu ảnh

đã học trong CSDL

+ Phụ thuộc vào môi trường, điều kiện ánh sáng, khí hậu

Do quá phụ thuộc vào điều kiện môi trường bên ngoài, ảnh hưởng tới việc đếm số lượng ngón tay nên phương pháp nhận dạng màu da, để đếm số lượng ngón tay ứng dụng cho việc điều khiển robot, rất ít được áp dụng do tính khả thi không cao

Trang 31

CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH

Từ những kiến thức được trang bị tại trường và những kiến thức tự tìm hiểu thêm về các thuật toán xử lý ảnh, ngôn ngữ lập trình nhóm tiến hành xây dựng chương trình Chương trình được xây dựng trên nền NET (Visual Studio 2010) bằng ngôn ngữ C/C++, thư viện mã nguồn mở OpenCV và CL NUI Platform

Chương trình được xây dựng nhằm mục đích điều khiển robot bằng số lượng ngón tay, ngoài ra chương trình còn có những chức năng khác cho phép người dùng có thể tùy chọn

Do sự dụng phương pháp phát hiện màu da để xác định số lượng ngón tay quá phụ thuộc vào môi trường nêu nhóm quyết định chuyển hướng sang một phương pháp khác: sự dụng Kinect Sensor để lấy ảnh chiều sâu

3.1 Sơ đồ hoạt động của phương phân ngưỡng chiều sâu

Hình 3.1: Sơ đồ hoạt động của phương pháp phân ngưỡng chiều sâu

Trang 32

3.2 Đếm số lượng ngón tay bằng phương pháp phân ngưỡng chiều sâu

Nhờ vào cấu tạo của Kinect: cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để cho ra giá trị độ sâu ảnh bằng công nghệ Light Coding của PrimeSense

Đây là một đặc điểm của Kinect để có thể áp dụng Kinect trong việc phát hiện bàn tay

3.2.1 Lấy ảnh chiều sâu

Để có thể lấy được chiều sâu ta phải cài một thư viện của OpenCV có tên là: Platform” Đây là thư viện cung cấp các hàm để có thể lấy được chiều sâu bao gồm: + GetNUICameraDepthFrameRAW

Cách lấy ảnh chiều sâu của Kinect đã được giải thích trong mục 1.2.3

3.2.2 Phát hiện bàn tay trong ảnh

Sau khi đã lấy được ảnh chiều sâu nhờ vào Kinect, việc tính toán số lượng ngón tay sẽ dựa vào ảnh chiều sâu này, để xác định bàn tay trong ảnh ta thực hiện các bước sau:

Bước 1: Phân ngưỡng ảnh chiều sâu

Trong OpenCV đã hỗ trợ sẵn hàm phân ngưỡng chiều sâu, nhưng hàm phân ngưỡng này chỉ phân ngưỡng hình ảnh ở mức độ cơ bản vì vậy để có thể phân ngưỡng tốt hơn ta phải tự tạo ra phương thức phân ngưỡng riêng

Đầu tiên ta duyệt qua toàn ảnh, kiểm tra những điểm ảnh nào có giá trị độ sâu nhỏ hơn độ sâu cho trước, sẽ được truyền vào bởi chương trình khi người dùng thiết lập, thông số này tương ứng với khoảng cách từ camera Kinect tới bàn tay hoặc vật đứng trước nhất so với camera Kinect Những điểm ảnh thỏa yêu cầu thì ta lưu vào một ảnh tạm Những điểm ảnh còn lại sẽ được gán là 0

Ngày đăng: 18/12/2013, 14:18

HÌNH ẢNH LIÊN QUAN

Hình  1.2: Kiến trúc cơ bản của OpenCV. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 1.2: Kiến trúc cơ bản của OpenCV (Trang 9)
Hình  1.5: Cấu tạo bên trong Kinect: RGB, IR camera và IR projector [16]. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 1.5: Cấu tạo bên trong Kinect: RGB, IR camera và IR projector [16] (Trang 12)
Hình  2.6: Sơ đồ hoạt động của phương phát hiện màu da. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 2.6: Sơ đồ hoạt động của phương phát hiện màu da (Trang 24)
Hình 2.6 (a)  -  Hình ảnh bàn tay đầu vào. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
Hình 2.6 (a) - Hình ảnh bàn tay đầu vào (Trang 26)
Hình  2.11: Hình ảnh bàn tay sau khi tính được CoG - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 2.11: Hình ảnh bàn tay sau khi tính được CoG (Trang 28)
3.1  Sơ đồ hoạt động của phương  phân ngưỡng chiều sâu. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
3.1 Sơ đồ hoạt động của phương phân ngưỡng chiều sâu (Trang 31)
Hình  3.3: Kết quả của thuật toán Dilation - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.3: Kết quả của thuật toán Dilation (Trang 34)
Hình  3.12: Kết quả sau khi tìm điểm lồi trên Contour. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.12: Kết quả sau khi tìm điểm lồi trên Contour (Trang 39)
Hình  3.13: Cấu trúc của CvConvexityDefect - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.13: Cấu trúc của CvConvexityDefect (Trang 40)
Hình  3.16: Hàm tính khoảng cách 3 điểm:start, end và depth_point trong cấu trúc - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.16: Hàm tính khoảng cách 3 điểm:start, end và depth_point trong cấu trúc (Trang 41)
Hình  3.19: Giao diện chính của chương trình. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.19: Giao diện chính của chương trình (Trang 43)
Hình  3.23: Chức năng hướng dẫn người dùng. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.23: Chức năng hướng dẫn người dùng (Trang 45)
Hình  3.25: Xe điều khiển từ xa thay thế cho robot. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.25: Xe điều khiển từ xa thay thế cho robot (Trang 46)
Hình  3.27: Mạch điều khiển từ xa. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.27: Mạch điều khiển từ xa (Trang 48)
Hình  3.30: Quy trình điều khiển robot. - Điều khiển robot bằng phương pháp xác định số lượng ngón tay báo cáo nghiên cứu khoa học
nh 3.30: Quy trình điều khiển robot (Trang 52)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w