Đề tài "Thiết kế và thi công SmartKey-IoT tích hợp công nghệ xử lý ảnh và trí tuệ nhân tạo AI để nhận diện khuôn mặt" đặt mục tiêu tạo ra một hệ thống khóa cửa tiên tiến, hiện đại, phù h
Trang 1THÀNH PHỐ HỒ CHÍ MINH
ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA
GVHD: TS NGUYỄN VĂN THÁI SVTH: HUỲNH TUẤN KIỆT
Trang 2BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN -⸙∆⸙ -
Tp Hồ Chí Minh tháng 6 năm 2024
Trang 3Em xin tỏ lòng biết ơn chân thành đến công ty 3DVisionLab vì đã tài trợ đồ án và cung cấp các tài nguyên quan trọng, từ đó giúp đồ án của em có thể đi đến thành công như ngày hôm nay
Em xin chân thành gửi lời cảm ơn đến Thầy – Tiến sĩ Nguyễn Văn Thái, thầy đã dành nhiều thời gian và tâm huyết để hỗ trợ và hướng dẫn em trong quá trình thực
hiện đề tài "Thiết kế và thi công SmartKey-IoT tích hợp công nghệ xử lý và trí tuệ nhân tạo (AI) ảnh để nhận diện khuôn mặt"
Thầy đã là người đi đầu, truyền tải kiến thức và kinh nghiệm quý báu của mình một cách nhiệt tình và tận tâm Nhờ sự chỉ dẫn nhiệt tình của Thầy, em đã có thể vượt qua những thách thức trong quá trình nghiên cứu và phát triển dự án này
Thầy không chỉ là một người hướng dẫn xuất sắc mà còn là người đồng hành đầy cảm hứng và động viên trong suốt quá trình làm việc Em rất biết ơn sự cổ vũ của Thầy đã giúp tôi duy trì niềm tin và nỗ lực để hoàn thành đề tài một cách tốt nhât Cuối cùng, em cảm ơn những người thân, bạn bè đã luôn ủng hộ, hỗ trợ và cổ vũ em trong thời gian làm việc Sự ủng hộ từ những người thân yêu này không chỉ là nguồn động viên mà còn là động lực lớn giúp em vượt qua mọi khó khăn
Xin chân thành cảm ơn Thầy,
Trang 4LỜI CAM ĐOAN
Dưới sự hướng dẫn, hỗ trợ của Thầy – Tiến sĩ Nguyễn Văn Thái, em đã tự mình
nghiên cứu, thực hiện đề tài "Thiết kế và thi công SmartKey-IoT tích hợp công nghệ xử lý ảnh và trí tuệ nhân tạo (AI) để nhận diện khuôn mặt" Qua quá trình
này, em cam đoan rằng đề tài được triển khai hoàn toàn bằng công sức và nỗ lực của riêng bản thân
Em đã dành thời gian để tổng hợp và vận dụng những kiến thức đã được, nghiên cứu những tài liệu liên quan đến việc thiết kế và thi công các phần mềm và phần cứng liên quan
Em cam kết rằng mọi kết quả đạt được trong đề tài đều là những thành quả của việc nghiên cứu một cách trung thực và không phải được sao chép từ bất kỳ nguồn nào
Tp Hồ Chí Minh , ngày tháng năm 2024
Sinh viên thực hiện (Ký và ghi rõ họ tên)
Huỳnh Tuấn Kiệt
Trang 5BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SPKT TP.HCM
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
CỘNG HÓA XÃ HỘI CHỦ NGHĨA
VIỆT NAM ĐỘC LẬP – TỰ DO – HẠNH PHÚC
o0o
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Ngành: Công nghệ kỹ thuật Điều khiển và Tự động hóa Lớp: 201512B
Giảng viên hướng dẫn: TS Nguyễn Văn Thái
Ngày nhận đề tài: 4/2/2024 Ngày nộp đề tài: 21/6/2024
Tên đề tài: Thiết kế và thi công SmartKey-IoT tích hợp công nghệ xử lý ảnh và trí
tuệ nhân tạo (AI) để nhận diện khuôn mặt
Nội dung thực hiện đề tài:
− Thiết kế được phần cứng cho khóa
− Tìm hiểu về màn hình DWIN
− Tìm hiểu về Jetson nano
− Tìm hiểu về xử lý ảnh, nhận diện khuôn mặt
− Thiết kế giao diện cho app
− Lập trình app front_end và back_end
− Lập trình tác vụ đóng mở của bằng màn hình , trên app và nhận diện khuôn mặt
− Chạy thử nghiệm sản phẩm và đánh giá
− Viết báo cáo
Trang 6BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SPKT TP.HCM
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
CỘNG HÓA XÃ HỘI CHỦ NGHĨA
VIỆT NAM ĐỘC LẬP – TỰ DO – HẠNH PHÚC
o0o
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ và tên sinh viên: Huỳnh Tuấn Kiệt MSSV: 20151500 Ngành: Công nghệ kỹ thuật Điều khiển và Tự động hóa Lớp: 201512B Hệ đào tạo: Đại học chính quy Khóa: 2020 Giảng viên hướng dẫn: TS Nguyễn Văn Thái Tên đề tài: Thiết kế và thi công SmartKey-IoT tích hợp công nghệ xử lý ảnh và trí tuệ nhân tạo (AI) để nhận diện khuôn mặt 1 Về nội dung đề tài và khối lượng thực hiện
2 Ưu điểm
3 Khuyết điểm
4 Đề nghị cho bảo vệ hay không?
5 Đánh giá loại:
6 Điểm: Bằng chữ:
TP Hồ Chí Minh, ngày tháng năm 2024
Giáo viên hướng dẫn
(Ký và ghi rõ họ tên)
Trang 7BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SPKT TP.HCM
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
CỘNG HÓA XÃ HỘI CHỦ NGHĨA
VIỆT NAM ĐỘC LẬP – TỰ DO – HẠNH PHÚC
o0o
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ và tên sinh viên: Huỳnh Tuấn Kiệt MSSV: 20151500 Ngành: Công nghệ kỹ thuật Điều khiển và Tự động hóa Lớp: 201512B Hệ đào tạo: Đại học chính quy Khóa: 2020 Giáo viên phản biện: Tên đề tài: Thiết kế và thi công SmartKey-IoT tích hợp công nghệ xử lý ảnh và trí tuệ nhân tạo (AI) để nhận diện khuôn mặt 1 Về nội dung đề tài và khối lượng thực hiện
2 Ưu điểm
3 Khuyết điểm
4 Đề nghị cho bảo vệ hay không?
5 Đánh giá loại:
6 Điểm: Bằng chữ:
TP Hồ Chí Minh, ngày tháng năm 2024
Giáo viên phản biện
(Ký và ghi rõ họ tên)
Trang 8BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SPKT TP.HCM
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
CỘNG HÓA XÃ HỘI CHỦ NGHĨA
VIỆT NAM ĐỘC LẬP – TỰ DO – HẠNH PHÚC
o0o
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP
Ngành: Công nghệ kỹ thuật Điều khiển và Tự động hóa Lớp: 201512B
Tên đề tài: Thiết kế và thi công SmartKey-IoT tích hợp công nghệ xử lý ảnh và trí
tuệ nhân tạo (AI) để nhận diện khuôn mặt
Trang 915/4 – 21/4 viết code cho màn hình
Trang 10MỤC LỤC
LỜI CẢM ƠN i
LỜI CAM ĐOAN ii
MỤC LỤC viii
DANH SÁCH HÌNH ẢNH xi
DANH MỤC CÁC TỪ VIẾT TẮT xiv
CHƯƠNG 1 TỔNG QUAN 1
1.1 ĐẶT VẤN ĐỀ 1
1.2 MỤC TIÊU 1
1.3 PHƯƠNG PHÁP NGHIÊN CỨU 1
1.4 NỘI DUNG NGHIÊN CỨU 1
1.5 GIỚI HẠN ĐỀ TÀI: 2
1.6 BỐ CỤC BÁO CÁO 2
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 4
2.1 GIỚI THIỆU VỀ IOT (INTERNET OF THING) 4
2.1.1 Tổng quan về IoT 4
2.1.2 Các thành phần của IoT 5
2.1.3 Ứng dụng của IoT 5
2.1.4 Thách thức của IoT 6
2.2 GIỚI THIỆU CÁC CÔNG CỤ THIẾT KẾ APP 7
2.2.1 React Native 7
2.2.2 Expo 8
2.2.3 Node.js 10
2.2.4 Express 11
2.3 GIỚI THIỆU VỀ XỬ LÝ ẢNH 13
2.3.1 Tổng quan 13
Trang 112.3.2 Ứng dụng 13
2.4 GIỚI THIỆU VỀ TRÍ TUỆ NHÂN TẠO AI 15
2.5 NGÔN NGỮ LẬP TRÌNH PYTHON 16
2.5.1 Giới thiệu về python 16
2.5.2 Giới thiệu về Threading (Đa luồng) trong Python 17
2.5.3 Giới thiệu về thư viện OpenCV 19
2.5.4 Giới thiệu về thư viện face-recognition 20
2.6 GIỚI THIỆU VỀ PORT FORWARDING 21
2.7 NHỮNG PHẦN MỀM VÀ WEB ĐƯỢC SỬ DỤNG TRONG ĐỀ TÀI 21
2.7.1 Visual Studio Code (VS Code) 21
2.7.2 Arduino IDE 22
2.7.3 KiCAD 23
2.7.4 balenaEtcher 24
2.7.5 SD Card Formatter 25
2.7.6 XAMPP 26
2.7.7 DWIN DGUS 27
2.7.8 SOLIDWORKS 27
2.7.9 FIGMA 28
CHƯƠNG 3 THIẾT KẾ HỆ THỐNG 29
3.1 YÊU CẦU HỆ THỐNG 29
3.2 THIẾT KẾ PHẦN CỨNG 30
3.2.1 LỰA CHỌN THIẾT BỊ 30
3.2.2 SƠ ĐỒ NGUYÊN LÝ BOARD MẠCH 37
3.2.3 LAYOUT PCB 42
3.2.4 HỘP CHỨA CHO BOARD VÀ MÀN HÌNH 43
3.3 THIẾT KẾ PHẦN MỀM 45
Trang 123.3.1 THIẾT KẾ VÀ LẬP TRÌNH MOBILE APP 45
3.3.2 LẬP TRÌNH GIAO DIỆN CHO MÀN HÌNH DWIN 54
3.3.3 LẬP TRÌNH CHO ESP32 56
3.3.4 CÀI ĐẶT HỆ ĐIỀU HÀNH CHO JETSON NANO 63
3.3.5 LẬP TRÌNH TRÊN JETSON NANO 65
CHƯƠNG 4 KẾT QUẢ 71
4.1 KẾT QUẢ PHẦN CỨNG 71
4.2 KẾT QUẢ PHẦN MỀM 73
4.2.1 Mobile App 73
4.2.2 Màn hình DWIN 74
4.2.3 Jetson nano 75
CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 77
5.1 KẾT LUẬN 77
5.2 HƯỚNG PHÁT TRIỂN 77
TÀI LIỆU THAM KHẢO 79
Trang 13DANH SÁCH HÌNH ẢNH
Hình 2.1 Internet of thing 4
Hình 2.2 React Native 7
Hình 2.3 Expo 9
Hình 2.4 Node.js 11
Hình 2.5 CRUD 12
Hình 2.6 Các bước trong xử lý ảnh 14
Hình 2.7 Ngôn ngữ lập trình Python 16
Hình 2.8 Sử dụng đơn luồng 18
Hình 2.9 Sử dụng đa lường 18
Hình 2.10 Thư viện OpenCV 19
Hình 2.11 VS Code 22
Hình 2.12 Arduino IDE 23
Hình 2.13 KiCAD 24
Hình 2.14 balenaEtcher 25
Hình 2.15 SD Card Formatter 26
Hình 2.16 XAMPP 27
Hình 2.17 DWIN DGUS 27
Hình 2.18 SOLIDWORKS 28
Hình 2.19 Figma 28
Hình 3.1 Sơ đồ hoạt động của hệ thống 29
Hình 3.2 ESP32 ESP-WROOM-32E 30
Hình 3.3 Sơ đồ khối chức năng của ESP32 31
Hình 3.4 Sơ đồ chân của ESP32 32
Hình 3.5 Màn hình DWIN 32
Hình 3.6 Cấu tạo màn hình DWIN 4.3 inch 33
Hình 3.7 Cảm biến tiệm cận LJ12A3-4-Z/BX 34
Hình 3.8 Camera Xiaomi Xiaovv- XVV-6320S 35
Hình 3.9 Jetson nano 36
Hình 3.10 Cấu tạo ổ khóa 37
Hình 3.10 Cấu tạo bộ phận khóa 38
Hình 3.10 Sơ đồ nguyên lý nguồn 220VAC thành 5VDC 38
Trang 14Hình 3.11 Sơ đồ nguyên lý nguồn Pin thành 5VDC 39
Hình 3.12 Sơ đồ nguyên lý nguồn 5VDC thành 3.3VDC 39
Hình 3.13 Sơ đồ nguyên lý mạch ESP32 40
Hình 3.14 Sơ đồ nguyên lý các chân nạp cho ESP 41
Hình 3.15 Sơ đồ nguyên lý các chân terminal 41
Hình 3.16 Lớp Top của board mạch 42
Hình 3.17 Lớp Bottom của board mạch 42
Hình 3.18 Các đường mạch của board 43
Hình 3.19 Hộp chưa màn hình và board 43
Hình 3.20 Bản vẽ 2D của hộp mặt trước và sau 44
Hình 3.21 Bản vẽ 2D của hộp các mặt xung quanh 44
Hình 3.22 Giao diện được thiết kế trước bằng figma 45
Hình 3.23 Thông báo đã tạo thành công dự án Expo 46
Hình 3.24 Các file sau khi khởi tạo 46
Hình 3.25 Bắt đầu dự án Expo 51
Hình 3.26 App Expo Go trên thiết bị android 51
Hình 3.27 Chạy MySQL bằng XAMPP 53
Hình 3.28 Cơ sở dữ liệu MySQL trên XAMPP 54
Hình 3.29 Khởi tạo dự án mới bằng DWIN DGUS 55
Hình 3.30 Màn hình sau khi thiết bằng DWIN DGUS 56
Hình 3.31 Lưu đồ lấy trạng thái nút nhấn từ url1 57
Hình 3.32 Lưu đồ lấy mật khẩu từ url2 58
Hình 3.33 Lưu đồ chương trình HTTP Task 59
Hình 3.34 Lưu đồ đọc giá trị từ màn DWIN gửi qua 60
Hình 3.35 Lưu đồ chương trình mở cửa 61
Hình 3.36 Lưu đồ chương trình chính 62
Hình 3.37 File hệ điều hành cho Jetson nano 63
Hình 3.38 Định dạng thẻ nhớ bằng SD Card Formatter 64
Hình 3.39 Flash hệ điều hành qua thẻ nhớ bằng balenaEtcher 64
Hình 3.40 Jetson nano sau khi cài đặt hệ điều hành 65
Hình 3.41 Xử lý ảnh đầu vào 66
Hình 3.42 Lưu đồ xây dựng mô hình nhận diện khuôn mặt 66
Trang 15Hình 3.43 Ảnh fake và ảnh real 67
Hình 3.44 Lưu đồ xây dựng mô hình nhận điện ảnh thật, giả 68
Hình 3.45 Lưu đồ luồng gửi ảnh lên server 70
Hình 3.46 Lưu đồ luồng nhận diện khuôn mặt 70
Hình 4.1 Board sau khi hàn xong 71
Hình 4.2 Mô hình hộp mica chứa board và màn hỉnh 71
Hình 4.3 Mặt trước và sau của khóa 72
Hình 4.4 Mô hình khóa 73
Hình 4.5 Giao diện của mobile app 73
Hình 4.6 Dữ liệu trên database khi đăng ký 74
Hình 4.7 Dữ liệu trên database khi điền form hỗ trợ 74
Hình 4.8 Màn hình DWIN sau khi nạp chương trình 74
Hình 4.9 Màn hình DWIN sau khi nhập mật khẩu 75
Hình 4.10 Kết quả nhận diện ảnh thật giả 75
Hình 4.11 Kết quả nhận diện khuôn mặt 76
Hình 4.12 Kết quả nhận diện khuôn mặt trên Jetson nano 76
Trang 16DANH MỤC CÁC TỪ VIẾT TẮT
IoT : Internet of Things
SDK: Software Development Kit
WiFi: Wireless Fidelity
UART: Universal Asynchronous Receiver Transmitter
OTA: Over-the-Air
ORM: Object-Relational Mapping
CRUD: Create Read Update Delete
AI: Artificial Intelligent
IDE: Integrated Development Environment
TCP: Transmission Control Protocol
UDP: User Datagram Protocol
GIL: Global Interpreter Lock
CCS: Cascading Style Sheets
API: Application Programming Interface
HTML: Hyper Text Markup Language
Trang 17CHƯƠNG 1 TỔNG QUAN
1.1 ĐẶT VẤN ĐỀ
Trong thời đại công nghệ 4.0, các ứng dụng IoT (Internet of Things) và trí tuệ nhân tạo (AI) đang trở thành những yếu tố then chốt trong việc cải tiến và nâng cao chất lượng cuộc sống Một trong những ứng dụng nổi bật là hệ thống khóa thông minh (SmartKey), tích hợp công nghệ xử lý ảnh và nhận diện khuôn mặt Đề tài
"Thiết kế và thi công SmartKey-IoT tích hợp công nghệ xử lý ảnh và trí tuệ nhân tạo (AI) để nhận diện khuôn mặt" đặt mục tiêu tạo ra một hệ thống khóa cửa tiên tiến, hiện đại, phù hợp với xu hướng phát triển của xã hội
An ninh và bảo mật: Với tình trạng tội phạm và các vụ đột nhập ngày càng gia tăng, nhu cầu về các giải pháp an ninh tiên tiến và hiệu quả trở nên cấp bách Hệ thống SmartKey với khả năng nhận diện khuôn mặt cung cấp một lớp bảo vệ bổ sung, giúp tăng cường an ninh cho nhà ở, văn phòng và các khu vực cần bảo vệ Tiện lợi và tự động hóa: Sử dụng khóa thông minh giúp người dùng tiết kiệm thời gian và công sức so với các phương pháp truyền thống như sử dụng chìa khóa vật lý Việc tích hợp công nghệ IoT cho phép quản lý và giám sát từ xa thông qua các thiết bị di động
1.2 MỤC TIÊU
Nghiên cứu, thiết kế, thi công được một hệ thống khóa cửa mở bằng nhận diện khuôn mặt, mật khẩu trên màn hình và mở bằng mobile app trên thiết bị di dộng
1.3 PHƯƠNG PHÁP NGHIÊN CỨU
Đề tài sử dụng kết hợp những phương pháp nghiên cứu:
− Phương pháp nghiên cứu lý thuyết
− Phương pháp thực nghiệm
1.4 NỘI DUNG NGHIÊN CỨU
− Tìm hiểu về công nghệ IoT
− Tìm hiểu về nhận diện khuôn mặt, xử lý ảnh và thực hiện nhận diện khuôn mặt trên Jetson nano
Trang 18− Nghiên cứu cách tạo một mobile app bằng React Native và Expo
− Nghiên cứu cách tạo một server và giao tiếp giữa client và server
− Nghiên cứu cách giao tiếp giữa những thiết bị với nhau
− Nghiên cứu cách quản lý cơ sở dữ liệu
− Lập trình hệ thống
− Thiết kế hệ thống
− Kiểm tra, sửa chữa và hoàn thiện toàn bộ hệ thống
− Viết bài báo cáo
1.5 GIỚI HẠN ĐỀ TÀI:
- Giới hạn về tính chính xác của xử lý ảnh
- Độ trễ của camera khi quan sát trên ứng dụng
- Chưa triển khai chức năng gửi mã xác nhận qua email
- Chưa tính toán lượng năng lượng các thiết bị sử dụng
- Chưa có tính năng đặt wifi ban đầu cho esp32 trên app
- Dùng những thiết bị sẵn có nên phạm vi ứng dụng chưa cao
1.6 BỐ CỤC BÁO CÁO
Chương 1: Tổng quan
Phần này sẽ giới thiệu tổng quan về để tài sẽ được thực hiện, lý do chọn đề tài,mục tiêu nghiên cứu, nội dung nghiên cứu và các giới hạn của đề tài
Chương 2: Cơ sở lý thuyết
Phần này sẽ nêu ra những lý thuyết về kiến thức liên quan đến đê tài thực hiện Lý thuyết cơ bản sẽ bao gồm các khái niệm và định nghĩa liên quan tới đề tài Việc nắm vững các lý thuyết này sẽ giúp ta có cái nhìn tổng quan về những kiến thức sẽ được sử dụng vào trong để Mô tả sơ bộ về các phần mềm được sử dụng trong đề tài
Chương 3: Thiết kế hệ thống
Phần này sẽ nêu ra các quá trình thiết kế nên một hệ thống để đáp ứng được những mục tiêu của đề tài Bao gồm lựa chọn thiết bị phù hợp với đề tài, sơ đồ nguyên lý mạch phần cứng Về phần mềm thì thiết kế app giao diện người dùng, các lưu đồ giải thuật trong phần mềm
Chương 4: Kết quả
Trang 19Phần này sẽ trình bày những đề tài đã hoàn thành được Nhìn nhận kết quả có đúng với mục tiêu đã đề ra của đề tài không
Chương 5: Kết luận và hướng phát triển
Trình bày những kết luận về hệ thống, những gì mà hệ thống đã đạt được , những hạn chế và đề xuất những ý tưởng để phát triển sản phẩm trong tương lai
Trang 20CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.1 GIỚI THIỆU VỀ IOT (INTERNET OF THING)
2.1.1 Tổng quan về IoT
Internet of Things (IoT) là một khái niệm đang càng ngày trở nên phổ biến trong thời đại công nghệ hiện nay IoT đề cập đến một hệ thống mạng rộng lớn trong đó những thiết bị thông minh được giao tiếp với nhau qua internet, cho phép thu thập, chia sẻ và phân tích dữ liệu với mục tiêu tối ưu hóa các hoạt động hàng ngày và nâng cao chất lượng cuộc sống Các thiết bị này bao gồm từ những vật dụng quen thuộc như điện thoại thông minh, tivi, và đồng hồ thông minh, đến các
hệ thống phức tạp hơn như cảm biến công nghiệp, xe tự lái, thiết bị y tế, và thậm chí
cả các thiết bị trong nông nghiệp như hệ thống tưới tiêu tự động
IoT mang lại khả năng tạo ra một môi trường kết nối liền mạch, nơi thông tin được trao đổi một cách tự động và hiệu quả Môi trường kết nối liền mạch do IoT tạo ra còn cho phép sự giám sát và quản lý từ xa, giúp tối ưu hóa quy trình và tiết kiệm nguồn lực Điều này đặc biệt quan trọng trong các lĩnh vực như y tế, nơi mà các thiết bị IoT có thể theo dõi tình trạng sức khỏe của bệnh nhân từ xa và cung cấp thông tin kịp thời cho bác sĩ, hay trong công nghiệp, nơi các máy móc được giám sát liên tục để dự báo và ngăn ngừa sự cố
Hình 2.1 Internet of thing
(Nguồn: https://www.freepik.com/free-photos-vectors/iot-devices)
Trang 212.1.2 Các thành phần của IoT
− Thiết bị thông minh (Smart Devices): là các thiết bị có khả năng thu thập
dữ liệu và giao tiếp thông tin qua mạng internet Ví dụ như điện thoại thông minh, máy tính bảng, thiết bị y tế, đồng hồ thông minh, cảm biến, actuator, thiết bị gia đình thông minh như máy giặt, tủ lạnh, đèn chiếu sáng, vv
− Mạng kết nối (Network Connectivity):IoT sử dụng các công nghệ kết nối
mạng như Wi-Fi, Bluetooth, Zigbee, LoRa, LTE, hay cả mạng dây như Ethernet để các thiết bị có thể giao tiếp với nhau và với hệ thống điều khiển
từ xa
− Phần mềm và nền tảng (Software and Platforms):Đây là các phần mềm
và nền tảng dùng để quản lý và điều khiển các thiết bị IoT, thu thập và phân tích dữ liệu Các nền tảng này cung cấp các công cụ để phát triển ứng dụng IoT, quản lý thiết bị, bảo mật và quản lý dữ liệu, ví dụ như AWS IoT, Google Cloud IoT, Azure IoT, hay các nền tảng mã nguồn mở như Arduino, Raspberry Pi
− Dữ liệu (Data):IoT sản sinh ra một lượng lớn dữ liệu từ các thiết bị thu thập
thông tin về môi trường xung quanh và các hoạt động Dữ liệu này được sử dụng để cung cấp thông tin hữu ích cho việc ra quyết định, cải thiện hiệu quả
và tối ưu hoá các quy trình
− Người dùng và ứng dụng (Users and Applications):Các người dùng cuối
và các ứng dụng sử dụng dữ liệu và các tính năng của IoT để cải thiện cuộc sống hàng ngày và công việc Ví dụ như hệ thống nhà thông minh, chăm sóc sức khỏe từ xa, quản lý thông minh, giao thông thông minh, nông nghiệp thông minh, vv
2.1.3 Ứng dụng của IoT
IoT được ứng dụng trong rất nhiều lĩnh vực:
− Nhà thông minh (Smart Home): Điều khiển thiết bị gia đình như đèn chiếu
sáng, thiết bị điện tử (TV, máy giặt, tủ lạnh) từ xa qua điện thoại thông minh.Giám sát và điều khiển nhiệt độ, độ ẩm, an ninh nhà cửa bằng hệ thống camera và cảm biến
Trang 22− Y tế và chăm sóc sức khỏe (Healthcare):Thiết bị đeo thông minh (smart
wearable) để theo dõi sức khỏe như nhịp tim, hoạt động vận động, chất
lượng giấc ngủ Giám sát và điều khiển thiết bị y tế từ xa, bao gồm các thiết
bị y tế nâng cao như máy xạ trị và máy chụp cắt lớp
− Công nghiệp (Industrial): Giám sát các hệ thống sản xuất và quản lý chuỗi
cung ứng thông qua cảm biến và mạng IoT để tối ưu hóa quá trình sản xuất
và giảm thiểu sự cố Bảo trì dự đoán: Dự đoán sự cố trên các máy móc và
thiết bị công nghiệp trước khi chúng xảy ra để giảm thiểu thời gian dừng
− Bảo mật và quyền riêng tư: Dữ liệu từ các thiết bị IoT thường là nhạy cảm
và có thể bị tấn công, lộ thông tin cá nhân nếu không có biện pháp bảo mật phù hợp.Các thiết bị IoT thường có tính năng bảo mật yếu và có thể dễ dàng
bị xâm nhập, trở thành lỗ hổng để tấn công mạng lớn
− Quản lý và cập nhật phần mềm: Những thiết bị IoT cần phải cập nhật phần
mềm thường xuyên để bảo đảm tính bảo mật và hiệu suất, nhưng việc này thường gặp khó khăn do sự phân tán của các thiết bị và nhà sản xuất
− Xử lý và phân tích dữ liệu lớn: IoT sản sinh ra lượng dữ liệu lớn, việc phân
tích và xử lý dữ liệu trở thành thách thức, đặc biệt là trong thời gian thực và
để đưa ra các quyết định nhanh chóng
− Hạn chế về năng lượng và độ bền: Đa số các thiết bị IoT hoạt động liên tục
và có thể không dễ dàng tiếp cận nguồn năng lượng, do đó cần các giải pháp tiết kiệm năng lượng.Các thiết bị IoT thường được đặt trong môi trường khắc nghiệt hoặc khả năng hoạt động trong thời gian dài mà không cần bảo trì, điều này đòi hỏi các thiết kế chịu được và độ bền cao
Trang 232.2 GIỚI THIỆU CÁC CÔNG CỤ THIẾT KẾ APP
2.2.1 React Native
React Native là một framework phát triển ứng dụng di động được Facebook giới thiệu lần đầu tiên vào năm 2015 Framework này đã nhanh chóng trở thành một trong những công cụ phổ biến nhất để phát triển ứng dụng di động nhờ khả năng viết mã nguồn một lần và chạy trên cả iOS và Android React Native được xây dựng dựa trên React, một thư viện JavaScript nổi tiếng dùng để xây dựng giao diện người dùng
React Native xuất phát từ nhu cầu nội bộ của Facebook nhằm phát triển các ứng dụng di động với hiệu quả cao hơn Trước đó, đội ngũ phát triển tại Facebook phải duy trì hai mã nguồn riêng biệt cho iOS và Android, dẫn đến nhiều khó khăn trong việc quản lý và phát triển tính năng đồng nhất cho cả hai nền tảng Nhận thấy tiềm năng của React – một thư viện JavaScript do Facebook phát triển vào năm
2013 – trong việc xây dựng giao diện người dùng hiệu quả, nhóm phát triển đã bắt đầu nghiên cứu cách áp dụng các nguyên lý của React vào phát triển ứng dụng di động
Dự án React Native bắt đầu vào năm 2013 và được công bố lần đầu tại hội nghị React.js Conf vào năm 2015 Mục tiêu của React Native là cung cấp một công
cụ phát triển ứng dụng di động có thể chia sẻ phần lớn mã nguồn giữa iOS và Android, đồng thời đảm bảo hiệu suất gần như tương đương với ứng dụng gốc
Hình 2.2 React Native
(Nguồn: https://worldvectorlogo.com/logo/react-native-1)
Ưu điểm của React Native:
Trang 24• Khả năng tái sử dụng mã nguồn: ưu điểm lớn nhất của React Native là việc có thể tái sử dụng mã nguồn giữa iOS và Android Những thành phần giao diện và logic ứng dụng có thể được viết một lần và sử dụng cho cả hai nền tảng, giúp tiết kiệm công sức và thời gian phát triển rất nhiều Thông thường, tỷ lệ mã nguồn tái sử dụng có thể đạt từ 70% đến 90%
• Phát triển nhanh chóng: React Native hỗ trợ tính năng Hot Reloading, cho phép lập trình viên thấy các thay đổi trong mã code mà không cần phải build lại nhiều lần Nên giúp quá trình phát triển và giúp phát hiện lỗi nhanh chóng hơn
• Cộng đồng đông đảo: React Native có một cộng đồng đông đảo và nhiệt tình, với nhiều thư viện và tài liệu hỗ trợ Điều này giúp các lập trình viên dễ dàng kiếm ra giải pháp cho những vấn dề khúc mắc
• Tiết kiệm chi phí: Việc chỉ cần một đội ngũ phát triển để viết mã cho cả hai nền tảng giúp giảm chi phí nhân lực và tăng hiệu quả làm việc
Nhược điểm của React Native
• Hiệu suất không tối ưu cho mọi trường hợp: Mặc dù React Native cung cấp hiệu suất tốt, nhưng đối với những yêu cầu xử lý đồ họa phức tạp hoặc tác vụ tính toán cao, hiệu suất của nó không thể so sánh với ứng dụng gốc được viết bằng ngôn ngữ như Swift hay Kotlin
• Hạn chế về tính năng gốc: Một số tính năng đặc trưng của từng nền tảng có thể không được hỗ trợ đầy đủ trong React Native, yêu cầu lập trình viên phải viết
mã gốc (native code) để bổ sung, điều này làm giảm tính đồng nhất của mã nguồn và tăng độ phức tạp
• Hỗ trợ không đồng đều: Một số thư viện và công cụ mới nhất trên iOS và Android có thể không được hỗ trợ kịp thời trong React Native [2]
2.2.2 Expo
Expo là một nền tảng mạnh mẽ và toàn diện dành cho phát triển ứng dụng di động đa nền tảng sử dụng React Native Được thiết kế nhằm tối ưu hóa quy trình phát triển, Expo cung cấp một bộ công cụ và dịch vụ phong phú giúp lập trình viên
dễ dàng xây dựng, triển khai và quản lý ứng dụng di động trên cả hệ điều hành iOS
và Android mà không cần phải có kiến thức sâu về từng nền tảng riêng lẻ Với Expo, các nhà phát triển có thể truy cập vào các API phong phú và tính năng như
Trang 25camera, vị trí địa lý, và thông báo, đồng thời tận dụng môi trường phát triển tích hợp (IDE) tiện lợi và thư viện sẵn có Expo không chỉ giúp rút ngắn thời gian phát triển mà còn đảm bảo tính nhất quán và hiệu quả, giúp các dự án di động từ nhỏ đến lớn đều có thể đạt được chất lượng cao và trải nghiệm người dùng mượt mà [3]
Hình 2.3 Expo
(Nguồn : https://www.svgrepo.com/svg/353722/expo) Lợi ích của Expo
• Dễ sử dụng: Expo loại bỏ nhiều phức tạp trong quá trình thiết lập môi trường phát triển Bạn có thể bắt đầu ngay lập tức với một dự án mới mà không cần phải cài đặt và cấu hình nhiều công cụ và SDK khác nhau
• Hot Reloading: Tính năng hot reloading của Expo cho phép bạn xem ngay các thay đổi trong ứng dụng mà không cần phải build lại từ đầu, giúp tăng tốc độ phát triển và thử nghiệm
• Bộ thư viện đa dạng: Expo cung cấp nhiều API và thư viện có sẵn để truy cập các tính năng thiết bị như máy ảnh, vị trí, thông báo, và lưu trữ cục bộ, giúp lập trình viên dễ dàng tích hợp các tính năng phổ biến mà không cần viết mã gốc
• Expo Go: Ứng dụng Expo Go trên iOS và Android cho phép bạn chạy và thử nghiệm ứng dụng trực tiếp trên thiết bị di động mà không cần phải qua quá trình build và cài đặt phức tạp Chỉ cần quét mã QR và bạn có thể thấy ngay ứng dụng của mình hoạt động
• Quản lý tài nguyên dễ dàng: Expo cung cấp các công cụ để quản lý tài nguyên như hình ảnh, phông chữ, và âm thanh một cách hiệu quả, giúp đảm bảo rằng ứng dụng của bạn hoạt động mượt mà trên mọi thiết bị
Trang 26• Dịch vụ triển khai và xây dựng: Với Expo, bạn có thể dễ dàng xây dựng và triển khai ứng dụng lên App Store và Google Play thông qua các dịch vụ build của Expo, mà không cần phải cấu hình môi trường build phức tạp
• Hỗ trợ OTA (Over-the-Air) Updates: Expo cho phép bạn gửi cập nhật đến người dùng mà không cần phải qua quy trình kiểm duyệt của App Store hoặc Google Play, giúp bạn nhanh chóng triển khai các bản sửa lỗi và tính năng mới
Hạn chế của Expo
• Hạn chế về Native Modules: Expo không hỗ trợ tất cả các mô-đun gốc của React Native Nếu cần sử dụng các thư viện gốc không được Expo hỗ trợ, ta phải "eject" dự án của mình ra khỏi Expo, điều này làm mất đi một số lợi ích của nền tảng này
• Kích thước ứng dụng lớn: Ứng dụng được xây dựng bằng Expo thường có kích thước lớn hơn so với các ứng dụng gốc tương đương do bao gồm nhiều mô-đun không cần thiết
• Hiệu suất: Mặc dù Expo tối ưu hóa nhiều khía cạnh, nhưng đôi khi hiệu suất của ứng dụng Expo có thể không đạt được như ứng dụng gốc, đặc biệt là trong các ứng dụng yêu cầu hiệu suất cao hoặc sử dụng nhiều tài nguyên
• Cập nhật chậm: Expo có thể cập nhật chậm hơn so với các bản phát hành của React Native Điều này có thể khiến bạn không thể sử dụng các tính năng hoặc cải tiến mới nhất ngay lập tức
2.2.3 Node.js
Node.js là một môi trường chạy JavaScript phía máy chủ, được xây dựng trên nền tảng V8 JavaScript engine của Google Được phát triển bởi Ryan Dahl vào năm 2009, Node.js đã nhanh chóng trở thành một công cụ mạnh mẽ và phổ biến trong việc phát triển các ứng dụng web, đặc biệt là các ứng dụng yêu cầu xử lý dữ liệu thời gian thực và có khả năng mở rộng cao
Node.js cho phép các lập trình viên sử dụng JavaScript để viết mã chạy trên máy chủ, thay vì chỉ trên trình duyệt như truyền thống Điều này mang lại nhiều lợi
Trang 27ích, bao gồm khả năng sử dụng cùng một ngôn ngữ lập trình cho cả phía máy khách
và phía máy chủ, giúp đơn giản hóa quá trình phát triển và bảo trì ứng dụng
Một trong những đặc điểm nổi bật của Node.js là mô hình xử lý bất đồng bộ
và không chặn (asynchronous and non-blocking), giúp tối ưu hóa hiệu suất và khả năng xử lý đồng thời nhiều kết nối Điều này làm cho Node.js trở nên lý tưởng cho các ứng dụng thời gian thực như trò chuyện trực tuyến (chat), thông báo tức thời (push notifications), và các hệ thống IoT (Internet of Things)
Node.js đi kèm với npm (Node Package Manager), một hệ thống quản lý gói mạnh mẽ cho phép lập trình viên dễ dàng cài đặt, quản lý và chia sẻ các thư viện và công cụ JavaScript Với hàng triệu gói có sẵn trên npm, cộng đồng Node.js phát triển không ngừng và cung cấp vô số giải pháp sẵn có cho các vấn đề lập trình phổ biến
Nhờ vào tính hiệu quả, khả năng mở rộng, và cộng đồng hỗ trợ mạnh mẽ, Node.js đã trở thành lựa chọn hàng đầu cho nhiều công ty và dự án lớn như Netflix, LinkedIn, và Walmart, khẳng định vị thế của nó trong thế giới phát triển phần mềm hiện đại
Hình 2.4 Node.js
(Nguồn: https://en.m.wikipedia.org/wiki/File:Node.js_logo.svg)
2.2.4 Express
Express là một framework phổ biến và mạnh mẽ cho Node.js, thường được sử dụng
để xây dựng các ứng dụng web và API Nó giúp các nhà phát triển tối ưu hóa quy trình phát triển bằng cách cung cấp các công cụ và cấu trúc cần thiết để xử lý các yêu cầu HTTP một cách dễ dàng và hiệu quả
Một trong những khái niệm quan trọng khi làm việc với Express là các phương thức CRUD, viết tắt của Create (Tạo), Read (Đọc), Update (Cập nhật), và Delete (Xóa)
Trang 28Các phương thức này tương ứng với các hành động cơ bản trong quản lý dữ liệu của ứng dụng
Hình 2.5 CRUD
(Nguồn:
https://bizflycloud.vn/tin-tuc/crud-la-gi-thuc-hanh-crud-20181130160033636.htm)
Chi tiết mỗi phương thức:
− Create (Tạo - POST): Phương thức này được sử dụng để tạo mới một tài
nguyên Ví dụ, khi người dùng điền vào một biểu mẫu đăng ký, dữ liệu từ biểu mẫu đó sẽ được gửi lên máy chủ thông qua phương thức POST để tạo một bản ghi mới Trong Express, ta có thể xử lý yêu cầu POST bằng cách định nghĩa một route và sử dụng các middleware để xử lý dữ liệu được gửi lên từ client
− Read (Đọc - GET): Phương thức này được sử dụng để lấy dữ liệu từ máy
chủ Ví dụ, khi người dùng truy cập vào một trang danh sách sản phẩm, ứng dụng sẽ sử dụng phương thức GET để gửi yêu cầu lấy danh sách sản phẩm từ máy chủ Trong Express, bạn có thể định nghĩa các route GET để phục vụ các yêu cầu đọc dữ liệu từ cơ sở dữ liệu hoặc từ bất kỳ nguồn dữ liệu nào khác
− Update (Cập nhật - PUT hoặc PATCH): Phương thức này được sử dụng
để cập nhật dữ liệu đã tồn tại Ví dụ, khi người dùng chỉnh sửa thông tin cá nhân của họ, dữ liệu sẽ được gửi lên máy chủ thông qua phương thức PUT hoặc PATCH để cập nhật thông tin tài nguyên đó Trên Express, bạn có thể
xử lý các yêu cầu PUT hoặc PATCH bằng cách định nghĩa route và sử dụng middleware để xử lý dữ liệu gửi lên từ client
Trang 29− Delete (Xóa - DELETE): Phương thức này được sử dụng để xóa tài nguyên
khỏi máy chủ Ví dụ, khi người dùng yêu cầu xóa một bài đăng từ diễn đàn, yêu cầu sẽ được gửi lên máy chủ thông qua phương thức DELETE Trong Express, bạn có thể định nghĩa route DELETE để xử lý yêu cầu xóa tài nguyên
Mục tiêu cơ bản của xử lý ảnh là trích xuất thông tin hữu ích từ dữ liệu hình ảnh Điều này giúp các hệ thống tự động hoặc các ứng dụng phần mềm có thể nhận diện, phân tích và hiểu được các yếu tố trong môi trường xung quanh Xử lý ảnh bao gồm các công đoạn từ xử lý cơ bản như nâng cao chất lượng hình ảnh đến các công đoạn phức tạp hơn như nhận dạng và phân loại đối tượng, phân tích hành vi,
và tạo ra các mô hình nhận diện [4]
2.3.2 Ứng dụng
− Y tế: Xử lý ảnh hỗ trợ trong chẩn đoán bệnh, theo dõi tiến triển bệnh, phẫu
thuật robot và hình ảnh y tế chẩn đoán như MRI, CT
− An ninh và giám sát: Nhận dạng khuôn mặt, phân tích hành vi, giám sát
giao thông, nhận diện biển số xe
− Ô tô tự động và robot: Xử lý ảnh giúp xe tự động phân biệt vật thể, nhận
dạng biển báo giao thông, và dự đoán môi trường
− Công nghiệp và kiểm tra chất lượng: Kiểm tra chất lượng sản phẩm, phát
hiện lỗi sản xuất, và tự động hóa quy trình kiểm tra
− Quảng cáo và giải trí: Tạo hiệu ứng hình ảnh, chỉnh sửa ảnh, nhận diện
thương hiệu và phân tích hành vi người dùng
Trang 30− Khoa học và nghiên cứu: Phân tích hình ảnh thiên văn, hình ảnh y sinh học,
và nghiên cứu môi trường
Dưới đây sẽ mô tả về các bước trong xử lý ảnh
Thu nhận ảnh Tiền xử lý Phân đoạn ảnh Biểu diễn và mô tả Nhận dạng và nội suy
Hình 2.6 Các bước trong xử lý ảnh
Thu Thập Ảnh: Đây là bước đầu tiên, nơi mà hình ảnh được thu thập từ các nguồn
như máy ảnh kỹ thuật số, camera giám sát, hoặc từ các tập tin hình ảnh đã có sẵn
Độ phân giải, ánh sáng và chất lượng của hình ảnh ban đầu rất quan trọng để đảm bảo hiệu quả của các bước xử lý tiếp theo
Tiền Xử Lý (Preprocessing): Giai đoạn này nhằm chuẩn bị hình ảnh cho các bước
xử lý phức tạp hơn Các kỹ thuật thường sử dụng trong tiền xử lý bao gồm:
• Làm sạch Nhiễu (Noise Reduction): Sử dụng các thuật toán lọc để giảm thiểu các nhiễu trong hình ảnh
• Điều Chỉnh Độ Sáng và Tương Phản: Điều chỉnh độ sáng và tương phản để làm nổi bật các chi tiết quan trọng trong ảnh
• Cân Bằng Màu Sắc: Điều chỉnh các kênh màu để làm cho hình ảnh có màu sắc tự nhiên hơn
• Phân Cắt (Cropping): Cắt bỏ các phần không cần thiết của hình ảnh để tập trung vào khu vực quan tâm
Phân Đoạn Ảnh (Image Segmentation): Đây là quá trình chia hình ảnh thành các
vùng hoặc đối tượng riêng biệt dựa trên các đặc tính như màu sắc, độ sáng, hoặc các đặc tính hình học Mục tiêu của phân đoạn là tách biệt các đối tượng hoặc khu vực quan trọng để dễ dàng phân tích và xử lý tiếp theo
Biểu Diễn và Mô Tả (Representation and Description): Sau khi phân đoạn, các
đối tượng trong hình ảnh cần được biểu diễn dưới dạng các đặc trưng số hoặc vector
để mô tả các đặc điểm của chúng Các kỹ thuật như Histogram of Oriented Gradients (HOG), Scale-Invariant Feature Transform (SIFT), và Convolutional Neural Networks (CNN) thường được sử dụng để trích xuất đặc trưng
Trang 31Nhận Dạng và nội suy: Đây là giai đoạn quan trọng nhất, nơi các thuật toán học
máy và trí tuệ nhân tạo được sử dụng để nhận diện và phân loại các đối tượng hoặc
sự kiện trong hình ảnh Các phương pháp như học sâu (Deep Learning), mạng ron nhân tạo (Neural Networks), và học máy (Machine Learning) được áp dụng để phát triển các mô hình nhận dạng và phân tích
nơ-2.4 GIỚI THIỆU VỀ TRÍ TUỆ NHÂN TẠO AI
Trí tuệ nhân tạo (AI - Artificial Intelligence) là một lĩnh vực của khoa học máy tính, tập trung vào việc tạo ra các hệ thống hoặc máy tính có khả năng thực hiện các nhiệm vụ mà, nếu do con người thực hiện, sẽ đòi hỏi trí thông minh Những nhiệm
vụ này bao gồm nhận thức, học hỏi, lập luận, giải quyết vấn đề, hiểu ngôn ngữ tự nhiên và thậm chí sáng tạo nghệ thuật
Các lĩnh vực chính của AI
• Học máy (Machine Learning - ML): Một nhánh của AI, tập trung vào việc
phát triển các thuật toán cho phép máy tính học từ dữ liệu và cải thiện hiệu suất theo thời gian mà không cần lập trình rõ ràng cho từng nhiệm vụ cụ thể Các phương pháp học máy phổ biến bao gồm học có giám sát (supervised learning), học không giám sát (unsupervised learning) và học tăng cường (reinforcement learning)
• Học sâu (Deep Learning): Một phân nhánh của học máy, sử dụng các mạng
nơ-ron nhân tạo với nhiều lớp (deep neural networks) để học từ dữ liệu Học sâu đã đạt được những thành tựu đáng kể trong các lĩnh vực như nhận diện hình ảnh, xử lý ngôn ngữ tự nhiên và chơi game
• Xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP): Tập
trung vào việc giúp máy tính hiểu, diễn giải và đáp ứng lại ngôn ngữ con người một cách tự nhiên Các ứng dụng của NLP bao gồm dịch máy, phân tích cảm xúc và chatbots
• Thị giác máy tính (Computer Vision): Giúp máy tính "nhìn thấy" và hiểu
được hình ảnh và video Các ứng dụng bao gồm nhận diện khuôn mặt, phân loại hình ảnh và tự lái xe
Một số ứng dụng của AI trong đời sống và công nghiệp
Trang 32• Y tế: AI được sử dụng để chẩn đoán bệnh, dự đoán kết quả điều trị và hỗ trợ
nghiên cứu y học
• Giao thông: Công nghệ tự lái xe, tối ưu hóa luồng giao thông và quản lý vận
tải thông minh
• Giáo dục: Cá nhân hóa trải nghiệm học tập, đánh giá và phản hồi tự động
• Tài chính: Dự đoán thị trường, phát hiện gian lận và quản lý tài sản tự động
• Giải trí: Đề xuất nội dung, tạo ra nội dung số và tương tác với người dùng
qua trò chơi và thực tế ảo
Python là một ngôn ngữ lập trình được yêu thích vì nhiều ưu điểm nổi bật:
− Dễ học và dễ đọc: Python có cú pháp đơn giản, gần gũi với ngôn ngữ tự
nhiên, giúp người mới bắt đầu nhanh chóng làm quen và viết mã một cách
Trang 33hiệu quả Điều này giúp giảm thời gian học tập so với các ngôn ngữ khác và nâng cao năng suất làm việc
− Đa năng và linh hoạt: Python có thể được sử dụng trong nhiều mục đích
khác nhau, từ phát triển web (Web development), khoa học dữ liệu (Data science), máy học (Machine learning), đến tự động hóa (Automation) và tính toán khoa học (Scientific computing) Điều này làm cho Python trở thành một công cụ đa năng cho các lập trình viên và các nhà khoa học
− Thư viện và cộng đồng phong phú: Python có một cộng đồng lớn và nhiệt
tình, cùng với một số lượng lớn các thư viện và framework miễn phí, giúp cho việc phát triển phần mềm nhanh chóng và hiệu quả hơn Ví dụ như NumPy, Pandas trong khoa học dữ liệu, TensorFlow và PyTorch trong máy học, Django và Flask trong phát triển web
− Tương thích và di động cao: Python hoạt động trên hầu hết các nền tảng hệ
điều hành như Windows, macOS, Linux, giúp cho việc triển khai phần mềm
dễ dàng và thuận tiện Ngoài ra, Python cũng hỗ trợ tích hợp với nhiều ngôn ngữ lập trình khác và các công nghệ khác nhau
− Hỗ trợ công cụ phát triển mạnh mẽ: Python đi kèm với một loạt các công
cụ hỗ trợ phát triển, bao gồm các IDE (Integrated Development Environment) như PyCharm, VS Code, Jupyter Notebook, và các công cụ gỡ lỗi (debugging tools) tiện lợi như PDB, để giúp lập trình viên dễ dàng quản
lý mã nguồn và tối ưu hóa quá trình phát triển
2.5.2 Giới thiệu về Threading (Đa luồng) trong Python
Threading là một kỹ thuật lập trình cho phép thực hiện nhiều tác vụ đồng thời (concurrently) trong một ứng dụng, tận dụng khả năng đa luồng của CPU Trong Python, mô-đun threading cung cấp các công cụ để tạo và quản lý các luồng (threads)
Một luồng là đơn vị nhỏ nhất của một tiến trình (process) có thể được thực thi một cách độc lập Một tiến trình có thể chứa nhiều luồng và các luồng này có thể chạy song song
Python sử dụng GIL, một cơ chế khóa để đảm bảo rằng chỉ có một luồng thực thi Python bytecode tại một thời điểm Điều này có nghĩa là mặc dù có thể tạo
Trang 34ra nhiều luồng, chúng không thực sự thực thi đồng thời trên các lõi CPU khác nhau trong Python tiêu chuẩn
• Đơn Giản: Lập trình tuần tự thường đơn giản hơn vì không cần phải lo lắng về quản lý đồng bộ hóa và tránh các tình trạng đua (race
conditions), giảm bớt độ phức tạp của mã nguồn
Trang 35• Phức Tạp: Việc lập trình đa luồng đòi hỏi quản lý đồng bộ hóa và tránh các tình trạng đua (race conditions), điều này có thể làm tăng độ phức tạp của mã nguồn
2.5.3 Giới thiệu về thư viện OpenCV
Hình 2.10 Thư viện OpenCV
(Nguồn: https://en.wikipedia.org/wiki/File:OpenCV_Logo_with_text.png)
Thư viện OpenCV (Open Source Computer Vision Library) là một thư viện
mã nguồn mở phát triển cho xử lý hình ảnh và thị giác máy tính Được phát triển bởi Intel vào năm 1999, OpenCV nhanh chóng trở thành một trong những thư viện quan trọng nhất trong lĩnh vực xử lý ảnh và thị giác máy tính, với sự hỗ trợ rộng rãi
từ cộng đồng và sự cải tiến liên tục qua các phiên bản
Những Điểm Nổi Bật của OpenCV:
− Đa năng và mạnh mẽ: OpenCV cung cấp một bộ công cụ và thuật toán
phong phú để xử lý hình ảnh và video, từ các công việc đơn giản như xử lý màu sắc, cắt ghép ảnh đến các nhiệm vụ phức tạp như nhận dạng đối tượng, phân đoạn ảnh, và theo dõi chuyển động
Trang 36− Hỗ trợ đa nền tảng: OpenCV hỗ trợ trên nhiều hệ điều hành như Windows,
Linux, macOS, Android và iOS, giúp cho việc phát triển ứng dụng dễ dàng
và linh hoạt trên các nền tảng khác nhau
− Cộng đồng và tài liệu phong phú: OpenCV có một cộng đồng rộng lớn và
năng động, với nhiều tài liệu, hướng dẫn và ví dụ minh họa trên Internet Giúp cho người sử dụng có thể tìm kiếm những giải pháp cho các vấn mọtto cách dễ dàng từ những nhà phát triển khác trên toàn thế giới
− Tích hợp với các ngôn ngữ lập trình: OpenCV không chỉ hỗ trợ C/C++, mà
còn cung cấp các giao diện lập trình cho Python, Java và MATLAB Điều này giúp cho người dùng có thể lựa chọn ngôn ngữ phù hợp nhất cho dự án của mình
− Hỗ trợ cho các mô hình học sâu (Deep Learning): OpenCV đã tích hợp các
tính năng của các mạng nơ-ron sâu (deep neural networks) như TensorFlow, PyTorch vào trong thư viện, giúp cho việc phát triển các ứng dụng thị giác máy tính và học sâu trở nên hiệu quả hơn [5]
2.5.4 Giới thiệu về thư viện face-recognition
Thư viện face-recognition là một công cụ mạnh mẽ trong lĩnh vực nhận diện khuôn mặt, được phát triển trên nền tảng Python và dựa trên dlib, một thư viện nổi tiếng về xử lý ảnh và máy học Thư viện này cung cấp các công cụ để nhận diện và phân tích khuôn mặt một cách hiệu quả, bao gồm các tính năng như nhận diện khuôn mặt, phát hiện các điểm mốc trên khuôn mặt (ví dụ như mắt, mũi, miệng), xác định đặc điểm khuôn mặt và so sánh khuôn mặt
Với face-recognition, người dùng có thể dễ dàng tích hợp các chức năng nhận diện khuôn mặt vào các ứng dụng của mình mà không cần phải có kiến thức sâu về
xử lý ảnh hay máy học Thư viện hỗ trợ nhiều tính năng mở rộng, cho phép đào tạo
mô hình nhận diện trên dữ liệu tùy chỉnh và tương thích với các công nghệ và nền tảng khác nhau Nhờ vậy giúp cho việc phát triển những ứng dụng nhận diện khuôn mặt trở nên đơn giản và hiệu quả hơn
Với sự phổ biến của face-recognition trong cộng đồng Python và sự dễ dàng
sử dụng, thư viện này đã trở thành một lựa chọn phổ biến cho các nhà phát triển ứng
Trang 37dụng AI và xử lý ảnh, giúp họ nhanh chóng triển khai và phát triển các giải pháp nhận diện khuôn mặt tiên tiến
2.6 GIỚI THIỆU VỀ PORT FORWARDING
Port Forwarding là một kỹ thuật được sử dụng để định tuyến các gói dữ liệu mạng từ một thiết bị bên ngoài mạng vào một thiết bị nội bộ, cho phép các dịch vụ
và ứng dụng trong mạng nội bộ có thể được truy cập từ bên ngoài Điều này được thực hiện bằng cách chuyển tiếp các yêu cầu kết nối đến một cổng của thiết bị mạng này đến một cổng khác trên thiết bị mạng khác Ví dụ, bạn có thể chuyển tiếp các yêu cầu đến cổng 80 (HTTP) của router đến cổng 8080 của một máy chủ web nội
bộ Port Forwarding giúp quản lý và điều hướng kết nối từ bên ngoài vào các thiết
bị và dịch vụ trong mạng nội bộ, cho phép kiểm soát và định tuyến các yêu cầu kết nối theo cách mong muốn
Port Forwarding có thể được cấu hình để chuyển tiếp kết nối TCP
(Transmission Control Protocol), UDP (User Datagram Protocol), hoặc cả hai, hỗ trợ nhiều loại ứng dụng và dịch vụ như web serve, game server, và các dịch vụ khác Mặc dù cung cấp khả năng truy cập từ xa, nếu không được cấu hình đúng cách, nó có thể tạo ra các lỗ hổng bảo mật Do đó, cần phải thực hiện các biện pháp bảo mật như giới hạn địa chỉ IP nguồn, sử dụng tường lửa (firewall), và cập nhật firmware của router thường xuyên Port Forwarding thường được thực hiện thông qua giao diện quản lý của router, đòi hỏi người dùng hoặc quản trị viên có quyền truy cập và biết cách cấu hình các thông số liên quan [6]
2.7 NHỮNG PHẦN MỀM VÀ WEB ĐƯỢC SỬ DỤNG TRONG ĐỀ TÀI 2.7.1 Visual Studio Code (VS Code)
Visual Studio Code (VS Code) là một trình soạn thảo mã nguồn mở và miễn phí do Microsoft phát triển, ra mắt lần đầu vào tháng 4 năm 2015 Với sự kết hợp giữa tính đơn giản của một trình soạn thảo văn bản và tính năng mạnh mẽ của một môi trường phát triển tích hợp (IDE), VS Code đã nhanh chóng trở thành công cụ phổ biến trong cộng đồng lập trình viên Một trong những ưu điểm nổi bật của VS Code là khả năng hỗ trợ đa nền tảng, hoạt động trơn tru trên Windows, macOS và Linux, giúp lập trình viên dễ dàng làm việc trên nhiều hệ điều hành khác nhau
Trang 38VS Code được trang bị nhiều tính năng tiên tiến như hỗ trợ gỡ lỗi (debugging), điều hướng mã nguồn, tích hợp Git, cùng với một hệ thống tiện ích mở rộng phong phú Các tiện ích mở rộng này cho phép người dùng tùy chỉnh và mở rộng chức năng của VS Code để phù hợp với nhiều ngôn ngữ lập trình và khung làm việc (framework) khác nhau Ngoài ra, VS Code cũng có tích hợp IntelliSense, một công cụ cung cấp gợi ý mã, hoàn thành tự động và kiểm tra lỗi cú pháp trong quá trình viết mã, giúp nâng cao hiệu suất làm việc và giảm thiểu lỗi lập trình
Giao diện của VS Code được thiết kế hiện đại và thân thiện với người dùng, với khả năng tùy chỉnh cao, từ màu sắc, giao diện người dùng, đến các phím tắt, giúp lập trình viên có thể cá nhân hóa môi trường làm việc của mình VS Code còn
hỗ trợ làm việc theo nhóm hiệu quả nhờ vào các tính năng như Live Share, cho phép nhiều lập trình viên cùng làm việc trên một mã nguồn trong thời gian thực, tăng cường sự hợp tác và giao tiếp trong các dự án phát triển phần mềm
Với sự kết hợp giữa tính linh hoạt, hiệu suất và khả năng mở rộng, Visual Studio Code đã trở thành một công cụ không thể thiếu trong bộ công cụ của nhiều lập trình viên trên toàn thế giới, từ những người mới bắt đầu học lập trình đến các chuyên gia công nghệ thông tin
Trang 39Arduino IDE có một giao diện người dùng đơn giản và dễ sử dụng, với trình soạn thảo mã nguồn, bảng điều khiển và các công cụ cần thiết để biên dịch và tải mã lên bo mạch Người dùng có thể viết mã bằng ngôn ngữ lập trình dựa trên Wiring, một phiên bản đơn giản hóa của C++ được tối ưu hóa cho việc lập trình vi điều khiển Sau khi mã được viết và biên dịch, người dùng có thể tải mã trực tiếp lên bo mạch Arduino thông qua cổng USB
Một trong những ưu điểm nổi bật của Arduino IDE là thư viện phong phú và cộng đồng người dùng rộng lớn Thư viện Arduino cung cấp nhiều đoạn mã mẫu và các thư viện có sẵn để hỗ trợ các cảm biến, động cơ, màn hình và nhiều thiết bị khác, giúp việc lập trình trở nên dễ dàng và hiệu quả hơn Cộng đồng người dùng Arduino trên toàn thế giới liên tục chia sẻ các dự án, hướng dẫn và hỗ trợ kỹ thuật, tạo điều kiện thuận lợi cho việc học tập và phát triển các ứng dụng sáng tạo
Arduino IDE cũng hỗ trợ nhiều loại bo mạch khác nhau, không chỉ giới hạn
ở các bo mạch Arduino chính hãng mà còn mở rộng ra các bo mạch tương thích khác Điều này mang lại sự linh hoạt và đa dạng trong lựa chọn phần cứng cho các
dự án Với tính dễ sử dụng, tính linh hoạt và sự hỗ trợ từ cộng đồng, Arduino IDE
đã trở thành một công cụ quan trọng trong lĩnh vực giáo dục, nghiên cứu và phát triển các ứng dụng nhúng, giúp hiện thực hóa những ý tưởng sáng tạo một cách nhanh chóng và hiệu quả
Hình 2.12 Arduino IDE
(Nguồn: https://commons.wikimedia.org/wiki/File:Arduino_IDE_logo.svg)
2.7.3 KiCAD
KiCAD là một phần mềm để hỗ trợ việc tạo ra các mạch điện tử, từ thiết kế
sơ đồ nguyên lý đến thiết kế bảng mạch in (PCB) Một trong những điểm của KiCAD là khả năng hỗ trợ toàn diện cho quá trình thiết kế mạch điện tử Phần mềm
Trang 40này cung cấp một bộ công cụ đầy đủ bao gồm Eeschema (trình tạo sơ đồ nguyên lý), Pcbnew (trình thiết kế PCB), và nhiều công cụ hỗ trợ khác như quản lý thư viện linh kiện, tạo và chỉnh sửa footprints, cũng như mô phỏng mạch điện Eeschema cho phép người dùng dễ dàng vẽ sơ đồ nguyên lý với một giao diện trực quan, trong khi Pcbnew cung cấp các tính năng mạnh mẽ để thiết kế và chỉnh sửa các PCB với
độ chính xác cao, hỗ trợ nhiều lớp và các công cụ kiểm tra lỗi
KiCAD nổi tiếng với tính linh hoạt và khả năng tùy chỉnh cao, cho phép người dùng mở rộng và cá nhân hóa phần mềm theo nhu cầu cụ thể của họ Các thư viện linh kiện và footprints có thể được tải về, tạo mới hoặc chỉnh sửa để phù hợp với các yêu cầu đặc thù của dự án KiCAD cũng hỗ trợ nhiều định dạng xuất, bao gồm Gerber, giúp việc sản xuất PCB trở nên dễ dàng và thuận tiện hơn
Một yếu tố quan trọng khác là cộng đồng người dùng và nhà phát triển rộng lớn của KiCAD, luôn đóng góp vào việc cải tiến và mở rộng phần mềm Sự hỗ trợ
từ cộng đồng này giúp KiCAD không ngừng được cập nhật với các tính năng mới
và cải tiến, đồng thời cung cấp nhiều tài liệu hướng dẫn và diễn đàn thảo luận để hỗ trợ người dùng
Với sự kết hợp giữa tính năng mạnh mẽ, tính linh hoạt và cộng đồng hỗ trợ nhiệt tình, KiCAD đã trở thành một công cụ thiết yếu cho các kỹ sư điện tử, từ những người mới bắt đầu đến các chuyên gia, trong việc thiết kế và phát triển các mạch điện tử chất lượng cao
Hình 2.13 KiCAD
(Nguồn: https://en.m.wikipedia.org/wiki/File:KiCad-Logo.svg)
2.7.4 balenaEtcher
BalenaEtcher là một phần mềm mã miễn phí do Balena phát triển, được thiết
kế để tạo USB boot hoặc thẻ nhớ SD từ các tập tin ảnh như ISO hoặc IMG Với giao diện dễ sử dụng, BalenaEtcher cho phép thực hiện quá trình ghi chỉ qua ba