Giới thiệu dự án
Theo thống kê từ Tổng cục Du lịch Việt Nam, ngành du lịch đang phục hồi và tăng trưởng mạnh mẽ với hàng chục triệu lượt khách nội địa và quốc tế mỗi năm. Tuy nhiên, đi kèm với sự bùng nổ này là các thách thức môi trường nghiêm trọng: tình trạng quá tải hạ tầng, khí thải giao thông và suy giảm chất lượng không khí tại các trung tâm du lịch lớn như Hà Nội, TP. Hồ Chí Minh, Đà Lạt hay Đà Nẵng. Ô nhiễm bụi mịn ($\text{PM}{2.5}$, $\text{PM}{10}$) cùng các điều kiện thời tiết cực đoan (nắng nóng gay gắt, mưa dông bất chợt) không chỉ làm giảm sút chất lượng trải nghiệm du lịch mà còn tiềm ẩn nguy cơ sức khỏe đối với du khách.
Hiện nay, người dùng phải sử dụng nhiều ứng dụng độc lập để lên kế hoạch: xem dự báo thời tiết (Weather Underground, Dark Sky), kiểm tra chất lượng không khí (AirVisual), tìm kiếm địa điểm (TripAdvisor, VN Trip) và chia sẻ trải nghiệm (Instagram, Facebook). Sự phân mảnh này gây mất thời gian, thiếu đồng bộ dữ liệu theo thời gian thực và không cung cấp được các gợi ý địa điểm thông minh dựa trên bối cảnh môi trường tức thời.
+---------------------------------------+
| THÁCH THỨC DU KHÁCH GẶP PHẢI |
+---------------------------------------+
|
+----------------------------+----------------------------+
| |
v v
+-----------------------------+ +-----------------------------+
| THÔNG TIN PHÂN MẢNH | | RỦI RO MÔI TRƯỜNG & KHÍ HẬU |
| Ứng dụng thời tiết, AQI, | | Bụi mịn PM2.5, thời tiết |
| MXH và review tách biệt | | xấu phá hỏng chuyến đi |
+-----------------------------+ +-----------------------------+
| |
+----------------------------+----------------------------+
|
v
+---------------------------------------+
| GIẢI PHÁP: TOURISTAPP TOÀN DIỆN |
| Gợi ý địa điểm theo AQI + Weather |
| AI Time-Series + YOLOv7 + MXH Du lịch |
+---------------------------------------+
Đề tài khóa luận "Xây dựng hệ thống gợi ý địa điểm du lịch dựa trên điều kiện thời tiết, chất lượng không khí bằng phương pháp học máy và tích hợp mạng xã hội" được thực hiện bởi sinh viên Nguyễn Văn Lực và Lê Văn Anh Đức, dưới sự hướng dẫn của PGS.TS Nguyễn Đình Thuân và ThS. Đỗ Duy Thanh tại Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM. Dự án tập trung giải quyết bài toán cốt lõi: tự động hóa việc phân tích chuỗi thời gian khí tượng - môi trường kết hợp nhận diện thị giác máy tính nhằm đề xuất điểm đến tối ưu và an toàn nhất cho du khách.
Mục tiêu cụ thể của dự án
- Thu thập và chuẩn hóa dữ liệu tự động: Xây dựng pipeline tự động thu thập thông tin thời tiết (nhiệt độ, độ ẩm, lượng mưa, hướng gió) và các chất gây ô nhiễm ($\text{SO}_2, \text{CO}, \text{NO}2, \text{O}3, \text{PM}{10}, \text{PM}{2.5}$) từ các trạm quan trắc và hệ thống API theo chu kỳ 1 giờ/lần.
- Nghiên cứu và thực nghiệm các mô hình dự báo: Triển khai và đánh giá so sánh hiệu năng các mô hình chuỗi thời gian (Linear Regression, ARIMA, RNN, LSTM, GRU, Deep Q-Learning, KNN) để dự báo chỉ số chất lượng không khí VN_AQI giờ và AQI trung bình 7 ngày kế tiếp.
- Phát triển module thị giác máy tính nhận diện địa điểm: Huấn luyện mô hình YOLOv7 nhằm tự động định danh các địa danh, thắng cảnh nổi tiếng qua hình ảnh người dùng tải lên, hỗ trợ tạo caption tự động khi check-in.
- Xây dựng ứng dụng di động hoàn chỉnh: Thiết kế ứng dụng TouristApp đa nền tảng (Flutter) tích hợp mạng xã hội nội bộ, cho phép check-in, tương tác cộng đồng, hiển thị bản đồ số và cá nhân hóa lịch trình theo điều kiện môi trường thực tế.
Phạm vi và giới hạn đề tài
- Phạm vi dữ liệu: Dữ liệu chuỗi thời gian chất lượng không khí và khí tượng tại các tỉnh thành Việt Nam (tập trung đo đạc và thực nghiệm giai đoạn từ 04/2023 đến 06/2023). Dữ liệu hình ảnh địa điểm du lịch thu thập và gán nhãn tập trung vào các danh lam thắng cảnh tiêu biểu tại TP. Hồ Chí Minh.
- Giới hạn kỹ thuật: Tần suất cập nhật dữ liệu tự động theo khung giờ cố định; mô hình YOLOv7 được tối ưu hóa cho các điểm du lịch đặc trưng trong tập huấn luyện.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Ứng dụng |
Điểm mạnh (Pros) |
Hạn chế (Cons) |
Khoảng trống công nghệ (Gap) |
| TripAdvisor |
Kho dữ liệu đánh giá khổng lồ, hỗ trợ đặt phòng/vé toàn cầu. |
Không tích hợp chỉ số AQI trực tiếp vào thuật toán gợi ý; thiếu dự báo môi trường ngắn hạn. |
Thiếu hệ thống Dynamic Filter theo chất lượng môi trường tức thời. |
| AirVisual |
Dữ liệu ô nhiễm không khí chi tiết, bản đồ nhiệt trực quan toàn cầu. |
Đơn thuần là ứng dụng cảnh báo môi trường; không có tính năng gợi ý du lịch hay mạng xã hội. |
Không hỗ trợ kết nối địa điểm tham quan theo chỉ số AQI. |
| Dark Sky |
Dự báo thời tiết siêu cục bộ (hyperlocal), giao diện đẹp mắt. |
Không hỗ trợ chỉ số ô nhiễm bụi mịn chuyên sâu; không có tính năng check-in cộng đồng. |
Thiếu mô hình thị giác máy tính hỗ trợ nhận diện địa danh. |
| VN Trip |
Tối ưu hóa thị trường du lịch Việt Nam, giao diện thân thiện. |
Chưa tính toán các chỉ số môi trường sinh thái để bảo vệ sức khỏe khách du lịch. |
Chưa có AI phân tích bối cảnh thời tiết - AQI khi gợi ý điểm đến. |
Yêu cầu người dùng theo mô hình MoSCoW
- Must-have (Bắt buộc): Xem chỉ số AQI/thời tiết hiện tại và dự báo; tính toán VN_AQI chuẩn kỹ thuật; gợi ý địa điểm an toàn; đăng ký/đăng nhập tài khoản.
- Should-have (Nên có): Nhận diện ảnh địa điểm bằng YOLOv7; đăng bài viết check-in kèm caption tự động; bản đồ số tương tác vị trí.
- Could-have (Có thể có): Dự báo chi tiết AQI theo từng giờ trong 7 ngày bằng mô hình Deep Learning; bộ lọc tìm kiếm nâng cao theo vùng sinh thái.
- Won't-have (Chưa triển khai ở pha này): Đặt vé trực tuyến, thanh toán qua cổng Payment Gateway quốc tế, điều hướng giọng nói thời gian thực.
Thiết kế kiến trúc hệ thống
Kiến trúc hệ thống được xây dựng theo mô hình phân tầng hướng dịch vụ (Service-Oriented Architecture), đảm bảo tính module hóa và khả năng mở rộng:
Technology Stack chi tiết
+-------------------------------------------------------------------------------+
| TECHNOLOGY STACK |
+-------------------------------------------------------------------------------+
| Frontend Mobile : Flutter 3.10.x / Dart 3.0.x (Cross-Platform iOS & Android) |
| Backend API : Node.js v18.16.0 LTS, Express.js 4.18.2 |
| Machine Learning: Python 3.9.16, PyTorch 1.13.1, Scikit-learn 1.2.2 |
| CV Model : YOLOv7 (Trainable Bag-of-Freebies, Focal Loss) |
| Database/Storage: Firebase Firestore, Firebase Cloud Storage, Firebase Auth |
| Task Scheduler : Node-Cron 3.0.2 (Hourly Weather/AQI Pipeline) |
| Deployment OS : Ubuntu 22.04 LTS Cloud VPS, Nginx 1.18.0 Reverse Proxy |
+-------------------------------------------------------------------------------+
Thiết kế cơ sở dữ liệu (Firestore Schema)
| Collection |
Thuộc tính chính (Fields & Types) |
Mô tả nghiệp vụ |
| Users |
uid (String), email (String), displayName (String), photoURL (String), createdAt (Timestamp) |
Quản lý định danh người dùng và phiên làm việc. |
| Weather |
cityId (String), temp (Float), humidity (Float), windSpeed (Float), recordedAt (Timestamp) |
Lưu trữ các chỉ số khí tượng thu thập định kỳ. |
| AQI_Current |
locationId (String), aqiValue (Integer), category (String), dominantPollutant (String), updatedAt (Timestamp) |
Lưu trữ chỉ số VN_AQI hiện tại và phân loại mức độ ô nhiễm. |
| AQI_Forecast |
locationId (String), predictedDate (Date), predictedAQI (Float), modelUsed (String) |
Kết quả dự báo chuỗi thời gian 7 ngày từ mô hình AI. |
| Destinations |
destId (String), name (String), lat (Double), lng (Double), suitableAQIMax (Integer), images (Array) |
Danh bạ địa điểm du lịch kèm ngưỡng chất lượng không khí phù hợp. |
| Posts |
postId (String), authorId (String), destId (String), imageUrl (String), caption (String), likes (Integer) |
Bài đăng chia sẻ trải nghiệm, check-in mạng xã hội. |
Thiết kế API Endpoints chính
GET /api/v1/weather/current?city={cityName}: Lấy thông số khí tượng tức thời.
GET /api/v1/aqi/forecast?location={id}&days=7: Trả về mảng giá trị dự báo AQI bằng mô hình chuỗi thời gian tối ưu.
POST /api/v1/ai/detect-destination: Nhận Payload multipart/form-data (ảnh), chạy qua YOLOv7 Engine và trả về destination_id, confidence_score cùng suggested_caption.
GET /api/v1/recommendations?lat={lat}&lng={lng}&max_aqi=100: Lấy danh sách điểm đến gợi ý nằm trong vùng khí hậu/AQI an toàn.
Quy trình phát triển (Methodology)
Dự án được triển khai theo mô hình linh hoạt (Agile/Scrum) với 4 Phase (Giai đoạn) rõ ràng:
- Phase 1 (Tuần 1 - 4): Thu thập dữ liệu API/trạm quan trắc, xử lý khuyết thiếu, xây dựng và đánh giá các mô hình AI (Time-series & YOLOv7).
- Phase 2 (Tuần 5 - 8): Phát triển Backend API (NodeJS/Express), tích hợp các controller xử lý tính toán VN_AQI và kết nối Firestore.
- Phase 3 (Tuần 9 - 10): Triển khai Backend và inference pipeline lên Cloud Linux Server, thiết lập
cron-job tự động thu thập và dự báo mỗi giờ.
- Phase 4 (Tuần 11 - 14): Xây dựng ứng dụng di động Flutter, tích hợp UI/UX, kiểm thử bảo mật API và đánh giá UAT.
Implementation và kết quả
Development Process & Key Algorithms
1. Thuật toán tính toán chỉ số VN_AQI và kỹ thuật Nowcast
Quy chuẩn Việt Nam tính toán chỉ số chất lượng không khí VN_AQI yêu cầu xử lý trọng số Nowcast cho bụi mịn $\text{PM}{2.5}$ và $\text{PM}{10}$ từ 12 giờ quan trắc gần nhất ($c_1, c_2, \dots, c_{12}$):
$$\omega^* = \frac{c_{\min}}{c_{\max}}, \quad \text{nếu } \omega^* \le 0.5 \Rightarrow \omega = 0.5; \quad \text{nếu } \omega^* > 0.5 \Rightarrow \omega = \omega^*$$
$$\text{Nowcast} = \frac{\sum_{i=1}^{12} \omega^{i-1} c_i}{\sum_{i=1}^{12} \omega^{i-1}}$$
Công thức chuyển đổi nồng độ chất ô nhiễm sang chỉ số AQI phân đoạn:
$$AQI_x = \frac{I_{i+1} - I_i}{BP_{i+1} - BP_i} (C_x - BP_i) + I_i$$
def calculate_nowcast(concentrations: list) -> float:
"""
Tính nồng độ Nowcast cho PM2.5/PM10 từ mảng 12 giờ quan trắc gần nhất.
concentrations: [c1, c2, ..., c12] (c1 là giờ hiện tại)
"""
if len(concentrations) < 12 or None in concentrations[:3]:
raise ValueError("Yêu cầu tối thiểu dữ liệu hợp lệ trong 3 giờ gần nhất.")
valid_data = [c for c in concentrations if c is not None]
c_min = min(valid_data)
c_max = max(valid_data)
w_star = c_min / c_max if c_max > 0 else 0.5
w = 0.5 if w_star <= 0.5 else w_star
numerator = sum((w ** i) * concentrations[i] for i in range(len(concentrations)) if concentrations[i] is not None)
denominator = sum((w ** i) for i in range(len(concentrations)) if concentrations[i] is not None)
return numerator / denominator if denominator != 0 else 0.0
2. Kiến trúc mô hình LSTM dự báo chuỗi thời gian AQI
Mạng Long Short-Term Memory (LSTM) giải quyết hiện tượng triệt tiêu đạo hàm (vanishing gradient) qua cấu trúc 3 cổng: Cổng quên ($f_t$), Cổng vào ($i_t$), và Cổng ra ($o_t$).
$$f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$$
$$i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i), \quad \tilde{C}t = \tanh(W_c \cdot [h{t-1}, x_t] + b_c)$$
$$C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$$
$$o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o), \quad h_t = o_t \odot \tanh(C_t)$$
import torch
import torch.nn as nn
class AQILSTMPredictor(nn.Module):
def __init__(self, input_dim: int, hidden_dim: int, num_layers: int, output_dim: int):
super(AQILSTMPredictor, self).__init__()
self.hidden_dim = hidden_dim
self.num_layers = num_layers
self.lstm = nn.LSTM(input_dim, hidden_dim, num_layers, batch_first=True, dropout=0.2)
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_dim).to(x.device)
c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_dim).to(x.device)
out, _ = self.lstm(x, (h0, c0))
# Lấy hidden state tại step cuối cùng
out = self.fc(out[:, -1, :])
return out
3. Huấn luyện mô hình YOLOv7 nhận diện địa điểm
Mô hình YOLOv7 sử dụng cơ chế Extended Efficient Layer Aggregation Networks (E-ELAN) kết hợp 9 anchor boxes và hàm tổn thất Focal Loss để nhận diện chính xác các thắng cảnh:
from yolov7.models.experimental import attempt_load
from yolov7.utils.general import non_max_suppression, scale_coords
import cv2
# Khởi tạo mô hình YOLOv7 với weights đã fine-tune trên tập dữ liệu địa điểm du lịch
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = attempt_load('weights/yolov7_tourism_best.pt', map_location=device)
model.eval()
def detect_tourist_spot(image_path: str, conf_thres=0.45, iou_thres=0.5):
img0 = cv2.imread(image_path)
img = cv2.resize(img0, (608, 608))
img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB
img = torch.from_numpy(img).to(device).float() / 255.0
img = img.unsqueeze(0)
with torch.no_grad():
pred = model(img)[0]
# Áp dụng Non-Maximum Suppression (NMS)
detections = non_max_suppression(pred, conf_thres, iou_thres)
results = []
for det in detections:
if len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round()
for *xyxy, conf, cls in det:
results.append({"class_id": int(cls), "confidence": float(conf), "bbox": [int(x) for x in xyxy]})
return results
Testing và Validation
Thực nghiệm đánh giá các mô hình dự báo chuỗi thời gian AQI được tiến hành trên tập dữ liệu quan trắc thực tế với 3 chỉ số đo lường sai số:
- Mean Absolute Error (MAE): $\text{MAE} = \frac{1}{n}\sum_{j=1}^n |y_j - \hat{y}_j|$
- Mean Absolute Percentage Error (MAPE): $\text{MAPE} = \frac{100%}{n}\sum_{j=1}^n \left|\frac{y_j - \hat{y}_j}{y_j}\right|$
- Root Mean Squared Error (RMSE): $\text{RMSE} = \sqrt{\frac{1}{n}\sum_{j=1}^n (y_j - \hat{y}_j)^2}$
Bảng so sánh hiệu năng các mô hình dự báo AQI trên tập Test
| Mô hình thuật toán |
RMSE |
MAE |
MAPE (%) |
Đánh giá khả năng thích ứng |
| Linear Regression |
18.42 |
14.15 |
22.8% |
Nắm bắt kém xu hướng phi tuyến và biến động đột ngột. |
| ARIMA (2, 1, 2) |
14.85 |
11.20 |
17.5% |
Tốt cho chuỗi ngắn, giảm độ chính xác khi dự báo xa trên 72 giờ. |
| RNN (Standard) |
12.30 |
9.45 |
15.2% |
Bị ảnh hưởng bởi vanishing gradient trên chuỗi dài. |
| KNN Regression ($K=5$) |
13.90 |
10.60 |
16.8% |
Phụ thuộc mật độ dữ liệu, độ trễ suy luận tăng khi tập train lớn. |
| Deep Q-Learning |
10.75 |
8.10 |
12.4% |
Cần nhiều tài nguyên và thời gian hội tụ lâu. |
| GRU (Gated Recurrent) |
9.15 |
6.80 |
10.2% |
Tốc độ huấn luyện nhanh, hiệu năng xấp xỉ LSTM. |
| LSTM (Deep Stacked) |
8.45 |
6.12 |
9.1% |
Tối ưu nhất: Lưu giữ phụ thuộc dài hạn, dự báo 7 ngày chính xác. |
BIỂU ĐỒ SO SÁNH SAI SỐ RMSE GIỮA CÁC MÔ HÌNH DỰ BÁO AQI
-------------------------------------------------------------------------
Linear Reg. | [######################################] 18.42
ARIMA (2,1,2) | [##############################] 14.85
KNN (K=5) | [############################] 13.90
RNN (Standard) | [#########################] 12.30
Deep Q-Learning | [######################] 10.75
GRU | [###################] 9.15
LSTM (Tối ưu) | [#################] 8.45 (Thấp nhất - Tốt nhất)
-------------------------------------------------------------------------
Đánh giá mô hình nhận diện địa điểm YOLOv7
- Tốc độ suy luận (Inference Speed): Đạt 155 FPS trên GPU NVIDIA Cloud, đáp ứng phản hồi thời gian thực (< 50ms/request).
- Mean Average Precision (mAP@0.5): Đạt 88.6% trên tập dữ liệu các địa điểm du lịch TP.HCM (Chợ Bến Thành, Nhà thờ Đức Bà, Bưu điện Thành phố, Landmark 81, Dinh Độc Lập).
- Precision / Recall: Precision trung bình đạt 91.2%, Recall đạt 86.4%.
Kết quả đạt được
- Hoàn thiện 100% tính năng kế hoạch: Hoàn thành trọn vẹn pipeline từ tự động hóa thu thập dữ liệu, huấn luyện mô hình, xây dựng hệ thống REST API đến giao diện di động Flutter.
- Độ chính xác dự báo vượt trội: Mô hình LSTM giảm sai số MAPE xuống dưới 9.1%, giúp du khách lập kế hoạch trước 7 ngày với độ tin cậy cao.
- Đánh giá trải nghiệm người dùng (UAT): Thử nghiệm trên 50 người dùng thực tế ghi nhận điểm số thỏa dụng SUS (System Usability Scale) đạt 86.5/100, thời gian tìm kiếm địa điểm du lịch an toàn giảm hơn 60% so với việc tra cứu thủ công.
Đổi mới và đóng góp
Các cải tiến kỹ thuật nổi bật
- Hợp nhất đa miền dữ liệu (Multi-Domain Data Fusion): Kết hợp đồng thời 3 luồng dữ liệu độc lập: chuỗi thời gian khí tượng - môi trường, thị giác máy tính nhận diện ảnh và biểu đồ tương tác mạng xã hội vào một kiến trúc ứng dụng duy nhất.
- Tối ưu hóa pipeline dự báo tự động: Triển khai kiến trúc tự động hóa hoàn toàn với
Node-Cron kích hoạt chu kỳ cập nhật dữ liệu và tái chạy suy luận LSTM mỗi giờ, đảm bảo dữ liệu luôn tươi mới (Freshness Latency < 5 phút).
- Tích hợp YOLOv7 hỗ trợ trải nghiệm thông minh: Thay vì yêu cầu người dùng tự gắn thẻ (tag) địa điểm thủ công khi đăng bài, hệ thống tự động nhận diện danh lam thắng cảnh qua ảnh chụp với độ trễ siêu thấp, tự sinh hashtag và thông số AQI tương ứng tại thời điểm chụp.
BẢNG SO SÁNH GIẢI PHÁP TỔNG THỂ
+-----------------------+------------------+------------------+--------------------+
| Tiêu chí so sánh | TripAdvisor / MXH| AirVisual / Dark | TouristApp |
| | truyền thống | Sky | (Đề tài đề xuất) |
+-----------------------+------------------+------------------+--------------------+
| Dự báo chất lượng AQI | Không hỗ trợ | Có (Đơn lẻ) | Có (Tích hợp AI) |
| Gợi ý điểm đến theo | Thủ công theo | Không hỗ trợ | Tự động hóa theo |
| sức khỏe & môi trường | đánh giá sao | | ngưỡng AQI an toàn |
| AI nhận diện địa danh | Không hỗ trợ | Không hỗ trợ | YOLOv7 thời gian |
| tự động qua ảnh | | | thực (155 FPS) |
| Tương tác mạng xã hội | Rời rạc | Không có | Mạng xã hội chuyên |
| & Check-in cộng đồng | | | biệt cho du lịch |
+-----------------------+------------------+------------------+--------------------+
Đóng góp thực tiễn cho ngành
- Cung cấp giải pháp công nghệ thúc đẩy xu hướng Du lịch Xanh (Sustainable & Healthy Tourism), giúp bảo vệ sức khỏe cộng đồng trước bối cảnh ô nhiễm không khí đô thị.
- Đóng góp tập dữ liệu hình ảnh địa điểm du lịch TP.HCM đã gán nhãn chuẩn hóa cho các nghiên cứu thị giác máy tính ứng dụng tiếp theo.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng thực tế (Real-World Scenarios)
- Lập kế hoạch du lịch gia đình có trẻ nhỏ/người cao tuổi: Du khách chuẩn bị đến TP.HCM vào cuối tuần. Ứng dụng phân tích dự báo AQI và cảnh báo mức độ "Kém" (AQI > 120) tại khu vực trung tâm vào khung giờ 10h-14h, từ đó đề xuất các điểm tham quan sinh thái trong nhà hoặc khu vực ngoại thành có chỉ số "Tốt" (AQI < 50).
- Check-in thông minh cho Travel Blogger: Người dùng chụp ảnh tại Nhà thờ Đức Bà và tải lên ứng dụng; YOLOv7 ngay lập tức nhận diện địa điểm, tự động điền thẻ vị trí, đính kèm thông tin thời tiết đẹp và gợi ý caption cho bài viết chia sẻ lên cộng đồng.
KỊCH BẢN VẬN HÀNH
+---------------+ +----------------------+ +--------------------+
| Du khách mở |------->| TouristApp quét tọa |------->| Kiểm tra AQI & |
| ứng dụng | | độ GPS hiện tại | | Dự báo 7 ngày |
+---------------+ +----------------------+ +--------------------+
|
v
+---------------+ +----------------------+ +--------------------+
| Đăng bài check| | Nhận diện địa danh | | Gợi ý điểm đến tối |
| in & Tương tác|<-------| bằng YOLOv7 + Caption|<-------| ưu sức khỏe |
+---------------+ +----------------------+ +--------------------+
Chiến lược triển khai hệ thống (Deployment Architecture)
Hệ thống được đóng gói và vận hành trên môi trường Cloud VPS Linux (Ubuntu 22.04 LTS):
- Web Server & Reverse Proxy: Cấu hình Nginx xử lý SSL/TLS và cân bằng tải các request API tới Node.js Backend.
- Process Management: Sử dụng PM2 quản lý tiến trình Node.js và Python Daemon, đảm bảo khả năng tự phục hồi khi có sự cố (Zero-Downtime Reload).
- Mobile Distribution: Đóng gói tệp cài đặt Android (.apk) và iOS (.ipa) thông qua Flutter Build Engine.
+-------------------------------------------------------------------------------+
| HẠ TẦNG VẬN HÀNH CLOUD LINUX (VPS) |
+-------------------------------------------------------------------------------+
| [ Internet / Clients ] |
| | |
| v |
| [ Nginx Reverse Proxy (Port 80/443 SSL) ] |
| | |
| +----------> [ Node.js REST API (Port 5000) - PM2 Managed ] |
| | | |
| | v |
| +----------> [ Python AI Engine (FastAPI/Inference Daemon) ] |
| | |
| v |
| [ Firestore & Cloud Storage ] |
+-------------------------------------------------------------------------------+
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Mật độ trạm quan trắc: Số lượng trạm quan trắc không khí chuẩn quốc gia tại Việt Nam còn phân bố không đều, dẫn đến việc tính toán nội suy AQI ở các vùng sâu vùng xa đôi khi còn độ trễ.
- Tập dữ liệu nhận diện hình ảnh: Dataset huấn luyện cho YOLOv7 mới bao phủ các địa điểm lớn tại TP.HCM, chưa mở rộng toàn diện tới tất cả 63 tỉnh thành.
Hướng phát triển trong tương lai
- Ứng dụng mô hình Spatio-Temporal Graph Neural Networks (ST-GNN): Kết hợp tương quan không gian giữa các trạm đo lân cận để nâng cao độ chính xác dự báo không gian - thời gian.
- Cá nhân hóa gợi ý bằng AI Recommender System (Collaborative Filtering + Content-Based): Học sâu sở thích người dùng kết hợp lịch sử hành vi để đưa ra gợi ý tour du lịch may đo theo từng cá nhân.
- Mở rộng Big Data Pipeline: Xây dựng kho dữ liệu phân tán (Distributed Data Lake) và tích hợp các nguồn ảnh vệ tinh viễn thám để ước tính AQI diện rộng.
Đối tượng hưởng lợi
+-------------------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
+-------------------------------------------------------------------------------+
| 1. SINH VIÊN & NGHIÊN CỨU SINH: |
| - Tham khảo mẫu đồ án chuẩn mực về xử lý chuỗi thời gian & Computer Vision.|
| - Nắm vững công thức quy chuẩn tính toán VN_AQI và thuật toán Nowcast. |
| 2. LẬP TRÌNH VIÊN (DEVELOPERS): |
| - Tài liệu tham khảo kiến trúc kết nối Flutter - Node.js - PyTorch. |
| - Tái sử dụng pipeline triển khai mô hình học máy lên Cloud Server. |
| 3. DOANH NGHIỆP DU LỊCH & LỮ HÀNH: |
| - Tích hợp API dự báo môi trường vào sản phẩm để xây dựng Tour du lịch an |
| toàn, nâng cao chỉ số hài lòng khách hàng lên 25-35%. |
| 4. DU KHÁCH & CỘNG ĐỒNG: |
| - Tiếp cận công cụ hỗ trợ du lịch bảo vệ sức khỏe hoàn toàn miễn phí. |
+-------------------------------------------------------------------------------+
Câu hỏi thường gặp
1. Yêu cầu phần cứng và môi trường để triển khai hệ thống là gì?
Hệ thống backend yêu cầu máy chủ Linux (Ubuntu 20.04/22.04 LTS), tối thiểu 4 vCPU, 8GB RAM để vận hành đồng thời Node.js API và mô hình dự báo LSTM. Đối với module YOLOv7 thời gian thực, khuyến nghị máy chủ có GPU NVIDIA (tối thiểu 4GB VRAM, hỗ trợ CUDA 11.x). Ứng dụng di động Flutter hỗ trợ tốt từ Android 8.0 và iOS 12.0 trở lên.
2. Mô hình có gặp tình trạng Overfitting khi huấn luyện chuỗi thời gian AQI không?
Để ngăn chặn hiện tượng Overfitting, nhóm nghiên cứu đã áp dụng kỹ thuật Dropout (tỷ lệ 0.2) giữa các tầng LSTM, chuẩn hóa dữ liệu đầu vào bằng MinMaxScaler và sử dụng cơ chế Early Stopping với tham số patience=10 dựa trên giá trị Validation Loss.
3. Làm thế nào để mở rộng thêm các địa điểm nhận diện mới trong YOLOv7?
Để thêm địa điểm mới, cần thu thập tối thiểu 200–300 hình ảnh/địa danh ở các góc độ và điều kiện ánh sáng khác nhau, thực hiện gán nhãn bounding box chuẩn định dạng YOLO (.txt), sau đó tiến hành Transfer Learning (fine-tuning) từ checkpoint trọng số yolov7.pt với số epoch khoảng 50–100.
4. Chi phí vận hành hạ tầng đám mây hàng tháng ước tính là bao nhiêu?
Với quy mô thử nghiệm dưới 10.000 người dùng hoạt động hàng tháng (MAU), chi phí duy trì Cloud VPS (4 Core / 8GB RAM / GPU) và hạ tầng Firebase Spark/Blaze dao động từ 30 - 50 USD/tháng, tối ưu chi phí rất lớn nhờ việc phân tán tác vụ tính toán hợp lý.
5. Tại sao mô hình LSTM lại cho kết quả vượt trội hơn ARIMA trong đề tài này?
Dữ liệu chất lượng không khí và khí tượng là chuỗi phi tuyến tính cao với nhiều yếu tố tác động chéo phức tạp (nhiệt độ, gió, độ ẩm tương tác với nồng độ bụi). Mô hình ARIMA bị giới hạn bởi giả định tuyến tính và tính dừng của chuỗi, trong khi LSTM với cấu trúc cổng nhớ dài hạn có khả năng mô hình hóa chính xác các mối quan hệ phi tuyến phức tạp này.
Kết luận
Đề tài khóa luận tốt nghiệp của sinh viên Nguyễn Văn Lực và Lê Văn Anh Đức đã chứng minh tính khả thi và hiệu quả vượt bậc khi ứng dụng công nghệ trí tuệ nhân tạo vào lĩnh vực du lịch sinh thái và bảo vệ sức khỏe. Bằng việc kết hợp thành công mô hình chuỗi thời gian LSTM (đạt sai số tối ưu MAPE 9.1%) cùng mô hình thị giác máy tính tiên tiến YOLOv7 (đạt mAP 88.6%), hệ thống TouristApp đã giải quyết triệt để bài toán phân mảnh thông tin, mang đến giải pháp toàn diện hỗ trợ du khách đưa ra quyết định du lịch thông minh và an toàn.
Công trình không chỉ hoàn thiện về mặt lý thuyết học máy ứng dụng mà còn cung cấp một sản phẩm di động hoàn chỉnh, có giá trị thương mại hóa và ứng dụng thực tiễn cao cho xã hội. Đây là tiền đề vững chắc cho các nghiên cứu tiếp theo về hệ thống thông tin thông minh phục vụ cộng đồng.