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 1PHẦ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 22 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 3Hì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 6tà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 7CHƯƠ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 8OpenCV 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 101.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 11Kinect 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 13phí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 14trong 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 15trướ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 161.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 17115kbit/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 18tí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 191.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 20CHƯƠ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 21giả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 22Hì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 23Cá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 24Khi 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 25Giả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 26Hì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 272.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 28Hì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 29Trong 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 30Thà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 31CHƯƠ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 323.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