Phần mềm quản lí bãi gửi xe có thể đọc và nhận dạng kí tự quang học. Các kỹ thuật Deep Learning29 đã được áp dụng thành công trong các tác vụ Xử lý hình ảnh và một ví dụ đơn giản cho việc sử dụng nó là trong kỹ thuật phát hiện cạnh, Edge Detection30. Việc phát hiện các cạnh trong ảnh kỹ thuật số tương đối phức tạp và nó quan trọng trong Xử lý hình ảnh. Cụ thể trong bài này em nhận dạng biển số xe qua 3 bước: Bước 1: Nhận dạng Multiple Objects (Đa đối tượng) Trong bước này, API sẽ nhận dạng vị trí theo toạ độ của tất cả các đối tượng và lưu trong mảng objects. Bước 2: Gán nhãn
Giới thiệu đề tài
Đặt vấn đề
Trên thực tế, khi lượng phương tiện càng nhiều, nhu cầu về việc bảo quản, lưu trữ cơ giới từ đó ngày càng lớn Mặt khác, hệ thống bãi gửi xe hiện nay còn tương đối thiếu tiện lợi cho chưa áp dụng hạ tầng hệ thống số, hệ thống chốt gác mà chỉ soát vé bằng cảm quan Việc này tuy có thể đơn giản hoá và chi phí luôn ở mức thấp nhất, nhưng gây mệt mỏi cho người gác Barrier do phải so sánh bằng mắt liên quan đến sự so khớp giữa biển số xe
Trong các mô hình bãi gửi xe hiện đại, nổi bật lên là hệ thống bán tự động và hệ thống tự động Hệ thống gửi xe bán tự động là hệ thống có người gác chỉ có mục đích giám sát, kiểm tra hệ thống hoạt động chính xác không, còn lại hệ thống tự vận hành Hệ thống gửi xe tự động là hệ thống không cần người giám sát, phương tiện vào tự động được nhận dạng và xác minh bởi hệ thống nhưng yêu cầu độ chính xác cao
Hiện nay, các kĩ sư phần mềm đang nghiên cứu và hướng dẫn bãi gửi xe hoàn toàn tự động như tự động nhận dạng biển số, tự động nhận dạng loại phương tiện, tự động nhận dạng chủ phương tiện, hệ thống thanh toán phí không dừng v.v Hệ thống này tương đối lớn và phức tạp nên ở Việt Nam chưa nhiều hệ thống làm được như vậy Để giải quyết vấn đề này, em đã nghiên cứu và phát triển “Hệ thống quản lí bãi gửi xe” Hệ thống này không chỉ so sánh về tính chính xác của phương tiện cơ giới vào ra mà còn quản lí nhân sự trong một bãi gửi xe của một công ti đăng kí sử dụng phần mềm gửi xe.
Mục tiêu và phạm vi đề tài
“Phần mềm quản lí bãi gửi xe” nhằm mang đến sự tiện lợi và tối ưu chi phí cho doanh nghiệp vừa và nhỏ đăng kí gửi xe Do đó để giải quyết được vấn đề đã nêu ở mục 1.1, em đã xây dựng ứng dụng quản lí bãi gửi xe bán tự động nhằm: (i) cung cấp một hệ thống gửi xe thuận tiện cho người sử dụng, (ii) bảo mật dữ liệu nhạy cảm, (iii) thống kê và tra soát linh hoạt, (iv) nhận dạng biển số và tra soát tự động Với hệ thống này, nhân viên gác chắn sẽ vô cùng thuận lợi trong việc quản lí và tra soát xe vào/ra
Chương 1 Giới thiệu đề tài
Ngoài ra, hệ thống cũng là một hệ thống quản lí nhân viên đơn giản, thống kê và tích hợp nhận dạng biển số tự động Với những giải pháp trên, hệ thống đã khắc phục được nhược điểm của những bãi gửi xe truyền thống, những bãi gửi xe “giấy mực” Dựa trên những tính năng này, doanh nghiệp có thể dễ dàng nắm được thực trạng gửi xe để đưa ra các giải pháp phù hợp để cải tạo khuôn viên công ti hoặc cải tạo vị trí gửi xe phù hợp
Do thời gian và khả năng có hạn, phần mềm quản lí bãi gửi xe được xây dựng theo kiểu bán tự động chứ chưa hoàn toàn tự động với các chức năng cơ bản như nhóm chức năng quản lí nhân viên, nhóm chức năng quản lí bãi gửi xe Do việc nhận dạng biển số xe có độ chính xác chưa cao nên vẫn cần NVGC trực tiếp kiểm tra, phòng khi hệ thống nhận dạng sai.
Định hướng giải pháp
Do sản phẩm được viết trên nền Desktop và không có yếu tố nền Web, nên sản phẩm sử muốn sử dụng được cần cài đặt trên một PC Do đó em lựa chọn ngôn ngữ (i) Java, kết hợp thiết kế giao diện bằng (ii) JavaFX Để có thể làm được điều này, em cần tìm hiểu kĩ lưỡng về Java Core, OOP, Java JDBC, JavaFX, v.v Chi tiết công nghệ sử dụng sẽ được em trình bày trong Chương 3
Việc lập ra một ứng dụng Quản lí bãi gửi xe theo em là vô cùng phức tạp, tuy nhiên vì thời gian có hạn, em đã giới hạn lại và chỉ thực hiện các chức năng quan trọng như quản lí nhân viên (đơn giản), quản lí bãi gửi xe Để giải quyết vấn đề tạo lập một ứng dụng quản lí bãi gửi xe, em cần tìm hiểu nghiệp vụ về bãi gửi xe, sau đó áp dụng nghiệp vụ này vào bài làm của mình Chi tiết em xin được trình bày trong Chương 2 Để có thể quản lí người dùng, em đã phân vai trò làm ba nhóm: Nhóm 1 – đội ngũ phát triển phần mềm, nhóm 2 – doanh nghiệp đăng kí sử dụng phần mềm, nhóm 3 – khách hàng gửi xe Do thời gian có hạn, em chưa thiết kế được tính năng cho khách hàng mà chỉ tập trung vào tính năng cho nhóm người dùng 1 và 2
Ngoài ra, phần mềm còn có chức năng nhận dạng kí tự quang học thông qua Google Cloud Vision API.
Bố cục đồ án
Em xin trình bày về bố cục các phần còn lại như sau:
Chương 2 trình bày khảo sát hiện trạng các phần mềm quản lí bãi gửi xe hiện nay, thực trạng và tính cần thiết của phần mềm quản lí bãi gửi xe Phân tích yêu cầu và đưa ra các chức năng chính của ứng dụng
Chương 3 giới thiệu về các công nghệ được sử dụng để xây dựng ứng dụng, điểm nổi bật của công nghệ đó, lý do lựa chọn công nghệ đó để xây dựng ứng dụng quản lí bãi gửi xe
Chương 4 trình bày về cách thức triển khai và phát triển ứng dụng Các nội dung chính được thực hiện trong chương này bao gồm (i) thiết kế kiến trúc, (ii) thiết kế chi tiết, (iii) xây dựng ứng dụng Trong phần thiết kế kiến trúc trình bày về kiến trúc phần mềm đã lựa chọn, thiết kế tổng quan ứng dụng Phần thiết kế chi tiết bao gồm thiết kế giao diện, thiết kế lớp, cơ sở dữ liệu của ứng dụng Phần xây dựng ứng dụng đưa ra các kết quả đạt được của ĐATN
Chương 5 trình bày về các giải pháp và đóng góp nổi bật Trong chương này nêu ra các đóng góp nổi bật mà ĐATN mang lại Các đóng góp này bao gồm đóng góp của ĐATN khi áp dụng vào thực tế, giải quyết được các hạn chế của các ứng dụng quản lí bãi gửi xe hiện tại Chương 6 trình bày về các kết quả đạt được, đưa ra kết luận và định hướng phát triển cho phần mềm trong tương lai
Trong chương này, em sẽ trình bày khảo sát các hệ thống Quản lí bãi gửi xe có trên thực tế
Từ đó em đưa ra tổng quan chức năng và đặc tả chi tiết của một số chức năng chính của hệ thống Quản lí bãi gửi xe này
Theo thống kê về Thực trạng các bãi đỗ xe thông minh các thành phố lớn Việt Nam ngày 12/07/2020 thì nhu cầu của người dân về gửi xe ngày càng tăng mà các bãi đỗ xe chỉ đáp ứng được 8-10% Việc ứng dụng bãi gửi xe hiện đại, thông minh cũng chưa được nhiều gây nên tình trạng tắc nghẽn giao thông đặc biệt là các thành phố lớn như Hà Nội và tp.Hồ Chí Minh 1
Thời gian qua, tình hình tội phạm trộm cắp tài sản trong tỉnh có chiều hướng gia tăng Nhiều đối tượng sẵn sàng chống trả, tấn công bị hại nếu bị phát hiện Trong đó, lợi dụng sự sơ hở của chủ nhân, các đối tượng trộm nhắm nhiều đến xe máy - một loại tài sản được sử dụng phổ biến, có giá trị và dễ tiêu thụ trên thị trường 2
Ngoài ra, các đối tượng còn đến những nơi có tập trung đông xe đậu như: cơ quan, doanh nghiệp, nơi vui chơi công cộng, quán xá cặp các tuyến lộ hay kể cả nơi có tổ chức đám tiệc… Thường những nơi này những người trông coi đôi khi khó có thể kiểm soát được hết nên đối tượng sẽ dễ dàng lợi dụng, trà trộn vào chờ đợi thời cơ để bẻ khóa và lấy đi tài sản Gần đây, một số đối tượng còn manh động đến mức, chúng theo dõi và ngang nhiên đi vào những nhà mà không hề có quen biết để thăm dò, nếu không có người trông coi sẽ lấy đi những tài sản có giá trị, còn nếu bị phát hiện sẽ giả vờ hỏi thăm đường hoặc vào nhầm nhà rồi bỏ đi 3
Khảo sát và phân tích yêu cầu
Đặc tả use case Thêm nhân viên gác chắn
Bảng 2.4 Đặc tả Use Case Thêm nhân viên gác chắn
Mã Use Case UC027 Tên Use Case Thêm NVGC
Tác nhân Quản trị viên
Tiền điều kiện Người dùng đã đăng nhập với vai trò của Quản trị viên
3 Quản trị viên Nhập liệu (*)
4 Quản trị viên Nhấn nút thêm
Hệ thống Kiểm tra tính hợp lệ các trường dữ liệu
6 Hệ thống Kiểm tra trùng lặp
7 Hệ thống Hiển thị kết quả thêm NVGC
Luồng sự kiện thay thế
STT Thực hiện bởi Hành động
Hệ thống Nếu các trường bắt buộc chưa được điền hết, chuyển đến bước 7
Hệ thống Nếu dữ liệu yêu cầu bị trùng lặp, chuyển đến bước 7
(*) Dữ liệu đầu vào của Thêm Nhân viên gác chắn gồm các trường dữ liệu sau
Bảng 2.5 Bảng Dữ liệu đầu vào của Thêm Nhân viên gác chắn
Mô tả Bắt buộc? Điều kiện hợp lệ
1 tfName Trường tên nhân viên
Có Chỉ bao gồm chữ
2 tfPhone Trường số điện thoại
Có Chỉ bao gồm số
3 tfEmail Trường thư điện tử
Có Theo đúng định dạng abc@xyz cvhoangpt@gmail.com
4 tfAddress Trường địa chỉ Không Không 9E Chùa Bộc
5 tfUsername Trường tên tài khoản
Đặc tả Use Case Cập nhật nhân viên gác chắn
Bảng 2.6 Đặc tả Use Case Cập nhật nhân viên gác chắn
Mã Use Case UC028 Tên Use Case Cập nhật NVGC
Tác nhân Quản trị viên
Tiền điều kiện Người dùng đã đăng nhập với vai trò của Quản trị viên
STT Thực hiện bởi Hành động
Quản trị viên Nháy đúp vào nhân viên gác chắn cần cập nhật
2 Quản trị viên Thực hiện thay đổi
3 Quản trị viên Nhập liệu (*)
4 Quản trị viên Nhấn nút thêm
Hệ thống Kiểm tra tính hợp lệ các trường dữ liệu
Hệ thống Nếu các trường bắt buộc chưa được điền hết, chuyển đến bước 7
Hệ thống Nếu dữ liệu yêu cầu bị trùng lặp, chuyển đến bước 7
(*) Dữ liệu đầu vào của Cập nhật Nhân viên gác chắn gồm các trường dữ liệu giống phần đặc tả Use Case Thêm Nhân viên gác chắn
Đặc tả Use Case Quẹt thẻ
Mã Use Case UC036 Tên Use Case Quẹt thẻ
Tác nhân Nhân viên gác chắn
Tiền điều kiện Người dùng đã đăng nhập với vai trò của Nhân viên gác chắn và khởi động Camera
STT Thực hiện bởi Hành động
1 Nhân viên gác chắn Đưa thẻ vào máy quét RFID
2 Hệ thống Kiểm tra tình trạng thẻ
3 Hệ thống Kiểm tra loại thẻ
4 Hệ thống Kiểm tra thẻ vào/ra
5 Hệ thống Ghi dữ liệu khách vãng lai
6 Hệ thống Ghi dữ liệu khách đã có hợp đồng
7 Hệ thống Hiển thị dữ liệu thông tin
8 Hệ thống Hiển thị dữ liệu hình ảnh
Luồng sự kiện thay thế
STT Thực hiện bởi Hành động
Nếu là thẻ bị khoá, chưa kích hoạt hoặc không tồn tại, chuyển đến bước
1 2b Hệ thống Nếu thẻ hợp lệ, chuyển đến bước 3
3a Hệ thống Nếu thẻ khách vãng lai, chuyển đến bước 4
3b Hệ thống Nếu thẻ khách có hợp đồng, chuyển đến bước 4
Với yêu cầu vào/ra, nếu kết quả bước
3 là khách vãng lai, chuyển đến bước
Với yêu cầu vào/ra, nếu kết quả bước
3 là khách có hợp đồng, chuyển đến bước 6
Hậu điều kiện Barrier mở ra khi thẻ hợp lệ
Yêu cầu phi chức năng
Ứng dụng có cơ chế phân quyền người dùng theo từng chức năng, vai trò đảm bảo từng người dùng chỉ được phép sử dụng các tính năng theo quyền hạn của mình Ngoài ra, ứng
Phần mềm có giao diện đơn giản, dễ thao tác Ngoài ra phần mềm còn có những gợi ý, chú thích cho người dùng
2.4.3 Yêu cầu về giao diện người dùng Ứng dụng luôn đặt yếu tố dễ dùng và có tính tương tác cao, đơn giản hóa các thao tác và gợi ý cho người dùng về các thành phần chức năng trên giao diện bằng cách sử dụng các icon, button v.v nhằm tăng khả năng tương tác với ứng dụng
2.4.4 Yêu cầu về hiệu năng Ứng dụng khởi động không quá 5s Các yêu cầu về truy vấn không quá 2s
2.4.5 Yêu cầu về bảo mật
• Xác thực: Các dịch vụ và chức năng sử dụng đúng mục đích, dữ liệu được lấy chính xác từ CSDL
• Phân quyền: Phần mềm tự động phân quyền và phân chức năng ngay tại thời điểm đăng nhập
• Bảo mật dữ liệu: dữ liệu nhạy cảm như mật khẩu được mã hoá nâng cao trong CSDL
JavaFX là nền tảng để tạo và phân phối các ứng dụng dành cho máy tính để bàn cũng như các ứng dụng RIAs (Rich Internet Applications) có thể chạy trên nhiều thiết bị khác nhau JavaFX được phát triển bởi kỹ sư Chris Oliver, ban đầu dự án được đặt tên là F3 (Form Follows Functions) Sau đó vào năm 2005 thì Sun Micro-Systems đã mua lại dự án F3 và đổi tên thành JavaFX JavaFX dự định thay thế hoàn toàn Swing làm thư viện GUI chuẩn cho Java SE JavaFX hỗ trợ cho các máy tính để bàn và trình duyệt web trên nền tảng Windows, Linux và macOS
Những ưu điểm nổi bật của ngôn ngữ lập trình JavaFX:
• JavaFX là một thư viện Java bao gồm các lớp và các giao diện được viết bằng mã Java nguyên gốc
• FXML là một ngôn ngữ khai báo dựa trên XML để xây dựng một giao diện người dùng trong ứng dụng JavaFX Lập trình viên có thể sử dụng JavaFX Scene Builder để thiết kế giao diện đồ họa (GUI)
• JavaFX có thể được tùy biến giao diện thêm sinh động bằng cách sử dụng CSS
• JavaFX hỗ trợ đồ họa 2D và 3D cũng như hỗ trợ âm thanh và video
• JavaFX còn có WebView dựa trên trình duyệt WebKit, vì vậy bạn có thể nhúng các trang web hoặc các ứng dụng web bên trong JavaFX 7
Công nghệ sử dụng
Frontend
JavaFX là nền tảng để tạo và phân phối các ứng dụng dành cho máy tính để bàn cũng như các ứng dụng RIAs (Rich Internet Applications) có thể chạy trên nhiều thiết bị khác nhau JavaFX được phát triển bởi kỹ sư Chris Oliver, ban đầu dự án được đặt tên là F3 (Form Follows Functions) Sau đó vào năm 2005 thì Sun Micro-Systems đã mua lại dự án F3 và đổi tên thành JavaFX JavaFX dự định thay thế hoàn toàn Swing làm thư viện GUI chuẩn cho Java SE JavaFX hỗ trợ cho các máy tính để bàn và trình duyệt web trên nền tảng Windows, Linux và macOS
Những ưu điểm nổi bật của ngôn ngữ lập trình JavaFX:
• JavaFX là một thư viện Java bao gồm các lớp và các giao diện được viết bằng mã Java nguyên gốc
• FXML là một ngôn ngữ khai báo dựa trên XML để xây dựng một giao diện người dùng trong ứng dụng JavaFX Lập trình viên có thể sử dụng JavaFX Scene Builder để thiết kế giao diện đồ họa (GUI)
• JavaFX có thể được tùy biến giao diện thêm sinh động bằng cách sử dụng CSS
• JavaFX hỗ trợ đồ họa 2D và 3D cũng như hỗ trợ âm thanh và video
• JavaFX còn có WebView dựa trên trình duyệt WebKit, vì vậy bạn có thể nhúng các trang web hoặc các ứng dụng web bên trong JavaFX 7
Chương 3 Công nghệ sử dụng
JavaFX Scene Builder là một công cụ thiết kế trực quan cho phép người dùng nhanh chóng thiết kế giao diện người dùng của ứng dụng JavaFX, mà không cần phải viết code Bạn có thể kéo và thả các thành phần giao diện người dùng đến một khu vực làm việc, thay đổi tính chất của chúng, áp dụng các style, và FXML cho Layout vừa được tạo ra tự động bên dưới Kết quả có được là một tập tin FXML mà sau đó có thể được kết hợp với một dự án Java bằng cách liên kết các giao diện với logic của ứng dụng 9
Hình 3.1 Giao diện của một chương trình Scene Builder
Backend
Java là một một ngôn ngữ lập trình hiện đại, bậc cao, hướng đối tượng, bảo mật và mạnh mẽ, và là một Platform 10
Platform: Bất cứ môi trường phần cứng hoặc phần mềm nào mà trong đó có một chương trình chạy, thì được hiểu như là một Platform Với môi trường runtime riêng cho mình (JRE) và API, Java được gọi là Platform
Ngôn ngữ lập trình Java ban đầu được phát triển bởi Sun Microsystems do James Gosling khởi xướng và phát hành vào năm 1995 Phiên bản mới nhất của Java Standard Edition là Java SE 8 Với sự tiến bộ của Java và sự phổ biến rộng rãi của nó, nhiều cấu hình đã được
9 https://openplanning.net/10621/cai-dat-javafx-scene-builder-cho-eclipse, truy cập lần cuối ngày 16/06/2021
10 https://viettuts.vn/java, truy cập lần cuối ngày 16/06/2021 xây dựng để phù hợp với nhiều loại nền tảng khác nhau Ví dụ: J2EE cho các ứng dụng doanh nghiệp, J2ME cho các ứng dụng di động
Các phiên bản J2 mới đã được đổi tên thành Java SE, Java EE và Java ME Phương châm của java là "Write Once, Run Anywhere" - viết một lần chạy nhiều nơi, nghĩa là bạn chỉ cần viết một lần trên window chẳng hạn, sau đó vẫn chương trình đó bạn có thể chạy trên Linux, Android, các thiết bị J2ME
Ngôn ngữ lập trình java có các tính năng sau:
• Hướng đối tượng - Trong Java, mọi thứ đều là một Object Java có thể dễ dàng mở rộng và bảo trì vì nó được xây dựng dựa trên mô hình Object
• Nền tảng độc lập - Không giống nhiều ngôn ngữ lập trình khác bao gồm cả C và C ++, khi Java được biên dịch, nó không được biên dịch thành ngôn ngữ máy nền tảng cụ thể, thay vào mã byte - nền tảng độc lập Mã byte này được thông dịch bởi máy ảo (JVM) trên nền tảng nào đó mà nó đang chạy
• Đơn giản - Java được thiết kế để dễ học Nếu bạn hiểu khái niệm cơ bản về OOP Java, sẽ rất dễ để trở thành master về java
• Bảo mật - Với tính năng an toàn của Java, nó cho phép phát triển các hệ thống không có virut, giả mạo Các kỹ thuật xác thực dựa trên mã hoá khóa công khai
• Kiến trúc - trung lập - Trình biên dịch Java tạo ra định dạng tệp đối tượng kiến trúc trung lập, làm cho mã biên dịch được thực thi trên nhiều bộ vi xử lý, với sự hiện diện của hệ điều hành Java
• Portable - Là kiến trúc tập trung và không có khía cạnh thực hiện phụ thuộc của đặc tả này làm cho Java khả chuyển Trình biên dịch trong Java được viết bằng ANSI C, đó là một tập con POSIX
• Mạnh mẽ - Java làm nỗ lực để loại trừ các tình huống dễ bị lỗi bằng cách kiểm tra lỗi tại thời gian biên dịch và kiểm tra lỗi tại runtime
• Đa luồng - Với tính năng đa luồng của Java có thể viết các chương trình có thể thực hiện nhiều tác vụ đồng thời Tính năng thiết kế này cho phép các nhà phát triển xây dựng các ứng dụng tương tác có thể chạy trơn tru hơn tin tại runtime mà có thể được sử dụng để xác minh và giải quyết các truy cập vào các đối tượng tại runtime
Webcam Capture API là thư viện cho phép sử dụng webcam tích hợp hoặc bên ngoài trực tiếp từ Java Nó được thiết kế để tóm tắt các tính năng máy ảnh thường được sử dụng và hỗ trợ nhiều frameworks capturing khác nhau 11
Các tính năng của Webcam Capture API:
• API đơn giản, an toàn cho luồng và dựa theo mô hình non-blocking,
• Không cần phần mềm bổ sung,
• Hỗ trợ nhiều nền tảng (Windows, Linux, Mac OS, v.v.) và nhiều kiến trúc khác nhau (32-bit, 64-bit, ARM),
• Nhận hình ảnh từ webcam PC tích hợp hoặc kết nối USB,
• Nhận hình ảnh từ camera IP / mạng (dưới dạng MJPEG hoặc JPEG),
• Cung cấp sẵn sàng để sử dụng máy dò chuyển động,
• Tất cả các JAR bắt buộc có sẵn ở Maven Central,
• Cung cấp khả năng hiển thị hình ảnh dưới dạng luồng MJPEG,
• Có sẵn dưới dạng Maven dependency hoặc tệp nén ZIP độc lập (bao gồm tất cả các dependency),
• Swing thành phần để hiển thị nguồn cấp dữ liệu video từ máy ảnh,
• Swing thành phần để chọn máy ảnh (thả xuống),
• Nhiều frameworks capturing được hỗ trợ: o OpenIMAJ; o LTI CIVIL; o Java Media Framework (JMF); o Freedom for Media trong Java (FMJ); o OpenCV thông qua JavaCV; o VLC qua vlcj; o V4L qua v4l4j; o GStreamer (chỉ 0.10.x) qua gstreamer-java; o FFmpeg; o IP MJPEG Cameras;
11 https://github.com/sarxos/webcam-capture, truy cập lần cuối ngày 16/06/2021
MySQL là một hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở (RDBMS) dựa trên ngôn ngữ truy vấn có cấu trúc (SQL) được phát triển, phân phối và hỗ trợ bởi tập đoàn Oracle MySQL chạy trên hầu hết tất cả các nền tảng, bao gồm cả Linux , UNIX và Windows MySQL thường được kết hợp với các ứng dụng web 12
SQL là ngôn ngữ phổ biến nhất để thêm, truy cập và quản lý nội dung trong cơ sở dữ liệu
Nó được chú ý nhất vì khả năng xử lý nhanh, độ tin cậy đã được chứng minh, dễ sử dụng và linh hoạt MySQL là một phần thiết yếu của hầu hết mọi ứng dụng PHP mã nguồn mở Các ví dụ điển hình cho các tập lệnh dựa trên PHP và MySQL là WordPress, Joomla, Magento và Drupal MySQL đang trở nên phổ biến vì nhiều lý do tốt:
• MySQL được phát hành theo giấy phép nguồn mở Vì vậy, bạn không phải trả tiền để sử dụng nó
Phát triển và triển khai ứng dụng
Thiết kế kiến trúc
Phần mềm được thiết kế theo kiến trúc MVC (Model-view-controller) Trong mô hình này, người dùng tương tác với giao diện (view), các giao diện gửi yêu cầu đến controller và controller truyền yêu cầu đến model, model có nhiệm vụ kết nối CSDL và truy vấn CSDL Kết quả của truy vấn sẽ trả về controller, và controller truyền dữ liệu trở lại view để hiển thị cho người dùng Để tiện cho thiết kế giao diện em sử dụng JavaFX làm front-end Chi tiết được trình bày ở phần dưới
4.1.1 Lựa chọn kiến trúc phần mềm
4.1.1.1 Mô hình kiến trúc JavaFX (Kiến trúc Frontend)
Chương 4 Phát triển và triển khai ứng dụng
Hình 4.1 cho chúng ta thấy mô hình kiến trúc JavaFX bao gồm 3 thành phần chính là Stage, Scene và Nodes 18
1 Stage (một cửa sổ, hoặc một sân khấu) bao hàm tất cả đối tượng của JavaFX Nó được đại diện bởi gói javafx.stage
Stage có 2 tham số định nghĩa vị trí là Width và Height Nó được chia làm Content Area (Vùng nội dung) và Decorations (Trang trí) (Thanh tiêu đề và Đường biên)
Có 5 tính chất của Stages
- Undecorated (Chưa được trang trí)
2 Scene (phân cảnh) đại diện cho các nội dung vật lí của JavaFX Nó bao hàm tất cả nội dung của một scene graph (cấu trúc phân cảnh)
3 Nodes là một đối tượng trực quan của cấu trúc phân cảnh, nó bao gồm
- Geometrical objects (Đối tượng hình học) bao gồm các đối tượng 2 chiều, 3 chiều như hình tròn, tam giác, đa giác, v.v
- UI Controls (Điều khiển giao diện người dùng) như Button (các nút bấm), Choice Box (Hộp lựa chọn), Text Area (Vùng văn bản), v.v
- Containers (Các ngăn bố cục) như Border Pane (Khung viền), Grid Pane (Khung lưới), v.v
- Các yếu tố đa phương tiện như các đối tượng về Âm thanh, Video, Hình ảnh
4.1.1.2 Mô hình kiến trúc MVC (Kiến trúc Backend)
Hình 4.2 Mô hình kiến trúc MVC
Hình 4.2 mô tả cấu trúc MVC - mẫu thiết kế nhằm mục tiêu chia tách phần giao diện và code để dễ quản lý, phát triển và bảo trì
18 https://www.tutorialspoint.com/javafx/javafx_application.htm, truy cập lần cuối ngày 16/06/2021
MVC Pattern là một trong những pattern được sử dụng phổ biến và nhiều nhất trong nhóm Java J2EE MVC là chữ viết tắt bởi Model-View-Controller Các thành phần tham gia MVC Pattern: 19
- Model: là nơi lưu trữ dữ liệu người dùng, chứa business logic Nó cho phép truy xuất dữ liệu để hiển thị hoặc thu thập dữ liệu Model là cầu nối giữa thành phần View và Controller Mục đích quan trọng nhất của nó là kết nối cơ sở dữ liệu (database), xử lý dữ liệu và chuẩn bị dữ liệu để chuyển đến các thành phần khác
- View: là giao diện của hệ thống, nơi dữ liệu (Model) được hiển thị, nhận tương tác trực tiếp với người dùng Một vấn đề quan trọng là View không được lấy dữ liệu trực tiếp từ Controller mà phải thông qua Model
- Controller: nhận yêu cầu, dữ liệu từ người dùng, sau đó cập nhật sang Model và cuối cùng trả kết quả lại View để show kết quả cho người dùng Controller không chứa bất kỳ logic nghiệp vụ nào 20
Chi tiết về phần thiết kế được mô tả ở mục 5.1 trong Chương 5
Hình 4.3 là biểu đồ gói cho toàn bộ chương trình Trong đó view – chứa các lớp giao diện, controller – chứa các lớp điều khiển và logic, model – chứa các thực thể chương trình và các lớp liên kết dữ liệu, pms – chứa phần lõi của phần mềm (bao gồm mô hình MVC), util – chứa các tiện ích đi kèm khi triển khai phần mềm, common – chứa lớp khởi động chương trình và lớp chứa đường dẫn đến các giao diện, libs – chứa các thư viện được sử dụng trong chương trình, img_history – chứa dữ liệu chụp lại được từ camera an ninh, javafx – lớp và phân lớp giao diện fx, resouces – chứa các tài nguyên của chương trình
4.1.3 Thiết kế chi tiết gói
4.1.3.1 Thiết kế chi tiết cho gói giao diện Quản trị viên
Hình 4.4 Biểu đồ gói chi tiết cho gói giao diện cho Quản trị viên
Hình 4.4 miêu tả chi tiết gói giao diện cho Quản trị viên Gói này bao gồm LabelHelper – một interface chứa các quy tắc in ra một nhãn chữ, AccountHelper – chứa các phương thức kiểm tra các trường điều kiện, AdminCenterForm – lớp giao diện trực quan bảng điều khiển trung tâm cho Quản trị viên, ViewParkingForm – lớp giao diện cho chức năng Xem bãi gửi xe, AddParkingForm – lớp giao diện cho chức năng thêm Bãi gửi xe, Statistic – lớp giao diện cho chức năng Thống kê, ViewStaffForm – lớp giao diện cho chức năng xem Nhân viên gác chắn, AddStaffForm – lớp giao diện cho chức năng Thêm NVGC, StaffDetailForm – lớp giao diện cho chức năng xem chi tiết NVGC
4.1.3.2 Thiết kế chi tiết cho gói Nhân viên gác chắn
Hình 4.5 Chi tiết cho gói Nhân viên gác chắn
Hình 4.5 mô tả chi tiết cho tổng quan gói Nhân gác chắn Gói này bao gồm Employee – chứa thực thể một nhân viên nói chung, DataAccessHelper – lớp định nghĩa và chứa phương thức kết nối với CSDL, EmployeeController – chứa các phương thức điều khiển, AccountHelper – chứa các phương thức kiểm tra các trường điều kiện, LabelHelper – một interface chứa các quy tắc in ra một nhãn chữ, ViewCustomerForm – lớp giao diện cho chức năng xem Khách hàng, AddCustomerForm – lớp giao diện cho chức năng thêm Khách hàng,
Thiết kế chi tiết
Thông tin trong giao diện đáp ứng đầy đủ các thông tin mà người dùng cần đồng thời che dấu các thông tin không cần thiết Đối với các dạng dữ liệu có kích thước hiển thị trên màn hình quá lớn thì tạm ẩn hoặc chỉ hiển thị khi người dùng yêu cầu thông tin bằng cách sử dụng modal cho phép người dùng xem chi tiết thông tin
Giao diện ứng dụng có tính tương tác cao với người dùng, phản hồi thông tin khi người dùng tương tác với hệ thống Ngoài ra giao diện ứng dụng mang tính gợi ý cho người dùng, giúp người dùng có thể tương tác với hệ thống mà không cần tìm hiểu nhiều bằng cách sử dụng các icon, các thanh điều hướng
Về màu sắc, ứng dụng đáp ứng màu sắc tùy thuộc vào từng loại dữ liệu cũng như ngữ cảnh sử dụng Ví dụ đối với lỗi thì có màu đỏ, thành công thì có màu xanh Ngoài ra ứng dụng sử dụng tông màu dễ chịu với người dùng, không sử dụng nhiều các màu sắc gây lo lắng cho người dùng như màu đỏ, màu vàng Bên cạnh việc xây dựng ứng dụng thân thiện với người dùng thì việc xây dựng ứng dụng cũng hạn chế tối đa việc sử dụng quá nhiều màu sắc, và ưu tiên xây dựng giao diện với màu sắc đơn giản nhưng bắt mắt
Giao diện của chương trình được thiết kế phù hợp với màn hình độ phân giải từ 1920x1080 trở xuống Không yêu cầu màn hình có độ bao phủ màu và độ chuẩn màu cao Giao diện được thiết kế tối ưu cho PC và không yêu cầu Tăng tốc phần cứng khả dụng Các giao diện phổ biến trong chương trình được mô tả ở hình Hình 4.6
Hình 4.6 Khung giao diện đặc trưng của phần mềm 4.2.2 Thiết kế lớp
4.2.2.1 Luồng hoạt động Đăng nhập
Hình 4.7 mô tả luồng thông điệp trong hệ thống của chức năng đăng nhập Khi các nhân
Hình 4.7 Luồng hoạt động Đăng nhập
4.2.2.2 Luồng hoạt động xem nhân viên gác chắn
Hình 4.8 Luồng hoạt động xem nhân viên gác chắn
Hình 4.8 mô tả luồng thông điệp của hệ thống với chức năng xem nhân viên gác chắn Ban đầu QTV bấm chọn chức năng xem NVGC, hệ thống sẽ hiển thị bảng chứa các NVGC có trong Công ti đó
4.2.2.3 Luồng hoạt động thêm nhân viên gác chắn
Hình 4.9 mô tả luồng thông điệp của hệ thống với chức năng Thêm nhân viên gác chắn Ban đầu, quản trị viên bấm chọn chức năng thêm NVGC, sau khi QTV nhập dữ liệu đầy đủ và nhấn nút thêm, hệ thống sẽ kiểm tra các trường nhập bắt buộc, format của trường đặc biệt có thoả mãn Tiếp đó, hệ thống sẽ kiểm tra tính khả dụng của dữ liệu nhập vào, đảm bảo không bị trùng lặp Cuối cùng, hệ thống sẽ ghi dữ liệu vào CSDL và nhân viên gác chắn mới được thêm thành công Một thông báo màu xanh (dạng label) sẽ hiện lên nếu thêm thành công
Hình 4.9 Luồng hoạt động Thêm nhân viên gác chắn
4.2.3 Thiết kế cơ sở dữ liệu
Hình 4.10 Biểu đồ thực thể liên kết cho chương trình
Hình 4.10 mô tả các thực thể CSDL có mặt trong chương trình Trên hình ảnh chỉ rõ các thực thể được thể hiện bằng màu xanh dương, các mối quan hệ giữa các thực thể là màu đỏ, các thuộc tính là màu trắng Ý nghĩa của từng thực thể được mô tả ở Bảng 4.1
Bảng 4.1 Mô tả các thực thể trong chương trình Tên thực thể Ý nghĩa của thực thể
Role Vai trò/chức danh của nhân viên trong hệ thống
ParkingCard Thông tin của thẻ gửi xe
Vehicle Thông tin các phương tiện gửi xe có hợp đồng
History Lịch sử gửi xe
4.2.3.2 Thiết kế chi tiết CSDL
Hình 4.11 Thiết kế chi tiết cho CSDL
Hình 4.11 mô tả thiết kế chi tiết cho CSDL Trong hình này chúng ta thấy rõ được mối quan hệ, các khoá chính, khoá ngoại của CSDL
Bảng 4.2 Đặc tả cơ sở dữ liệu
Tên bảng Tên thuộc tính Kiểu dữ liệu Ý nghĩa thuộc tính
Role roleid INT id của vai trò trong hệ thống roleno INT số hiệu của vai trò trong hệ thống rolename VARCHAR(15) tên vai trò description TEXT mô tả vai trò
Employee employeeid BIGINT id của nhân viên (nói chung) trong hệ thống name VARCHAR(30) tên của nhân viên gender VARCHAR(10) giới tính birthdate VARCHAR(30) ngày tháng năm sinh phonenumber VARCHAR(25) số điện thoại email TEXT thư điện tử address TEXT địa chỉ hiện tại của nhân viên username TEXT tên đăng nhập password TEXT mật khẩu loginstatus TINYINT trạng thái đăng nhập Company companyid BIGINT id của công ti đăng kí sử dụng phần mềm parkname VARCHAR(100) tên bãi gửi xe address TEXT địa chỉ bãi gửi slot INT số lượng gửi tối đa no_current_vehicle INT tổng số xe đang gửi
Contract contractid BIGINT id của hợp đồng time_created TEXT thời gian lập hợp đồng time_end TEXT thời gian kết thúc hợp đồng status TINYINT trạng thái hợp đồng
Customer customerid BIGINT id của khách hàng gửi xe name VARCHAR(30) tên khách hàng phonenumber VARCHAR(25) số điện thoại email TEXT thư điện tử address TEXT địa chỉ time_created TEXT thời gian tạo khách hàng
ParkingCard cardid INT mã số thẻ gửi xe status TINYINT trạng thái thẻ type TINYINT loại thẻ
Vehicle licenseplate VARCHAR(25) biển số xe type VARCHAR(20) loại xe brand VARCHAR(25) biển số xe color VARCHAR(15) màu xe
History historyid BIGINT id của lịch sử gửi xe img_in TEXT đường dẫn đến nơi lưu ảnh từ camera nơi xe vào img_out TEXT đường dẫn đến nơi lưu ảnh từ camera nơi xe ra img_lp_in TEXT đường dẫn đến nơi lưu ảnh biển số từ camera nơi xe vào img_lp_out TEXT đường dẫn đến nơi lưu ảnh biển số từ camera nơi xe ra plate_in TEXT biển số xe vào plate_out TEXT biển số xe ra time_in TEXT thời gian xe vào gửi time_out TEXT thời gian xe ra khỏi bãi visit_status TINYINT trạng thái vào/ra của xe fee DOUBLE phí gửi xe doubt TINYINT trạng thái nghi ngờ (là trạng thái khi NVGC thấy biển số
Xây dựng ứng dụng
4.3.1 Thư viện và công cụ sử dụng
Sinh viên liệt kê các công cụ, ngôn ngữ lập trình, API, thư viện, IDE, công cụ kiểm thử, v.v mà mình sử dụng để phát triển ứng dụng Mỗi công cụ phải được chỉ rõ phiên bản sử dụng
SV nên kẻ bảng mô tả tương tự như Bảng 4.3 Nếu có nhiều nội dung trình bày, sinh viên cần xoay ngang bảng
Bảng 4.3 Danh sách thư viện và công cụ sử dụng
Mục đích Công cụ Địa chỉ URL
IDE lập trình Eclipse IDE 64 bit http://www.eclipse.org/
Công cụ thiết kế giao diện Scene Builder https://gluonhq.com/products/scene- builder/
API kết nối CSDL Connector/J 8.0.25 https://dev.mysql.com/downloads/connec tor/j/
Hàm băm mã hoá mật khẩu lưu trong CSDL Bcrypt https://jar- download.com/artifacts/at.favre.lib/bcryp t/0.4.1/source-code
Lọc bảng Table View Filter
JavaFX https://jar- download.com/artifacts/org.rapidpm.mod ul/javafx-filtered-tableview/1.1.1/source- code
Kết nối Camera Webcam Capture v0.3.10-RC7 https://github.com/sarxos/webcam- capture/releases/tag/webcam-capture- parent-0.3.10-RC7
Tạo Java Logger SLF4J v1.7.30 https://repo1.maven.org/maven2/org/slf4j
13 http://artifactory.autocrm.net/artifactory/ oss-sonatype- snapshots/com/nativelibs4java/bridj/0.6.3 -SNAPSHOT/
Thư viện chung I/O Commons IO v2.9.0 https://search.maven.org/classic/#search
%7Cgav%7C1%7Cg%3A%22commons- io%22%20AND%20a%3A%22commons -io%22
Công cụ tạo local host
XAMPP v7.2.38 with Control panel v3.2.4 https://www.apachefriends.org/download html
HeidiSQL v11.3.0.6295 (64 bit) https://www.heidisql.com/download.php
Thị giác máy tính Google Vision API https://cloud.google.com/vision
Qua việc tìm hiểu và phân tích, em đã xây dựng được hệ thống Quản lí bãi gửi xe với các tính năng chính là Quản lí nhân sự (đơn giản), Quản lí bãi gửi xe Vai trò của người dùng được mô tả như sau:
1 Quản trị viên cấp cao: Được tạo ra bởi Đội ngũ phát triển phần mềm (nhóm 1), có nhiệm vụ quản lí và gán QTV cho các Doanh nghiệp đăng kí sử dụng phần mềm (nhóm 2)
2 Quản trị viên: Được tạo ra bởi quản trị viên cấp cao, đại diện cho một công ti ở nhóm
2, có nhiệm vụ quản lí các NVGC, các bãi gửi xe và thống kê
3 Nhân viên gác chắn: Được tạo ra bởi quản trị viên đại diện cho nhóm 2, có nhiệm vụ quản lí trạm gác và quản lí các hợp đồng khách hàng
Bảng 4.4 cho chúng ta thấy thông tin chi tiết về phần mềm
Bảng 4.4 Thống kê thông tin ứng dụng
Số gói trong mã nguồn 8 gói
4.3.3 Minh hoạ các chức năng chính
Hình 4.12 Giao diện trung tâm điều khiển của QTV cấp cao
Hình 4.12 Giao diện trung tâm điều khiển của QTV cấp cao mô tả giao diện quản trị viên cấp cao bao gồm các nút của chức năng chính của QTV cấp cao và thống kê số lượng QTV cấp cao, QTV và Công ti
Hình 4.13 Giao diện xem danh sách Công ti
Hình 4.13 mô tả giao diện xem danh sách công ti bao gồm các chức năng chính của Quản lí công ti QTV cấp cao có thể thuận lợi xem danh sách và tìm kiếm công ti tại giao diện này Đây là giao diện khởi đầu được sử dụng khi một doanh nghiệp đăng kí sử dụng phần mềm với đội ngũ phát triển phần mềm
Hình 4.14 Giao diện xem danh sách Quản trị viên
Hình 4.14 là giao diện xem danh sách tất cả các Quản trị viên của tất cả các Công ti và thực hiện bởi QTV cấp cao Để xem chi tiết các quản trị viên, chúng ta chỉ cần nháy đúp vào hàng tên người đó để xem chi tiết một quản trị viên bất kì
Hình 4.15 là giao diện thêm quản trị viên được thực hiện bởi QTV cấp cao Trong giao diện này có thực hiện kiểm tra tính chính xác, tính đúng đắn của các trường dữ liệu Ngoài ra những trường dữ liệu không cần thiết sẽ tự động được ẩn đi
Hình 4.16 Giao diện bảng điều khiển trung tâm của Quản trị viên
Hình 4.16 là giao diện bảng điều khiển trung tâm của Quản trị viên, nơi tổng hợp các chức năng của một quản trị viên và thống kê sơ bộ về số lượng NVGC, số lượng bãi gửi xe trực thuộc doanh nghiệp đó
Hình 4.17 Giao diện xem thông tin Nhân viên gác chắn
Hình 4.17 là giao diện xem thông tin NVGC, cũng giống như giao diện xem thông tin QTV, thì giao diện này cũng có các chức năng tương ứng
Hình 4.18 Giao diện xem chi tiết Nhân viên gác chắn
Hình 4.18 là giao diện xem thông tin chi tiết của NVGC Đối với giao diện này, chúng ta có thể cập nhật đồng thời xoá NVGC
Hình 4.19 là giao diện trung tâm điều khiển của NVGC Do tính chất của vai trò, giao diện trung tâm điều khiển của NVGC có phần phức tạp hơn so với giao diện trung tâm điều khiển của QTV cấp cao và QTV.
Kiểm thử
Bảng 4.5 Bảng thống kê kiểm thử tương thích
Thiết bị Thông số kỹ thuật Giao diện Chức năng
Màn hình: 15.6 inch FHD (1920x1080) TN, 8GB RAM Ổ cứng: 256GB SSD, 512GB HDD Đạt Đạt Đạt
Máy RFID Tần số chấp nhận được: 125khz
Giao tiếp chiều PC: USB chuẩn
A, giao tiếp chiều thiết bị: USB chuẩn B Khoảng cách đọc:
Không tồn tại Đạt Đạt
Thẻ từ Tần số: 125khz Thẻ chứa mã 10 kí tự Nhựa PVC Không thể sao chép hay ghi đè dữ liệu
Không tồn tại Đạt Đạt
4.4.2.1 Kiểm thử cho chức năng Thêm nhân viên gác chắn
Bảng 4.6 Kiểm thử cho chức năng Thêm nhân viên gác chắn
STT Dữ liệu kiểm thử
Kết quả mong muốn Kết quả thực tế Trạng thái
1 Bỏ trống tất cả các trường
1 Chọn chức năng thêm Nhân viên gác chắn
In ra màn hình dòng chữ đỏ “Please fill your full name.”
In ra màn hình dòng chữ đỏ “Please fill your full name.” Đạt
1 Chọn chức năng thêm Nhân viên gác chắn
In ra màn hình dòng chữ đỏ “Please fill your gender.”
In ra màn hình dòng chữ đỏ “Please fill your gender.” Đạt
1 Chọn chức năng thêm Nhân viên gác chắn
Chọn giới tính Chọn ngày tháng năm sinh
In ra màn hình dòng chữ đỏ “Missing role”
In ra màn hình dòng chữ đỏ “Missing role” Đạt
1 Chọn chức năng thêm Nhân viên gác chắn
In ra màn hình dòng chữ đỏ “Please fill phone number”
In ra màn hình dòng chữ đỏ “Please fill phone number” Đạt
1 Chọn chức năng thêm Nhân viên gác chắn
Chọn giới tính Chọn ngày tháng năm sinh
Chọn vai trò Nhập số điện thoại
In ra màn hình dòng chữ đỏ “Missing Parking”
In ra màn hình dòng chữ đỏ “Missing Parking” Đạt
1 Chọn chức năng thêm Nhân viên gác chắn
Chọn giới tính Chọn ngày tháng năm sinh
Chọn vai trò Nhập số điện thoại
In ra màn hình dòng cữ xanh “Add Staff successfully”
In ra màn hình dòng cữ xanh “Add Staff successfully” Đạt
4.4.2.2 Kiểm thử cho chức năng Thêm công ti
Bảng 4.7 Kiểm thử cho chức năng Thêm công ti
STT Dữ liệu kiểm thử
Kết quả mong muốn Kết quả thực tế Trạng thái
1 Bỏ trống tất cả các trường
1 Chọn chức năng thêm công ti
2 Nhấn nút thêm công ti
In ra màn hình dòng chữ đỏ “Please fill company name.”
In ra màn hình dòng chữ đỏ “Please fill company name.” Đạt
“Đại học mỏ- địa chất”
1 Chọn chức năng thêm công ti
2 Nhấn nút thêm công ti
In ra màn hình dòng chữ đỏ “Please fill address.”
In ra màn hình dòng chữ đỏ “Please fill address.” Đạt
“Đại học mỏ- địa chất” tfAddress =
1 Chọn chức năng thêm Nhân viên gác chắn
2 Nhập tên, địa chỉ và điện thoại
In ra màn hình dòng chữ xanh “Add company successfully.”
In ra màn hình dòng chữ xanh “Add company successfully.” Đạt
Triển khai
3 Tạo CSDL thông qua xampp (câu truy vấn được cất ở thư mục db), bật chế độ MySQL
5 Cài đặt môi trường Google Cloud Platform
5.1 Mô hình MVC và Singleton
Do phạm vi của đề tài và thực tế sử dụng, em lựa chọn mô hình MVC cho đề tài Mô hình này tương đối phù hợp để lập trình ứng dụng cho máy tính cá nhân Cụ thể ở đây việc phân chia thành các gói view-controller-model khiến dễ bảo trì, quản lí Đối với các đối tượng đều có controller cho riêng mình, các view là một đại diện và điều khiển một file fxml, view tương tác đến CSDL thông qua controller, controller tương tác với model, model sử dụng các phương thức để kết nối đến CSDL đồng thời truy vấn chúng Do vậy chúng ta thấy source code các thành phần tương đối tách bạch, dễ dàng phát triển mà không gây ảnh hưởng đến các thành phần khác Tuy vậy, chúng ta thấy rằng source code bị tách làm nhiều file, và điều hướng tương đối phức tạp.
Các giải pháp và đóng góp nổi bật
Bảo mật dữ liệu nhạy cảm
Bảo mật dữ liệu là một yếu tố vô cùng quan trọng, không thể thiếu được ở các phần mềm có dữ liệu là dữ liệu các nhân của người dùng
Bất kỳ doanh nghiệp nào cũng đều có những bí mật dữ liệu khách hàng hay những thông tin quan trọng khác không thể để lộ ra bên ngoài Một khi những dữ liệu này bị đánh cắp hoặc tiết lộ trái phép có thể gây ra những thiệt hại vô cùng lớn cho doanh nghiệp Chính vì thế, đảm bảo an toàn thông tin và bảo mật dữ liệu là một vấn đề hết sức quan trọng Ngày nay, song hành cùng sự phát triển mạnh mẽ của lĩnh vực công nghệ, tội phạm mạng cũng ngày một phát triển tinh vi hơn Không thể phủ nhận những lợi ích mà công nghệ thông tin đem lại cho doanh nghiệp trong việc vận hành, quản lý và lưu trữ dữ liệu Tuy nhiên, việc ứng dụng công nghệ càng nhiều, doanh nghiệp cũng ngày càng phải đối mặt với nhiều rủi ro bị tin tặc tấn công bất cứ lúc nào nếu không có biện pháp ngăn chặn và bảo mật dữ liệu Bảo mật dữ liệu kém có thể khiến doanh nghiệp của bạn gánh chịu những hậu quả vô cùng nặng nề:
• Chi phi để trả tiền phạt và xử lý kiện tụng tốn kém: Vi phạm về bảo mật dữ liệu là vi phạm rất nghiêm trọng có thể dẫn đến các hành vi kiện tụng, pháp lý của khách hàng đối với doanh nghiệp Không tuân thủ quy định về bảo vệ dữ liệu của Pháp luật hiện hành, doanh nghiệp có thể dẫn đến bị phạt lên đến hàng trăm ngàn USD, mức phạt có thể cao hơn tùy thuộc vào mức độ vi phạm Số lượng cá nhân bị ảnh hưởng và nỗ lực của công ty để thông báo cho người tiêu dùng và giảm thiểu rủi ro
• Thiệt hại danh tiếng: Đảm bảo quyền riêng tư và bảo mật dữ liệu của khách hàng là rất quan trọng Nếu dữ liệu của khách hàng không được bảo vệ một cách an toàn, họ sẽ có xu hướng mất lòng tin đối với tổ chức đó Điều đó không chỉ gây tổn thất về doanh thu và danh tiếng mà còn kéo theo các khoản phạt không hề nhỏ cho doanh nghiệp
• Nguy cơ bị tống tiền: Tin tặc không chỉ truy cập và khai thác thông tin tuyệt mật mà mã được sinh ra luôn có cùng một giá trị khi băm các bản rõ giống nhau, do đó kẻ tấn công có thể dễ dàng tấn công và giải mã
5.3.2 Giải pháp và kết quả Để có thể hiểu về Bcrypt, chúng ta cần hiểu về hàm băm trước Hàm băm là một loại thuật toán sử dụng dữ liệu có độ dài tùy ý và biến nó thành một chuỗi ký tự có độ dài cố định Hàm này thường được sử dụng nhằm đơn giản hóa việc truy hồi dữ liệu vì nó cho phép rút ngắn một hàm lượng dữ liệu lớn thành một chuỗi ngắn hơn (dễ so sánh hơn) Ví dụ, chẳng hạn bạn có mẫu ADN của một người, chuỗi này bao gồm một lượng dữ liệu lớn (khoảng 2,2 – 3,5 MB), và bạn muốn tìm ra mẫu ADN này là của người nào Bạn có thể lấy tất cả các mẫu và so sánh 2,2 MB dữ liệu với tất cả các mẫu ADN trong cơ sở dữ liệu, nhưng công việc này sẽ rất tốn thời gian, nhất là khi bạn phải nghiên cứu kỹ lưỡng hàng ngàn mẫu Trong trường hợp này hàm băm sẽ rất hữu dụng, thay vì so sánh toàn bộ dữ liệu, bạn chỉ cần tính chuỗi băm của tập dữ liệu này (trong thực tế, một vài chuỗi băm sẽ được tính toán tại những vị trí khác nhau trên các nhiễm sắc thể, nhưng trong ví dụ này chúng ta giả sử đây là một chuỗi băm), từ đó ta sẽ có được một chuỗi giá trị cố định có độ dài, ví dụ như, 128 bits Việc truy vấn 128-bits trong một cơ sở dữ liệu sẽ dễ dàng hơn và nhanh chóng hơn so với việc truy vấn 2,2 MB dữ liệu 24 Điểm khác biệt chính giữa hàm băm và mã hóa (encryption), đó là hàm băm là hàm một chiều, từ giá trị băm khó có thể suy ngược lại độ dài hay nội dung của thông điệp gốc Khi nói tới hàm băm mật mã, chúng ta đang nói đến những hàm băm có các đặc tính sau:
- Giá trị băm của bất kỳ thông điệp nào đều có thể được tính toán một cách dễ dàng
- Không thể suy ra thông điệp gốc của giá trị băm
- Không thể thay đổi một thông điệp nếu không thay đổi giá trị băm
- Không tồn tại hai thông điệp khác nhau có giá trị băm như nhau
Hàm băm phải có khả năng chống cự trước các tấn công mật mã, tức là phải có các đặc tính kháng cự sau:
- Kháng xung đột (hai thông điệp khác nhau có giá trị băm như nhau)
- Kháng tiền ảnh: với một mã băm h bất kỳ, khó tìm được một thông điệp m nào sao cho h = hash(m)
24 https://trankyphat.com/uncategorized/su-dung-ham-bam-de-bao-ve-mat-khau-hash-password-218/, truy cập lần cuối ngày 18/06/2021
- Kháng tiền ảnh thứ hai: với một thông điệp m bất kỳ, khó tìm được một thông điệp m’ sao cho m’ khác m và MD-5(m) = MD-5(m’)
Bcrypt hiện đang là tiêu chuẩn bảo mật không chính thức cho việc băm mật khẩu Nó xuất phát từ mật mã khối Blowfish, sử dụng bảng tra cứu từ bộ nhớ để tạo ra giá trị băm Điều này đồng nghĩa với việc phải sử dụng một số dung lượng bộ nhớ nhất định để tạo ra giá trị băm Việc này có thể được thực hiện trên CPU, nhưng sẽ trở nên cồng kềnh hơn nhiều khi sử dụng GPU do hạn chế về bộ nhớ Bcrypt đã ra đời được 14 năm, dựa trên một mật mã có tuổi đời hơn 20 năm Nó đã được xem xét và thử nghiệm kỹ càng và nhờ đó được coi như tiêu chuẩn cho việc băm mật khẩu Bcrypt có danh tiếng tốt nhất có thể đạt được đối với một thuật toán mật mã: nó đã xuất hiện khá lâu, được sử dụng khá rộng rãi, và vẫn chưa bị phá vỡ cho đến nay
Tiếp theo, ta biết về salt Salt là một giá trị độc nhất, không bí mật trong cơ sở dữ liệu (tùy theo thuật toán được sử dụng) được gắn vào mật khẩu trước khi mật khẩu được băm Lưu ý rằng yêu cầu duy nhất đối với một salt là nó phải là độc nhất trong cơ sở dữ liệu, đồng nghĩa với việc tạo ngẫu nhiên không nhất thiết phải ngẫu nhiên về mặt mật mã Salt được dùng để ngăn chặn phương thức dò tìm mật khẩu sử dụng Rainbow Table 25 (phương thức tấn công sử dụng bảng tổng hợp các chuỗi băm để dò tìm mật khẩu) Ở Bảng 5.1 chúng ta thấy được hiệu năng khi salt bằng các giá trị tương ứng của các hệ mật
Bảng 5.1 So sánh thời gian thực hiện thuật toán khi salt bằng các giá trị tương ứng cost 6 cost 8 cost 10 cost 12 cost 14 favreBcrypt 3.38 ms 13.54 ms 53.91 ms 216.01 ms 873.93 ms jBcrypt 3.43 ms 13.75 ms 54.76 ms 218.62 ms 883.55 ms
BouncyCastle 26 3.14 ms 12.5 ms 49.8 ms 199.09 ms 799.71 ms
Chẳng hạn, một người dùng đặt mật khẩu cho tài khoản của mình là abc12345 với phiên bản Blowfish 27 -based crypt với salt Khi đó, hàm băm sẽ đưa ra một chuỗi mã hoá an toàn như Hình 5.3:
Hình 5.3 Bản mã của bản rõ abc12345
Ta thử nghiệm khi băm bản rõ abc12345 hai lần trong một khoảng thời gian ngắn, khi đó ta được kết quả như sau:
Hình 5.4 Băm 2 lần liên tiếp của bản rõ abc12345
Hình 5.4 cho chúng ta thấy được là với cùng một bản rõ, khi băm liên tiếp 2 lần hoặc bất kì lần băm nào đều cho ta bản mã khác nhau Do đó kẻ tấn công sẽ khó bẻ khoá được bản mã này, cải thiện được độ an toàn khi lưu dữ liệu trong CSDL
Sau khi băm thành công chuỗi abc12345, phần mềm sử dụng phương thức kiểm tra bản rõ với bản mã chứ không băm lại lần nữa Kết quả ở
Hình 5.5 Kết quả so khớp với bản rõ abc12345 và một bản rõ lạ
Như vậy, chúng ta đảm bảo dữ liệu nhạy cảm của người dùng luôn được bảo vệ
27 https://en.wikipedia.org/wiki/Blowfish_(cipher), truy cập lần cuối ngày 16/06/2021
Hình 5.6 Dữ liệu bản mã lưu trong CSDL của trường password
Hình 5.6 cho chúng ta thấy dữ liệu nhạy cảm được mã hoá trong CSDL mặc dù mật khẩu của một số tài khoản để giống nhau do đó đảm bảo tính bảo mật
Chúng ta cùng so sánh giữa Bcrypt và PBKDF2 28 - một công cụ mã hoá mật khẩu khác Chúng ta thực sự có thể thấy một số điểm mà bcrypt tốt hơn PBKDF2 Bcrypt là một hàm băm mật khẩu nhằm mục đích làm chậm Nói một cách chính xác, khi muốn hàm băm mật khẩu càng chậm càng tốt đối với kẻ tấn công trong khi không quá chậm đối với các hệ thống trung thực Những gì kẻ tấn công có thể sử dụng một số phần cứng không phải PC, điều này sẽ cho phép anh ta chịu ít hơn chúng tôi từ các công việc bổ sung được ngụ ý bởi bcrypt hoặc PBKDF2 Đặc biệt, một kẻ tấn công siêng năng có thể muốn sử dụng GPU hoặc FPGA
Ví dụ, SHA-256 có thể được triển khai rất hiệu quả trên GPU, vì nó chỉ sử dụng logic 32-bit và các phép toán số học mà GPU rất giỏi Bcrypt phụ thuộc rất nhiều vào quyền truy cập vào một bảng được thay đổi liên tục trong suốt quá trình thực thi thuật toán Tốc độ này rất nhanh trên PC, ít hơn nhiều trên GPU, nơi bộ nhớ được chia sẻ và tất cả các lõi cạnh tranh để kiểm soát bus bộ nhớ trong Do đó, khả năng mà kẻ tấn công có thể nhận được từ việc sử dụng GPU khá giảm so với những gì kẻ tấn công nhận được với PBKDF2 hoặc các thiết kế tương tự.
Thống kê và tra soát linh hoạt
5.4.1 Đặt vấn đề khía cạnh của dữ liệu bao gồm việc lập kế hoạch, thu thập dữ liệu mẫu cho các cuộc khảo sát và thí nghiệm Đối với các ứng dụng quản lí, việc thống kê là một việc vô cùng quan trọng Trong những mô hình bãi gửi xe cũ, việc thống kê cực kì khó khăn vì chỉ là ghi chép đơn thuần, khó tra soát Ở những hệ thống gửi xe hiện nay đã tích hợp việc thống kê và tra soát nhưng còn nhiều vấn đề về mặt tiện lợi cho nhân viên quản lí bãi gửi xe
5.4.2 Giải pháp và kết quả
Phần mềm quản lí bãi gửi xe của em cho phép thống kê ngay tại Trung tâm điều khiển của người sử dụng phần mềm Ngoài ra phần mềm còn thống kê chi tiết về số lượng xe đã gửi trong bãi
Hình 5.7 Thống kê tại giao diện điều khiển trung tâm của Quản trị viên cấp cao
Hình 5.8 Thống kê tại giao diện điều khiển trung tâm của Quản trị viên
Hình 5.7 và Hình 5.8 là phần thống kê nhanh một số giá trị cần thiết của QTV cấp cao và QTV Điều đó sẽ khiến họ có cái nhìn tổng quan về hệ thống
Hình 5.9 Tra soát dữ liệu thẻ và quản lí vào/ra
Hình 5.9 mô tả việc tra soát số thẻ và quản lí ra Khi NVGC quét thẻ qua máy RFID, hệ thống sẽ tra soát số thẻ
Ngoài ra, phần mềm còn có thể tra soát cụ thể hơn bởi tính năng Thống kê và tra cứu tuỳ chỉnh.
Nhận dạng biển số xe
Xử lý hình ảnh là một thuật ngữ chung đề cập đến một loạt các chức năng có thể được thực hiện trên một hình ảnh tĩnh Trong khi một khung hình đơn (single frame) được sử dụng làm đầu vào, đầu ra thay đổi tùy theo một hoặc vài chức năng được áp dụng Phần lớn các chức năng xử lý hình ảnh tạo ra một hình ảnh thứ hai, đã được can thiệp Bất kỳ bộ lọc / filter nào làm thay đổi hình ảnh chẳng hạn, là một loại của Xử lý hình ảnh Cho dù nó tô màu cho ảnh chụp đen trắng, làm mờ biển số xe để bảo vệ quyền riêng tư hoặc tái hiện tai thỏ trên đầu của một người, đó là một ví dụ về chuyển đổi từ hình ảnh này sang hình ảnh khác thông qua xử lý hình ảnh trong một khoảng thời gian đã được “mắt điện tử” chụp lại Xử lý hình ảnh, trong khi nó có các ứng dụng riêng, là một phần quan trọng của hệ thống Thị giác máy tính
Nắm được điều đó, các hệ thống quản lí gửi xe ngày càng thông minh Chúng được tích hợp các công nghệ cao liên quan đến trí tuệ nhân tạo đặc biệt là thị giác máy tính Nhằm đem đến sự tiện lợi cho người sử dụng, em có tích hợp vào chương trình API đọc kí tự quang học của Google Cloud Platform
5.5.2 Giải pháp và kết quả
Phần mềm quản lí bãi gửi xe có thể đọc và nhận dạng kí tự quang học Các kỹ thuật Deep Learning 29 đã được áp dụng thành công trong các tác vụ Xử lý hình ảnh và một ví dụ đơn giản cho việc sử dụng nó là trong kỹ thuật phát hiện cạnh, Edge Detection 30 Việc phát hiện các cạnh trong ảnh kỹ thuật số tương đối phức tạp và nó quan trọng trong Xử lý hình ảnh
Cụ thể trong bài này em nhận dạng biển số xe qua 3 bước:
Bước 1: Nhận dạng Multiple Objects (Đa đối tượng)
Trong bước này, API sẽ nhận dạng vị trí theo toạ độ của tất cả các đối tượng và lưu trong mảng objects
API thực hiện gán nhãn tất cả các đối tượng lưu trong objects, một trong số đó (nếu có) là
Bước 3: Nhận dạng kí tự quang học
Sau khi đã cắt ảnh tương ứng với nhãn License plate, API thực hiện nhận dạng các chữ cái trên biển số, trả về chuỗi kí tự tương ứng với biển số đã cho trên một dòng
Trong trường hợp API không gán được nhãn License plate, em không cắt ảnh mà để nguyên bức hình như ban đầu rồi sau đó tiếp tục nhận dạng kí tự quang học
29 https://vi.wikipedia.org/wiki/H%E1%BB%8Dc_s%C3%A2u, truy cập lần cuối ngày 18/06/2021
30 https://en.wikipedia.org/wiki/Edge_detection, truy cập lần cuối ngày 18/06/2021
Hình 5.10 Mô tả sơ lược quá trình nhận dạng kí tự quang học
Hình 5.10 Mô tả sơ lược quá trình nhận dạng kí tự quang học thể hiện quá trình nhận dạng sử dụng học sâu, do sử dụng API nên cụ thể phần lõi được giấu đi, em không thể trình bày cụ thể trong bài làm của mình
Việc nhận dạng biển số xe thông qua API của Google Vision, API này được thiết lập qua mã nguồn của ngôn ngữ python Dữ liệu được gửi từ Java, trả về chuỗi là biển số xe Tuy nhiên, API này vẫn có một số nhược điểm như sau:
1 Gán nhãn chưa chính xác với những biển số được cấu tạo đặc biệt (Hình 5.11)
2 Không nhận diện được biển số khi soi biển số trước gương hoặc đánh lừa bởi hình ảnh điện thoại (Hình 5.12)
3 Làm chậm hiệu năng cửa chương trình do cần hoạt động khi có mạng ổn định, không hoạt động khi mạng bị ngắt kết nối nhưng không ảnh hưởng đến tổng thể chương trình
Hình 5.12 Hình ảnh biển số xe được tải từ nguồn Internet
Hình 5.12 là hình ảnh một hình vẽ biển số xe được tải về từ nguồn Internet API cho kết quả 6666628-06 Ở đây, API đã gán nhãn sai cho đối tượng và hiểu nhầm đây là một hình ảnh phản chiếu trong gương
Qua hai trường hợp trên, ta thấy được là trường hợp số 1 xảy ra tương đối nhiều khi khách hàng gửi xe tô, vẽ hoặc gắn thêm sự vật có kí tự để “làm nhiễu” việc nhận dạng Trường hợp
Sau quá trình tìm hiểu, phân tích và xây dựng cùng với sự hướng dẫn tận tình của ThS Vũ Đức Vượng, em đã xây dựng được phần mềm quản lí bãi gửi xe Phần mềm đã giải quyết được vấn đề của những bãi xe hiện nay như không có hệ thống cụ thể, thay vé gửi xe bằng thẻ từ, quản lí nhân viên Sau đây em xin tổng kết lại những gì phần mềm quản lí bãi gửi xe đã làm được: Đầu tiên, phần mềm có phân cấp vai trò như một hệ thống quản lí nhân viên đơn giản với phân quyền, quản lí nhân viên có phân cấp độ
Thứ hai, phần mềm thực hiện chức năng quản lí bãi gửi xe với các chức năng cơ bản như quản lí bãi gửi, quản lí hợp đồng, quản lí vào/ra
Cuối cùng, phần mềm sử dụng phương pháp nhận dạng kí tự quang học để nhận diện biển số xe với độ chính xác trên 90%
Trong quá trình thực hiện, ĐATN đã phân tích yêu cầu từ phía khách hàng doanh nghiệp, tìm hiểu và đánh giá ưu điểm, nhược điểm của các phần mềm tương ứng, từ đó xây dựng các chức năng cần thiết cho phần mềm quản lí bãi gửi xe Tuy nhiên, việc xây dựng phần mềm trong thời gian ngắn nên sẽ còn nhiều hạn chế và thiếu sót Phần mềm vẫn tiếp tục lấy đánh giá từ người dùng để xây dựng và phát triển thành phiên bản hoàn chỉnh hơn
Phần mềm quản lí bãi gửi xe vẫn trong quá trình phát triển Các tính năng đang trong quá