TRƢỜNG ĐẠI HỌCH
VIỆN KỸ
THUẬT
CÔNG
TRƢỜNG
ĐẠIVÀ
HỌC
VINH NGHỆ
VIỆN KỸ THUẬT VÀ CÔNG NGHỆ
ĐỒ ÁN
ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC
TỐT NGHIỆP ĐẠI HỌC
Đề tài:
ĐềTHIẾT
tài:
KẾ CAMERA GIÁM SÁT VÀ XỬ LÝ
ẢNH TRÊN
NỀN TẢNG
RASPBERRY
PILÝ
3
THIẾT
KẾ CAMERA
GIÁM
SÁT VÀ XỬ
ẢNH TRÊN NỀN TẢNG RASPBERRY PI 3
Sinh viên thực hiện:
HỒ SỸ QUÂN
Lớp 53K1-KTĐTTT
Giảng viên hƣớng dẫn: TS. ĐẶNG THÁI SƠN
Sinh viên thực hiện:
HỒ SỸ QUÂN
Lớp 53K1-KTĐTTT
Giảng viên hƣớng dẫn: TS. ĐẶNG THÁI SƠN
Nghệ An, 07-2017
Nghệ An, 07-2017
-1-
LỜI MỞ ĐẦU
Ngày nay nhu cầu sử dụng camera của con ngƣời ngày càng cao, với sự xuất
hiện của camera kỹ thuật số đã giúp con ngƣời có những hình ảnh thực hơn và sử
dụng camera cho nhiều mục đích khác nhau, camera là hệ thống đắc lực giúp con
ngƣơi quản lý, giám sát thời gian thực một cách hiệu quả. Camera giúp ta ghi lại
những kí ức, những hình ảnh sinh động trong cuộc sống. Nhất là đối với các thiết bi
an ninh, camera khơng chỉ là ghi hình quay lƣu lại vào bộ nhớ mà cịn có thể tƣơng
tác với các thiết bị khác để kết hợp thành một hệ thống thơng minh, có thể phát hiện
những điều kiện bất thƣờng tại nơi giám sát. Bên cạnh đó chúng ta kết hợp thêm thƣ
viện OpenCV để xử lý ảnh trên một số lĩnh vực nhƣ lắp đặt hệ thống nhận dạng
biển số xe, hệ thống nhân dạng vân tay chấm cơng … Chính vì vậy em lựa chọn đề
tài tốt nghiệp “thiết kế camera giám sát v
h trê
ề t
g Raspberry Pi 3”.
Cấu trúc đồ án gồm 4 chƣơng:
Chƣơng 1. Giới thiệu máy tính nhúng và ngơn ngữ lập trình cho hệ thống
Chƣơng 2. Tổng quan về Kit Raspberry Pi3
Chƣơng 3. Lý thuyết về xử lý ảnh bằng Python và OpenCV
Chƣơng 4. Phân tích, thiết kế hệ thống camera giám sát
Em xin trân trọng cảm ơn TS. Đặng Thái Sơn đã hƣớng dẫn về nội dung và
phƣơng pháp trong suốt quá trình triển khai thực hiện đồ án. Xin trân trọng cảm ơn
tập thể thầy cô giáo Viện Kỹ thuật Công nghệ đã giảng dạy, giúp đỡ chúng em hồn
thành chƣơng trình đào tạo.
Do hạn chế về thời gian và năng lực, đồ án không tránh khỏi những thiếu sót.
Em kính mong nhận đƣợc ý kiến góp ý của thầy cơ và các bạn để chỉnh sửa và hồn
thiện hơn.
Em i châ th
hc mơ !
i
T M TẮT ĐỒ ÁN
Đồ án đi vào tìm hiểu về hệ thống nhúng và các thiết bị hệ thống nhúng thƣờng
sử dụng. Từ đó có một cái nhìn tổng quan và chi tiết hơn về các ƣu điểm, chức
năng, ứng dụng và hƣớng phát triển của hệ thống nhúng. Trên cơ sở đó chúng ta đi
nghiên cứu một hệ thống nhúng đơn giản, dễ sử dụng và giá thành khá rẻ đó là máy
tính nhúng Raspberry Pi 3. Với việc sử dụng board mạch máy tính nhúng em đi tìm
hiểu và nghiên cứu đề tài: “thiết bị giám sát sử dụng camera và xử lý ảnh trên nền
tảng Raspberry Pi 3”. Đề tài tập trung nghiên cứu và thiết kế một camera giám sát
sử dụng để quay video và chụp ảnh. Từ đó d ng ngơn ngữ python kết hợp với thƣ
viện OpenCV để xử lý ảnh nhƣ: chuyển đổi phông màu, nhận dạng biển số xe, lọc
ảnh …
ABSTRACT
The project goes on to find about embeded system and embedded system
devices often used. From there has an overview and more details about the
advantages, functions, applications and development of embeded systems. On that
basis we go to research a embedded system is simple, easy to use and cheap that is
computer embeded Raspberry Pi 3. With the use of embedded computer board
circuit to learn and research: “Surveillance equipment use camera and image
processing on the platform Raspberry Pi 3”. The project focus on research and
desingn a surveillance camera for video recording and photography. From there use
python language combined library OpenCV for processing image such as: Color
conversion, license plate identification, filter image …
ii
MỤC LỤC
LỜI MỞ ĐẦU ................................................................................................................... - 1 T M TẮT ĐỒ ÁN ................................................................................................................ii
ABSTRACT...........................................................................................................................ii
MỤC LỤC ............................................................................................................................iii
DANH MỤC CÁC HÌNH ẢNH ............................................................................................ v
DANH MỤC CÁC TỪ VIẾT TẮT ...................................................................................... vi
CHƢƠNG 1. GIỚI THIỆU MÁY TÍNH NHÚNG VÀ NGƠN NGỮ LẬP TRÌNH CHO
HỆ THỐNG ........................................................................................................................... 1
1.1. Tổng quan về máy tính nhúng ............................................................................................. 1
1.1.1. Sự ra đời của hệ thống nhúng ......................................................................................... 1
1.1.2. Đặc điểm và ứng dụng của hệ thống nhúng .................................................................... 3
1.1.3. Kiến trúc hệ nhúng .......................................................................................................... 5
1.1.4. Tình hình phát triển và các thiết bị nhúng ...................................................................... 6
1.1.5. Các ngôn ngữ cho lập trình hệ nhúng ............................................................................. 7
1.2. Tổng quan về Python và thƣ viện OpenCV ....................................................................... 11
1.2.1. Ngôn ngữ lập trình Python ............................................................................................ 11
1.2.2. Thƣ viện OpenCV ......................................................................................................... 15
1.3. Giới thiệu về phần mềm Qt Creator................................................................................... 18
1.4. Kết luận chƣơng................................................................................................................. 19
CHƢƠNG 2. TỔNG QUAN VỀ KIT RASPBERRY PI3................................................... 20
2.1. Giới thiệu chƣơng .............................................................................................................. 20
2.2. Giới thiệu về Kit Raspberry Pi 3........................................................................................ 20
2.3. Cấu tạo phần cứng của Raspberry Pi 3 .............................................................................. 20
2.3.1. Cấu hình Raspberry Pi 3 Model B ................................................................................ 21
2.3.2. Cấu trúc phần cứng ....................................................................................................... 22
2.3.3. Ngôn ngữ lập trình trên Pi ............................................................................................ 24
2.3.4. Các hệ điều hành cho Raspberry pi 3 ........................................................................... 24
2.3.5. Phụ kiện hỗ trợ kèm theo .............................................................................................. 26
2.3.6. Cài đặt hệ điều hành cho Raspberry pi ......................................................................... 27
2.3.7. Làm việc với Raspberry pi qua máy tính ..................................................................... 29
2.4. Camera ............................................................................................................................... 33
2.5. Kết luận chƣơng ................................................................................................................. 35
CHƢƠNG 3. L THUYẾT VỀ XỬ L ẢNH BẰNG PYTHON VÀ OPENCV .............. 36
3.1. Phƣơng pháp nội suy ......................................................................................................... 36
iii
3.1.1. Nội suy tuyến tính ........................................................................................................ 36
3.1.2. Nội suy song tuyến tính ................................................................................................ 36
3.2. Thay đổi v ng màu ............................................................................................................ 36
3.3. Chuyển đổi hình học của hình ảnh..................................................................................... 37
3.3.1. Chuyển đổi.................................................................................................................... 37
3.3.2. Nhân rộng ..................................................................................................................... 37
3.3.3. Dịch .............................................................................................................................. 37
3.3.4. Vòng xoay .................................................................................................................... 37
3.4. Phƣơng pháp lọc số trong ảnh ........................................................................................... 38
3.4.1. Lọc hình ảnh ................................................................................................................. 38
3.4.2. Lọc Gaussian ................................................................................................................ 39
3.4.3. Lọc song phƣơng .......................................................................................................... 39
3.4.4. Lọc Blur ........................................................................................................................ 40
3.4.5. Lọc Sobel ...................................................................................................................... 40
3.4.6. Lọc Laplace .................................................................................................................. 41
3.4.7. Tìm biên ảnh dựa trên bộ lọc Canny ............................................................................ 41
3.5. Kết luận chƣơng ................................................................................................................. 43
CHƢƠNG 4. PHÂN TÍCH, THIẾT KẾ HỆ THỐNG CAMERA GIÁM SÁT .................. 44
4.1. Giới thiệu chƣơng .............................................................................................................. 44
4.2. Cài đặt môi trƣờng làm việc cho Kit Raspberry Pi 3 ......................................................... 44
4.2.1. Cài đặt hệ điều hành Raspbian ..................................................................................... 44
4.2.2. Cài đặt ngôn ngữ python .............................................................................................. 44
4.2.3. Import thƣ viện OpenCV .............................................................................................. 45
4.2.4. Gắn camera vào Kit ...................................................................................................... 45
4.3. Lƣu đồ thuật toán ............................................................................................................... 45
4.4. Yêu cầu và mục tiêu thiết kế .............................................................................................. 45
4.5. Phƣơng pháp nghiên cứu ................................................................................................... 45
4.6. Thiết kế hệ thống ............................................................................................................... 46
4.7. Đánh giá kết quả và thảo luận ............................................................................................ 46
4.8. Những kết quả đạt đƣợc qua xử lý ảnh .............................................................................. 47
4.9. Kết luận chƣơng ................................................................................................................. 52
KẾT LUẬN CHUNG .......................................................................................................... 53
PHỤ LỤC ............................................................................................................................ 54
TÀI LIỆU THAM KHẢO ................................................................................................... 60
iv
DANH MỤC CÁC HÌNH ẢNH
Hình 1.1 Mơ hình một hệ thống mạch nhúng ............................................................1
Hình 1.2 Một số thiết bị nhúng thơng dụng ................................................................5
Hình 1.3 Kiến trúc tổng thể của hệ thống nhúng ........................................................5
Hình 1.4 Logo ngơn ngữ Python .................................................................................9
Hình 1.5 Logo ngơn ngữ Java ...................................................................................10
Hình 2.1 Kit Raspberry Pi 3 mode B ........................................................................21
Hình 2.2 Mặt trƣớc của Kit Raspberry Pi 3 mode B .................................................22
Hình 2.3 Mặt sau của Kit Raspberry Pi 3 mode B ....................................................22
Hình 2.4 Cấu trúc phần cứng Raspberry Pi 3............................................................22
Hình 2.5 Sơ đồ chân kết nối Raspberry Pi 3 .............................................................23
Hình 2.6 Sơ đồ 40 chân GPIO của Raspberry Pi 3 ...................................................23
Hình 2.7 Phụ kiện kèm theo với Raspberry Pi ..........................................................27
Hình 2.8 Giao diện của phần mềm SD Formatter 4.0 ...............................................28
Hình 2.9 D ng phần mềm Win32 Disk để copy hệ điều hành vào thẻ nhớ ..............29
Hình 2.10 Thơng tin địa chỉ IP ..................................................................................29
Hình 2.11 Giao diện raspi-config ..............................................................................30
Hình 2.12 Giao diện PuTTY trên máy tính ...............................................................31
Hình 2.13 Màn hình điều khiển Raspberry bằng SSH ..............................................31
Hình 2.14 Giao diện TightVNC Viewer trên máy tính .............................................33
Hình 2.15 Màn hình điều khiển Pi từ máy tính .........................................................33
Hình 2.16 Module Pi camera ....................................................................................34
Hình 4.1 Lƣu đồ thuật tốn cho Kit xử lý .................................................................45
Hình 4.2 Hệ thống sau khi hồn thiện .......................................................................46
Hình 4.3 Những hình ảnh khi chuyển đổi khơng gian màu ......................................47
Hình 4.4 Điều chỉnh độ tƣơng phản và độ sáng ........................................................47
Hình 4.5 Ảnh đƣợc xử lý qua các phép lọc khác nhau .............................................48
Hình 4.6 Chỉ ra điểm tr ng nhau giữa hai bức hình..................................................48
Hình 4.7 Nhận dạng biển số xe .................................................................................49
v
DANH MỤC CÁC TỪ VIẾT TẮT
OpenCV Open Computer Vision
Vào/Ra
I/O
Input/Output
GUIs
Graphical User Interfaces
Giao diện đồ họa ngƣời d ng
IDE
Integrated Development Environment
Môi trƣờng phát triển tích hợp
HĐH
Operating system
Hệ điều hành
CPU
Central Processing Unit
Bộ xử lý trung tâm
GPU
Graphics Processing Unit
Bộ xử lý đồ họa
GPIO
General Purpose Input/Output
Cổng vào/ra vạn năng
SoC
System on Chip
Hệ thống trên Chip
IoT
Internet of Things
Mạng internet vạn vật
LCD
Liquid Crystal Display
Màn hình tinh thể lỏng
VNC
Virtual Network Computing
Mạng máy tính ảo
SSH
Secure Shell
vi
CHƢƠNG 1
GIỚI THIỆU MÁY TÍNH NHÚNG VÀ NGƠN NGỮ LẬP TRÌNH
CHO HỆ THỐNG
1.1. Tổng quan về máy tính nhúng
1.1.1. Sự ra đời của hệ thống nhúng
Hệ thống nhúng (Embedded System) là một thuật ngữ để chỉ một hệ thống có
khả năng tự trị đƣợc nhúng vào trong một môi trƣờng hay một hệ thống mẹ. Đó là
các hệ thống tích hợp cả phần cứng và phần mềm phục vụ các bài tốn chun dụng
trong nhiều lĩnh vực cơng nghiệp, tự động hoá điều khiển, quan trắc và truyền tin.
Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có tính năng tự động hố
cao.
Hình 1.1 Mơ hình một hệ thống mạch nhúng
Hệ thống nhúng thƣờng đƣợc thiết kế để thực hiện một chức năng chuyên biệt
nào đó. Khác với các máy tính đa chức năng, chẳng hạn nhƣ máy tính cá nhân, một
hệ thống nhúng chỉ thực hiện một hoặc một vài chức năng nhất định, thƣờng đi kèm
với những yêu cầu cụ thể và bao gồm một số thiết bị máy móc và phần cứng chuyên
dụng mà ta khơng tìm thấy trong một máy tính đa năng nói chung. Vì hệ thống chỉ
đƣợc xây dựng cho một số nhiệm vụ nhất định nên các nhà thiết kế có thể tối ƣu hóa
nó nhằm giảm thiểu kích thƣớc và chi phí sản xuất. Các hệ thống nhúng thƣờng
1
đƣợc sản xuất hàng loạt với số lƣợng lớn. Hệ thống nhúng rất đa dạng, phong phú
về chủng loại. Đó có thể là những thiết bị cầm tay nhỏ gọn nhƣ đồng hồ kĩ thuật số
và máy chơi nhạc MP3, hoặc những sản phẩm lớn nhƣ đèn giao thông, bộ kiểm soát
trong nhà máy hoặc hệ thống kiểm soát các máy năng lƣợng hạt nhân. Xét về độ
phức tạp, hệ thống nhúng có thể rất đơn giản với một vi điều khiển hoặc rất phức
tạp với nhiều đơn vị, các thiết bị ngoại vi và mạng lƣới đƣợc nằm gọn trong một lớp
vỏ máy lớn.
Các thiết bị PDA hoặc máy tính cầm tay cũng có một số đặc điểm tƣơng tự với
hệ thống nhúng nhƣ các hệ điều hành hoặc vi xử lý điều khiển chúng nhƣng các
thiết bị này không phải là hệ thống nhúng thật sự bởi chúng là các thiết bị đa năng,
cho phép sử dụng nhiều ứng dụng và kết nối đến nhiều thiết bị ngoại vi.
Hệ thống nhúng đầu tiên là Apollo Guidance Computer (Máy tính Dẫn đƣờng
Apollo) đƣợc phát triển bởi Charles Stark Draper tại phịng thí nghiệm của trƣờng
đại học MIT. Hệ thống nhúng đƣợc sản xuất hàng loạt đầu tiên là máy hƣớng dẫn
cho tên lửa quân sự vào năm 1961. Nó là máy hƣớng dẫn Autonetics D-17, đƣợc
xây dựng sử dụng những bóng bán dẫn và một đĩa cứng để duy trì bộ nhớ. Khi
Minuteman II đƣợc đƣa vào sản xuất năm 1996, D-17 đã đƣợc thay thế với một máy
tính mới sử dụng mạch tích hợp. Tính năng thiết kế chủ yếu của máy tính
Minuteman là nó đƣa ra thuật tốn có thể lập trình lại sau đó để làm cho tên lửa
chính xác hơn, và máy tính có thể kiểm tra tên lửa, giảm trọng lƣợng của cáp điện
và đầu nối điện.
Từ những ứng dụng đầu tiên vào những năm 1960, các hệ thống nhúng đã giảm
giá và phát triển mạnh mẽ về khả năng xử lý. Bộ vi xử lý đầu tiên hƣớng đến ngƣời
tiêu d ng là Intel 4004, đƣợc phát minh phục vụ máy tính điện tử và những hệ
thống nhỏ khác. Tuy nhiên nó vẫn cần các chip nhớ ngoài và những hỗ trợ khác.
Vào những năm cuối 1970, những bộ xử lý 8 bit đã đƣợc sản xuất, nhƣng nhìn
chung chúng vẫn cần đến những chip nhớ bên ngoài.
Vào giữa thập niên 80, kỹ thuật mạch tích hợp đã đạt trình độ cao dẫn đến nhiều
thành phần có thể đƣa vào một chip xử lý. Các bộ vi xử lý đƣợc gọi là các vi điều
khiển và đƣợc chấp nhận rộng rãi. Với giá cả thấp, các vi điều khiển đã trở nên rất
hấp dẫn để xây dựng các hệ thống chuyên dụng. Đã có một sự b ng nổ về số lƣợng
2
các hệ thống nhúng trong tất cả các lĩnh vực thị trƣờng và số các nhà đầu tƣ sản
xuất theo hƣớng này. Ví dụ, rất nhiều chip xử lý đặc biệt xuất hiện với nhiều giao
diện lập trình hơn là kiểu song song truyền thống để kết nối các vi xử lý. Vào cuối
những năm 80, các hệ thống nhúng đã trở nên phổ biến trong hầu hết các thiết bị
điện tử và khuynh hƣớng này vẫn còn tiếp tục cho đến nay.
Cho đến nay, khái niệm hệ thống nhúng đƣợc nhiều ngƣời chấp nhận nhất là: hệ
thống thực hiện một số chức năng đặc biệt có sử dụng vi xử lý. Khơng có hệ thống
nhúng nào chỉ có phần mềm.
1.1.2. Đặc điểm và ứng dụng của hệ thống nhúng
Đặc điểm của hệ thống nhúng
Hệ thống nhúng thƣờng không phải là một khối riêng biệt mà là một hệ thống
phức tạp nằm trong thiết bị mà nó điều khiển.
Các hệ thống nhúng bị giới hạn nhiều hơn về phần cứng và chức năng phần
mềm so với máy tính cá nhân. Giới hạn phần cứng có thể bao gồm giới hạn về khả
năng xử lý, tiêu thụ điện năng, bộ nhớ, chức năng phần cứng… Còn giới hạn phần
mềm thƣờng liên quan đến việc hỗ trợ ít ứng dụng, ứng dụng bị thu gọn tính năng,
khơng có hệ điều hành hoặc hệ điều hành có nhiều hạn chế. Tuy nhiên, ngày nay,
những giới hạn này đã đƣợc khắc phục đáng kể bằng các hệ thống nhúng đƣợc thiết
kế phức tạp và đầy đủ tính năng hơn. Phần mềm của hệ thống nhúng đƣợc lƣu trữ
trên các bộ nhớ ROM, Flash và đƣợc gọi là Firmware.
Hệ thống nhúng đƣợc thiết kế để thực hiện một chức năng chuyên biệt nào đó.
Đây là điểm khác biệt so với các hệ thống máy tính khác nhƣ máy tính cá nhân hoặc
các siêu máy tính có thể thực hiện nhiều chức năng khác nhau với những phép tính
phức tạp. Chuyên dụng giúp nâng cao tính dễ sử dụng và tiết kiệm tài nguyên.
Cảm nhận môi trƣờng: cảm biến nhiệt độ, độ ẩm, ánh sáng, trọng lƣợng…, cảm
nhận bằng tín hiệu điện (máy dị nhiễu điện từ)
Tác động trở lại mơi trƣờng (hú cịi báo động khi phát hiện khói trong tịa
nhà…)
Tốc độ tƣơng tác phải đáp ứng thời gian thực (hệ thống còi báo hỏa, hệ thống
chống trộm trên ô tô…)
3
Có thể có hoặc khơng có giao diện giao tiếp với ngƣời d ng nhƣ máy tính cá
nhân. Với những hệ thống đơn giản, thiết bị nhúng sử dụng LCD nhỏ, Joystick,
LED, nút bấm, chỉ thị chữ hoặc số và thƣờng đi kèm với một menu đơn giản. Hiện
nay chúng ta cũng có thể kết nối đến hệ thống nhúng thông qua giao diện Web, việc
này cho phép giảm thiểu chi phí cho màn hình nhƣng vẫn cung cấp khả năng hiển
thị và nhập liệu thuận tiện thuận tiện thông qua mạng và máy tính khác.
Nhiều loại thiết bị nhúng có những u cầu rất cao về chất lƣợng, tính ổn định
và độ tin cậy. Lỗi của hệ thống nhúng có thể gây ra tai nạn khủng khiếp: Hệ thống
điều khiển máy bay, tên lửa, hệ thống điều khiển động cơ ơ tơ…Lỗi trên hệ thống
nhúng có thể khơng sửa đƣợc (vd: vệ tinh nhân tạo), nếu sửa đƣợc thì chi phí cũng
rất cao (thu hồi sản phẩm hoặc thiết kế lại tồn bộ…) Vì vậy việc phát triển hệ
thống nhúng yêu cầu quy trình kiểm tra – kiểm thử rất cẩn thận.
Thông thƣờng với những hệ thống yêu cầu độ ACTIVE cao thì việc trang bị 1
hệ thống dự phòng, backup là điều chắc chắn.
Các ứng dụng của hệ thống nhúng
Với những ƣu điểm vƣợt trội của mình thì hệ thống nhúng đƣợc ứng dụng rất
rộng rãi trong các lĩnh vực nghiên cứu và tự động.
Một số ví dụ điển hình về hệ thống nhúng:
Các hệ thống dẫn đƣờng trong khơng lƣu, hệ thống định vị tồn cầu, vệ tinh.
Các thiết bị gia dụng: tủ lạnh, lị vi sóng, lò nƣớng. Các thiết bị kết nối mạng nhƣ
router, hub, gateway. Các thiết bị văn phòng: máy photocopy, máy fax, máy in, máy
scan. Các thiết bị y tế: máy thẩm thấu, máy điều hòa nhịp tim. Các máy trả lời tự
động. Dây chuyền sản xuất tự động trong công nghiệp, robots.
4
Hình 1.2 Một số thiết bị nhúng thơng dụng
1.1.3. Kiến trúc hệ nhúng
Mỗi hệ thống nhúng đều có một kiến trúc thổng thể nhƣ sau:
Phần mềm hệ thống
Phần mềm ứng dụng
Phần cứng
Hình 1.3 Kiến trúc tổng thể của hệ thống nhúng
Phần mềm hệ thống
Trong phần này gồm: Device driver (UATR, Ethernet, ADC…), Hệ điều hành
nhúng (eCos, ucLinux, VxWorks, Monta Vista Linux, BIOS, QNX…), quản lý bộ
nhớ, quản lý tiến trình, quản lý chia sẽ tài nguyên.
Phần mềm hệ thống có ƣu điểm là có thể tái sử dụng trên một hệ thống nhúng
khác
Phần mềm ứng dụng
Quyết định hành vi (chức năng) của một hệ thống nhúng. Nhƣng lại khó tái sử
dụng trên một hệ thống nhúng khác.
5
Phần cứng
Trong phần cứng bao gồm: Vi xử lý, bộ nhớ, tụ điện, điện trở, mạch tích hợp,
bảng mạch in, connector. Trong phần vi xử lý thì bộ xử lý đƣợc thiết kế riêng, chỉ
bao gồm phần xử lý. Có thể thay đổi thêm bớt các thành phần ngoại vi một cách
linh hoạt. Vi điều khiển thì đƣợc tích hợp các thành phần ngoại vi trên chip để giảm
kích thƣớc hệ thống. Còn SoC (System on Chip) là một vi mạch tích hợp cao, hỗ trợ
đa nhân xử lý và nhiều giao tiếp trên 1 chip. Giúp tăng tốc thời gian thiết kế hệ
thống. Sử dụng nhƣ một mạch tích hợp cho ứng dụng cụ thể (ASIC) hoặc mạch
logic khả trình (FPGA).
1.1.4. Tình hình phát triển và các thiết bị nhúng
Các hệ nhúng là những hệ kết hợp phần cứng và phần mềm một cách tối ƣu.
Các hệnhúng là những hệ chuyên dụng, thƣờng hoạt động trong chế độ thời gian
thực, bị hạn chế về bộ nhớ, giá thành phải rẻ nhƣng lại phải hoạt động tin cậy và
tiêu tốn ít năng lƣợng. Các hệ nhúng rất đa dạng và có nhiều kích cỡ, khả năng tính
tốn khác nhau.
Ngồi ra các hệ nhúng thuờng phải hoạt động trong môi trƣờng khắc nghiệt có
độ nóng ẩm, rung xóc cao. Ví dụ nhƣ các điều khiển các máy diesel cho tàu biển,
các thiết bị cảnh báo cháy nổ trong hầm lò. Các hệ thống nhúng lớn thƣờng là các
hệ nối mạng. Ở máy bay, tàu vũ trụ thƣờng có nhiều mạng nhúng kết nối để kiểm
soát hoạt động và điều khiển. Trong ô tô hiện đại có đến trên 80 nút mạng kết nối
các đầu đo cơ cấu chấp hành để bảo đảm ơ tơ hoạt động an tồn và thoải mái cho
ngƣời sử dụng.
Thiết kế các hệ thống nhúng là thiết kế phần cứng và phần mềm phối hợp. Cách
thiết kế cổ điển là cách xác định trƣớc các chức năng phần mềm (SW) và phần cứng
(HW) rồi sau đó các bƣớc thiết kế chi tiết đƣợc tiến hành một cách độc lập ở hai
khối. Hiện nay đa số các hệ thống tự động hóa thiết kế (CAD) thƣờng dành cho
thiết kế phần cứng. Các hệ thống nhúng hiện nay sử dụng đồng thời nhiều công
nghệ nhƣ vi xử lý, DSP, mạng và các chuẩn phối ghép, protocol, do vậy xu thế thiết
kế các hệ nhúng hiện nay địi hỏi có khả năng thay đổi mềm dẻo hơn trong quá trình
thiết kế 2 phần HW và SW. Để có đƣợc thiết kế cuối c ng tối ƣu, quá trình thiết kế
SW và HW phải phối hợp với nhau chặt chẽ và có thể thay đổi sau mỗi lần thử chức
6
năng hoạt động tổng hợp. Thiết kế các hệ nhúng đòi hỏi kiến thức đa ngành về điện
tử, xử lý tín hiệu, vi xử lý, thuật điều khiển và lập trình thời gian thực.
Phần mềm trong các hệ nhúng ngày càng chiếm tỉ trọng cao và đã trở thành một
thành phần cấu tạo nên thiết bị bình đẳng nhƣ các phần cơ khí, linh kiện điện tử,
linh kiện quang học... các hệ nhúng ngày càng phức tạp hơn đáp ứng các yêu cầu
khắt khe về thời gian thực, tiêu ít năng lƣợng, hoạt động tin cậy ổn định hơn, có khả
năng hội thoại cao, có khả năng kết nối mạng, có thích nghi, tự tổ chức cao có khả
năng tái cấu hình nhƣ một thực thể, một tác nhân. Và có khả năng tiếp nhận năng
lƣợng từ nhiều nguồn khác nhau (ánh sáng, rung động, điện từ trƣờng, sinh học...)
để tạo nên các hệ thống tự tiếp nhận năng lƣợng trong quá trình họat động.
Tuy nhiên hệ thống nhúng hiện nay còn phải đối mặt với nhiều thách. Độ phức
tạp của hệ thống tăng cao do nó kết hợp nhiều lĩnh vực đa ngành, kết hợp phần cứng
và phần mềm, trong khi các phƣơng pháp thiết kế và kiểm tra chƣa chín muồi.
Khoảng cách giữa lý thuyết và thực hành lớn và cịn thiếu các phƣơng pháp và
lý thuyết hồn chỉnh cho khảo sát phân tích tồn cục của hệ nhúng bao gồm lý
thuyết điều khiển tự động, thiết kế máy, công nghệ phần mềm, điện tử, vi xử lý, các
công nghệ hỗ trợ khác. Mặt khác các hệ nhúng còn nhiều vấn đề cần giải quyết với
độ tin cậy và tính mở của hệ thống. Do hệ thống nhúng thƣờng phải hội thoại với
môi trƣờng xung quanh nên nhiều khi gặp những tình huống khơng lƣờng trƣớc dễ
dẫn đến hệ thống bị loạn. Trong quá trình hoạt động một số phần mềm thƣờng phải
chỉnh lại và thay đổi nên hệ thống phần mềm có thể khơng kiểm sốt đƣợc. Đối với
hệ thống mở, các hãng thứ 3 đƣa các module mới, thành phần mới vào cũng có thể
gây nên sự hoạt động thiếu tin cậy.
1.1.5. Các ngôn ngữ cho lập trình hệ nhúng
Hiện nay có rất nhiều ngơn ngữ có thể dung nhập cho lập trình hệ nhúng, nhƣng
t y vào từng lĩnh vực ứng dụng và mức độ đề tài mà chúng ta lựa chọn ngơn ngữ
lập trình sao cho ph hợp với thực tiễn cũng nhƣ ph hợp với dung lƣợng của hệ
thống nhúng.
Ngôn ngữ C
Ngôn ngữ lập trình vốn đƣợc thiết kế trong chƣơng trình chuyển mạch điện
thoại sẽ là một lựa chọn hợp lý dành cho việc phát triển hệ thống nhúng. Ngôn ngữ
7
C gần nhƣ là một ngôn ngữ chung đang tồn tại trong giới lập trình mà gần nhƣ ai
cũng phải biết. Ngơn ngữ này có sẵn hầu hết trên mọi nền tảng hệ thống nhúng tiên
tiến đang có mặt trên thị trƣờng. Đối với một số nền tảng không hỗ trợ trực tiếp thì
đây vẫn là ngơn ngữ chun dụng đƣợc sử dụng trong các bộ công cụ phát triển
phần mềm (SDK).
Trong điều kiện hiện nay, ngôn ngữ C cũng có một ít trở ngại khi nó mang tính
thủ tục nhiều hơn là hƣớng đối tƣợng. Ngơn ngữ này cịn không đƣợc thiết kế để
hƣớng tới giao diện đồ họa ngƣời d ng và đƣợc d ng để biên dịch hơn là diễn giải.
Tuy nhiên đây vẫn là một ứng cử viên mạnh mẽ cho công ty nào đang nỗ lực phát
triển IoT.
Ngơn ngữ C++
Khi thế giới lập trình đã bắt đầu chuyển sang ngôn ngữ hƣớng đối tƣợng trong
đầu những năm 1980 thì ngơn ngữ thủ tục nhƣ Fortran, Cobol và C dƣờng nhƣ rơi
dần vào quên lãng. Trong khi Fortran và Cobol đã trở thành ngôn ngữ hƣớng đối
tƣợng nhƣng ngôn ngữ C không thay đổi bởi sự liên quan của nó đến cơng việc của
Bjarne Stroustrup, ngƣời đã tạo nên ngôn ngữ này. Ngôn ngữ C ngày càng phát
triển và có thêm nhiều tính năng hƣớng đối tƣợng rồi cuối c ng trở thành ngôn
ngữ C++.
Ngôn ngữ C++ vẫn giữ nguyên phƣơng thức, cấu trúc của ngôn ngữ C nhƣng
đƣợc bổ sung thêm khả năng trừu tƣợng hóa dữ liệu, đối tƣợng (object), lớp (class).
Tất cả những tính năng này làm cho ngơn ngữ C ++ trở thành sự lụa chọn cho
những ngƣời viết ứng dụng nhúng, lập trình IoT cho các hệ thống Linux. Ngơn ngữ
lập trình này vẫn đang hoạt động mạnh mẽ sau hơn 30 năm xuất hiện.
Ngôn ngữ Python
Một ngôn ngữ thiết kế trong thời gian nghỉ lễ và đƣợc đặt tên theo đoàn kịch
phim hài nổi tiếng dƣờng nhƣ là một ứng cử viên sáng giá cho các chuyên gia lập
trình yêu cầu sự đơn giản. Ngồi ra ngơn ngữ Python có thể đƣợc mở rộng để sử
dụng trong ngành công nghiệp nặng hay đƣợc d ng để phân tích dữ liệu trong
ngành tài chính. Ngồi ra việc ứng dụng trong các điều khiển nhúng của IoT cho
thấy khả năng linh hoạt trong phƣơng thức sử dụng của ngôn ngữ này. Python là
8
một ngơn ngữ lập trình dạng thơng dịch, do đó có ƣu điểm tiết kiệm thời gian phát
triển ứng dụng vì khơng cần phải thực hiện biên dịch và liên kết.
Hình 1.4 Logo ngơn ngữ Python
Một ƣu điểm đáng chú ý khác là Python có cú pháp chặt chẽ rất giống với ngữ
pháp tiếng Anh và các thông số kỹ thuật đƣợc thiết kế dễ đọc, nhỏ gọn và rõ ràng.
Bất cứ ai đã từng vật vã để gỡ rối trong C thì đều đánh giá cao những gì mà Python
mang lại.
Python cũng đủ mạnh để ứng dụng trong các nền tảng nhúng. Đối với bất kỳ
ứng dụng đòi hỏi khả năng truy xuất dữ liệu lớn thì Python là một ứng cử viên rất
tiềm năng. Nhờ đƣợc sử dụng trên các trang web nhƣ Pinterest và Instagram, ngôn
ngữ lập trình Python cũng đang ngày một phổ biến hơn.
Ngơn ngữ Java và JavaScript
Ngôn ngữ C và ngôn ngữ C++ đƣợc thiết kế để cho phép lập trình viên kiểm
sốt trực tiếp thiết bị thông qua ứng dụng, tuy nhiên điều này đòi hỏi các đoạn mã
đƣợc viết cụ thể cho từng đối tƣợng. Phƣơng thức này không ph hợp với các thiết
bị cầm tay trong xu hƣớng di động ngày nay.
Trƣớc đây, ngôn ngữ Java chạy chậm hơn những ngôn ngữ dịch thẳng ra mã
máy nhƣ ngôn ngữ C và ngôn ngữ C++, nhƣng sau này nhờ công nghệ “biên dịch
tại chỗ (Just in time compilation)”, khoảng cách này đã đƣợc thu hẹp, và trong một
số trƣờng hợp đặc biệt ngơn ngữ Java có thể chạy nhanh hơn. Điều này cũng khiến
ngơn ngữ Java ít phụ thuộc thuộc trong việc việc tích hợp phần cứng vào trình biên
dịch. Để có những thiết lập cụ thể, kiểm soát tốt hơn từng đối tƣợng phần cứng,
ngôn ngữ Java phụ thuộc vào thƣ viện mà các loại thiết bị này hỗ trợ
9
Hình 1.5 Logo ngơn ngữ Java
Tất cả điều này làm cho ngôn ngữ Java trở nên tuyệt vời trong quan điểm kinh
tế của các nhà phát triển cũng nhƣ công ty công nghệ. Việc đầu tƣ vào các đoạn mã
Java có thể đƣợc tái ứng dụng trên nhiều nền tảng. Ngồi ra Java cịn đƣợc phổ
biến khi là một trong ngơn ngữ lập trình chính đƣợc đƣa vào giảng dạy, vì thế tìm
kiếm một chuyên gia lập trình trang bị các kĩ năng Java là điều khá dễ dàng. Khó
khăn duy nhất của ngôn ngữ này là phải đảm bảo rằng nền tảng phần cứng đƣợc lựa
chọn hỗ trợ Java (trên thực tế hiện nay thì có rất ít nền tảng mạnh mẽ không hỗ trợ
Java) và các thƣ viện hỗ trợ phần cứng có sẵn để tạo nên các chức năng điều khiển
mà thiết bị cần.
Ngôn ngữ JavaScript đƣợc nhận diện bằng cú pháp dễ gần, không bắt lỗi quá
chặt, và cung cấp khái niệm cơ bản trong lập trình. Ngơn ngữ Java và ngơn ngữ
JavaScript có thể sử dụng chung một số thƣ viện, có cú pháp tƣơng tự nhƣ ngôn ngữ
C nhƣng lại đƣợc phát triển riêng biệt.
Giống nhƣ tên gọi, ngôn ngữ Javascript là một ngôn ngữ lập trình kịch bản dựa
trên đối tƣợng đƣợc phát triển từ các ý niệm nguyên mẫu và đƣợc sử dụng nhiều
cho việc xây dựng các ứng dụng Web-fronted. Ví dụ, nếu muốn sử dụng Web
server Apache trên Raspberry Pi để thu thập dữ liệu từ một hệ thống cảm biến dựa
trên các bản mạch vi xử lý thì JavaScript là một khởi đầu dễ dàng.
Kể từ khi xuất hiện tại Netscape, JavaScript đã phát triển, hoàn thiện đầy đủ các
tính năng. Từ việc d ng rộng rãi cho các trang web cho đến tạo kịch bản sử dụng
các đối tƣợng nằm sẵn trong ứng dụng. Không ai phủ nhận đƣợc sức mạnh cũng
nhƣ sự phổ biến của JavaScript, nhƣng những vấn đề rắc rối xung quanh từ hình
10
thức xấu xí, cách trình bày phức tạp, ngơn ngữ kì quặc khiến nhà phát triển gặp khó
khăn.
Ngơn ngữ Assembly
Ngơn ngữ Assembly vốn đƣợc yêu thích bởi các chuyên gia lập trình vi điều
khiển. Về bản chất, ẩn trong hợp ngữ Assembly là mối quan hệ giữa ngơn ngữ lập
trình và cấu trúc thiết bị. Điểm đặc trƣng của mỗi hợp ngữ đƣợc thiết kế đặc biệt
cho một cấu trúc máy tính khác nhau, ngồi ra mã gọn nhẹ, chiếm ít dung lƣợng bộ
nhớ, hoạt động với tốc độ nhanh…
Tuy nhiên, ngơn ngữ Assembly thiếu các tiện ích để giảm thiểu những rủi ro
trong lập trình. Mặc d hiện nay cũng có khá nhiều trình biên dịch chuyển đổi các
ngơn ngữ bậc cao thành hợp ngữ nhằm mục đích gỡ rối và tối ƣu nhƣng rất khó dịch
ngƣợc ra mã ngôn ngữ bậc cao. Trƣớc đây ngôn ngữ Assembly đƣợc sử dụng khá
nhiều nhƣng ngày nay phạm vi sử dụng khá hẹp, chủ yếu trong việc thao tác trực
tiếp với phần cứng hoặc làm các công việc không thƣờng xuyên. Điều này cũng mở
ra cơ hội dành cho các dự án IoT bởi việc ứng dụng cho trình điều khiển, hệ nhúng
bậc thấp hay đƣợc trang bị trong các hệ thống thời gian thực
Ngôn ngữ Forth
Ngôn ngữ Forth là một ngơn ngữ đƣợc thiết kế và tối ƣu hóa cho lập trình hệ
thống nhúng. Ngơn ngữ này đƣợc sử dụng yếu cho các lập trình hệ thống cấp, tuy
nhiên có một khía cạnh mà ngơn ngữ Forth cần phải đƣợc giải quyết đó là việc chấp
nhận các lệnh do ngƣời sử dụng quy định, nên một mã của lập trình viên FORTH
này có thể khơng hiểu đối với lập trình viên khác. Ngôn ngữ Forth là một ngôn ngữ
ngăn xếp theo định hƣớng, đƣợc phổ biến khoảng từ những năm 1970 nhƣng hiện
tại không phổ biến nhƣ các hệ thống lập trình khác. Tuy nhiên nếu đang bắt đầu với
một dự án nhúng mới thì ngơn ngữ này sẽ tạo nên sự khác biệt. Ngơn ngữ Forth có
tính di động, sử dụng bộ nhớ hiệu quả, thời gian phát triển ngắn và tốc độ thực hiện
nhanh chóng
1.2. Tổng quan về Python và thƣ viện OpenCV
1.2.1. Ngơn ngữ lập trình Python
Giới thiệu
11
Python là một ngơn ngữ lập trình bậc cao, thơng dịch, hƣớng đối tƣợng, đa mục
đích và cũng là một ngơn ngữ lập trình động.
Một ngơn ngữ lập trình thơng dịch do Guido van Rossum tạo ra năm 1990.
Python hoàn toàn tạo kiểu động và d ng cơ chế cấp phát bộ nhớ tự động; do vậy nó
tƣơng tự nhƣ Perl, Ruby, Scheme, Smalltalk, và Tcl. Python đƣợc phát triển trong
một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý.
Theo đánh giá của Eric S. Raymond, Python là ngơn ngữ có hình thức rất sáng
sủa, cấu trúc rõ ràng, thuận tiện cho ngƣời mới học lập trình. Cấu trúc của Python
cịn cho phép ngƣời sử dụng viết mã lệnh với số lần gõ phím tối thiểu, nhƣ nhận
định của chính Guido van Rossum trong một bài phỏng vấn ô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ừ MSDOS đế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.
Cú pháp của Python là khá dễ dàng để học và ngôn ngữ này cũng mạnh mẽ và
linh hoạt không kém các ngôn ngữ khác trong việc phát triển các ứng dụng. Python
hỗ trợ mẫu đa lập trình, bao gồm lập trình hƣớng đối tƣợng, lập trình hàm và mệnh
lệnh hoặc là các phong cách lập trình theo thủ tục.
Python khơng chỉ làm việc trên lĩnh vực đặc biệt nhƣ lập trình web, và đó là tại
sao ngơn ngữ này là đa mục đích bởi vì nó có thể đƣợc sử dụng với web, enterprise,
3D CAD, …
Bạn không cần sử dụng các kiểu dữ liệu để khai báo biến bởi vì kiểu của nó là
động, vì thế bạn có thể viết a=15 để khai báo một giá trị nguyên trong một biến.
Với Python, việc phát triển ứng dụng và debug trở nên nhanh hơn bởi vì khơng
cần đến bƣớc biên dịch và chu trình edit-test-debug của Python là rất nhanh.
Lịch sử
Python đã đƣợc hình thành vào cuối những năm 1980 và đƣợc bắt đầu thực hiện
vào tháng 12/1989 bởi Guido van Rossum tại CWI tại Hà Lan nhƣ là ngƣời kế thừa
của ngôn ngữ ABC (tự lấy cảm hứng từ SETL) có khả năng xử lý ngoại lệ và giao
12
tiếp với hệ điều hành Amoeba. Van Rossum là tác giả chính của ngơn ngữ Python,
và vai trị trung tâm của ông tiếp tục trong việc quyết định hƣớng phát triển của
Python đƣợc phản ánh trong tiêu đề mà cộng đồng Python dành cho ông “Độc tài
nhân từ cho cuộc sống (BDFL - benevolent dictator for life)”. Ngôn ngữ Python kế
thừa từ nhiều ngôn ngữ nhƣ ngôn ngữ ABC, Module-3, ngôn ngữ C, ngôn ngữ C++,
ngôn ngữ Unix Shell, …
Ngôn ngữ Python 2.0 đƣợc phát hành vào ngày 16/10/2000, với nhiều tính năng
chính mới bao gồm một bộ dọn rác đầy đủ và hỗ trợ Unicode. Với phiên bản này,
quá trình phát triển đã đƣợc thay đổi và trở thành minh bạch hơn và đƣợc cộng đồng
ủng hộ.
Ngôn ngữ Python 3.0 (cịn đƣợc gọi là ngơn ngữ Python 3000 hoặc Py3k), một
bản phát hành lớn, khơng tƣơng thích ngƣợc, đƣợc phát hành vào ngày 03/12/2008
sau một thời gian dài thử nghiệm. Nhiều trong số các tính năng chính của nó đã
đƣợc điều chỉnh để tƣơng thích ngƣợc với Python 2.6 và 2.7.
Ngôn ngữ Python đƣợc cập nhật khá thƣờng xuyên để thêm các tính năng và hỗ
trợ mới. Phiên bản mới nhất hiện nay của Python là Python 3.3 đƣợc công bố vào
29/9/2012 với nguyên tắc chủ đạo là "bỏ cách làm việc cũ nhằm hạn chế tr ng lặp
về mặc chức năng của Python".
Các tí h ă g v triết
phát triể
Python là một ngơn ngữ lập trình đa hình: lập trình hƣớng đối tƣợng và hƣớng
cấu trúc đƣợc hỗ trợ đầy đủ, và có một số tính năng của ngơn ngữ hỗ trợ lập trình
theo chức năng và lập trình hƣớng khía cạnh (Aspect-oriented programming). Nhiều
mơ hình khác đƣợc hỗ trợ bằng việc sử dụng các phần mở rộng, bao gồm thiết kế
theo hợp đồng (design by contract) và lập trình luận lý.
Python sử dụng loại động và một sự kết hợp giữa tính tốn tham khảo và bộ dọn
rác phát hiện theo chu kỳ cho việc quản lý bộ nhớ. Một tính năng quan trọng của
Python là phân giải tên động (late binding), liên kết các tên phƣơng thức và biến
trong thời gian thực thi.
Thiết kế của Python chỉ cung cấp hỗ trợ hạn chế cho việc lập trình chức năng
trong truyền thống Lisp. Ngơn ngữ có các chức năng map(), reduce() và filter(), bộ
13
đầy đủ cho các danh sách, từ điển và các tập hợp, cũng nhƣ là các biểu thức khởi
tạo. Thƣ viện chuẩn có 2 module (itertools và functools).
Đặc điểm
Ngơn ngữ Python tăng cƣờng sử dụng từ khóa tiếng Anh, hạn chế các kí hiệu và
cấu trúc cú pháp so với các ngôn ngữ khác. Ngôn ngữ Python là một ngôn ngữ phân
biệt kiểu chữ hoa, chữ thƣờng. Còn các từ khóa của Python đều ở dạng chữ thƣờng.
Trong các ngơn ngữ khác, khối lệnh thƣờng đƣợc đánh dấu bằng cặp kí hiệu hoặc từ
khóa. Ví dụ, trong ngơn ngữ C/C++, cặp ngoặc nhọn {} đƣợc d ng để bao bọc một
khối lệnh cịn trong ngơn ngữ Python lại có một cách rất đặc biệt để tạo khối lệnh
đó là thụt các câu lệnh trong khối vào sâu hơn (về bên phải) so với các câu lệnh của
khối lệnh cha chứa nó. Ngơn ngữ Python là một ngơn ngữ lập trình đơn giản nhƣng
rất hiệu quả. So với Unix shell, ngôn ngữ Python hỗ trợ các chƣơng trình lớn hơn và
cung cấp nhiều cấu trúc hơn. Cịn so với ngơn ngữ C, ngôn ngữ Python cung cấp
nhiều cơ chế kiểm tra lỗi hơn. Nó cũng có sẵn nhiều kiểu dữ liệu cấp cao, ví dụ nhƣ
các mảng (array) linh hoạt và từ điển (dictionary)mà ta sẽ phải mất nhiều thời gian
nếu viết bằng ngôn ngữ C.
Ngôn ngữ Python là một ngôn ngữ lập trình cấp cao có thể đáp ứng phần lớn
u cầu của lập trình viên:
- Ngơn ngữ Python thích hợp với các chƣơng trình lớn hơn cả AWK và Perl.
- Ngơn ngữ Python đƣợc sử dụng để lập trình Web. Nó có thể đƣợc sử dụng nhƣ
một ngơn ngữ kịch bản.
- Ngơn ngữ Python đƣợc thiết kế để có thể nhúng và phục vụ nhƣ một ngôn ngữ
kịch bản để tuỳ biến và mở rộng các ứng dụng lớn hơn.
- Ngơn ngữ Python đƣợc tích hợp sẵn nhiều cơng cụ và có một thƣ viện chuẩn
phong phú, Python cho phép ngƣời d ng dễ dàng tạo ra các dịch vụ Web, sử dụng
các thành phần COM hay CORBA, hỗ trợ các loại định dạng dữ liệu Internet
nhƣ email, HTML, XML và các ngôn ngữ đánh dấu khác. Python cũng đƣợc cung
cấp các thƣ viện xử lý các giao thức Internet thơng dụng nhƣ HTTP, FTP…
- Ngơn ngữ Python có khả năng giao tiếp đến hầu hết các loại cơ sở dữ liệu, có
khả năng xử lí văn bản, tài liệu hiệu quả, và có thể làm việc tốt với các công nghệ
Web khác.
14
- Ngôn ngữ Python đặc biệt hiệu quả trong lập trình tính tốn khoa học nhờ các
cơng cụ Python Imaging Library, pyVTK, MayaVi 3D Visualization Toolkits,
Numeric Python, ScientificPython…
- Ngôn ngữ Python có thể đƣợc sử dụng để phát triển các ứng dụng desktop.
Lập trình viên có thể d ng wxPython, PyQt, PyGtk để phát triển các ứng dụng giao
diện đồ họa (GUI) chất lƣợng cao. Python còn hỗ trợ các nền tảng phát triển phần
mềm khác nhƣ MFC, Carbon, Delphi, X11, Motif, Tk, Fox, FLTK, …
- Ngôn ngữ Python cũng có sẵn một unit testing framework để tạo ra các các bộ
test (test suites).
Mu tip e paradigms (đa biế hóa)
Ngơn ngữ Python là một ngơn ngữ đa biến hóa (multiple paradigms). Có nghĩa
là, thay vì ép buộc mọi ngƣời phải sử dụng duy nhất một phƣơng pháp lập trình,
ngơn ngữ Python lại cho phép sử dụng nhiều phƣơng pháp lập trình khác nhau:
hƣớng đối tƣợng, có cấu trúc, chức năng, hoặc chỉ hƣớng đến một khía cạnh.
Python kiểu kiểu động và sử dụng bộ thu gom rác để quản lí bộ nhớ. Một đặc điểm
quan trọng nữa của Python là giải pháp tên động, kết nối tên biến và tên phƣơng
thức lại với nhau trong suốt thực thi của chƣơng trình.
Trì h thơ g dịch
Ngơn ngữ Python là một ngơn ngữ lập trình dạng thơng dịch, do đó có ƣu điểm
tiết kiệm thời gian phát triển ứng dụng vì khơng cần phải thực hiện biên dịch và liên
kết. Trình thơng dịch có thể đƣợc sử dụng để chạy file script, hoặc cũng có thể đƣợc
sử dụng theo cách tƣơng tác. Ở chế độ tƣơng tác, trình thơng dịch Python tƣơng tự
shell của các hệ điều hành họ Unix, tại đó, ta có thể nhập vào từng biểu thức rồi gõ
Enter, và kết quả thực thi sẽ đƣợc hiển thị ngay lập tức. Đặc điểm này rất hữu ích
cho ngƣời mới học, giúp họ nghiên cứu tính năng của ngơn ngữ; hoặc để các lập
trình viên chạy thử mã lệnh trong suốt q trình phát triển phần mềm. Ngồi ra,
cũng có thể tận dụng đặc điểm này để thực hiện các phép tính nhƣ với máy tính bỏ
túi.
1.2.2. Thƣ viện OpenCV
OpenCV (Open Source Computer Vision) là một thƣ viện mã nguồn mở về thị
giác máy với hơn 500 hàm và hơn 2500 các thuật toán đã đƣợc tối ƣu về xử lý ảnh,
15
và các vấn đề liên quan tới thị giác máy. OpenCV đƣợc thiết kế một cách tối ƣu, sử
dụng tối đa sức mạnh của các dòng chip đa lõi… để thực hiện các phép tính tốn
trong thời gian thực, nghĩa là tốc độ đáp ứng của nó có thể đủ nhanh cho các ứng
dụng thông thƣờng. OpenCV là thƣ viện đƣợc thiết kế để chạy trên nhiều nền tảng
khác nhau (cross-patform), nghĩa là nó có thể chạy trên hệ điều hành Window,
Linux, Mac, iOS … Việc sử dụng thƣ viện OpenCV tuân theo các quy định về sử
dụng phần mềm mã nguồn mở BSD do đó chúng ta có thể sử dụng thƣ viện này một
cách miễn phí cho cả mục đích phi thƣơng mại lẫn thƣơng mại.
Dự án về OpenCV đƣợc khởi động từ những năm 1999, đến năm 2000 nó đƣợc
giới thiệu trong một hội nghị của IEEE về các vấn đề trong thị giác máy và nhận
dạng, tuy nhiên bản OpenCV 1.0 mãi tới tận năm 2006 mới chính thức đƣợc cơng
bốvà năm 2008 bản 1.1 (pre-release) mới đƣợc ra đời. Tháng 10 năm 2009, bản
OpenCV thế hệ thứ hai ra đời (thƣờng gọi là phiên bản 2.x), phiên bản này có giao
diện của C++ (khác với phiên bản trƣớc có giao diện của C) và có khá nhiều điểm
khác biệt so với phiện bản thứ nhất.
Thƣ viện OpenCV ban đầu đƣợc sự hỗ trợ từ Intel, sau đó đƣợc hỗ trợ bở
Willow Garage, một phịng thí nghiệm chuyên nghiên cứu về công nghệ robot. Cho
đến nay, OpenCV vẫn là thƣ viện mở, đƣợc phát triển bởi nguồn quỹ không lợi
nhuận (none-profit foundation) và đƣợc sự hƣởng ứng rất lớn của cộng đồng.
Nhờ một hệ thống các giải thuật chuyên biệt, tối ƣu cho việc xử lý thị giác máy
tính, vì vậy tính ứng dụng của OpenCV là rất lớn, có thể kể đến nhƣ:
- Nhận dạng ảnh: nhận dạng khuôn mặt, các vật thể …
- Xử lý ảnh: khử nhiễu, điều chỉnh độ sáng …
- Nhận dạng cử chỉ
- Và còn rất nhiều ứng dụng khác
OpenCV đƣợc phát hành theo giấy phép BSD, do đó nó hồn tồn miễn phí cho
cả học thuật và thƣơng mại. Nó có các interface C++, C, Python, Java và hỗ trợ
Windows, Linux, Mac OS, iOS và Android. OpenCV đƣợc thiết kế để tính tốn
hiệu quả và với sự tập trung nhiều vào các ứng dụng thời gian thực. Đƣợc viết bằng
tối ƣu hóa ngơn ngữ C/C++, thƣ viện có thể tận dụng lợi thế của xử lý đa lõi. Đƣợc
sử dụng trên khắp thế giới, OpenCV có cộng đồng hơn 47 nghìn ngƣời d ng và số
16
lƣợng download vƣợt quá 6 triệu lần. Phạm vi sử dụng từ nghệ thuật tƣơng tác, cho
đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc công nghệ robot.
Các module của OpenCv
core
Đây là module chứa các cấu trúc, class cơ bản mà OpenCV sẽ sử dụng trong
việc lƣu trữ và xử lý hình ảnh nhƣ Mat, Scale, Point, Vec… và các phƣơng thức cơ
bản sử dụng cho các module khác.
Imgproc
Đây là một module xử lý hình ảnh của OpenCV bao gồm các bộ lọc (filter)
linear và non-linear và các phép biến đổi hình học (tranformation) nhƣ resize hoặc
các phép biến đổi affine, chuyển đổi hệ mày và các thuật tốn liên quan đến
histogram (biểu đồ) của hình ảnh.
Highgui
Đây là một module cho phép tƣơng tác với ngƣời d ng trên UI (User Interface)
nhƣ hiển thị hình ảnh, video capturing.
Features2d
Module tìm các đặc trƣng (feature) của hình ảnh. Trong module có implement
các thuật tốn rút trích đặc trƣng nhƣ PCA…
Calib3d
Hiệu chuẩn máy ảnh và xây dựng lại 3D.
Objdetect
Module cho việc phát hiện các đối tƣợng nhƣ khuôn mặt, đôi mắt, cốc, ngƣời,
xe hơi, vv trong hình ảnh. Các thuật tốn đƣợc sử dụng trong module này là Haar‐
like Features.
Ml
Module này chứa các thuật toán về Machine Learning phục vụ cho các bài tồn
phân lớp (Classfitication) và bài tốn gom cụm (Clustering). Ví dụ nhƣ thuật tốn
SVM (Support Vector Machine), ANN…
Video
Module phân tích video gồm ƣớc lƣợng chuyển động, trừ nền, và các thuật toán
theo dõi đối tƣợng (object tracking).
17
1.3. Giới thiệu về phần mềm Qt Creator
Qt Creator là phần mềm tạo ứng dụng đa nền tảng hoạt động trong mơi trƣờng
phát triển tích hợp (IDE). Phần mềm này có thể giúp các nhà phát triển tạo ra nhiều
ứng dụng dành cho các nền tảng thiết bị di động và desktop, đồng thời hỗ trợ cho
trình chỉnh sửa mã nguồn và t y chọn gỡ lỗi.
D có khả năng cung cấp nhiều thông số chuyên sâu nhƣng phần mềm thiết kế
ứng dụng Qt Creator vẫn có giao diện gọn gàng và dễ nhìn. Ngƣời d ng có thể tạo
ra một dự án mới bằng cách sử dụng các phƣơng pháp tiếp cận theo từng bƣớc một.
Tính năng này sẽ phát huy tác dụng đặc biệt đối với những ngƣời d ng mới vì sẽ
đƣợc hỗ trợ trong suốt quá trình thực hiện.
Phần mềm hỗ trợ lập trình Qt Creator bao gồm hàng loạt các công cụ đƣợc thiết
kế để giúp ngƣời d ng t y chỉnh giao diện của các ứng dụng mà mình đang tạo ra.
Phần mềm này cũng đƣợc tích hợp với trình chỉnh sửa văn bản hỗ trợ cho các ngơn
ngữ lập trình C++ và QML, có thể bơi đậm cú pháp, hồn thành code và có nhiều
t y chọn kiểm tra cú pháp code.
Các tính năng chính của phần mềm hỗ trợ lập trình Qt Creator cho máy
tính
- Trình chỉnh sửa code tối tân: Hỗ trợ cho việc chỉnh sửa C++ và QML, hoàn
thành code, điều hƣớng...
- Quản lý phiên bản: Phần mềm này đƣợc tích hợp với các hệ thống quản lý
phiên bản phổ biến nhất.
- Quản lý build và dự án: Tất cả các tập tin cần thiết đều đƣợc tạo ra, hỗ trợ cho
việc nhập các dự án đã có hoặc tạo ra các dự án mới từ đầu.
- Đa nền tảng Qt có thể chạy trên mọi hệ điều hành nhƣ Linux, Windows, Mac.
- Các trình editor thân thiện và dễ sử dụng.
- Hỗ trợ vim editor (vim editor là một advance editor và có thể lập trình đƣợc
các key, và xài hotkey rất nhanh).
- Sử dụng miễn phí: chúng ta khơng phải trả bất cứ một phí nào để download và
sử dụng nó.
Hơn thế nữa, phần mềm hỗ trợ lập trình cho máy tính Qt Creator cịn cho phép
ngƣời d ng tạo ra, chạy và phân phối các ứng dụng QT dành cho các môi trƣờng
18