Trong các phần nghiên cứu của luận văn này tôitrình bày về phương pháp ứng dụng học máy vào xây dựng các mô hình pháthiện mã độc trong đó các thực nghiệm dựa trên phương pháp phân tích t
KHẢO SÁT VÀ PHÁT BIỂU BÀI TOÁN
Khảo sát yêu cầu hệ thống hỗ trợ
Chương 1: Tổng quan về mã độc
Chương 1 khảo sát thực trạng nông nghiệp Việt Nam, ứng dụng công nghệ cao và tình hình bệnh cây trồng dựa trên báo chí và phỏng vấn nông dân, chủ vườn quy mô nhỏ và vừa Kết quả khảo sát xác định nhu cầu về hệ thống hỗ trợ chẩn đoán bệnh cây trồng, dẫn đến việc đề xuất bài toán nhận dạng bệnh cây trồng qua ảnh.
Chương 2: Các kỹ thuật giải quyết bài toán
Bài viết trình bày các kỹ thuật giải quyết bài toán, ưu nhược điểm và nghiên cứu nổi bật liên quan Sau đó, đề xuất giải pháp của tác giả.
Chương 3 trình bày quá trình thực nghiệm và kết quả áp dụng kỹ thuật giải quyết bài toán (đề xuất ở chương 2), bao gồm so sánh với các phương pháp phổ biến hiện nay cùng nhận xét.
Cuối cùng trong phần kết luật, tôi tổng hợp các kết quả đạt được, các hướng phát triển và mở rộng đề tài nghiên cứu trong tương lai.
NỘI DUNG CHƯƠNG 1: TỔNG QUAN VỀ MÃ ĐỘC 1.1 Giới thiệu về mã độc máy tính
Mã độc, hay phần mềm độc hại, là chương trình máy tính chứa mã độc hại, gây tổn hại, phá vỡ tính bí mật, toàn vẹn và sẵn sàng của dữ liệu người dùng, máy tính hoặc mạng Bất kỳ phần mềm nào thực hiện hành vi bất hợp pháp đều được coi là mã độc.
Phần mềm độc hại ban đầu hoạt động như ký sinh trùng, lây nhiễm các chương trình khác Tuy nhiên, một số mã độc có khả năng tự thực thi độc lập trên hệ thống mà không cần "ký sinh" trên ứng dụng hay tập tin nào.
Một cách khác để phân biệt các loại mã độc khác nhau là dựa trên mục đích và hành vi của chúng.
Có 3 đặc điểm thường liên quan với các loại phần mềm độc hại là:
- Mã độc tự nhân bản và nỗ lực lây nhiễm bằng việc tạo các bản sao chép mới hoặc các thể hiện của chính nó.
Sự gia tăng mạnh mẽ phần mềm độc hại, đặc biệt do khả năng tự nhân bản, phản ánh xu hướng toàn cục đáng báo động.
- Phần mềm độc hại ký sinh yêu cầu một số chương trình mã thực thi khác để tồn tại.
Ứng dụng chẩn đoán bệnh cây trồng dựa trên hình ảnh do người dùng cung cấp, đưa ra giải pháp và thông tin chính xác về bệnh.
Ban đầu, phần mềm độc hại hoạt động như ký sinh trùng, lây nhiễm các chương trình khác Tuy nhiên, chúng cũng có khả năng tự hoạt động độc lập trên hệ thống mà không cần phụ thuộc vào các ứng dụng hoặc tập tin khác.
• Cung cấp cho người dùng thông tin thời tiết trong ngày.
• Cung cấp cho người dùng thư viện bệnh cây trồng.
• Tích hợp chức năng google map để người dùng tra cứu các địa chỉ nhà thuốc và vị trí của các chuyên gia nông lâm nghiệp gần nhất.
• Hỗ trợ người dùng tính toán phân bón cho cây trồng.
• Hỗ trợ thư viện hình ảnh giúp lưu lại những hình ảnh gần nhất mà người dùng đã gửi lên hệ thống.
Yêu cầu phi chức năng:
Hệ thống được thiết kế giao diện thân thiện, dễ sử dụng với chú thích bằng chữ cho từng chức năng, phù hợp với người nông dân nhỏ lẻ và vừa, hạn chế tiếp xúc công nghệ cao.
Thông tin bệnh cây trồng và giải pháp hỗ trợ trên hệ thống phải chính xác, đầy đủ để trở thành trợ lý nông lâm nghiệp ảo đáng tin cậy, thu hút người dùng.
Hệ thống hoạt động ổn định và xử lý nhanh chóng các chức năng chính như chụp ảnh, chọn ảnh bệnh cây để chẩn đoán, tối ưu thời gian đáp ứng người dùng.
CÁC KỸ THUẬT GIẢI QUYẾT BÀI TOÁN
Phương hướng tiếp cận bài toán
Nghiên cứu ứng dụng trí tuệ nhân tạo để nhận diện và phân loại bệnh cây trồng, tập trung vào các bệnh phổ biến khó nhận biết và điều trị, dựa trên dữ liệu thực nghiệm đã được thu thập và tiền xử lý.
Một số kỹ thuật giải quyết bài toán
Nhận dạng bệnh cây trồng thường dựa trên nhãn bệnh Ba phương pháp chính được sử dụng, phân loại dựa trên mức độ khả dụng của nhãn dữ liệu.
Nhận dạng bệnh cây trồng bằng học máy giám sát (Supervised Learning) dự đoán bệnh từ dữ liệu ảnh (input) dựa trên dữ liệu đã được gán nhãn (data, label) Đây là nhóm thuật toán học máy phổ biến nhất.
Nhận dạng bệnh cây trồng bằng học không giám sát (Unsupervised Learning) dựa trên phân tích cấu trúc dữ liệu đầu vào (X) mà không cần nhãn (Y) Thuật toán tự động phân nhóm (clustering) hoặc giảm chiều dữ liệu, hỗ trợ lưu trữ và tính toán hiệu quả.
Nhận dạng bệnh cây trồng bằng học bán giám sát (Semi-Supervised Learning) giải quyết bài toán phân loại khi có lượng lớn dữ liệu chưa được gán nhãn (X) nhưng chỉ một phần nhỏ dữ liệu có nhãn Kỹ thuật này tối ưu việc sử dụng dữ liệu sẵn có để xây dựng mô hình chính xác.
Supervised Learning Những bài toán thuộc nhóm này nằm giữa hai nhóm Supervised Learning và Unsupervised Learning.
2.2.1 Máy vectơ hỗ trợ (Support Vector Machine - SVM)
SVM là thuật toán học có giám sát, áp dụng cho cả phân lớp và hồi quy Thuật toán này tìm siêu phẳng tối ưu trong không gian N chiều, có lề cực đại, phân chia dữ liệu thành các lớp sao cho các bao lồi cách đều nhau.
Hình 2.1 Minh họa thuật toán SVM
Sau đây, tôi xin giới thiệu sơ lược về mô hình SVM [13, 18] Xét bài toán phân lớp nhị phân Cho trước một tập dữ liệu huấn luyện gồm n mẫu:
X={(x1, y1), (x2, y2), ,(xn, yn)} ϵ R nxd+1 , trong đó, x i là một véc tơ trong không gian R d và y i ϵ{–1,1} là tập các nhãn lớp.
Một siêu phẳng phân tách tập X thành hai miền có dạng:
Bài toán huấn luyện SVM nhằm tìm siêu phẳng tối ưu (w, b) phân tách tập dữ liệu X với lề cực đại Việc này được thực hiện bằng cách giải bài toán tối ưu hóa nhằm tìm min {1/n }
Bài toán tối ưu hóa ban đầu tìm `min ≤ 𝑛` với tích vô hướng trong không gian Rⁿ và biến slack ξᵢ Tuy nhiên, ta thường giải bài toán đối ngẫu: `min α ½ αᵀ`.
→l là véc tơ với toàn bộ các thành phần đều bằng l và H là một ma trận đối xứng được xác định bởi:
Hàm 𝐻ij = 𝑦i𝑦j⟨φ(𝑥i), φ(𝑥j)⟩ = 𝑦i𝑦j𝐾(𝑥i, 𝑥j) sử dụng ánh xạ φ(.) từ không gian đầu vào sang không gian đặc trưng có chiều cao hơn để xử lý dữ liệu phi tuyến tính Hàm 𝐾(.,.) là hàm nhân (kernel function).
K(x, y) = (ф(x), ф(y)) Ưu và nhược điểm trong bài toán phân lớp ảnh:
SVM sở hữu nền tảng toán học vững chắc, đảm bảo hiệu quả cao Khả năng xử lý dữ liệu phi tuyến nhờ các hàm nhân kernel là một ưu điểm vượt trội của SVM.
SVM gặp khó khăn khi xử lý tập dữ liệu khổng lồ và hoạt động kém hiệu quả với dữ liệu ảnh chất lượng thấp, chưa qua tiền xử lý.
2.2.2 K láng giềng gần nhất (K-Nearest Neighbor – K-NN)
K-Nearest Neighbor (K-NN) là một trong những thuật toán học có giám sát đơn giản nhất (mà hiệu quả trong một vài trường hợp) trong Machine Learning Khi huấn luyện, thuật toán này không học một điều gì từ dữ liệu huấn luyện, mọi tính toán được thực hiện khi nó cần dự đoán kết quả của dữ liệu mới [20, 29] Ứng dụng của thuật toán K-NN trong bài toán phân lớp là tìm giá trị của k điểm trên một đối tượng trong tập dữ liệu huấn luyện sao cho gần nhất với một đối tượng trong tập dữ liệu kiểm tra Nói cách khác, thuật toán K-NN tính khoảng cách giữa 2 đối tượng x và y có thể được tính theo công thức sau (chi tiết xin xem trong [21]): n
• n: Số mẫu của dữ liệu huấn luyện Ưu và nhược điểm trong bài toán phân lớp ảnh:
Thuật toán K-NN nổi bật bởi tính đơn giản, dễ hiểu và triển khai Ưu điểm chính là không cần bước huấn luyện, việc tính toán chỉ diễn ra khi dự đoán dữ liệu mới.
=> Thuật toán có thể xử lý dữ liệu đầu vào mới mà không cần thực hiện lại quá trình huấn luyện.
Thuật toán K-NN có nhược điểm về tốc độ tính toán giảm mạnh khi tăng kích thước dữ liệu, hoạt động kém hiệu quả với dữ liệu mất cân bằng, và đòi hỏi tiền xử lý dữ liệu ảnh phức tạp để tối ưu kết quả.
2.2.3 Mạng nơ ron tích chập (Convolutional neural network - CNN)
CNN là mô hình học sâu phổ biến nhờ cấu trúc xử lý thông tin phức tạp và dung lượng lớn Các lớp tích chập hoạt động như bộ lọc nhiễu và dò biên, trong khi lớp lấy mẫu giảm chiều ảnh, cho phép xử lý ảnh biến dạng Cuối cùng, lớp kết nối đầy đủ với hàm Softmax thực hiện phân lớp Thành công của CNN trong thị giác máy tính đã thúc đẩy sự phổ biến của học sâu.
Hình 2.2 Kiến trúc cơ bản của mạng nơ ron tích chập
(Nguồn: Hình ảnh được trích dẫn từ tài liệu tham khảo [11])
Học sâu, đặc biệt là mạng nơ ron tích chập (CNN), đã đạt được nhiều tiến bộ trong thị giác máy tính Nhiều kiến trúc CNN khác nhau, mỗi loại có ưu điểm riêng, đang được phát triển và ứng dụng rộng rãi.
• Mạng nơ ron tích chập sâu AlexNet (Deep Convolutional
Các nghiên cứu giải quyết bài toán tiêu biểu
Trí tuệ nhân tạo đã được ứng dụng vào nông nghiệp từ sớm, đặc biệt là trong chẩn đoán bệnh cây trồng qua hình ảnh bằng các thuật toán học máy như phân tích thống kê dự đoán, SVM và mạng nơ ron truyền thống, đạt độ chính xác trên 90% nhưng cần tiền xử lý dữ liệu phức tạp Từ năm 2015, mạng nơ ron tích chập (CNN) được ưa chuộng hơn nhờ khả năng xử lý ảnh chất lượng thấp, mang lại độ chính xác từ 93% đến 99% trên bộ dữ liệu PlantVillage khi áp dụng các kiến trúc CNN như GoogleNet, AlexNet, ResNet50 và InceptionV3.
Các nghiên cứu [10, 11, 14] cho thấy dữ liệu thu thập thực tế (ánh sáng, bụi, ) khác biệt lớn so với dữ liệu phòng thí nghiệm (PlantVillage), ảnh hưởng đến hiệu quả mô hình Do đó, việc kết hợp học sâu và học máy truyền thống (Deep Hybrid Learning) đang được nghiên cứu để cải thiện hiệu quả ứng dụng thực tế.
Mô hình phân loại chính xác cao có thể được xây dựng bằng cách kết hợp Deep Learning để trích xuất đặc trưng từ dữ liệu phi cấu trúc và Machine Learning cổ điển Phương pháp này đã được ứng dụng thành công trong nhiều lĩnh vực như xử lý ngôn ngữ tự nhiên, y tế, thương mại điện tử và giao thông.
Nghiên cứu chuyên sâu về nhận dạng bệnh cây trồng đã cho thấy kết quả khả quan, cung cấp nguồn tham khảo đáng tin cậy cho việc phát triển các phương pháp tối ưu Một số công trình tiêu biểu được đề cập dưới đây.
Hasan MJ et al.'s 2016 research ("Rice Disease Identification and Classification by Integrating Support Vector Machine With Deep Convolutional Neural Network") achieved over 93% accuracy in rice disease classification by combining CNN and SVM models The study leveraged the Inception-V3 architecture for feature extraction.
Bài viết này trình bày về một hệ thống trích xuất đặc trưng (feature extractor) kết hợp với mô hình SVM sử dụng kernel RBF Sau khi trích xuất, dữ liệu được xử lý bằng global average-pooling trước khi được phân lớp bởi mô hình SVM.
In 2016, Mohanty, Hughes, and Salathé's research, "Using Deep Learning for Image-Based Plant Disease Detection," achieved a 99.35% accuracy rate on a test set using deep learning and transfer learning techniques.
Boulent et al.'s 2019 study, "Convolutional Neural Networks for the Automatic Identification of Plant Diseases," highlighted shortcomings in previous CNN-based plant disease identification research and offered solutions to optimize CNN performance in real-world applications.
Năm 2021, Vemishetti Sravan công bố nghiên cứu "A deep learning based crop disease classification using transfer learning" [28], tinh chỉnh siêu tham số (learning rate, batch size, epoch…) của mô hình ResNet 50 Thử nghiệm trên hơn 20.000 ảnh từ PlantVillage đạt độ chính xác trên 99%.
Năm 2021, Jun Liu và Xuewei Wang đã công bố bài nghiên cứu "Plant diseases and pests detection based on deep learning: a review" [11], tổng quan các lý thuyết, so sánh phương pháp học sâu trong nhận dạng bệnh hại cây trồng, chỉ ra thách thức hiện tại và đề xuất hướng nghiên cứu tương lai.
THỰC NGHIỆM
Dữ liệu thực nghiệm
Quá trình thực nghiệm được tôi được tiến hành trên 2 bộ dữ liệu bệnh cây trồng là HDN_Disease và PlantVillage [7] Cả 2 bộ đều sử dụng ảnh màu RGB.
Bộ dữ liệu HDN_Disease, do tác giả tự xây dựng và xử lý, chứa ảnh của 16 loại bệnh trên 8 loại cây trồng phổ biến ở Việt Nam (táo, ngô, cotton, dưa chuột, nho, lúa mì, dâu tây, cà chua) Một bệnh có thể ảnh hưởng nhiều loại cây với triệu chứng tương tự; ví dụ, bệnh phấn trắng xuất hiện trên cả 8 loại cây.
Hình 3.1 Một số hình ảnh về bệnh phấn trắng trong bộ dữ liệu
Bộ dữ liệu chứa ảnh về các triệu chứng bệnh hại trên lá, thân và quả cây Ví dụ: bệnh Canker trên thân và cành cây táo minh họa rõ điều này.
Hình 3.2 Một số hình ảnh về các bệnh khác trong bộ dữ liệu
Bộ dữ liệu còn lại là PlantVillage được thu thập bởi nhóm tác giả David.
P Hughes và Marcel Salathe vô cùng nổi tiếng, bao gồm tổng cộng hơn 50.000 mẫu ảnh và đã nhiều lần được sử dụng cho bài toán chẩn đoán bệnh cây trồng bởi các chuyên gia PlantVillage gồm 38 lớp ảnh về triệu chứng bệnh trên lá cây và 1 lớp ngoại cảnh không chứa lá cây Do hạn chế về phần cứng nên tôi chỉ sử dụng 100 ảnh mỗi lớp trong quá trình thực nghiệm.
Hình 3.3 Hình ảnh đại diện cho mỗi lớp trong bộ dữ liệu PlantVillage (Nguồn: https://www.aicrowd.com/challenges/plantvillage-disease- classification-challenge)
Thông số chi tiết của các bộ dữ liệu, xin xem trong Bảng 3.1 dưới đây.
Bảng 3.1 Dữ liệu thực nghiệm
Dữ liệu Số loại cây
Số loại bệnh Số mẫu Số lớp Kích thước (pixel)
Huấn luyện các mô hình
Các mô hình được tôi nghiên cứu tiến hành thực nghiệm trên môi trường Google Colab với ngôn ngữ lập trình python Google Colab hỗ trợ GPU Tesla
T4 trong 12 giờ sử dụng liên tục giúp quá trình huấn luyện các mô hình diễn ra nhanh hơn.
Bài viết này trình bày phương pháp k-fold cross-validation để đánh giá độ tin cậy của các mô hình phân lớp Kết quả trung bình từ nhiều bộ dữ liệu huấn luyện giúp xác định mô hình tối ưu.
Hình 3.4 Minh họa thủ tục k-fold cross validation với k = 5
3.2.1 Huấn luyện mô hình CNN Đầu tiên, mạng nơ ron tích chập mà tôi đề xuất sẽ được huấn luyện và phân lớp trên các bộ dữ liệu Do số lượng ảnh giữa các lớp trong bộ dữ liệu không cân đối nên biện pháp class_weight được sử dụng để đánh trọng số cao hơn cho các lớp ít dữ liệu.
ImageDataGenerator giúp giảm overfitting trong huấn luyện mô hình bằng cách biến đổi hình ảnh (dịch chuyển, xoay, điều chỉnh độ sáng ) Việc này buộc mô hình học các đặc trưng sâu hơn, hiệu quả hơn nhờ các hàm biến đổi ngẫu nhiên (rotation_range, width_shift_range, height_shift_range, shear_range, zoom_range, horizontal_flip, fill_mode) được áp dụng trên dữ liệu đầu vào mỗi epoch.
Mã nguồn minh họa việc sử dụng phương pháp ImageDataGenerator:
Ví dụ áp dụng phương pháp ImageDataGenerator trên 1 ảnh trong quá trình huấn luyện mô hình: Ảnh gốc Ảnh học lần 1 Ảnh học lần 2
Hình 3.5 Ví dụ về ImageDataGenerator
The model's initial learning rate was 1e-3 A ReduceLROnPlateau scheduler from TensorFlow Keras monitored training, reducing the learning rate by a factor of 0.2 after 6 epochs without improvement (min_delta 0.0001) EarlyStopping with a patience of 20 epochs and restoration of the best weights was also implemented, monitoring 'loss'.
Mô hình sử dụng chiến lược giảm learning rate 5 lần sau mỗi 6 epoch, kết hợp với EarlyStopping Quá trình huấn luyện dừng lại nếu sau 3 lần giảm learning rate liên tiếp (trong vòng 20 epoch) mà không cải thiện hiệu suất mô hình.
Bài viết trình bày quá trình huấn luyện mô hình với hai bộ dữ liệu đã chuẩn bị sẵn, sau khi khai báo các phương pháp, thủ tục và module cần thiết Mã nguồn huấn luyện được cung cấp chi tiết.
This study employed 5-fold stratified k-fold cross-validation to train a CNN model A CNN model was trained and evaluated on each fold using data augmentation, early stopping, and a learning rate scheduler for 220 epochs Training and testing accuracy were recorded for each fold, resulting in lists of training and testing results and a collection of trained models.
Hình 3.6 Quá trình huấn luyện mô hình CNN trên các tập dữ liệu
Bài báo này đánh giá hiệu quả nhận dạng của mô hình CNN, so sánh với các mô hình DSVM và DKNN Kết quả nhận dạng từ mô hình CNN được sử dụng làm chuẩn so sánh.
3.2.2 Huấn luyện mô hình DSVM
Mô hình DSVM sử dụng hàm nhân Gaussian Kernel (RBF) với tham số σ ∈ {10⁻⁶, 10⁻⁵, 10⁻⁴, 10⁻³, 10⁻², 10⁻¹} và tham số điều chỉnh C ∈ {10⁻¹, 1, 10}.
Các kết quả thực nghiệm
Mô hình CNN được đánh giá trên hai bộ dữ liệu HDN_Disease và PlantVillage để kiểm tra độ ổn định và tốc độ hội tụ Hình 3.7 và 3.8 minh họa độ chính xác phân loại và hàm mất mát trên PlantVillage qua từng epoch.
Hình 3.7 Độ chính xác phân lớp của CNN qua các lần lặp trên bộ
Hình 3.8 Giá trị hàm tổn thất của CNN qua các lần lặp trên bộ
Hình 3.9 và 3.10 minh họa độ chính xác phân lớp và giá trị hàm mất mát trên tập dữ liệu HDN_Disease qua từng epoch huấn luyện.
Hình 3.9 Độ chính xác phân lớp của CNN qua các lần lặp trên bộ
Hình 3.10 Giá trị hàm tổn thất của CNN qua các lần lặp trên bộ
Quá trình huấn luyện mô hình đạt độ ổn định cao, không xuất hiện hiện tượng giảm đột ngột độ chính xác (Accuracy) sau 40 epoch trên PlantVillage và 50 epoch trên HDN_Disease.
Bài viết trình bày kết quả thử nghiệm các mô hình CNN, DSVM, DKNN (với tham số K ∈ [1, 40]) và các mô hình VGG16, MobileNetV2 (sử dụng transfer learning từ ImageNet) trên hai bộ dữ liệu Kết quả được thể hiện trong Bảng 3.2 và Bảng 3.3 SVM và K-NN không được đưa vào so sánh do hạn chế về thời gian huấn luyện và độ chính xác trên bộ dữ liệu phức tạp chưa qua tiền xử lý.
Bảng 3.2 Độ chính xác phân lớp của các mô hình trên độ đo Accuracy
Training set Test set Training set Test set
Bảng 3.3 Thời gian huấn luyện và thời gian phân lớp của các mô hình
Mô hình CNN đề xuất đạt độ chính xác phân lớp cao, ngang ngửa thậm chí vượt trội VGG16 và MobileNetV2 trên bộ dữ liệu HDN_Disease (tập huấn luyện và kiểm tra) và tập kiểm tra PlantVillage, đồng thời yêu cầu thời gian huấn luyện ngắn hơn.
Mô hình DKNN cho thấy hiệu quả vượt trội về thời gian phân lớp so với các mô hình khác, đồng thời đạt kết quả thực nghiệm tốt trên bộ dữ liệu HDN_Disease và PlantVillage, chỉ thấp hơn mô hình DSVM 1-2%.
Mô hình DSVM đạt hiệu quả phân lớp xuất sắc với độ chính xác 100% trên cả hai bộ dữ liệu huấn luyện và trên 97% (HDN_Disease), 99% (PlantVillage) trên bộ dữ liệu kiểm tra Thời gian xử lý cũng được cải thiện đáng kể so với các mô hình khác.
Bài viết đánh giá hiệu quả mô hình không chỉ dựa trên độ chính xác (Accuracy) mà còn thông qua nhiều chỉ số khác trên tập dữ liệu kiểm tra (test set) của hai bộ dữ liệu Kết quả chi tiết được trình bày trong Bảng 3.4.
Bảng 3.4 Kết quả thử nghiệm các mô hình trên một số độ đo khác
Kết quả Precision, Recall, F1-score và Accuracy trên bảng 4 cho thấy CNN hoạt động tốt trên cả hai bộ dữ liệu, đạt hiệu quả cao hơn MobileNetV2 và VGG16 khoảng 5% trên PlantVillage DKNN vượt trội so với các mô hình riêng lẻ, trong khi DSVM cho kết quả chính xác và ổn định nhất.
XÂY DỰNG SẢN PHẨM DEMO
Giới thiệu các framework sử dụng
Flutter là framework mã nguồn mở, hiệu năng cao, đa nền tảng (Android, iOS), sử dụng ngôn ngữ Dart để phát triển ứng dụng di động nhanh chóng và chất lượng.
Dù mới được chính thức được công bố vào năm 2018, nhưng flutter đã sớm trở nên nổi tiếng nhờ những điểm mạnh của mình:
• Dart có một kho lớn các gói phần mềm cho phép bạn mở rộng khả năng cho ứng dụng của mình.
Flutter cho phép lập trình viên viết một chương trình duy nhất tương thích với cả Android và iOS, đồng thời có tiềm năng mở rộng sang các nền tảng khác trong tương lai.
• Flutter dễ dàng kiểm thử hơn do tiết kiệm thời gian kiểm thử trên từng nền tảng.
Flutter là lựa chọn hàng đầu cho phát triển ứng dụng mới nhờ sự đơn giản, dễ tùy biến và khả năng mở rộng mạnh mẽ.
• Với Flutter, lập trình viên có toàn quyền để sắp xếp bố trí điều khiển các widget.
Flutter sở hữu bộ công cụ phát triển hoàn chỉnh, nổi bật là tính năng hot reload giúp rút ngắn thời gian build ứng dụng đáng kể.
Flutter ngày càng được hỗ trợ mạnh mẽ bởi các gói thư viện AI, điển hình là `tflite_flutter_helper` (triển khai mô hình Tensorflow Lite) và `google_ml_kit` (tích hợp đầy đủ API của Google ML Kit).
Flutter, với giao diện người dùng thân thiện, tinh tế và dễ sử dụng, là lựa chọn tối ưu để xây dựng sản phẩm demo và có tiềm năng phát triển thành ứng dụng thương mại.
Flask là framework web Python nhẹ, dễ học cho người mới bắt đầu, phù hợp tạo website nhỏ và mở rộng cho ứng dụng phức tạp Ưu điểm nổi bật là giảm thiểu phụ thuộc bên thứ ba, tăng cường bảo mật.
Các tính năng của Flask Framework:
• Phát triển trình gỡ lỗi
• Khả năng tương thích công cụ dựa trên ứng dụng Google
• Nhiều tiện ích mở rộng cho các tính năng mong muốn
• Hỗ trợ bảo mật cookie
• Cung cấp xử lý HTTP request
• API độc đáo và mạch lạc, hỗ trợ RESTful API
Tôi lựa chọn Flask để xây dựng backend server đơn giản nhưng hiệu quả, đáp ứng nhanh chóng các yêu cầu người dùng.
Phân tích thiết kế hệ thống
4.2.1.1 Biểu đồ use case tổng quát
Hình 4.1 Biểu đồ use case tổng quát
4.2.1.2 Phân rã use case Xem kết quả chẩn đoán
Hình 4.2 Phân rã use case Xem kết quả chẩn đoán
4.2.1.3 Phân rã use case Xem thư viện bệnh cây
Hình 4.3 Phân rã use case Xem thư viện bệnh cây
4.2.2 Mô tả chi tiết các use case
4.2.2.1 Mô tả use case Chọn cây trồng
Tên use case Chọn cây trồng
Tóm tắt Use case cho phép người dùng chọn cây trồng mà mình quan tâm
Ứng dụng di động khởi động thành công trên thiết bị người dùng sau khi đáp ứng đầy đủ điều kiện tiên quyết Quá trình đảm bảo thông báo lỗi tối thiểu và yêu cầu người dùng chọn lại nếu cần thiết để đảm bảo khởi động thành công.
Người dùng chọn cây trồng thành công và hệ thống chuyển tới màn hình trang chủ
Kích hoạt Người dùng nhấp chọn vào nút “Bắt đầu” ở góc trên cùng bên trái của ứng dụng
1 Người dùng nhấp chọn các cây trồng mà mình quan tâm.
2 Người dùng nhấp chọn nút “Bắt đầu” ở góc trên cùng bên trái của ứng dụng
3 Hệ thống lấy dữ liệu thành công.
4 Hệ thống lưu lại các cây trồng người dùng đã chọn và chuyển tiếp tới màn hình trang chủ
Hậu điều kiện: Không có.
4.2.2.2 Mô tả use case Xem thời tiết
Tên use case Xem thời tiết
Tóm tắt Use case này cung cấp cho người dùng các thông tin về tình hình thời tiết trong ngày như nhiệt độ, độ ẩm
Use case "Chọn cây trồng" hoạt động trơn tru trên thiết bị di động có kết nối internet, đảm bảo thông báo lỗi tối thiểu và quá trình thực hiện thành công.
Người dùng xem được các thông tin về tình hình thời tiết trong ngày trên trang chủ của ứng dụng
Luồng sự kiện: Người dùng truy cập vào trang chủ của ứng dụng và xem các thông tin thời tiết trong ngày
Hậu điều kiện: Không có.
4.2.2.3 Mô tả use case Xem thư viện bênh cây
Tên use case Xem thư viện bệnh cây
Tóm tắt Use case này cho phép người dùng xem các thông tin về bệnh cây có trong cơ sở dữ liệu
Ứng dụng đảm bảo người dùng truy cập trang chủ thành công Hệ thống tối thiểu hóa thông báo lỗi, hướng dẫn người dùng thử lại nếu cần và đảm bảo thao tác cuối cùng thành công.
Các thông tin trong bảng PLANT được hiển thị trên giao diện thành công
Kích hoạt Người dùng nhấp chọn mục “Sâu hại và Bệnh cây” trên trang chủ
1 Người dùng nhấp chọn mục “Sâu hại và Bệnh cây” trên trang chủ, hệ thống sẽ lấy danh sách các bệnh cây có trong bảng DISEASE để hiển thị lên màn hình.
2 Sau đó người dùng có thể quay lại trang chủ hoặc xem chi tiết bệnh cây:
2.1 Người dùng chọn quay lại trang chủ:
2.1.1 Người dùng nhấp chọn biểu tượng quay lại ở góc trên cùng bên trái màn hình để quay lại trang chủ.
2.2 Người dùng chọn xem chi tiết bênh cây:
2.2.1 Người dùng nhấp chọn bệnh cây muốn xem chi tiết.
2.2.2 Người dùng nhấp chọn biểu tượng quay lại ở góc trên cùng bên trái màn hình để quay lại thư viện bệnh cây.
Hậu điều kiện: Không có.
4.2.2.4 Mô tả use case Chẩn đoán bệnh cây qua hình ảnh
Tên use case Chấn đoán bệnh cây qua hình ảnh
Use case này cho phép người dùng chẩn đoán được bệnh cây mình đang gặp phải thông qua việc gửi ảnh lên server
Tiền điều kiện Người dùng đã chọn ít nhất một loại cây trồng
Thiết bị di động của người dùng có kết nối Internet Đảm bảo tối thiểu Thông báo lỗi và yêu cầu thử lại Đảm bảo thành công
Kết quả chẩn đoán bệnh cây được trả về phía người dùng trong thời gian không quá 2 giây
Kích hoạt Người dùng nhấp chọn nút “Chọn ảnh” hoặc “Chụp ảnh” trên trang chủ
1 Người dùng có thể nhấp chọn nút “Chọn ảnh” hoặc “Chụp ảnh” trên trang chủ để thực hiện gửi ảnh lên server:
1.1 Người dùng nhấp chọn nút “Chọn ảnh” trên trang chủ, hệ thống sẽ yêu cầu quyền truy cập tới bộ sưu tập ảnh trên thiết bị của người dùng:
1.1.1 Trường hợp người dùng không đồng ý cấp quyền truy cập tới bộ sưu tập ảnh cho hệ thống, ứng dụng tự động quay về trang chủ.
1.1.2 Trường hợp người dùng đồng ý cấp quyền truy cập tới bộ sưu tập ảnh cho hệ thống, ứng dụng hiển thị danh sách các ảnh người dùng có trong bộ sưu tập, người dùng chọn ảnh bệnh cây và gửi lên server.
1.2 Người dùng nhấp chọn nút “Chụp ảnh” trên trang chủ, hệ thống sẽ yêu cầu quyền truy cập tới máy ảnh trên thiết bị của người dùng:
2.1.1 Trường hợp người dùng không đồng ý cấp quyền truy cập tới máy ảnh cho hệ thống, ứng dụng tự động quay về trang chủ.
2.1.2 Trường hợp người dùng đồng ý cấp quyền truy cập máy ảnh cho hệ thống, ứng dụng truy cập vào máy ảnh của thiết bị và cho phép người dùng chụp ảnh gồi gửi trực tiếp lên server.
2 Sau khi tiến hành chẩn đoán bệnh cây từ ảnh người dùng gửi lên server, hệ thống sẽ trả về kết quả cho người dùng là danh sách 3 bệnh cây có độ tin cậy cao nhất được sắp xếp giảm dần Sau đó người dùng có thể quay lại trang chủ hoặc xem chi tiết một kết quả chẩn đoán bệnh cây:
2.3 Người dùng chọn quay lại trang chủ:
2.1.2 Người dùng nhấp chọn biểu tượng quay lại ở góc trên cùng bên trái màn hình để quay lại trang chủ.
2.4 Người dùng chọn xem chi tiết một kết quả chẩn đoán bệnh cây:
2.2.3 Người dùng nhấp chọn chẩn đoán bệnh cây muốn xem chi tiết.
2.2.4 Người dùng nhấp chọn biểu tượng quay lại ở góc trên cùng bên trái màn hình để quay lại trang chủ hoặc nhấp chọn biểu tượng ở góc trên cùng bên phải màn hình để quay lại trang.
• Tại bất kỳ bước nào nếu bị mất kết nối tới server sẽ tự động thoát khỏi chức năng và use case kết thúc.
Nếu xác suất chẩn đoán bệnh cây dưới 40% (Bước 2), hệ thống thông báo cần thêm ảnh để khảo sát cuối tháng, kết thúc quy trình.
Hậu điều kiện: Không có.
4.2.3 Phân tích các use case
4.2.3.1 Use case Chọn cây trồng
• Biểu đồ trình tự use case:
Hình 4.4 Biểu đồ trình tự use case Chọn cây trồng
• Biểu đồ lớp phân tích:
Hình 4.5 Biểu đồ lớp phân tích use case Chọn cây trồng
4.2.3.2 Use case Xem thời tiết
• Biểu đồ trình tự use case:
Hình 4.6 Biểu đồ trình tự use case Xem thời tiết
• Biểu đồ lớp phân tích:
Hình 4.7 Biểu đồ lớp phân tích use case Xem thời tiết
4.2.3.3 Use case Xem thư viện bệnh cây
• Biểu đồ trình tự use case:
Hình 4.8 Biểu đồ trình tự use case Xem thư viện bệnh cây
• Biểu đồ lớp phân tích:
Hình 4.9 Biểu đồ lớp phân tích use case Xem thư viện bệnh cây
4.2.3.4 Use case Chẩn đoán bệnh cây qua hình ảnh
• Biểu đồ trình tự use case:
Hình 4.10 Biểu đồ trình tự use case Chẩn đoán bệnh cây qua hình ảnh
• Biểu đồ lớp phân tích:
Hình 4.11 Biểu đồ lớp phân tích use case Chẩn đoán bệnh cây qua hình ảnh
4.2.4 Thiết kế cơ sở dữ liệu
4.2.4.1 Mô hình dữ liệu quan hệ
Hình 4.12 Mô hình dữ liệu hệ thống
4.2.4.2 Chi tiết các bảng trong cơ sở dữ liệu
Bảng 4.1 Chi tiết bảng PLANT
Tên cột Kiểu dữ liệu Null Ràng buộc Mô tả id int không Primary key, auto increment
Mã của cây trồng name nvarchar(50) không không Tên của cây trồng imageUrl varchar(100) có không Đường dẫn ảnh minh họa cây trồng
Bảng 4.2 Chi tiết bảng DISEASE
Tên cột Kiểu dữ liệu Null Ràng buộc Mô tả id int không Primary key, auto increment
Bài viết cung cấp thông tin về bệnh cây trồng bao gồm mã bệnh (name), tên tiếng Anh (vname), tên tiếng Việt (shortDes), mô tả ngắn gọn triệu chứng (symptom), dấu hiệu bệnh (more) và khuyến cáo xử lý (recommend).
Khuyến nghị của hệ thống về bệnh cây organic nvarchar(100) không không Biện pháp kiểm soát hữu cơ chemistry nvarchar(100) không không
Biện pháp kiểm soát hóa học plant_id int có Foreign key bảng PLANT Mã của cây trồng
Bảng 4.3 Chi tiết bảng DISEASE_IMG
Tên cột Kiểu dữ liệu Null Ràng buộc Mô tả id int không Primary key, auto increment
Mã của ảnh bệnh trên cây trồng url varchar(100) không không Đường dẫn ảnh minh họa bệnh cây trồng disease_id int không Foreign key bảng DISEASE
Mã của bệnh cây trồng
Bảng 4.4 Chi tiết bảng PHARMACY
Tên cột Kiểu dữ liệu Null Ràng buộc Mô tả id int không Primary key, auto increment
Mã của hiệu thuốc shopName nvarchar(100) không không Tên của hiệu thuốc address nvarchar(100) không không Địa chỉ của hiệu thuốc description nvarchar(100) có không
Mô tả ngắn gọn về hiệu thuôc thumbNail varchar(100) có không Đường dẫn ảnh minh họa hiệu thuốc locationCoords varchar(100) không không
Tọa độ của hiệu thuốc trên google map phoneNumber varchar(20) không không Đường dây nóng của hiệu thuôc
Bảng 4.5 Chi tiết bảng WEATHER
Tên cột Kiểu dữ liệu Null Ràng buộc Mô tả id int không
Mã của thời tiết temp float không không Nhiệt độ feelsLike float không không Nhiệt độ cảm giác thực tế low float không không
Nhiệt độ thấp nhất trong ngày ghi nhận được high float không không
Nhiệt độ cao nhất trong ngày ghi nhận được description varchar(100) không không
Mô tả về tình hình thời tiết hiện tại icon varchar(100) không không Đường dẫn cho biểu tượng về tình hình thời tiết
4.2.5 Thiết kế giao diện hệ thống
Hình 4.13 Màn hình tải app và Màn hình chọn cây trồng
Hình 4.14 Trang chủ, màn hình cộng đồng và màn hình cá nhân
Hình 4.15 Màn hình thư viện ảnh và màn hình chi tiết bệnh cây
Hình 4.16 Màn hình kết quả chẩn đoán và chi tiết kết quả chẩn đoán bệnh cây trồng
Giao diện hệ thống
Hệ thống sở hữu giao diện thân thiện, tông màu sáng, dễ sử dụng bằng tiếng Việt Tương lai, hệ thống sẽ hỗ trợ thêm tiếng Anh và tiếng Trung Hình ảnh minh họa chi tiết giao diện được thể hiện bên dưới.
Hình 4.18 Giao diện trang chủ của app
Hệ thống cung cấp các chức năng chính như chẩn đoán bệnh cây trồng (qua ảnh chụp và ảnh trong bộ sưu tập), tư vấn canh tác, và tính toán phân bón, tất cả đều được truy cập nhanh chóng từ trang chủ Thư viện ảnh lưu trữ lịch sử chẩn đoán giúp người dùng dễ dàng theo dõi sức khỏe cây trồng.
Hình 4.19 Giao diện cộng đồng Hình 4.20 Giao diện trang cá nhân người sử dụng
Nền tảng kết nối cộng đồng người yêu cây, chuyên gia nông nghiệp và nhà thuốc uy tín Hệ thống tích hợp đánh giá sản phẩm và khảo sát nhu cầu hàng tháng giúp bổ sung tính năng, đáp ứng kịp thời yêu cầu người dùng.
Hình 4.22 Lựa chọn giống cây mà bạn quan tâm Hình 4.21 Thư viện hình ảnh bệnh cây trồng
Hệ thống cung cấp thư viện ảnh lớn, đáng tin cậy cho người dùng tham khảo Người dùng có thể chọn loại cây, hệ thống sẽ gợi ý sản phẩm và thông tin chuyên gia liên quan.
Các chức năng của hệ thống
Hệ thống chẩn đoán bệnh cây trồng bằng hình ảnh, cung cấp giải pháp kiểm soát hữu cơ/hóa học, thông tin về triệu chứng bệnh, khuyến nghị chuyên gia và hình ảnh tham khảo.
FlutterNativeImage.getImageProperties(pickedFile!.pa th);
FlutterNativeImage.compressImage(pickedFile!.path, quality: 100, targetWidth: (properties.width! * 300 / properties.height!).round(), targetHeight: 300);
Future convert_image_to_base64(String path) async { final File file = File(path);
Uint8List bytes = await file.readAsBytes();
String array_string = base64Encode(bytes); return array_string;
Ảnh chụp cây bệnh từ điện thoại thông minh thường có dung lượng lớn (9.1-24 Megapixel) Để tối ưu quá trình truyền tải, gói Flutter `flutter_native_image` được sử dụng để giảm dung lượng ảnh mà vẫn giữ nguyên chất lượng và tỉ lệ kích thước ban đầu.
Mã nguồn minh họa việc thay đổi kích thước ảnh:
Hệ thống xử lý ảnh cây bệnh bằng cách chuyển đổi ảnh thành dãy nhị phân, mã hóa base64 thành văn bản ASCII 6 bit để truyền dữ liệu qua HTTP POST tới server một cách hiệu quả, tránh gián đoạn truyền tải.
Mã nguồn minh họa quá trình mã hóa dữ liệu ảnh đầu vào thành base64: def stringToRGB(base64_string): imgdata = base64.b64decode(base64_string) image =
Image.open(io.BytesIO(imgdata)) return cv2.cvtColor(np.array(image), cv2.COLOR_BGR2RGB) def prepare(img):
IMG_SIZE = 128 new_array = cv2.resize(img, (IMG_SIZE, IMG_SIZE return new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 3)/255.0
This API endpoint (`/predict`) accepts POST requests containing base64-encoded image data The image is decoded, processed using a feature extractor (`feature_extractor`), and fed into a prediction model (`my_model`) The endpoint returns the model's prediction probabilities.
# response = CAC_BENH[np.argmax(res[0])]
Ứng dụng chuyển ảnh cây trồng thành ma trận pixel, phân tích bằng mô hình DSVM và trả về 3 kết quả dự đoán chính xác nhất (theo thứ tự độ tin cậy giảm dần) trong vòng 2-4 giây dưới dạng JSON Nếu độ tin cậy trên 95%, thông tin chi tiết bệnh được hiển thị; nếu dưới 40%, hệ thống yêu cầu người dùng chụp lại ảnh và gửi cho nhóm phát triển để cải thiện dữ liệu.
Mô hình hoạt động của chức năng chẩn đoán bệnh cây trồng được khái quát và thể hiện qua Hình 4.7 dưới đây:
Plant disease diagnostic functionality operates according to a model (Figure 4.23) The system returns the top two most likely diseases and their probabilities.
'tile2': response[1][1], 'benh3rd': response[2][0], 'tile3': response[2][1]})
Ví dụ thực hiện chức năng chẩn đoán bệnh cây trồng:
Hình 4.24 Ảnh người dùng gửi lên hệ thống
Hình 4.25 Kết quả chẩn đoán hệ thống hiển thị
Hình 4.26 Thông tin chi tiết bệnh
Trường hợp bệnh cây chưa có trong cơ sở dữ liệu của hệ thống:
Hình 4.27 Khi hệ thống chưa thể giải quyết ngay vấn đề trên cây trồng của người dùng Ảnh người dùng gửi lên hệ thống
4.4.2 Một số chức năng khác
Hệ thống chẩn đoán bệnh cây trồng bằng hình ảnh tích hợp thông tin thời tiết 24/7, độ ẩm, dự báo mưa, giúp người dùng lên kế hoạch chăm sóc và lựa chọn loại cây trồng phù hợp dựa trên vị trí địa lý và chất lượng đất.
Hệ thống cung cấp mẹo canh tác và tính toán phân bón cho từng loại cây, dựa trên kinh nghiệm người trồng và nghiên cứu chuyên gia, giúp chủ vườn lên kế hoạch chăm sóc hiệu quả.