TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ
BỘ MÔN ĐIỆN TỬ - VIỄN THÔNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
ĐIỀU KHIỂN XE LĂN
BẰNG CỬ ĐỘNG TAY
SỬ DỤNG BOARD INTEL GALILEO
Sinh viên thực hiện
Cán bộ hướng dẫn
Phạm Hoàng Lượm
MSSV: 1117984
Phạm Thanh Hùng
MSSV: 1117970
Lớp: Kỹ thuật máy tính-K37
ThS. GV. Trương Phong Tuyên
Cần Thơ, Tháng 05 năm 2015
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ
BỘ MÔN ĐIỆN TỬ - VIỄN THÔNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
ĐIỀU KHIỂN XE LĂN
BẰNG CỬ ĐỘNG TAY
SỬ DỤNG BOARD INTEL GALILEO
Sinh viên thực hiện
Cán bộ hướng dẫn
Phạm Hoàng Lượm
MSSV: 1117984
Phạm Thanh Hùng
MSSV: 1117970
Lớp: Kỹ thuật máy tính-K37
ThS. GV. Trương Phong Tuyên
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ
BỘ MÔN ĐIỆN TỬ - VIỄN THÔNG
Luận văn được thực hiện bởi:
1. Họ tên: Phạm Hoàng Lượm, MSSV: 1117984,
2. Họ tên: Phạm Thanh Hùng,
MSSV: 1117970,
Lớp: Kỹ thuật máy tính
Lớp: Kỹ thuật máy tính
Tựa đề Luận văn (Hay tên đề tài): Điều khiển xe lăn bằng cử động tay
sử dụng board Intel Galileo.
Luận văn đã nộp và báo cáo tại Hội đồng chấm bảo vệ Luận văn
tốt nghiệp Đại học ngành Điện tử Truyền thông/Kỹ thuật Máy tính, Bộ môn
Điện tử - Viễn thông vào ngày … tháng 05 năm 2015. (Quyết định thành lập
Hội đồng số: …./QĐ-CN ngày … tháng 05 năm 2015 của Trưởng Khoa Công Nghệ)
Kết quả đánh giá: _____________
Chữ ký của các thành viên Hội đồng:
Thành viên 1: ThS. Trương Phong Tuyên …………………………
Thành viên 2: TS. Lương Vinh Quốc Danh ……………………….
Thành viên 3: ThS. Trần Hữu Danh ……………………………….
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
LỜI CAM ĐOAN
Với đề tài “Điều khiển xe lăn bằng cử động tay sử dụng board Intel Galileo”
tạo ra một hệ thống điều khiển mới khác biệt hoàn toàn dành cho người khuyết tật.
Intel Galileo là một sản phẩm đầu tiên sử dụng chip Intel Quark X1000, SoC đầu tiên
thuộc dòng "Santa Clara" sản xuất dựa trên dây chuyền công nghệ 14nm với mức độ
tiêu thụ điện rất thấp. Phương pháp xử lý ảnh chạy ứng dụng trên board Intel Galileo
là một nét mới trong sự phát triển của hệ thống nhúng nên nhóm chúng em quyết định
chọn đề tài này.
Kết thúc quá trình nghiên cứu và thực hiện, những nội dung trình bày trong quyển
báo cáo này là sự hiểu biết và thành quả của chúng em dưới sự giúp đỡ của cán bộ
hướng dẫn là Thạc sĩ Trương Phong Tuyên.
Chúng em xin cam đoan rằng những nội dung trình bày trong quyển báo cáo
Luận văn tốt nghiệp này không phải là bản sao chép từ bất kì công trình nghiên cứu
đã có trước nào. Nếu không đúng sự thật, chúng em xin chịu hoàn toàn mọi trách nhiệm
trước nhà trường.
Cần Thơ, ngày … tháng … năm 2015
Nhóm sinh viên thực hiện
Phạm Hoàng Lượm
Phạm Thanh Hùng
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
LỜI CÁM ƠN
Sau những kết quả đạt được, chúng em không bao giờ quên gửi lời cám ơn
chân thành và sâu sắc nhất đến cha mẹ và gia đình chúng em, những người đã hộ trợ
chúng em về mặt kinh tế để chúng em có điều kiện tốt nhất thực hiện đề tài của mình.
Không chỉ vậy, gia đình còn luôn giúp đỡ, động viên và giúp em có thêm nghị lực
hoàn thành tốt nhiệm vụ học tập và rèn luyện của mình.
Chúng em kính gửi những lời cám ơn chân thành đến đội ngũ cán bộ giảng dạy
tại trường Đại học Cần Thơ nói chung và bộ môn Điện tử Viễn Thông trực thuộc
Khoa Công nghệ nói riêng đã tận tình giảng dạy, chỉ bảo cũng như tạo mọi điều kiện
vật chất trong suốt khoảng thời gian chúng em học tập và rèn luyện tại trường.
Đặc biệt xin chân thành cám ơn Thạc sĩ Trương Phong Tuyên, một người thầy
một người anh đã tận tình hướng dẫn chúng em thực hiện đề tài luận văn này. Xin được
biết ơn thầy vì những kiến thức đã truyền đạt, những chỉ dẫn, những tài liệu, cũng như
những định hướng kịp thời giúp chúng em thực hiện đúng hướng và đúng tiến độ
với đề tài được giao.
Trong suốt quá trình học tập nghiên cứu thực hiện đề tài chúng em cũng xin
cám ơn sự giúp đỡ nhiệt tình của các anh khóa trước, cúng như sự hợp tác của các bạn
trong các nhóm luận khác và cùng toàn thể bạn bè đã nhiệt tình động viên, ủng hộ
và cổ vũ tinh thần cho chúng em.
Xin chân thành cám ơn !
Cần Thơ, ngày … tháng … năm 2015
Nhóm sinh viên thực hiện
Phạm Hoàng Lượm
Phạm Thanh Hùng
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
KÍ HIỆU VÀ VIẾT TẮT
GPIO
General Pirpose Input Output
LED
Light Emitting Diode
USB
Universal Serial Bus
SRAM
Statiac Random Access Memory
RAM
Random Access Memory
I2C
Inter-Intergrated Circuit
Pixel
Picture Element
IP
Intellectual Property
JTAG
Joint Test Action Group
RGB
Red-Green-Blue
1
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
MỤC LỤC
CHƯƠNG 1 TỔNG QUAN .................................................................................................... 6
1.1
ĐẶT VẤN ĐỀ ............................................................................................................ 6
1.2
LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ ............................................................................ 6
1.3
PHẠM VI ĐỀ TÀI ...................................................................................................... 7
1.4
PHƯƠNG PHÁP NGHIÊN CỨU ........................................................................... 8
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT....................................................................................... 9
2.1
TỔNG QUAN VỀ XỬ LÝ ẢNH ............................................................................... 9
2.1.1
Khái niệm về điểm ảnh - ảnh số .................................................................. 9
2.1.2
Độ phân giải của ảnh ..................................................................................... 9
2.1.3
Mức xám của ảnh .......................................................................................... 10
2.1.4
Phân loại ảnh.................................................................................................. 10
2.1.5
Xử lý ảnh và các phương pháp xử lý ảnh .............................................. 12
2.1.6
Quy trình xử lí ảnh ........................................................................................ 13
2.2
PYTHON VÀ OPENCV ......................................................................................... 14
2.2.1
Python .............................................................................................................. 14
2.2.2
OpenCV ............................................................................................................ 16
2.3
KIẾN THỨC VỀ CỔNG COM............................................................................... 18
2.4
GIỚI THIỆU VỀ BOARD INTEL GALILEO ....................................................... 20
2.4.1
Các thành phẩn trên board Intel Galileo ................................................. 20
2.4.2
Giao tiếp với Intel Galileo ........................................................................... 25
2.4.3
Lập trình với Intel Galileo ........................................................................... 26
2.4.4
Thuộc tính các chân ở chế độ hoạt động .............................................. 28
2.4.6
Reset tự động và đặc điểm vật lí của board Intel Galileo .................. 29
CHƯƠNG 3 XÂY DỰNG HỆ THỐNG .............................................................................. 30
3.1
THIẾT KẾ VÀ XÂY DỰNG PHẦN CỨNG.......................................................... 30
3.1.1
Phân tích hệ thống ........................................................................................... 30
3.1.2
Thiết kế luồng dữ liệu ...................................................................................... 31
3.1.3
SƠ ĐỒ KHỐI HỆ THỐNG ............................................................................. 33
3.2
LẬP TRÌNH PHẦN MỀM VÀ GIẢI THUẬT ........................................................ 39
3.2.1
Lưu đồ giải thuật chương trình trình chính .................................................. 39
3.2.2
Lưu đồ giải thuật các chương trình con......................................................... 41
3.2.3
Giải thuật so sánh hai ảnh bằng phương pháp trừ ảnh ............................... 45
KẾT LUẬN VÀ ĐỀ NGHỊ ..................................................................................................... 56
TÀI LIỆU THAM KHẢO ....................................................................................................... 58
PHỤ LỤC ................................................................................................................................ 59
HƯỚNG DẪN SỬ DỤNG .................................................................................................... 59
2
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
MỤC LỤC HÌNH
Hình 2.1 Ảnh nhị phân và nhị phân đảo của bàn tay. .............................................................. 10
Hình 2.2 Ảnh xám của một chú chó sói. .................................................................................. 11
Hình 2.3 Mô hình màu RGB. ................................................................................................... 11
Hình 2.4 Ảnh màu của hai chú chim trên cành cây. ................................................................ 12
Hình 2.5 Thực thi lệnh python và kết quả trả về. .................................................................... 15
Hình 2.6 Script python với chương trình đơn giản. ................................................................. 16
Hình 2.7 Cấp phát quyền và thực thi python cript trong Ubuntu. ........................................... 16
Hình 2.8 Các khả năng của OpenCV có thể là nhận diện khuôn mặt (trên bên trái), phát
hiện đường đồng mức (trên bên phải), và phát hiện cạnh (phía dưới). ................................... 18
Hình 2.8 Kết nối board Intel Galileo bằng cổng COM và cách kết nối các chân. ................... 19
Hình 2.9 Hình ảnh thực tế của board Intel Galileo mặt trước (trái) và mặt sau (phải). ........... 20
Hình 2.10 Sơ đồ khối hệ thống của board Intel Galileo. ......................................................... 21
Hình 2.11 Vị trí các thành phần phần cứng trên board Intel Galileo. ...................................... 22
Hình 2.12 Vị trí các jumper trên board Intel Galileo. .............................................................. 29
Hình 3.1 Kiến trúc tổng quát của hệ thống. ............................................................................. 30
Hình 3.2 Luồng dữ liệu và nối kết hệ thống. ........................................................................... 32
Hình 3.3 Bộ xử lý chính là board Intel Galileo........................................................................ 33
Hình 3.4 Bộ phận thu nhận ảnh webcam Logitech C920 được đặt cố định với một bàn
điều khiển. ................................................................................................................................ 34
Hình 3.6 Module LM2506 và ắc quy 12V - 4Ah. .................................................................... 35
Hình 3.7 Module Dimerled dùng điều khiển các động cơ. ...................................................... 35
Hình 3.8 Hình ảnh động cơ gạt nước dùng trong ô tô. ............................................................ 35
Hình 3.9 Bố trí và lắp đặt động cơ gạt nước vào xe lăn của nhóm. ......................................... 36
Hình 3.10 Cơ cấu bánh răng và xích tải truyền lực từ đông cơ đến bánh xe. .......................... 37
Hình 3.11 3D USB SOUND và HUB USB chia sẻ kết nối với webcam................................. 37
Hình 3.12 Sơ đồ kết nối các khối của hệ thống. ...................................................................... 38
Hình 3.13 Toàn bộ các module phần cững được bố trí và cố định vào hộp bảo vệ. ............... 39
Hình 3.11 Lưu đồ giải thuật chương trình chính. .................................................................... 40
Hình 3.11 Lưu đồ giải thuật chương trình con lấy lại mẫu tay. ............................................... 41
Hình 3.11 Lưu đồ giải thuật chương trình con lấy lại mẫu tay. ............................................... 42
Hình 3.12 Lưu đồ giải thuật chương trình con so sánh ảnh mẫu với các ảnh gốc. .................. 43
Hình 3.12 Lưu đồ giải thuật chương trình con kiểm tra lỗi cử chỉ điều khiển. ....................... 44
Hình 3.13 Hai hình đen hoàn toàn. .......................................................................................... 45
Hình 3.14 Cử chỉ nắm đấm được chụp lại nhưng kèm theo các sự vật không mong muốn. ... 46
Hình 3.15 Hai cử chỉ được so sánh. ......................................................................................... 46
Hình 3.16 Hai cử chỉ được xử lý sang ảnh nhị phân................................................................ 47
Hình 3.17 Hai cử chỉ được xử lý sang ảnh nhị phân................................................................ 47
Hình 3.18 Mẫu gốc 1, không có gì được đóng khung lại, tương ứng xe dừng. ....................... 47
Hình 3.19 Mẫu gốc 2, cử chỉ bàn tay duỗi ngón cái khép, tương ứng xe được đi thẳng. ....... 48
Hình 3.20 Mẫu gốc 3, cử chỉ bàn tay duỗi ngón cái xòe, tương ứng xe được rẽ phải. ........... 48
Hình 3.21 Mẫu gốc 4, cử chỉ bàn tay nắm ngón cái xòe, tương ứng xe được rẽ trái. ............. 48
Hình 3.22 Mẫu gốc 5, cử chỉ bàn tay nắm ngón cái khép lại, tương ứng xe dừng và có còi. . 49
Hình 3.23 Hai ảnh thực tế giữa có LED nên và không có LED nền....................................... 49
Hình 3.24 Hai có LED nền được chuyển sang nhị phân được chia làm 4 phần ...................... 49
Hình 3.25 Hình ảnh LED nền bị lỗi từng điểm sang vì đặt quá gần. ....................................... 50
Hình 3.26 Hình ảnh mẫu đặt tay không đúng so với các mẫu gốc .......................................... 50
Hình 3.27 Hình ảnh mẫu đặt tay không đúng so với các mẫu gốc đã được xử lý ................... 50
3
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
Hình 3.28 Ảnh tay khi đã xuất nhị phân và cắt 4 góc ảnh ....................................................... 51
Hình 3.29 Ảnh tay cái khi đã xuất nhị phân và cắt 4 góc ảnh ................................................. 51
Hình 3.30 Ảnh đấm cái khi đã xuất nhị phân và cắt 4 góc ảnh ............................................... 51
Hình 3.31 Ảnh nấm đấm khi đã xuất nhị phân và cắt 4 góc ảnh ............................................. 52
Hình 3.32 Ảnh vật thể lạ sẽ được xử lý và so sánh với từng trạng thái mẫu ........................... 52
Hình 3.33 Ảnh nhị phân chưa làm mịn .................................................................................... 52
Hình 3.34 Ảnh nhị phần đã được làm mịn ............................................................................... 53
Hình 3.35 Ảnh hai mẫu tay. ..................................................................................................... 53
Hình 3.36 Ảnh hai mẫu tay đã được xử lý ............................................................................... 53
Hình 3.37 Ảnh tay người bị khuyết tật .................................................................................... 54
Hình 3.38 Các góc ảnh được cắt sau khi xuất nhị phân và làm mịn ....................................... 55
Hình 3.39 Hệ thống xe lăn trong thực tế .................................................................................. 56
Hình 3.40 Hình ảnh về nút nguồn của hệ thống. ..................................................................... 59
Hình 3.41 Hình ảnh về cảm biến chạm nhận dạng lựa chọn điều khiển của người sử dụng. . 59
Hình 3.42 Hệ thống LED hiển thị trạng thái. ........................................................................... 60
Hình 3.43 Mẫu 1 tương ứng với không có gì – xe dừng.......................................................... 60
Hình 3.44 Mẫu 2 tương ứng bàn tay khép – xe đi thẳng. ........................................................ 61
Hình 3.45 Mẫu 3 tương ứng bàn tay khép có ngón cái mở ra – xe rẽ phải. ............................. 62
Hình 3.46 Mẫu 4 tương ứng nấm đấm có ngón cái mở ra – xe rẽ trái. .................................... 63
Hình 3.47 Mẫu 5 tương nấm đấm có ngón cái mở khép – xe phát kèn. .................................. 64
MỤC LỤC BẢNG
Bảng 2.1 Công dụng của các chân của một cổng nối tiếp 9 chân (9 pin) theo chuẩn AT
và cách đấu nối chuyển đổi cổng nối tiếp 9 chân sang 25 chân.............................................. 19
Bảng 2.2 Tóm tắt các thông số về dòng điện, điện thế board Intel Galileo. ............................ 24
4
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
TÓM TẮT
Với những người không may bị đột quỵ hay liệt bán thân thì việc đi lại là một điều
khó khăn, phải di chuyển bằng xe lăn. Ở mức độ liệt nặng, sức tay yếu không thể thao
tác với cần điều khiển của xe, phải dùng các giải thuật hỗ trợ như: nhận dạng sự di
chuyển của mắt, cử động tay hay bằng ý nghĩ. Những giải thuật đó hầu hết dùng đến
máy tính, có giá thành rất cao. Bên cạnh đó, Intel vừa cho ra mắt bo vi điều khiển Intel
Galileo, sản phẩm đầu tiên sử dụng chip Intel Quark X1000 với mục tiêu là xây dựng
các ứng dụng Internet of Thing (IoT). Từ các tham khảo trên, nhóm chúng em quyết
định chọn đề tài “Điều khiển xe lăn bằng cử động tay sử dụng board Intel Galileo”.
Mục tiêu là thiết kế một hệ thống có giá thành thấp, dùng Intel Galileo vẫn nhận dạng
được cử chỉ của bàn tay để điều khiển xe lăn. Đề tài cần một webcam kết nối với
Intel Galileo chụp ảnh cử chỉ của bàn tay và xử lý qua phần mềm viết bằng Python
chạy trên nền hệ điều hành Linux. Kết quả dự kiến, xây dựng được hệ thống tự động
thực thi chương trình mặc định, điều khiển xe lăn bằng cử động tay chuẩn theo bàn tay
của mỗi người, điều kiện ánh sáng ổn định và độ trễ thời gian đáp ứng là cho phép.
Từ khóa: Intel Galileo, Python, điều khiển xe lăn, cử động tay, xử lý ảnh
ABSTRACT
Who unfortunately had a stroke or hemiplegia, the travel is a difficult thing,
must travel by wheelchair. At a high level, the strength of hand has been decreased,
can’t work with the joystick of a wheelchair, must be use of the algorithm supports
such as identification of eye movements, hand gestures or by thought. All the algorithms
used to computers, have a very high cost. Besides, Intel has launched
the microcontroller boards Intel Galileo, the first products to use chip Intel Quark
X1000 aimed building Applications Internet of Thing (IoT). From the above reference,
we decided to choosen the project “Wheelchair control by hand movements
using Intel Galileo board”. The objective is design a low-cost system, use Intel Galileo
could recognize hand gestures to control the wheelchair. The project need a webcam
connected to Intel Galileo imaging of hand gestures and processed by software written
in Python that runs on Linux operating system. Expected results, build a system to
automatically execute load default programs, control a wheelchair by moving his hand
standardized per person, light stability and latency time response was allowed.
Keywords: Intel Galileo, Python, controlling wheelchair, hand movements, image
processing
5
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
CHƯƠNG 1 TỔNG QUAN
Nội dung:
Giới thiệu đề tài, yêu cầu và mục đích lựa chọn đề tài.
Quá trình hình thành và lịch sử giải quyết đề tài.
Phạm vi về không gian, thời gian và các gói công cụ hỗ trợ thực hiện đề tài.
Cách thức và phương thức tiến hành thực hiện đề tài.
1.1 ĐẶT VẤN ĐỀ
Mỗi năm Việt Nam có khoảng 200.000 người mắc bệnh lý tai biến mạch máu não,
gần một nửa trong số họ mang các di chứng hậu tai biến suốt quãng đời còn lại.
Việc đi lại dường như trở nên khó khăn hơn, sử dụng xe lăn có lẽ là phương pháp di
chuyển hiệu quả nhất đối với họ. Ở mức độ bị liệt bán thân hoặc nặng hơn thì sức lực
của bàn tay không còn đủ để có thể thao táo với cần điều khiển của các xe lăn truyền
thống, phải dùng các giải thuật khác hỗ trợ việc điều khiển như: nhận dạng sự di chuyển
của mắt, cử động tay hay bằng ý nghĩ. Tuy nhiên những giải thuật này hầu hết
phải thực hiện trên máy tính và đương nhiên là có giá thành rất cao.
Đi cùng với sự tiến bộ của khoa học kĩ thuật, Intel vừa cho ra mắt bo Intel Galileo.
Đây là một bo mạch vi điều khiển chuyên dùng cho việc phát triển phần mềm
và phần cứng, tương tự như Andruino hay Raspberry Pi. Galileo là sản phẩm đầu tiên
sử dụng chip Intel Quark X1000. Cũng tại CES 2014, Intel đã trình diễn Galileo
với hệ thống điều khiển thiết bị điện tử qua kết nối internet không dây. Và nó giống như
các giải pháp nhà thông minh hay Internet of Things (IoT). Intel Galileo sẽ đóng vai trò
là một bộ điều khiển trung tâm, kết nối với các thiết bị điện tử, và kết nối với điện thoại
hoặc máy tính bảng có chạy ứng dụng đặc biệt. Từ ứng dụng này, người dùng có thể
ra lệnh đến các thiết bị nhờ Galileo. Intel Galileo được hỗ trợ chạy hệ điều hành Linux
rút gọn tương thích nên tìm năng của Galileo là rất lớn.
Từ những phân tích đã trình bày, nhóm chúng em chọn đề tài “Điều khiển xe lăn
bằng cử động tay sử dụng board Intel Galileo”. Bằng việc sử dụng Intel Galileo
xây dựng nên một xe lăn chạy bằng điện dùng những cử chỉ tay điều khiển xe lăn là một
vấn đề khá mới mẻ. Điều này đã tạo ra phương thức giao tiếp hoàn toàn mới giữa con
người và các thiết bị, đề tài cũng mang lại những ý nghĩa nhân sinh nhất định, cũng như
làm tư liệu cho các nghiên cứu cao hơn về sau.
1.2 LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ
Hiện nay trên thế giới có nhiều phiên bản xe lăn được tạo ra với các phương pháp
điều khiển đặc trưng riêng biệt như: công nghệ điều khiển bằng joystick, bằng hơi thở,
bằng lưỡi, bằng mắt hoặc suy nghĩ. Xe điều khiển bằng joystick đòi hỏi người dùng
phải điều khiển bằng tay hoặc một chi bị tật mà chi còn sức mạnh thì mới có thể điều
khiển xe lăn bằng phương pháp này, không phù hợp cho người bị liệt yếu hết các chi
hay người già. Xe điều khiển bằng “hớp và thổi” như cách mà Christopher Reeve
(tài tử từng nổi tiếng với vai siêu nhân) áp dụng trước khi qua đời vào năm 2004.
6
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
Theo đó, ông thổi vào một ống hút để làm xe lăn di chuyển tới lui, khi điều khiển xe
di chuyển gây ra những khó khăn trong việc hô hấp của chính người khiển. Hay việc
điều khiển xe lăn bằng lưỡi của các chuyên gia Mỹ tại Viện Công nghệ Georgia
đã nghiên cứu năm 2011, theo đó người sử dụng đeo bộ tai nghe có trang bị cảm biến
nhằm thu nhận tín hiệu từ trường phát ra từ khuyên ở lưỡi. Ví dụ, di chuyển lưỡi
lên góc trên bên trái miệng thì xe tiến về phía trước. Đương nhiên chi phí
cho việc cấy ghép khuyên từ và bộ cảm biến xử lý là không hề nhỏ. Xe lăn điều khiển
bằng mắt được thực hiện ngay tại trường Đại học Cần Thơ của thầy
Nguyễn Hữu Cường, Bộ môn Tự động hóa, Khoa Công nghệ năm 2011 và
ở Phòng Thí nghiệm Điều khiển tự động khoa Điện-Điện tử, Đại học Bách Khoa
TPHCM năm 2013 thì lại có giá thành quá cao vì cần một bộ vi xử lý mạnh
để điều khiển. Sáng kiến Aviator - công nghệ “xe lăn thông minh” của GS Hùng,
Chủ nhiệm khoa Kỹ thuật và Công nghệ thông tin, Đại học Công nghệ Sydney (UTS),
xe lăn có thể điều khiển bằng sự chuyển động của đầu và sóng não con người được xem
là một trong những phát minh hàng đầu ở Úc. Tất nhiên chi phí cho cả hệ thống đọc
và hiểu được suy nghĩ con người rất đắt đỏ, giá thành chiếc xe này ở Úc
vào khoảng 15.000 USD.
Khác với những đề tài điều khiển xe lăn đã được thực hiện trên thế giới, đề tài
nhóm đã chọn và thực hiện mang ưu điểm và đặc trưng riêng biệt. Phần cứng xử lý
dùng bo Intel Galileo, một bo mạch vi điều khiển chuyên dùng cho việc phát triển
phần mềm và phần cứng, tương tự như Andruino hay Raspberry Pi. Galileo là sản phẩm
đầu tiên sử dụng chip Intel Quark X1000, SoC đầu tiên thuộc dòng "Santa Clara"
được sản xuất dựa trên dây chuyền công nghệ 14nm với mức độ tiêu thụ điện rất thấp.
Phần mềm dùng ngôn ngữ lập trình là Python, chương trình dùng giải thuật trừ ảnh
kết hợp với lấy mẫu bàn tay riêng biệt của từng người nên mang lại độ chính xác cao.
Đề tài khai thác ứng dụng OpenCV về nghiên cứu phát triển thị giác của máy tính.
Việc điều khiển xe lăn chỉ bằng những cử động tay đơn giản không cần sức lực, chi phí
thực hiện thấp, có thể phát triển thành các ứng dụng điều khiển thiết bị khác.
Nhìn chung, đề tài đã kế thừa và cải tiến được một điểm hạn chế của những đề tài trước
(độ tin cậy, chi phí, độ chính xác…) cũng như tạo sự khác biệt trong phong cách
điều khiển các thiết bị cho tương lai.
1.3 PHẠM VI ĐỀ TÀI
Đề tài được nghiên cứu dựa trên nền tảng các kiến thức căn bản về ngôn ngữ
lập trình và vi điều khiển được học ở trường, cùng với việc tự tìm hiểu và học hỏi
của các thành viên trong nhóm (2 thành viên). Hệ thống điều khiển của xe được thực
hiện dựa trên board Intel Galileo kết nối với một webcam, một card âm thanh và các
module hỗ trợ.
Khi bắt đầu điều khiển xe, người sử dụng sẽ được hỗ trợ bằng giọng nói giúp họ
nhanh nắm bắt cách thức hoạt động của xe. Sau đó hình ảnh bàn tay khi điều khiển được
chụp lại rồi gửi lên board Galileo và được chương trình viết bằng Python xử lý
7
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
bằng giải thuật trừ ảnh và kiểm tra vùng trống, cuối cùng xuất điều khiển cho động cơ.
Do giới hạn về kiến thức của từng thành viên và khuôn khổ thời gian thực hiện 4 tháng
nên mục tiêu hướng đến của đề tài là tạo được một xe lăn giúp cho người khuyết tật,
người già có thể di chuyển theo ý muốn của họ, trong đó việc điều khiển xe
chỉ bằng những cử chỉ đơn giản của bàn tay không cần dùng nhiều sức lực và bàn tay
phải đặt trong một phạm vi khu vực cố định dưới sự ghi nhận của webcam.
1.4 PHƯƠNG PHÁP NGHIÊN CỨU
Quá trình thực hiện đề tài được thực hiện tuần tự theo các bước sau:
Tìm hiểu các thành phần và phương thức giao tiếp trên board Intel Galileo.
Tìm hiểu về hệ điều hành Linux chạy trên board Intel Galileo, cách kết nối
với PC và các thiết bị ngoại vi như: webcam, card âm thanh, …
Tìm hiểu về ngôn ngữ lập trình Python và OpenCV.
Thiết kế lắp đặt các phần cứng trên xe lăn.
Khảo sát kết quả thực tế và hoàn thiện hệ thống.
Kết quả và đánh giá.
8
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
Nội dung:
Tổng quan về xử lý ảnh.
Python va OpenCV.
Sơ lược về cổng COM.
Giới thiệu board Intel Galileo.
2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH
Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ. Nó là một ngành
khoa học mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó
rất nhanh, kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính
chuyên dụng riêng cho nó.
Quá trình xử lý ảnh là quá trình thao tác ảnh đầu vào nhằm cho ra kết quả
mong muốn. Kết quả đầu ra của một quá trình xử lý ảnh có thể là một ảnh “tốt hơn”
hoặc một thông tin.
2.1.1 Khái niệm về điểm ảnh - ảnh số
Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng. Để xử lý
bằng máy tính (số), ảnh cần phải được số hóa. Số hóa ảnh là sự biến đổi gần đúng một
ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ sáng
(mức xám). Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người
không phân biệt được ranh giới giữa chúng. Mỗi một điển như vậy gọi là một điểm ảnh
(PEL: Picture Element) hay còn gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều,
mỗi pixel ứng với cặp tọa độ (x,y), mỗi điểm ảnh tương ứng với một phần tử trong
ma trận tại hàng x và cột y.
Ảnh số là một ảnh đã được rời rạc hóa với tập hợp hữu hạn các điểm ảnh
với mức xám phù hợp dùng để mô tả ảnh gần với ảnh thật nằm trong không gian 2 chiều
có ảnh hưởng do cường độ sang (được mô tả như ma trận hai chiều). Số điểm ảnh
xác định độ phân giải của ảnh. Ảnh có độ phân giải càng cao thì càng thể hiện rõ nét
các đặc điểm của tấm hình và càng làm cho tấm ảnh trở nên thực và sắt nét hơn.
Điểm ảnh (Pixel) là một phần tử của ảnh số tại tọa độ (x,y) với mức độ xám
hoặc màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh đó được chọn
thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám
(hoặc màu) của ảnh số gần như ảnh thật. Mỗi phần tử trong ma trận được gọi là một
phần tử của ảnh.
2.1.2 Độ phân giải của ảnh
Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn định
trên một ảnh số được hiển thị.
9
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho
mắt người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp
tạo nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x và y
trong không gian hai chiều.
Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor)
là một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh
(320*200). Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình CGA 17”
độ phân giải 320*200. Lý do: cùng một mật độ (độ phân giải) nhưng diện tích màn hình
rộng hơn thì độ mịn (liên tục của các điểm) kém hơn.
2.1.3 Mức xám của ảnh
Một điểm ảnh (pixel) có hai đặc trưng cơ bản là vị trí (x, y) của điểm ảnh
và độ xám của nó. Dưới đây chúng ta xem xét một số khái niệm và thuật ngữ
thường dùng trong xử lý ảnh.
Định nghĩa: Mức xám của điểm ảnh là cường độ sáng của nó được gán
bằng giá trị số tại điểm đó.
Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 (Mức 256
là mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8 bit) để biểu diễn
mức xám: Mức xám dùng 1 byte biểu diễn: 28 = 256 mức, tức là từ 0 đến 255).
2.1.4 Phân loại ảnh
Ảnh nhị phân: ảnh chỉ có 2 mức đen trắng phân biệt, tức dùng 1 bit mô tả
21 mức khác nhau. Nói cách khác: mỗi điểm ảnh của ảnh nhị phân chỉ có thể
là 0 hoặc 1. Một ảnh nhị phân được lưu trữ như một mảng lôgíc của 0 và 1.
Hình 2.1 Ảnh nhị phân và nhị phân đảo của bàn tay.
Ảnh xám: hay còn gọi là ảnh đơn sắc là ảnh mà tại mỗi điểm ảnh có một giá trị
mức xám (không chứa màu khác) và khác hoàn toàn với ảnh nhị phân. Ảnh 8
mức xám sẽ có giá trị mỗi điểm ảnh nằm trong đoạn [0, 7]. Ảnh 256 mức xám
sẽ có giá trị mỗi điểm ảnh nằm trong đoạn [0, 255]. Giá trị điểm ảnh = 0 nghĩa
10
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
là điểm ảnh đó tối (đen), giá trị điểm ảnh lớn nhất nghĩa là điểm ảnh đó trắng.
Nói cách khác, giá trị mỗi điểm ảnh càng lớn thì điểm ảnh đó càng sáng.
Hình 2.2 Ảnh xám của một chú chó sói.
Ảnh màu: mô hình bổ sung các loại ánh sáng đỏ, xanh lá cây và xanh lam
được tổ hợp với nhau theo nhiều phương thức khác nhau để tạo nên thế giới
màu.
Hình 2.3 Mô hình màu RGB.
Từ viết tắt RGB trong tiếng Anh có nghĩa là đỏ (red), xanh lá cây (green)
và xanh lam (blue), là ba màu gốc trong các mô hình ánh sáng bổ sung. Cũng
lưu ý rằng mô hình màu RGB tự bản thân nó không định nghĩa thế nào là "đỏ",
"xanh lá cây" và "xanh lam" một cách chính xác, vì thế với cùng các giá trị
như nhau của RGB có thể mô tả các màu tương đối khác nhau trên các thiết bị
khác nhau có cùng một mô hình màu. Trong khi chúng cùng chia sẻ một
mô hình màu chung, không gian màu thực sự của chúng là dao động một cách
đáng kể. Các phần cứng hiển thị điển hình được sử dụng cho các màn hình
máy tính trong năm 2003 sử dụng tổng cộng 24 bit thông tin cho mỗi điểm ảnh
(trong tiếng Anh thông thường được biết đến như bits per pixel hay bpp).
Nó tương ứng với mỗi 8 bit cho màu đỏ, xanh lá cây và xanh lam, tạo thành
một tổ hợp 256 các giá trị có thể có, hay 256 mức cường độ cho mỗi màu.
Với hệ thống như thế, khoảng 16,7 triệu màu rời rạc có thể tái tạo.
11
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
Một mảng RGB có thể thuộc lớp double, uint8 hoặc uint16. Trong một mảng
RGB thuộc lớp double, mỗi thành phần màu có giá trị giữa 0 và 1. Một pixel
mà thành phần màu của nó là (0,0,0) được hiển thị với màu đen và một pixel
mà thành phần màu là (255,255,255) được hiển thị với màu trắng.
Hình 2.4 Ảnh màu của hai chú chim trên cành cây.
2.1.5 Xử lý ảnh và các phương pháp xử lý ảnh
Xử lý ảnh là một loạt các thao tác phân tích ảnh bằng máy tính để có được một
thông tin mong muốn nào đó hay cải thiện chất lượng ảnh cho tốt hơn (rõ ràng hơn).
Một vài ví dụ về xử lý ảnh, buổi sáng đi làm và bạn đến công ty sau đó kiểm tra
dấu vân tay. Đó là xử lý và nhận dạng dấu vân tay. Nghỉ trưa, bạn vào facebook
và đăng một bức ảnh chụp cùng bạn bè. Facebook tự động hỗ trợ tag từng người.
Đó là xử lý và nhận diện khuôn mặt. Chiều về đi metro, bạn gửi xe và chẳng thấy ai
cầm bút ghi vé. Đó là nhờ có hệ thống tự động đọc biển số xe thông qua nhận dạng
chữ số. Tối về bật tivi xem đá bóng, bạn thấy trong các tình huống phân tích trận đấu,
việc di chuyển của các cầu thủ được đánh dấu khoanh tròn dưới chân. Đó là kỹ thuật
tracking trong xử lý video. Những ví dụ đã đưa ra là minh chứng cho sự hiện diện
của xử lý ảnh trong cuộc sống của chúng ta và hãy gọi chung cho nó một cụm từ là
“Xử lý ảnh”.
Trừ ảnh (Pixel Subtraction): Ta có 2 ảnh A và B có cùng kích thước
và mức sáng. Trừ hai ảnh A và B là việc tính toán sự sai khác giữa hai ảnh đó.
Sự sai khác này có thể được tính dựa trên giá trị điểm ảnh, histogram,
hoặc sai khác thống kê. Trong các kỹ thuật trừ ảnh, chúng ta giả sử
các khung hình có kích thước x*y. Phương pháp đơn giản nhất để trừ
hai khung hình là tính giá trị biểu diễn sự chênh lệch tổng cộng về cường độ
của tất cả các điểm ảnh tương ứng trên hai khung hình. Được áp dụng
để phát hiện lỗi và phát hiện chuyển động.
Cộng ảnh (Pixel Addition): Tương tự như kỹ thuật trừ ảnh, phương pháp
đơn giản là cộng giá trị từng pixel tương ứng trên 2 khung hình có kích thước
12
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
x*y. Được áp dụng để làm tăng độ sáng (cộng với chính ảnh đó) hoặc
giảm nhiễu từ một loạt ảnh.
Tích chập (Convolution): Tích chập là một phép toán thông dụng trong
xử lý ảnh, được sử dụng phổ biến trong các bài toán dò biên (edge detection)
và lọc tuyến tính (linear filter). Kết quả của tích chập là giá trị của pixel
trung tâm thông qua phép tính dựa trên các pixel lân cận và chính pixel
trung tâm đó.
Lọc ảnh (Filtering): Dựa vào kỹ thuật tích chập, sử dụng mặt nạ (bộ lọc)
phù hợp để loại bỏ hoặc giữ lại một số đặc điểm của ảnh. Lọc hạ thông
(Low-pas Filter), giữ lại những thành phần tần số thấp, làm mất đi nhiễu
và chi tiết. Được áp dụng để làm trơn ảnh hoặc khử nhiễu. Lọc thượng thông
(High-pas Filter), giữ lại những thành phần tần số cao, làm rõ chi tiết và
đường biên. Được áp dụng để tim đường biên của ảnh. Lọc trung bình
(Average Filter), Có tất cả các trọng số đều bằng nhau, thay thế giá trị
1 điểm ảnh bằng giá trị trung bình của các điểm ảnh lân cận.
Phân ngưỡng (Thresholding): Mục đích chuyển ảnh mức xám về nhị phân,
ngưỡng đóng vai trò quyết định đến hiệu quả của việc nhị phân hóa ảnh. Giá
trị ngưỡng của mỗi ảnh là khác nhau và phụ thuộc vào nhiều yếu tố. Một
ngưỡng được xem là tốt nếu sau quá trình phân ngưỡng ảnh thu được có thể
giữ lại những chi tiết mong muốn và loại bỏ các chi tiết thừa.
2.1.6 Quy trình xử lí ảnh
Xét các bước trong hệ thống xử lý ảnh số. Đầu tiên ảnh từ thế giới bên ngoài được
thu nhận qua các thiết bị thu ảnh như camera, máy chụp ảnh. Trước đây ảnh thu được
qua camera là ảnh tương tự nhưng gần đây với sự phát triển của công nghệ, ảnh màu
hay ảnh đen trắng lấy được từ camera sau đó được chuyển trực tiếp thành ảnh số
tạo thuận lợi cho xử lý tiếp theo. Mặt khác ảnh có thể thu được từ vệ tinh hoặc
máy quét ảnh.
Thu nhận ảnh (Image Acquisition): Ảnh có thể thu được qua camera, webcam
hay máy scan hoặc từ video.
Tiền xử lý ảnh (Image Pre-processing): Sau khi nhận ảnh, ảnh có thể bị nhiễu
do môi trường nên cần loc nhiễu cho ảnh, nâng độ tương phản để làm ảnh
rõ nét hơn.
Phân đoạn ảnh(Segmentation): Phân đoạn ảnh là tách một ảnh đầu vào thành
các vùng thành phần ddeeer biễu diễn , phân tích, nhận dạng ảnh.
Biểu diễn ảnh: Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh
đã phân đoạn cộng với mã liên kết với các vùng lân cận. Việc biến đổi
các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo
bằng máy tính. Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn
đặc trưng gắn với việc tách lớp đối tượng này với đối tượng khác trong
phạm vi ảnh nhận được.
13
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
Nhận dạng và nội suy hình ảnh (Image Recognition and Interpretation):
Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu được
bằng cách so sánh với mẫu chuẩn đã được lưu từ trước. Nội suy là phán đoán
theo ý nghĩa trên cơ sở nhận dạng.
2.2 PYTHON VÀ OPENCV
2.2.1 Python
2.2.1.1 Giới thiệu về Python
Python là ngôn ngữ kịch bản hướng đối tượng (object-oriented scripting language).
Không chỉ vậy, nó còn là một ngôn ngữ cấp cao có khả năng thông dịch (interpreted
language) và có tính tương tác (interactive language) cao.
Nhờ chức năng thông dịch mà trình thông dịch (Interpreter) của Python có thể
xử lý lệnh tại thời điểm chạy chương trình (runtime). Nhờ đó mà ta không cần biên dịch
chương trình trước khi thực hiện nó (tương tự như Perl và PHP).
Tính năng tương tác của Python giúp ta có thể tương tác trực tiếp với
trình thông dịch của nó ngay tại dấu nhắc lệnh. Cụ thể: Ta có thể thực hiện lệnh
một cách trực tiếp tại dấu nhắc của Python.
Python hỗ trợ mạnh cho phong cách lập trình hướng đối tương và kỹ thuật lập trình
gói mã trong đối tượng.
Mặc dầu Python được xem là ngôn ngữ lập trình dành cho những ai mới làm quen
với việc lập trình trên máy tính, nhưng nó hỗ trợ mạnh cho việc phát triển nhiều loại
ứng dụng khác nhau, từ các chương trình xử lý văn bản đơn giản đến các ứng dụng web,
đến các chương trình game,…
Python được phát triển tại Viện Nghiên cứu Quốc gia về Toán học và Khoa học
Máy tính Hà Lan bởi Guido van Rossum vào những năn 80-90 của thế kỷ trước.
Hiện nay Python được duy trì và phát triển bởi nhóm phát triển core của viện này.
Python được phát triển từ nhiều ngôm ngữ khác nhau: ABC, Modula-3, C, C++,
Algol-68, SmallTalk, Unix shell và các ngôn ngữ script khác.
Tương tự như Perl, Python là ngôn ngữ có bản quyền, hiện nay mã nguồn của nó
được phát hành theo GNU - General Public License (GPL).
Ngoài các chức năng thông thương của một ngôn ngữ lập trình hiện đại như:
Dễ học, dễ đọc mã nguồn, dễ phát triển, dễ tương tác với hệ thống/với mạng,
chạy đa nền, nhúng được trong nhiều ngôn ngữ lập trình cấp cao, tương tác với hầu hết
các hệ quản trị cơ sở dữ liệu,… Python còn có các chức năng nổi trội sau đây:
Một trong những điểm mạnh nhất của Python đến từ thư viện chuẩn của nó:
Một thư viện lớn, dễ sử dụng có tính tương thích cao và đặc biệt hoạt động
đa nền: UNIX, Windows and Macintosh.
Python có thể được sử dụng như ngôn ngữ script, hoặc ngôn ngữ biên dịch,
nhờ đó mà ta có thể buil các chương trình lớn trên nó.
14
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
Python hỗ trợ chế độ Interactive, nhờ đó mà ta có thể nhập kết quả
từ các đầu cuối khác nhau vào chương trình Python, nhờ đó mà việc test
và debug lỗi code trở nên đơn giản hơn.
Python cho phép người lập trình tích hợp (add-on) các mô-đun cấp thấp,
các tool tùy chọn vào trình thông dịch của nó. Điều này giúp cho việc lập trình
trên Python trở nên dễ dàng và hiệu quả hơn.
2.2.1.2 Cách thức cài đặt và sử dụng
Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi theo thời gian,
nó đã “bành trướng” sang mọi hệ điều hành từ MS-DOS đến Mac OS, OS/2, Windows,
Linux và các hệ điều hành khác thuộc họ Unix. Mặc dù sự phát triển của Python
có sự đóng góp của rất nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn là tác giả
chủ yếu của Python. Ông giữ vai trò chủ chốt trong việc quyết định hướng
phát triển của Python.
Hiện nay Python đã phát triển đến version 3.x. Dưới đây sẽ là cách cài đặt Python
trên Ubuntu. File cài đặt Python có thể download tại: />Cài đặt Python 3.3 trên Ubuntu:
Cách 1: Cài đặt trực tiếp bằng tập lệnh thực thi trong terminal.
Bước 1: $ sudo apt-get update
Bước 2: $ sudo apt-get upgrade
Bước 3: $ sudo apt-get install python3.3
Cách 2: Cài đặt các phụ thuộc, tải và sau đó cài đặt.
Bước 1: Cài đặt các phụ thuộc: sudo apt-get build-dep python3.2
&& sudo apt-get install libreadline-dev libncurses5-dev libssl1.0.0
tk8.5-dev zlib1g-dev liblzma-de
Bước 2: Download Python 3.3.0: wget
/> Bước 3: Giải nén file Python-3.3.0.tgz: tar xvfz Python-3.3.0.tgz
Bước 4: Cấu hình và cài đặt: cd Python-3.3.0 && ./configure -prefix=/opt/python3.3 && make && sudo make install
Bước 5: Kiểm tra sau khi cài đặt: cd /opt/python3.3/bin/python3
Nếu việc cài đặt là thành công mở terminal và thực thi lệnh như hình 2.5,
sẽ nhận được kết quả tương tự.
Hình 2.5 Thực thi lệnh python và kết quả trả về.
15
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
Theo mặc định, Python được cài vào thư mục: /usr/local/bin và các thư viện
của nó được cài vào thư mục: /usr/local/lib/python3.3.
Ta có thể đặt các file chương trình, các file có thể thực thi của Python ở một
thư mục khác. Khi đó ta phải sử dụng biến moi trường PATH để chỉ đến thư mục này.
Sử dụng lệnh sau đây trong bash shell để thiết lập lại đường dẫn:
export PATH="$PATH:/usr/local/bin/python"
Trong đó /usr/local/bin/python là thư mục chứa các file thực thi của Python.
2.2.1.3 Python cở bản
Python có nhiều điểm tương đồng với Perl, C và Java. Tuy nhiên, có một vài điểm
khác biệt giữa các ngôn ngữ. Trong phần này sẽ tập trung vào việc cung cấp các cú pháp
cơ bản nhất quả Python.
Cách gọi trình biên dịch với các thông số bắt đầu thực hiện script và tiếp tục cho
đến khi script kết thúc. Khi script kết thúc, trình thông dịch không còn hoạt động.
Hãy viết một đoạn Python đơn giản. Mọi tập tin đều có đuôi là .py. Và cũng đưa
toàn bộ mã nguồn trong tập tin test.py.
Hình 2.6 Script python với chương trình đơn giản.
Tiến hành cấp phát quyền và thực thi python script. Chúng ta sẽ nhận được kết quả
như hình 2.7.
Hình 2.7 Cấp phát quyền và thực thi python cript trong Ubuntu.
2.2.2 OpenCV
OpenCV là một thư viện xử lý ảnh mã nguồn mở của Intel,nó có khả năng nhúng
được vào trong các chương trình của máy tính .Nó bao gồm khả năng tiên tiến như
phát hiện khuôn mặt, theo dõi khuôn mặt, nhận diện khuôn mặt, lọc Kalman…
Ngoài ra, nó cung cấp rất nhiều các thuật toán xử lý ảnh thông qua các hàm API
và thể hiện sự đa dạng của trí tuệ nhân tạo.
Intel phát hành phiên bản đầu tiên của OpenCV vào năm 1999. Ban đầu, nó
yêu cầu như là thư viện xử lý hình ảnh của Intel. Nhưng các vấn đề phụ thuộc đã được
gỡ bỏ và bây giờ bạn có thể sử dụng OpenCV là một thư viện độc lập.
16
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
OpenCV hỗ trợ đa nền tảng. Nó hỗ trợ cả Windows và Linux, và gần đây hơn là
MacOSX. Giao diện của nó là nền tảng độc lập. OpenCV là công cụ hữu ích cho những
người bước đầu làm quen với xử lý ảnh số vì các ưu điểm sau:
Image and Video I/O: Những giao diện này sẽ giúp bạn đọc dữ liệu ảnh từ file
hoặc trực tiếp từ video. Bạn cũng có thể tạo các file ảnh và video với
giao diện này.
Thị giác máy và các thuật toán xử lí ảnh (General computer-vision and imageprocessing algorithms(mid – and low level APIs)): Sử dụng những giao diện
này, bạn có thể thực hành với rất nhiều chuẩn thị giác máy mà không cần phải
có mã nguồn của chúng.
Modul thị giác máy ở cấp độ cao: Thêm vào nhận dạng mặt, dò tìm, theo dõi.
Nó bao gồm luồng thị giác (sử dụng camera di động để xác định cấu trúc 3D)
và âm thanh nổi.
AI and machine-learning: Các ứng dụng thị giác máy thường yêu cầu máy móc
phải học (machine-learning) hoặc các hình thức trí tuệ nhân tạo khác. Một vài
trong số chúng là có sẵng trong gói OpenCV.
Lấy mẫu ảnh và phép biến đổi: Nó thường rất cần thiết cho quá trình xử lý một
nhóm các phần tử ảnh như là một đơn vi. OpenCV bao gồm lấy tách ra, lấy
mẫu ngẫu nhiên, phục chế, xoay ảnh, làm cong ảnh, thay đổi hiệu ứng của ảnh.
Tạo và phân tích ảnh nhị phân: Ảnh nhị phân thường được dùng trong các
hệ thống kiểm tra khuyết điểm hình dạng hoặc các bộ phận quan trọng.
Sự biễu diễn ảnh cũng rất thuận tiện khi chúng ta biết rõ vật thể cần bắt.
Cách thức tính toán thông tin 3D (methods for computing 3D information):
Những hàm này rất ích khi xác định và sắp xếp một khối lập thể hoặc
từ một không gian nhìn phức tạp từ một camera riêng.
Các phép toán xử lý ảnh, thị giác máy và biễu diễn ảnh: OpenCV sử dụng
các phép toán phổ biến như đại số học, thống kê và tính toán hình học.
Đồ họa: Những giao diện này giúp bạn có thể vẽ và viết chữ lên hình ảnh.
Thêm vào đó chức năn máy được sử dụng nhiều trong ghi nhãn và đánh giấu.
Ví dụ, nếu bạn viết một chương trình nhận dạng nhiều đối tượng thì nó sẽ rất
có ích cho tạo nhãn ảnh (label image) với kích thước và vị trí.
Phương thức giao tiếp mới với máy: OpenCV bao gồm của sổ giao diện của
chính bản thân nó, được so sánh giới hạn và khả năng thực hiện trong mỗi môi
trường. Chúng cung cấp những môi trường đa phương tiện và đơn giản để hiển
thị hình ảnh, cho phép người dùng nhập dữ liệu từ bàn phím, chuột và điều
khiển quá trình.
17
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
OpenCV là công cụ chuyên dụng được phát triển theo hướng tối ưu hóa
cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc dữ liệu hợp lý, thư viện
tạo giao diện, truy xuất thiết bị phần cứng được tích hợp sẵn.
Hình 2.8 Các khả năng của OpenCV có thể là nhận diện khuôn mặt
(trên bên trái), phát hiện đường đồng mức (trên bên phải), và phát hiện cạnh
(phía dưới).
OpenCV thích hợp để phát triển nhanh ứng dụng. OpenCV là công cụ
mã nguồn mở: Không chỉ là công cụ miễn phí (với BSD license), việc được xây dựng
trên mã nguồn mở giúp OpenCV trở thành công cụ thích hợp cho nghiên cứu
và phát triển, với khả năng thay đổi và mở rộng các mô hình, thuật toán.
OpenCV đã được sử dụng rộng rãi: Từ năm 1999 đến nay, OpenCV đã thu hút
được một lượng lớn người dùng, trong đó có các công ty lớn như Microsoft, IBM, Sony,
Siemens, Google và các nhóm nghiên cứu ở Standford, MIT, CMU, Cambridge...
Nhiều forum hỗ trợ và cộng đồng người dùng đã được thành lập, tạo nên kênh thông tin
rộng lớn hữu ích cho việc tham khảo tra cứu.
2.3 KIẾN THỨC VỀ CỔNG COM
Cổng cổng nối tiếp (Serial port – DE9) là một cổng thông dụng trong các máy tính
truyền thống dùng kết nối các thiết bị ngoại vi với máy tính như: bàn phím,
chuột điều khiển, modem, máy quét...Cổng nối tiếp còn có tên gọi khác như:
Cổng COM, communication.
Mặc dù khái niệm cổng nối tiếp có thể được hiểu theo một nghĩa khác: Các cổng
hoạt động theo nguyên lý "nối tiếp" từng bit một, nhưng bài này chỉ nói đến các loại
cổng nối tiếp được hiểu như COM, RS-232...mà không phải nói đến một nghĩa rộng
hơn nó.
Ứng dụng cổng COM trong sử dụng thông thường của một máy tính:
Bàn phím máy tính (trước đây)
18
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
Chuột điều khiển (trước đây, hiện nay bàn phím và chuột sử dụng các
cổng PS/2 hoặc USB)
Modem (quay số)
Ứng dụng cổng COM trong các chuyên ngành khác
Kết nối với các thiết bị điều khiển (các cổng RS-232, RS-422...) trong
ngành tự động hoá điều khiển. (Sự biến mất của các cổng nối tiếp hiện nay trên
các máy tính khiến cho nhiều kỹ thuật viên gặp khó khăn với các thiết bị điều
khiển cũ)
Kết nối với các thiết bị điện tử dân dụng.
Kết nối với các điện thoại thông minh.
Bảng 2.1 Công dụng của các chân của một cổng nối tiếp 9 chân (9 pin)
theo chuẩn AT và cách đấu nối chuyển đổi cổng nối tiếp 9 chân sang 25 chân.
Cổng nối tiếp thường được tích hợp sẵn trên các máy tính cá nhân từ giữa năm
1990 trong các hệ thống máy tính cá nhân sử dụng CPU thế hệ thứ tư (486). Chúng
thường được tích hợp sẵn trên các bo mạch chủ thông qua chíp Super I/O (thay cho các
chíp UART trước đây) để thuận tiện hơn mà không cần sử dụng các bo mạch riêng cho
chúng. Ứng dụng kết nối thiết bị của cổng COM trong hình 2.9.
Hình 2.8 Kết nối board Intel Galileo bằng cổng COM và cách kết nối các chân.
19
Điều khiển xe lăn bằn bằng cử động tay sử dụng board Intel Galileo
2.4 GIỚI THIỆU VỀ BOARD INTEL GALILEO
2.4.1 Các thành phẩn trên board Intel Galileo
Intel Galileo là một bo mạch vi điều khiển chuyên dùng cho việc phát triển
phần mềm và phần cứng tương tự như Andruino hay Raspberry Pi. Do Intel trưc tiếp
phát triển và là sản phẩm đầu tiên được đội ngũ phát triểnArduino chứng nhận đạt chuẩn
tương thích với nền tảng Arduino.
Hình ảnh thực tế và sơ đồ khối của board Intel Galileo thể hiện trong hình 2.9 và
2.10.
Hình 2.9 Hình ảnh thực tế của board Intel Galileo mặt trước (trái) và mặt sau
(phải).
20