ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN CHUYÊN NGÀNH 2
ĐỀ TÀI:
XÂY DỰNG HỆ THỐNG BÃI GIỮ XE THÔNG MINH
Sinh viên thực hiện
: NGUYỄN VĂN NHỚ
HỒ VĂN HƯNG THỊNH
17IT022
17IT030
Giảng viên hướng dẫn : PGS.TS. HUỲNH CÔNG PHÁP
Lớp
: 17IT1
Đà nẵng, tháng 05 năm 2021
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN CHUYÊN NGÀNH 1
ĐỀ TÀI:
XÂY DỰNG HỆ THỐNG BÃI GIỮ XE THÔNG MINH
Đà nẵng, tháng 05 năm 2021
1
LỜI CẢM ƠN
Lời đầu tiên, chúng em xin chân thành cám ơn đến quý thầy cô giảng viên Đại
học công nghệ thơng tin và truyền thơng Việt-Hàn đã tận tình giúp đỡ em trong suốt
q trình học tập và hồn thành bài đồ án chuyên ngành 2.
Đặc biệt em xin bày tỏ lịng biết ơn sâu sắc đến PGS.TS.Huỳnh Cơng Pháp đã
dành nhiều thời giann, tâm huyết để trực tiếp hướng dẫn tận tình và tạo điều kiện
thuận lợi cho em trong suốt quá trình thực hiện đề tài và hoàn chỉnh đồ án chuyên
ngành 2.
Cuối cùng, em xin chân thành cảm ơn gia đình và bạn bè, đã ln tạo điều
kiện, quan tâm, giúp đỡ, động viên em trong suốt q trình học tập và hồn thành đồ
án chun ngành 2.
2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
Chữ ký giáo viên hướng dẫn
3
MỤC LỤC
Chương 1 Tổng quan............................................................................................8
1.1 Đối tượng và phạm vi nghiên cứu..........................................................8
1.2 Cơ sở lý thuyết.......................................................................................9
1.3 Kết luận................................................................................................25
Chương 2 Phân tích và thiết kế hệ thống............................................................26
2.1 Khách hàng...........................................................................................26
2.2 Quản lý.................................................................................................26
2.3 Kết luận................................................................................................26
Chương 3 Triển khai xây dựng...........................................................................27
3.1 Xây dựng môi trường làm việc.............................................................27
3.2 Xây dựng ứng dụng..............................................................................32
3.3 Kết luận................................................................................................34
Chương 4 Kết luận và định hướng phát triển......................................................35
4.1 Kết luận................................................................................................35
4.2 Định hướng phát triển...........................................................................35
DANH MỤC HÌNH
Trang
Hình 1 Nhận diện khn mặt................................................................................9
Hình 2 Nhận diện biển số xe...............................................................................12
Hình 3 Các bước nhận diện biển số....................................................................13
Hình 4 Logo ngơn ngữ lập trình Python.............................................................14
Hình 5 Thư viện OpenCV...................................................................................16
Hình 6 Thư viện pyQt5.......................................................................................18
Hình 7 Flask là gì ?.............................................................................................20
Hình 8 Cách hoạt động của Flask Framework....................................................21
Hình 9 Phần mềm Visual Studio Code................................................................22
Hình 10 Phần mềm SQLite.................................................................................24
Hình 11 Cài đặt Visual Studio Code...................................................................27
Hình 12 Kiểm tra version Python.......................................................................28
4
Hình 13 pip search “opencv”..............................................................................28
Hình 14 install opencv-python............................................................................29
Hình 15 Kiểm tra cài đặt opencv........................................................................29
Hình 16 Cài đặt SQLite......................................................................................29
Hình 17 Tạo cơ sở dữ liệu...................................................................................30
Hình 18 Kiểm tra cài đặt Flask...........................................................................30
Hình 19 Xây dựng giao diện với QtDesigner......................................................31
Hình 20 Dữ liệu được lưu trong Sqlite................................................................33
Hình 21 Ảnh để training.....................................................................................33
DANH MỤC CỤM TỪ VIẾT TẮT
STT
Cụm từ
Viết tắt
1
Cơ sở dữ liệu
CSDL
2
Principle Components Analysis
PCA
3
Linear Discriminant Analysis
LDA
4
Local Binary Patterns
LBP
5
Structured Query Language
SQL
6
Relational Database Management System
7
Visual Studio Code
VSC
8
Hypertext Preprocessor
PHP
9
Hypertext Markup Language
5
RDBMS
HTML
10
Graphical User Interface
GUI
11
Cascading Style Sheet
CSS
MỞ ĐẦU
1. Giới thiệu
Ngày nay, với sự phát triển mạnh mẽ của khoa học công nghệ, cơng nghệ
thơng tin là một trong những ngành có vị thế dẫn đầu và có vai trị rất lớn trong sự
phát triển chung đó. Các ứng dụng của cơng nghệ thông tin được áp dụng trong mọi
lĩnh vực nghiên cứu khoa học cũng như trong mọi lĩnh vực của đời sống
Việc chúng ta phải mất quá nhiều thời gian vào việc gửi xe tại các bãi giữ xe
đã trở nên lãng phí, một sự lãng phí mà chúng ta hồn tồn có thể bù đắp bằng cách
áp dụng sự tiến bộ của khoa học, sự phát triển của công nghệ thơng tin. Thay vì như
trước đây, chúng ta phải mất từ năm đến mười phút cho một quy trình gửi xe thủ
cơng, thì giờ đây cơng việc đó chỉ mất khoảng năm đến mười giây khi chúng ta áp
dụng công nghệ thông tin vào các bãi giữ xe thông minh. Và hiện tại các bãi giữ xe
này đang được áp dụng rộng rãi tại các trung tâm thương mại, siêu thị, nhà sách, …
Chúng em muốn tìm hiểu và đưa ra một giải pháp tốt nhằm giải quyết công
việc gửi xe tại các bãi giữ xe. Qua việc lựa chọn và mong muốn áp dụng những kiến
thức đã học vào thực tế nên chúng em đã chọn thực hiện đề tài “XÂY DỰNG HỆ
THỐNG BÃI GIỮ XE THÔNG MINH”
2. Mục tiêu của đề tài
6
Hệ thống sẽ bao gồm ứng dụng cho phép người dùng có thể kiểm sốt vào ra
của các xe dựa trên thuật tốn nhận diện khn mặt và nhận diện biển số xe, để có
thể thực hiện một mơ hình bãi giữ xe mang tính tự động hóa cao.
Hệ thống mang lại rất nhiều lợi ích như: giải quyết vấn đề nhân cơng, mang lại
sự an tồn cho mọi người, tránh mất mát; giải quyết vấn đề vé xe bằng giấy, dễ bị
nhàu nát hay mất, ghi nhầm biển số xe; kiểm soát được thời gian vào ra của xe và
chủ sở hữu,…
3. Nội dung và kết hoạch thực hiện
Hoàn thành được một chương trình với chức năng:
• Xây dựng thành cơng hệ thống bãi giữ xe thơng minh
• Tỉ lệ nhận diện khuôn mặt và biển số tương đối cao
• Ứng dụng sẽ hoạt động ổn định
• Hồn thành các chức năng dành cho người dùng và người quản lý
• Hiểu các thuật tốn nhận diện nhận diện khn mặt và nhận diện biển số
• Hiểu về ngơn ngữ lập trình Python, OpenCV, framework Flask
• Cách sử dụng phần mềm Visual Studio Code, pyQt5, SQLite.
4. Bố cục báo cáo
Quá trình xây dựng và hồn thành đồ án tiến hành qua các quy trình sau:
• Chương 1: Tổng quan
• Chương 2: Phân tích và thiết kế hệ thống
• Chương 3: Triển khai xây dựng
• Chương 4: Kết luận và hướng phát triển
7
Chương 1
Tổng quan
1.1 Đối tượng và phạm vi nghiên cứu
1.1.1
Đối tượng nghiên cứu
Đối tượng nghiên cứu gồm:
• Nghiên cứu và xây dựng thuật tốn nhận diện khn mặt và thuật tốn
nhận diện biển số xe
• Ngơn ngữ lập trình Python
• Thư viện OpenCV, framework Flask
• Phần mềm Visual Studio Code, pyQt5, MySQL Server
• Ứng dụng quản lý hệ thống nhận diện
1.1.2
Phạm vi nghiên cứu
Phạm vi nghiên cứu của đề tài “XÂY DỰNG HỆ THỐNG BÃI GIỮ XE
THƠNG MINH”:
• Tìm hiểu về thuật tốn nhận diện khn mặt và thuật tốn nhận diện biển
số xe
8
• Tìm hiểu về cơng cụ phát triển
• Tìm hiểu, nghiên cứu về ngơn ngữ lập trình Python và thư viện OpenCV
• Tìm hiểu về phần mềm Visual Studio Code, pyQt5, MySQL Server
• Tìm hiểu xây dựng hệ thống trên nền tảng Desktop app
1.2 Cơ sở lý thuyết
1.2.1
1.2.1.1
Bài toán nhận diện khn mặt
Giới thiệu về bài tốn nhận diện khn mặt
Hình 1 Nhận diện khn mặt
Nhận diện khn mặt (Face Recognition) là một phương pháp sinh trắc để xác
định hoặc xác minh một cá nhân nào đó bằng cách so sánh dữ liệu hình ảnh chụp
trực tiếp hoặc hình ảnh kỹ thuật số với bản ghi được lưu trữ cho người đó.Nó được
xem là một lĩnh vực nghiên cứu của ngành Biometrics (tương tự như nhận dạng vân
tay – Fingerprint Recognition, hay nhận dạng mống mắt – Iris Recognition). Xét về
ngun tắc chung, nhận dạng khn mặt có sự tương đồng rất lớn với nhận dạng
vân tay và nhận dạng mống mắt, tuy nhiên sự khác biệt nằm ở bước trích chọn đặt
trưng (feature extraction) của mỗi lĩnh vực. Trong khi nhận dạng vân tay và mống
mắt đã đạt tới độ chín, tức là có thể áp dụng trên thực tế một cách rộng rãi thì nhận
dạng khn mặt người vẫn còn nhiều thách thức và vẫn là một lĩnh vực nghiên cứu
thú vị với nhiều người.So với nhận dạng vân tay và mống mắt, nhận dạng khn
mặt có nguồn dữ liệu phong phú hơn (chúng ta có thể nhìn thấy mặt người ở bất cứ
9
tấm ảnh, video clip nào liên quan tới con người trên mạng) và ít địi hỏi sự tương
tác có kiểm soát hơn (để thực hiện nhận dạng vân tay hay mống mắt, dữ liệu input
lấy từ con người đòi hỏi có sự hợp tác trong mơi trường có kiểm sốt).
Các hệ thống nhận dạng khuôn mặt thường được sử dụng cho các mục đích an
ninh như kiểm sốt an ninh tại tịa nhà, sân bay, máy ATM, tra cứu thơng tin của tội
phạm, phát hiện tội phạm ở nơi công cộng, ...và ngày càng được ứng dụng rộng rãi
trong cuộc sống. Bên cạnh những thành công đã được ghi nhận thì nhận dạng khn
mặt cũng cịn gặp nhiều khó khăn như về độ sáng, hướng nghiêng, kích thước hình
ảnh, diện mạo, biểu hiện cảm xúc của khuôn mặt hay ảnh hưởng của tham số môi
trường. Để xây dựng một hệ thống nhận dạng khn mặt có đầu vào của hệ thống là
một hình ảnh kỹ thuật số hay một khung hình video từ một nguồn video. Đầu ra là
xác định hoặc xác minh người ở trong bức hình hoặc trong video đó là ai. Hướng
tới mục tiêu này chúng ta thường chia thủ tục nhận dạng khuôn mặt gồm ba bước:
Phát hiện khn mặt, trích rút đặc trưng và nhận dạng khuôn mặt.
Phát hiện khuôn mặt (Face Detection): Chức năng chính của bước này là phát
hiện ra khn mặt xem nó có xuất hiện ở trong một bức hình hay một đoạn video
hay không? Tỉ lệ phát hiện ra khuôn mặt phụ thuộc nhiều vào điều kiện về độ sáng,
hướng khuôn mặt, biểu hiện cảm xúc trên khuôn mặt hay các yếu tố môi trường
khác. Để hệ thống nhận dạng hoạt động đạt hiệu quả cao thì hình ảnh khn mặt sau
khi được phát hiện cần chuẩn hóa về kích thước, ánh sáng. Trích rút đặc trưng
(Feature Extraction): Sau khi phát hiện ra khuôn mặt trong bức ảnh, chúng ta tiến
hành trích rút những đặc 6 trưng của khn mặt. Bước này trích xuất ra một vector
đặc trưng đại diện cho một khn mặt. Nó phải đảm bảo được tính duy nhất của
một khuôn mặt. Nhận dạng khuôn mặt (Face Recognition): Với hình ảnh đầu vào
sau khi phát hiện ra khn mặt, trích rút các đặc trưng của khn mặt và đem so
sánh các đặc trưng này với cơ sở dữ liệu khn mặt. Bài tốn nhận dạng khn mặt
được ứng dụng nhiều trong các lĩnh vực đời sống đặc biệt ở những lĩnh vực công
nghệ cao, yêu cầu về an ninh, bảo mật. Do đó để hệ thống nhận dạng khuôn mặt
hoạt động mạnh mẽ với tốc độ và độ tin cậy thì có rất nhiều các phương pháp về
nhận dạng khuôn mặt được đưa ra. Các phương pháp có thể được phân loại theo các
10
tiêu chí khác nhau như nhận dạng với dữ liệu ảnh đầu vào là ảnh tĩnh 2D (Elastic
Bunch Graph, Active Appearance Model). Phương pháp này là phổ biến nhất và
tương lai sẽ là 3D (3D Morphable Model). Tuy nhiên trên thực tế người ta hay chia
phương pháp nhận dạng khuôn mặt ra thành 2 loại:
• Nhận dạng dựa trên các đặc trưng của các phần tử trên khuôn mặt (Feature
Base Face Recognition)
• Nhận dạng dựa trên xét tổng thể tồn khuôn mặt (Appearance Based Face
Recognition).
1.2.1.2
Nhận dạng dựa trên các đặc trưng khuôn mặt
Đây là phương pháp nhận dạng khuôn mặt dựa trên việc xác định các đặc
trưng hình học của các chi tiết trên khn mặt như vị trí, diện tích, khoảng cách của
mắt, mũi, miệng, ….và mỗi quan hệ giữa chúng ví dụ như khoảng cách giữa hai
mắt. Ưu điểm của phương pháp này là nó gần với cách mà con người sử dụng để
nhận biết khuôn mặt. Hơn nữa với việc xác định đặc tính và các mối quan hệ,
phương pháp này cho kết quả tốt trong 7 các điều kiện khơng có kiểm sốt. Nhược
điểm của phương pháp này là cài đặt thuật toán phức tạp do việc xác định mối quan
hệ giữa các đặc tính, địi hỏi các thuật toán phức tạp và phương pháp này sẽ hoạt
động khơng hiệu quả khi kích thước hình ảnh nhỏ vì rất khó phân biệt được các đặc
tính.
1.2.1.3
Nhận dạng dựa trên xét tồn bộ khn mặt
Nội dụng chính của hướng tiếp cận này là xem mỗi ảnh có kích thước R x C là
một vector trong khơng gian có R x C chiều. Ta xây dựng một không gian mới có
chiều nhỏ hơn sao cho khi biểu diễn trong khơng gian đó các đặc điểm chính trên
khn mặt khơng bị mất đi. Trong khơng gian đó các ảnh của cùng một người sẽ
được tập trung lại thành một nhóm gần nhau và cách xa so với các nhóm khác. Hai
phương pháp thường được sử dụng trong hướng tiếp cận này là: - PCA (Principle
Components Analysis) - LDA (Linear Discriminant Analysis)
11
1.2.2
1.2.2.1
Bài tốn nhận diện biển số
Giới thiệu
Hình 2 Nhận diện biển số xe
Nhận dạng biển số xe chắc khơng cịn xa lạ đối với chúng ta, hàng ngày đi gửi
xe ở các chung cư hay trung tâm thương mại chúng ta đều có thể nhìn thấy một anh
bảo vệ ngồi gần một chiếc máy tính soi đi soi lại trên màn hình cái gì đó, đơi khi
bảo chúng ta tắt đèn xe mà chúng ta chẳng hiểu để làm gì. Thực ra là có 1 camera ở
phía sau chụp lại biển số xe của chúng ta. Anh ta đang xem lại ảnh trên máy tính có
mờ hay nhiễu gì khơng để máy tính có thể nhận dạng được các con số trên biển số
xe của chúng ta. Thuật toán nhận diện biển số sẽ là cách mà náy tính có thể nhận
diện được các con số hay chữ cái trên biển số xe
12
1.2.2.2
Xử lý bài tốn nhận diện biển số
Hình 3 Các bước nhận diện biển số
Bước 1: Định vị biển số hay cịn gọi là phát hiện biển số: tìm khung chữ nhật
gồm (x, y, width, height) bao lấy biển số trong ảnh. Nếu tìm thấy thì crop biển số ra
để xử lý bước tiếp theo, kết quả của bước này là ảnh biển số đã crop. Bước này sử
dụng thuật toán LBP cascade
Dùng Haar cascade học đặc trưng của 1 biển số, sau đó crop biển số. Tuy
nhiên bước này lại chưa chính xác lắm
Bước 2: Định vị ký tự hay cịn gọi là tìm vị trí của ký tự trên biển số đã crop.
Kết quả của bước này là các ký tự màu đen, sau đó resize tất cả về cùng 1 kích
thước. Bước này dùng thuật tốn Floodfill
Cùng dùng Haar cascade để tìm ra các ký tự trong biển số đã được crop
Bước 3: Nhận dạng ký tự bằng thuật toán Machine Learning, trong trường hợp
này là SVM để phân lớp các ký tự
Cuối cùng là dung SVM để nhận dạng ký tự
Bước 4: Sắp xếp các kết quả nhận dạng và hiển thị ký tự theo định dạng biển
số xe máy
13
1.2.3
1.2.3.1
Ngơn ngữ lập trình Python
Giới thiệu Python
Hình 4 Logo ngơn ngữ lập trình Python
Python là một ngơn ngữ lập trình thông dịch (interpreted), hướng đối tượng
(object-oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩa động (dynamic
semantics). Python hỗ trợ các module và gói (packages), khuyến khích chương trình
module hóa và tái sử dụng mã. Trình thơng dịch Python và thư viện chuẩn mở rộng
có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng
chính và có thể được phân phối tự do
1.2.3.2
Đặc trưng của ngơn ngữ lập trình Python
Tính phổ biến: Python có sự phát triển rất nhanh trong những năm gần đây.
Theo một khảo sát vào năm 2018 trên trang web Stack Overflow, Python được xếp
hạng thứ 7 trong những ngơn ngữ lập trình phổ biến nhất và xếp hạng thứ nhất trong
những cơng nghệ được ưa thích nhất năm. Không những vậy, những công ty phần
mềm hàng đầu thế giới sử dụng Python trong các dự án của họ mỗi ngày.
Dễ học: Khi so sánh giữ Python và các ngơn ngữ lập trình cấp cao khác như
C++, C#, Javascript, Java,… thì việc học ngơn ngữ Python dễ hơn. Hơn thế, Python
còn được dạy cho trẻ nhỏ nhờ vào cú pháp đơn giản dễ hiểu và gần với ngôn ngữ
giao tiếp thường ngày. Chính vì vậy Python đã được nhiều trường học trên thế giới
đem vào giảng dạy ở bậc Tiểu học đến Trung học, nhờ thế học sinh có thể dễ dàng
tiếp thu và khơi dậy niềm đam mê lập trình trong các em
14
Khơng tính phí và mã nguồn mở: Trình thơng dịch của Python được phát
triển dưới giấy phép mã nguồn mở (OSI-approved open-source license), chính vì
vậy ta có thể tải và cài đặt nó hồn tồn miễn phí, kể cả dùng cho các mục đích
thương mại khác
Ngơn ngữ hướng đối tượng: Hướng đối tượng là đặc trưng quan trọng của
ngôn ngữ Python và các ngôn ngữ bậc cao hiện nay. Phương pháp lập trình hướng
đối tượng mơ tả bài tốn dưới sự tác động giữa các đối tượng và hiện thực vào
chương trình máy tính. Các đặc trưng quan trọng của một ngơn ngữ hướng đối
tượng là: tính trừu tượng hóa (Abstraction), tính đóng gói (Encapsulation), tính kế
thừa (Inheritance), tính đa hình (Polymorphism)
Hỗ trợ lập trình giao diện người dùng: Ngơn ngữ Python có các modules hỗ
trợ tạo giao diện trong lập trình như PyQt5, PyQt4, Tkinter giúp cho chương trình
thu hút người dùng và trực quan hơn
Ngôn ngữ thông dịch: Hầu hết các ngơn ngữ lập trình đều chạy bằng trình
biên dịch, đều này có nghĩa là source code mà bạn viết ra cần phải được dịch qua
mã máy (machine code) trước khi chạy được chương trình. Tuy nhiên, những
chương trình được viết bằng ngơn ngữ thơng dịch sẽ bỏ qua bước đó mà chạy thẳng
qua trình thơng dịch. Điều này giúp ích rất nhiều trong quy trình phát triển chương
trình của bạn, bời vì bạn chỉ cần gõ code và chạy thơi, chứ khơng cần phải qua một
q trình biên dịch nào cả
Dễ dàng mở rộng: Tính năng mở rộng của Python đó là Python có để được
viết trong một ngơn ngữ khác và có thể dùng trình biên dịch/thơng dịch để thực thi
chương trình. Ví dụ, chúng ta có thể viết mã nguồn Python và biên dịch nó bên
trong ngôn ngữ C/C++
Ngôn ngữ không cần định nghĩa kiểu dữ liệu: Đây là một đặc trưng khác
biệt hoàn toàn so với các ngơn ngữ lập trình C, C++, Java,… Các biến trong chương
trình Python khi khai báo khơng cần chỉ rõ kiểu dữ liệu cho nó và một biến có thể
nắm giữ các đối tượng có kiểu dữ liệu khác nhau
15
1.2.4
Thư viện OpenCV
Hình 5 Thư viện OpenCV
OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầu cho
xử lý về thị giác máy tính, machine learning, xử lý ảnh. OpenCV đươc viết bằng
C/C++, vì vậy có tốc độ tính tốn rất nhanh, có thể sử dụng với các ứng dụng liên
quan đến thời gian thực. Opencv có các interface cho C/C++, Python Java vì vậy hỗ
trợ được cho Window, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn
47 nghìn người dùng và số lượng download vượt quá 6 triệu lần
OpenCV được sử dụng cho đa dạng nhiều mục đích và ứng dụng khác nhau
bao gồm:
• Hình ảnh street view
• Kiểm tra và giám sát tự động
• Robot và xe hơi tự lái
• Phân tích hình ảnh y học
• Tìm kiếm và phục hồi hình ảnh/video
• Phim – cấu trúc 3D từ chuyển động
• Nghệ thuật sắp đặt tương tác
Tính năng và các module phổ biến của OpenCV
16
Theo tính năng và ứng dụng của OpenCV, có thể chia thư viện này thánh các
nhóm tính năng và module tương ứng như sau:
• Xử lý và hiển thị Hình ảnh/ Video/ I/O (core, imgproc, highgui)
• Phát hiện các vật thể (objdetect, features2d, nonfree)
• Geometry-based monocular hoặc stereo computer vision (calib3d, stitching,
videostab)
• Computational photography (photo, video, superres)
• Machine learning & clustering (ml, flann)
• CUDA acceleration (gpu)
Một số định nghĩa chi tiết các module phổ biến có sẵn
• Core functionality (core): Module nhỏ gọn để xác định cấu trúc dữ liệu cơ
bản, bao gồm mảng đa chiều dày đặc và nhiều chức năng cơ bản được sử
dụng bởi tất cả các module khác.
• Image Processing (imgproc): Module xử lý hình ảnh gồm cả lọc hình ảnh
tuyến tính và phi tuyến (linear and non-linear image filtering), phép biến đổi
hình học (chỉnh size, afin và warp phối cảnh, ánh xạ lại dựa trên bảng
chung), chuyển đổi không gian màu, biểu đồ, và nhiều cái khác.
• Video Analysis (video): Module phân tích video bao gồm các tính năng ước
tính chuyển động, tách nền, và các thuật tốn theo dõi vật thể.
• Camera Calibration and 3D Reconstruction (calib3d): Thuật tốn hình
học đa chiều cơ bản, hiệu chuẩn máy ảnh single và stereo (single and stereo
camera calibration), dự đoán kiểu dáng của đối tượng (object pose
estimation), thuật tốn thư tín âm thanh nổi (stereo correspondence
algorithms) và các yếu tố tái tạo 3D.
• 2D Features Framework (features2d): Phát hiện các đặc tính nổi bật của
bộ nhận diện, bộ truy xuất thông số, thông số đối chọi.
17
• Object Detection (objdetect): Phát hiện các đối tượng và mô phỏng của các
hàm được định nghĩa sẵn – predefined classes (vd: khn mặt, mắt, cốc, con
người, xe hơi).
• High-level GUI (highgui): Giao diện dễ dùng để thực hiện việc giao tiếp UI
đơn giản.
• Video I/O (videoio): Giao diện dễ dùng để thu và mã hóa video.
• GPU: Các thuật tốn tăng tốc GPU từ các modun OpenCV khác.
• Một số module hỗ trợ khác, ví dụ như FLANN và Google test wrapper,
Python binding, v.v.
1.2.5
Thư viện pyQt5
Hình 6 Thư viện pyQt5
Qt là một khung ứng dụng đa nền tảng và bộ cơng cụ tiện ích để tạo giao diện
người dùng đồ họa cổ điển và nhúng, và các ứng dụng chạy trên nhiều nền tảng
phần mềm và phần cứng khác nhau hoặc ít thay đổi trong codebase cơ bản, trong
khi vẫn là một ứng dụng gốc với khả năng và tốc độ cục bộ. Qt hiện đang được phát
triển bởi cả The Qt Company.
Qt được sử dụng để phát triển giao diện người dùng đồ họa (GUI) và các ứng
dụng đa nền tảng chạy trên tất cả các nền tảng máy tính để bàn lớn và hầu hết các
nền tảng di động hoặc nhúng. Hầu hết các chương trình GUI được tạo bằng Qt đều
có giao diện tự nhiên, trong trường hợp này Qt được phân loại là widget toolkit.
Ngoài ra các chương trình khơng phải GUI cũng có thể được phát triển, chẳng hạn
18
như các cơng cụ dịng lệnh và consoles cho server. Một ví dụ về một chương trình
khơng phải GUI sử dụng Qt là khung công tác web Cutelyst
Qt hỗ trợ các trình biên dịch khác nhau, bao gồm trình biên dịch GCC C++ và
bộ Visual Studio và có hỗ trợ quốc tế hóa rộng rãi. Qt cũng cung cấp Qt Quick, bao
gồm một ngôn ngữ kịch bản lệnh được gọi là QML cho phép sử dụng JavaScript để
cung cấp logic. Với Qt Quick, việc phát triển ứng dụng nhanh chóng cho các thiết bị
di động trở nên khả thi, trong khi logic vẫn có thể được viết bằng mã gốc để đạt
được hiệu suất tốt nhất có thể.
Các tính năng khác bao gồm truy cập cơ sở dữ liệu SQL, phân tích cú pháp
XML, phân tích cú pháp JSON, quản lý luồng và hỗ trợ mạng.
PyQt5 là một thư viện của Python cho phép tạo GUI với framework Qt5
Các class của PyQt5 được chia thành các module, bao gồm :
• QtCore: là module bao gồm phần lõi không thuộc chức năng GUI, ví dụ
dùng để làm việc với thời gian, file và thư mục, các loại dữ liệu, streams,
URLs, mime type, threads hoặc processes.
• QtGui: bao gồm các class dùng cho việc lập trình giao diện (windowing
system integration), event handling, 2D graphics, basic imaging, fonts và
text.
• QtWidgets: bao gồm các class cho widget, ví dụ : button, hộp thoại, … được
sử dụng để tạo nên giao diện người dùng cơ bản nhất.
• QtMultimedia: thư viện cho việc sử dụng âm thanh, hình ảnh, camera,…
• QtBluetooth: bao gồm các class giúp tìm kiếm và kết nối với các thiết bị có
giao tiếp với phần mềm.
• QtNetwork: bao gồm các class dùng cho việc lập trình mạng, hỗ trợ lập
trình TCP/IP và UDP client, server hỗ trợ việc lập trình mạng.
• QtPositioning: bao gồm các class giúp việc hỗ trợ xác định vị.
• Enginio: module giúp các client truy cập các Cloud Services của Qt.
19
• QtWebSockets: cung cấp các công cụ cho WebSocket protocol.
• QtWebKit: cung cấp các class dùng cho làm việc với các trình duyệt Web,
dựa trên thư viện WebKit2.
• QtWebKitWidgets: các widget cho WebKit.
• QtXml: các class dùng cho làm việc với XML file.
• QtSvg: dùng cho hiển thị các thành phần của SVG file.
QtSql: cung cấp các class dùng cho việc làm việc với dữ liệu.
• QtTest: cung cấp các công cụ cho phép test các đơn vị của ứng dụng với
PyQt5.
1.2.6
Flask Templates Python
Flask là một Web Framework rất nhẹ của Python, dễ dàng giúp người mới
bắt đầu học Python có thể tạo ra website nhỏ. Flask cũng dễ mở rộng để xây dựng
các ứng dụng web phức tạp.
Hình 7 Flask là gì ?
Flask có nền tảng là Werkzeug và Jinja2 và nó đã trở thành một trong
những Web Framework phổ biến nhất của Python
Fask Framework là một bộ lưu trữ giúp các lập trình viên tạo ra các trang web
dễ dàng hơn, có thể mở rộng, hiệu quả và có thể bảo trì bằng cách cung cấp code
hoặc tiện ích mở rộng có thể sử dụng lại cho các nhiệm vụ phổ biến.
20
Hình 8 Cách hoạt động của Flask Framework
Flask cung cấp cho các lập trình viên khả năng tùy biến khi phát triển ứng
dụng web, nó cung cấp cho bạn các công cụ, thư viện và cơ chế cho phép bạn xây
dựng một ứng dụng web nhưng nó sẽ khơng thực thi bất kỳ sự phụ thuộc nào hoặc
cho bạn biết dự án sẽ như thế nào.
Ứng dụng web có thể là blog, trang web thương mại hoặc một số trang web
khác, nó vẫn cho phép các lập trình viên cơ hội sử dụng một số tiện ích mở rộng để
thêm nhiều chức năng hơn cho ứng dụng web.
Và trong mọi trường hợp, khi một lập trình viên sử bất kỳ framework nào, nó
đều có ưu điểm và nhược điểm, flask cũng vậy:
• Tốc độ
• Hỗ trợ cho NoQuery
• Độ phức tạp tối thiểu
• Chủ nghĩa tối giản tuyệt đối
• Khơng có ORM, dễ dàng kết nối với tiện ích mở rộng
• Trình gỡ lỗi được nhúng trong trình duyệt
21
• Mã ngắn và đơn giản trong số các bộ xương Python khác
Điểm nổi bật khi sử dụng Flask để lập trình web là bạn sẽ rất ít bị phụ thuộc
bên thứ 3, do đó đề phịng được các lỗi bảo mật.
Bạn có thể kiểm sốt mọi thứ khi sử dụng Flask. Và quan trọng, học Flask
giúp bạn hiểu các cơ chế bên trong các Framework khác. Đây là tiền đề tốt để bạn
có thể nắm giữ nhiều cơng nghệ hơn.
Mặc dù nhược điểm của việc sử dụng Flask là đơi khi bạn phải tự mình làm
nhiều việc hơn hoặc cần tự mình gọi thêm các tiện ích mở rộng.
1.2.7
1.2.7.1
Giới thiệu một số phần mềm lập trình
Phần mềm Visual Studio Code
Hình 9 Phần mềm Visual Studio Code
Visual Studio Code (VS Code hay VSC) là một trong những trình soạn thảo
mã nguồn phổ biến nhất được sử dụng bởi các lập trình viên. Nhanh, nhẹ, hỗ trợ đa
nền tảng, nhiều tính năng và là mã nguồn mở chính là những ưu điểm vượt trội
khiến VS Code ngày càng được ứng dụng rộng rãi.
Visual Studio Code hỗ trợ chức năng debug, đi kèm với Git, có syntax
highlighting, tự hồn thành mã thơng minh, snippets, và cải tiến mã nguồn. Nhờ
tính năng tùy chỉnh, Visual Studio Code cũng cho phép người dùng thay đổi theme,
phím tắt, và các tùy chọn khác.
• Hỗ trợ nhiều ngơn ngữ lập trình: Visual Studio Code hỗ trợ nhiều ngơn
ngữ lập trình như C/C++, C#, F#, Visual Basic, HTML, CSS, JavaScript, …
Vì vậy, nó dễ dàng phát hiện và đưa ra thơng báo nếu chương chương trình
có lỗi.
22
• Hỗ trợ đa nền tảng: Các trình viết code thông thường chỉ được sử dụng
hoặc cho Windows hoặc Linux hoặc Mac Systems. Nhưng Visual Studio
Code có thể hoạt động tốt trên cả ba nền tảng trên.
• Cung cấp kho tiện ích mở rộng: Trong trường hợp lập trình viên muốn sử
dụng một ngơn ngữ lập trình khơng nằm trong số các ngơn ngữ Visual Studio
hỗ trợ, họ có thể tải xuống tiện ích mở rộng. Điều này vẫn sẽ khơng làm
giảm hiệu năng của phần mềm, bởi vì phần mở rộng này hoạt động như một
chương trình độc lập.
• Kho lưu trữ an toàn: Đi kèm với sự phát triển của lập trình là nhu cầu về
lưu trữ an tồn. Với Visual Studio Code, người dùng có thể hồn tồn n
tâm vì nó dễ dàng kết nối với Git hoặc bất kỳ kho lưu trữ hiện có nào.
• Hỗ trợ web: Visual Studio Code hỗ trợ nhiều ứng dụng web. Ngồi ra, nó
cũng có một trình soạn thảo và thiết kế website.
• Lưu trữ dữ liệu dạng phân cấp: Phần lớn tệp lưu trữ đoạn mã đều được đặt
trong các thư mục tương tự nhau. Ngoài ra, Visual Studio Code còn cung cấp
các thư mục cho một số tệp đặc biệt quan trọng.
• Hỗ trợ viết Code: Một số đoạn code có thể thay đổi chút ít để thuận tiện cho
người dùng. Visual Studio Code sẽ đề xuất cho lập trình viên các tùy chọn
thay thế nếu có.
• Hỗ trợ thiết bị đầu cuối: Visual Studio Code có tích hợp thiết bị đầu cuối,
giúp người dùng khỏi phải chuyển đổi giữa hai màn hình hoặc trở về thư
mục gốc khi thực hiện các thao tác.
• Màn hình đa nhiệm: Người dùng Visual Studio Code có thể mở cùng lúc
nhiều tệp tin và thư mục – mặc dù chúng không hề liên quan với nhau.
• Intellisense: Hầu hết các trình viết mã đều có tính năng nhắc mã Intellisense,
nhưng ít chương trình nào chun nghiệp bằng Visual Studio Code. Nó có
thể phát hiện nếu bất kỳ đoạn mã nào khơng đầy đủ. Thậm chí, khi lập trình
23
viên quên không khai báo biến, Intellisense sẽ tự động giúp họ bổ sung các
cú pháp cịn thiếu.
• Hỗ trợ Git: Visual Studio Code hỗ trợ kéo hoặc sao chép mã trực tiếp từ
GitHub. Mã này sau đó có thể được thay đổi và lưu lại trên phần mềm.
• Bình luận: Việc để lại nhận xét giúp người dùng dễ dàng nhớ cơng việc cần
hồn thành.
1.2.7.2 Phần mềm SQLite
Hình 10 Phần mềm SQLite
SQLite là một thư viện phần mềm mà triển khai một SQL Database Engine,
không cần máy chủ, không cần cấu hình, khép kín và nhỏ gọn. Nó là một cơ sở dữ
liệu, khơng cần cấu hình, có nghĩa là giống như các cơ sở dữ liệu khác mà bạn
khơng cần phải cấu hình nó trong hệ thống của mình.
SQLite engine khơng phải là một quy trình độc lập (standalone process) như
các cơ sở dữ liệu khác, bạn có thể liên kết nó một cách tĩnh hoặc động tùy theo yêu
cầu của bạn với ứng dụng của bạn. SQLite truy cập trực tiếp các file lưu trữ (storage
files) của nó.
Ưu điểm của SQLite.
• SQLite khơng cần mơ hình client – server để hoạt động.
• SQLite khơng cần phải cấu hình tức là bạn khơng cần phải cài đặt.
• Với SQLite database được lưu trữ trên một tập tin duy nhất.
• SQLite hỗ trợ hầu hết các tính năng của ngôn ngữ truy vấn SQL theo chuẩn
SQL92.
24