1. Trang chủ
  2. » Luận Văn - Báo Cáo

lập trình ứng dụng nhận diện cây trên nền tảng

97 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lập trình ứng dụng nhận diện cây trên nền tảng IOS
Tác giả Nguyễn Tiến Du
Người hướng dẫn TS. Nguyễn Thị Huyền Châu
Trường học Trường Đại học Thăng Long
Chuyên ngành Công nghệ thông tin
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 97
Dung lượng 5,48 MB

Cấu trúc

  • I. Mục tiêu (14)
  • II. Động lực của bản thân (14)
  • III. Phạm vi và phương pháp nghiên cứu (14)
  • IV. Cấu trúc khoá luận (15)
  • CHƯƠNG 1. CƠ SỞ LÝ THUYẾT (16)
    • 1.1. Ngôn ngữ sử dụng (16)
      • 1.1.1. Swift [1] (16)
      • 1.1.2. Python [2] (17)
    • 1.2. Các framework sử dụng (17)
      • 1.2.1. UIKit [3] (17)
      • 1.2.2. PyTorch [4] (18)
      • 1.2.3. Flask [5] (19)
    • 1.3. Tích hợp các nền tảng khác (19)
      • 1.3.1. MediaWiki API [6] (19)
      • 1.3.2. Firebase Authentication [7] (20)
      • 1.3.3. Firestore Database [8] (21)
      • 1.3.4. Firebase Storage [9] (22)
      • 1.3.5. Ngrok [10] (22)
    • 1.4. Mô hình MVVM [11] (23)
      • 1.4.1. Mô hình MVVM là gì? (23)
      • 1.4.2. Các thành phần trong mô hình MVVM (23)
      • 1.4.3. Cài đặt mô hình MVVM (24)
      • 1.4.4. Ưu & nhược điểm của mô hình MVVM (25)
    • 1.5. Mô hình nhận diện cây [13] (25)
      • 1.5.1. Giới thiệu về mô hình nhận diện cây (25)
      • 1.5.2. Phương pháp sử dụng để nhận diện cây (27)
      • 1.5.3. Khả năng nhận diện (28)
  • CHƯƠNG 2. PHÂN TÍCH, ĐẶC TẢ CHỨC NĂNG HỆ THỐNG (30)
    • 2.1. Mô tả bài toán (30)
      • 2.1.1. Nhận diện cây từ ảnh (30)
      • 2.1.2. Đặt thông báo nhắc nhở tưới cây (30)
      • 2.1.3. Cộng đồng chia sẻ kiến thức về cây (30)
    • 2.2. Yêu cầu nghiệp vụ (31)
    • 2.3. Sơ đồ Usecase các chức năng chính (32)
      • 2.3.1. Sơ đồ Usecase (32)
      • 2.3.2. Các Usecase (32)
      • 2.3.3. Bảng ánh xạ yêu cầu nghiệp vụ với các Usecase (33)
    • 2.4. Sơ đồ kiến trúc tổng thể (34)
    • 2.5. Đặc tả các chức năng (35)
      • 2.5.1. UC#01: Đăng ký tài khoản (35)
      • 2.5.2. UC#02: Đăng nhập (37)
      • 2.5.3. UC#03: Đăng xuất (38)
      • 2.5.4. UC#04: Nhận diện cây (39)
      • 2.5.5. UC#05: Tìm kiếm cây (42)
      • 2.5.6. UC#06: Tạo cây mới (43)
      • 2.5.7. UC#07: Xem thông tin cây (45)
      • 2.5.8. UC#08: Quản lý cây trong bộ sưu tập (46)
      • 2.5.9. UC#09: Xem danh sách cây trong bộ sưu tập (49)
      • 2.5.10. UC#10: Đặt thông báo (51)
      • 2.5.11. UC#11: Quản lý lịch chăm sóc (53)
      • 2.5.12. UC#12: Xem bài viết (54)
      • 2.5.13. UC#13: Xem chi tiết bài viết (56)
      • 2.5.14. UC#14: Đăng bài viết (58)
      • 2.5.15. UC#15: Xem trang cá nhân (60)
  • CHƯƠNG 3. THIẾT KẾ CHỨC NĂNG, CƠ SỞ DỮ LIỆU VÀ API (62)
    • 3.1. Cấu trúc chung (62)
    • 3.2. Thiết kế một số chức năng (62)
      • 3.2.1. UC#01: Đăng ký (62)
      • 3.2.2. UC#02: Đăng nhập (63)
      • 3.2.3. UC#03: Đăng xuất (63)
      • 3.2.4. UC#04: Nhận diện cây (64)
      • 3.2.5. UC#05: Tìm kiếm cây (64)
      • 3.2.6. UC#06: Tạo cây (65)
      • 3.2.7. UC#07: Xem thông tin cây (65)
      • 3.2.8. UC#08: Quản lý cây trong bộ sưu tập (66)
      • 3.2.9. UC#09: Xem danh sách cây trong bộ sưu tập (66)
      • 3.2.10. UC#10: Đặt thông báo (67)
      • 3.2.11. UC#11: Quản lý lịch chăm sóc (67)
      • 3.2.12. UC#12: Xem bài viết (68)
      • 3.2.13. UC#13: Xem chi tiết bài viết (68)
      • 3.2.14. UC#14: Đăng bài viết (69)
      • 3.2.15. UC#15: Xem trang cá nhân (69)
    • 3.3. Thiết kế CSDL (70)
      • 3.3.1. Mô tả hệ thống (70)
      • 3.3.2. Lựa chọn các danh từ làm lớp thực thể hoặc thuộc tính (70)
      • 3.3.3. Xác định quan hệ giữa các lớp thực thể (70)
      • 3.3.4. Lược đồ CSDL (71)
      • 3.3.5. Mô tả tổng quan từng bảng (72)
      • 3.3.6. Chi tiết các bảng (72)
    • 3.4. Thiết kế API (76)
      • 3.4.1. Cấu trúc tổng thể của API (76)
      • 3.4.2. Api hệ thống sử dụng (76)
  • CHƯƠNG 4. CÀI ĐẶT VÀ TRIỂN KHAI HỆ THỐNG (78)
    • 4.1. Môi trường cài đặt (78)
    • 4.2. Trình diễn các chức năng của hệ thống (78)
      • 4.2.1. Chức năng đăng ký qua gmail (78)
      • 4.2.2. Chức năng nhận diện cây từ ảnh (81)
      • 4.2.3. Chức năng tìm kiếm cây theo tên (84)
      • 4.2.4. Chức năng thêm cây (86)
      • 4.2.5. Chức năng đặt thông báo (88)
      • 4.2.6. Chức năng cộng đồng (90)
      • 4.2.7. Chức năng đăng bài viết (92)
  • KẾT LUẬN (15)
  • TÀI LIỆU THAM KHẢO (15)

Nội dung

Các thành phần trong mô hình MVVM Mô hình MVVM được chia làm 3 lớp xử lý gồm Model – View – ViewModel: – View: Tương tự như trong mô hình MVC, View là phần giao diện của ứng dụng để hi

Mục tiêu

Hiện nay, vấn đề môi trường đang rất được quan tâm, đặc biệt là hoạt động trồng cây

Ngày càng nhiều người quan tâm đến việc trồng cây cảnh trong không gian sống của mình Tuy nhiên, không phải ai cũng có kiến thức sâu rộng về cây cỏ Sự đa dạng và phức tạp của các loài cây khiến việc nhận diện và chăm sóc cây trở nên khó khăn Đối với những người mới bắt đầu hoặc người không có kinh nghiệm trong việc trồng cây, việc xác định tên loài và tìm hiểu cách chăm sóc chính xác có thể là một thách thức lớn Việc nhận diện cây thông qua các phương pháp truyền thống có thể dễ dẫn đến sai sót và nhầm lẫn, người dùng có thể cảm thấy bất tiện khi phải tìm kiếm thông tin từ nhiều nguồn khác nhau và tự tìm hiểu Đặc biệt khi gặp phải các loài cây có hình dáng tương tự nhau, việc xác định đúng loài có thể là một thử thách

Vì vậy, khoá luận này sẽ xây dựng một ứng dụng nhận diện và chăm sóc cây, trở thành trợ thủ đắc lực cho những ai yêu thích cây cảnh và muốn khám phá thế giới đa dạng của thực vật Với khả năng nhận diện cây thông qua hình ảnh, ứng dụng này sẽ dễ dàng xác định tên gọi và thông tin quan trọng về từng loại cây một cách nhanh chóng Thay vì phải tìm kiếm thông tin trên sách hoặc trực tuyến, ta có thể dễ dàng tìm hiểu về cây cảnh trực tiếp từ ứng dụng

Ngoài ra, ứng dụng cho phép người dùng thiết lập lịch trình nhắc nhở tưới cây và kết nối người dùng vào một cộng đồng trực tuyến, cho phép họ chia sẻ kinh nghiệm, hình ảnh, và kiến thức về chăm sóc cây Việc kết nối người dùng vào cộng đồng chia sẻ kinh nghiệm và kiến thức về cây cảnh giúp mở ra cơ hội học hỏi và trao đổi thông tin.

Động lực của bản thân

Từ các nhu cầu thực tế hiện nay, việc áp dụng công nghệ vào chăm sóc cây cối có thể mang lại nhiều giá trị không chỉ trong việc bảo vệ môi trường mà còn trong cuộc sống hàng ngày Bên cạnh đó, trí tuệ nhân tạo đang dần phát triển, với mong muốn có thể áp dụng mô hình học máy vào ứng dụng, khoá luận quyết định chọn đề tài khóa luận “Lập trình ứng dụng nhận diện cây trên nền tảng iOS”

Việc thực hiện đề tài này là cơ hội để tôi có thể tự đánh giá năng lực, phát triển bản thân trong lập trình ứng dụng iOS Đồng thời, việc làm việc với dữ liệu thực tế và áp dụng mô hình học máy cũng sẽ giúp tôi học hỏi được thêm nhiều kiến thức quý giá và phát triển kỹ năng

Tôi hy vọng ứng dụng nhận diện và chăm sóc cây không chỉ đơn thuần là một công cụ hữu ích trong việc quản lý cây cảnh mà còn góp phần vào việc nâng cao kiến thức, tạo ra môi trường sống bền vững và kết nối cộng đồng yêu thích thiên nhiên và thúc đẩy ý thức về tầm quan trọng của việc bảo vệ và duy trì cân bằng trong hệ sinh thái.

Phạm vi và phương pháp nghiên cứu

– Thời gian nghiên cứu: 4 tháng

Thư viện ĐH Thăng Long

7 – Phương pháp nghiên cứu: Khoá luận sử dụng ngôn ngữ Swift kết hợp với mô hình

MVVM để phát triển ứng dụng, và sử dụng ngôn ngữ Python để xây dựng server nhận diện và lấy các thông tin cây Bên cạnh đó, khóa luận cũng tích hợp với các nền tảng khác như MediaWiki, Firebase Authentication, Firestore Database, và Firebase Storage:

+ MediaWiki: lấy thông tin cây (tên, ảnh, mô tả) + Firebase Authentication: xử lý đăng nhập/ đăng ký + Firestore Database: lưu trữ CSDL

+ Firebase Storage: lưu trữ ảnh đại diện, ảnh cây, ảnh bài viết do người dùng tải lên

Cấu trúc khoá luận

Khóa luận gồm các chương với nội dung như sau:

Khoá luận sẽ giới thiệu về phần mục tiêu, động lực của bản thân, phạm vi đề tài và cấu trúc khóa luận

– Chương 1: Cơ sở lý thuyết

Khoá luận giới thiệu về những công nghệ đã sử dụng liên quan đến các chủ đề client, server, framework, server, database, và một số công nghệ khác

– Chương 2: Phân tích, đặc tả chức năng hệ thống

Khoá luận đi sâu vào việc mô tả bài toán, về yêu cầu nghiệp vụ, kiến trúc tổng thể và mô tả chi tiết từng chức năng của hệ thống

– Chương 3: Thiết kế chức năng, cơ sở dữ liệu và API

Khoá luận đưa ra các sơ đồ trình tự về từng chức năng, thiết kế và mô tả về cơ sở dữ liệu và các API sử dụng

– Chương 4: Cài đặt và triển khai hệ thống

Khoá luận mô tả môi trường cài đặt và biểu diễn các chức năng được phát triển trong hệ thống

Khoá luận tổng kết các kiến thức, kinh nghiệm thu được trong quá trình thực hiện đề tài và các hướng phát triển trong tương lai

Khoá luận sẽ liệt kê ra những tài liệu đã sử dụng và đã có trích dẫn trong bài làm

CƠ SỞ LÝ THUYẾT

Ngôn ngữ sử dụng

Swift là một ngôn ngữ lập trình hướng đối tượng dành cho việc phát triển iOS và macOS, watchOS, tvOS được giới thiệu bởi Apple tại hội nghị WWDC 2014 Swift được mong đợi sẽ tồn tại song song cùng Objective- C, ngôn ngữ lập trình hiện tại dành cho các hệ điều hành của Apple Swift được thiết kế để hoạt động với các framework Cocoa và Cocoa Touch của Apple và phần lớn mã Objective-C Nó được biên dịch với trình biên dịch LLVM và đã được đưa vào Xcode kể từ phiên bản 6, phát hành năm 2014 Trên các nền tảng của Apple, nó sử dụng thư viện runtime Objective-C cho phép mã C, Objective-C, C++ và Swift cùng chạy trong một chương trình Ưu điểm:

– Khả năng phát triển ứng dụng di động nhanh và dễ dàng: Các lập trình viên không phải mất công chạy các chương trình compiler và các chương trình test một cách thường xuyên nữa, mà thay vào đó tập trung vào các phần tích hợp với mức độ khó hơn Điều này cũng giúp tiết kiệm sức mạnh và sự hao mòn của phần cứng cho các nhà phát triển

Ngoài ra, Swift là một trong những ngôn ngữ lập trình mang lại nhiều tính năng quan trọng như: không xảy ra lỗi array-out- of-bound, không có biến xác định, quản lý bộ nhớ theo phương thức tự động, từ đó tiết kiệm được tối đa thời gian hơn để hoàn thành một dự án

– Code ngắn gọn, dễ đọc, dễ hiểu: Điều này giúp cho các lập trình viên tiết kiệm rất nhiều thời gian hoàn thành dự án, cũng như tăng hiệu quá trong quá trình bảo trì và fix các lỗi bug trong tương lai Swift kế thừa và phát huy tất cả các sức mạnh của Objective-C để lại, nên các nhà lập trình sẽ có một môi trường runtime quen thuộc tuyệt vời, dễ dàng quản lý và phát triển

– Tốc độ thực thi nhanh: Theo apple, Swift nhanh gấp 8 lần python Không những nhanh, mà Swift còn rất mạnh mẽ, giúp cho các nhà lập trình có thể viết được những đoạn mã nâng cao, phức tạp hơn như: generics, closures, tuples, multiple returns, iterators, các mẫu lập trình hàm có sẵn và nhiều hơn thế nữa

– Swift có thể dùng cho tất cả các hệ điều hành của Apple phát hành như macOS, iOS, tvOS, watchOS,

– Swift được phát triển đặc biệt cho các sản phẩm của Apple, do đó, nó không tương thích tự nhiên với hệ điều hành hoặc thiết bị khác

– Cộng đồng sử dụng Swift không lớn, có thể làm giảm nguồn thông tin, tài liệu và hỗ trợ từ cộng đồng so với các ngôn ngữ phổ biến hơn

Thư viện ĐH Thăng Long

9 – Swift đã trải qua nhiều thay đổi, làm tăng khả năng phải thay đổi mã nguồn khi nâng cấp lên các phiên bản mới

Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng web, phát triển phần mềm, khoa học dữ liệu và máy học Các nhà phát triển sử dụng Python vì nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác nhau Phần mềm Python được tải xuống miễn phí, tích hợp tốt với tất cả các loại hệ thống và tăng tốc độ phát triển

Python hữu ích trong việc lập trình mã phía máy chủ bởi vì ngôn ngữ này cung cấp nhiều thư viện bao gồm mã viết sẵn cho các hàm backend phức tạp Các nhà phát triển cũng sử dụng một loạt các khung Python cung cấp tất cả những công cụ cần thiết để xây dựng ứng dụng web một cách nhanh chóng và dễ dàng hơn Ưu điểm:

– Cú pháp cơ bản giống tiếng Anh

– Cải thiện năng suất làm việc vì các nhà phát triển sử dụng ít dòng mã hơn để viết một chương trình Python

– Thư viện tiêu chuẩn lớn, chứa nhiều dòng mã có thể tái sử dụng cho hầu hết mọi tác vụ

– Cộng đồng Python tích cực hoạt động bao gồm hàng triệu nhà phát triển nhiệt tình hỗ trợ trên toàn thế giới Nếu gặp phải vấn đề, bạn sẽ có thể nhận được sự hỗ trợ nhanh chóng từ cộng đồng

– Có rất nhiều tài nguyên hữu ích trên internet

– Python có thể được sử dụng trên nhiều hệ điều hành máy tính khác nhau như Windows, macOS, Linux và Unix

– Tốc độ thực thi chậm – Tiêu thụ bộ nhớ lớn – Không an toàn cao và có nguy cơ bảo mật, có một số hạn chế khi sử dụng Python để truy cập cơ sở dữ liệu

Các framework sử dụng

UIKit framework cung cấp một số class để tạo các tác vụ chạm (touch- based) cho giao diện người dùng, tất cả các ứng dụng iOS đều xây dựng dựa trên UIKit, nhà phát triển không thể xây dựng ứng dụng mà không sử dụng framework này UIKit cung cấp cơ sở hạ tầng cho việc vẽ các giao diện trên màn hình, điều khiển các sự kiện, tạo ra các thành phần giao diện của

10 ứng dụng UIKit cũng tổ chức các ứng dụng phức tạp bằng việc quản lý nội dung ứng dụng để hiển thị lên màn hình UIDynamics là 1 phần quan trọng trong UIKit được apple tích hợp từ năm 2007 cùng với sự xuất hiện của iOS 7 Bằng cách sử dụng UIKit Dynamics, lập trình viên có thể tạo ra các view với những tương tác vật lý như trọng lực, móc nối, va chạm, nảy lên(sau va chạm), giữa các đối tượng với các thành phần chính: UIDynamicItem protocol, Dynamic behaviors, Dynamic animator

PyTorch là một thư viện mã nguồn mở và một nền tảng tính toán khoa học trong lĩnh vực học máy (machine learning) và học sâu (deep learning) Được phát triển bởi Facebook AI Research (FAIR), PyTorch đã nhanh chóng trở thành một trong những thư viện phổ biến nhất trong cộng đồng học máy và trí tuệ nhân tạo Các nhà phát triển sử dụng framework này cho những ứng dụng như robot và thị giác máy tính, tìm kiếm thông tin từ hình ảnh và video

PyTorch đã trở thành một trong những công cụ quan trọng và ưa chuộng cho việc phát triển và thử nghiệm các mô hình học máy và học sâu Điều này là nhờ vào tính linh hoạt, hiệu suất và cộng đồng mạnh mẽ xung quanh nó

Các đặc điểm và tính năng chính của PyTorch bao gồm:

– Dynamic Computational Graph: Một đặc điểm độc đáo của PyTorch so với các thư viện khác là việc sử dụng đồ thị tính toán động (dynamic computational graph) Điều này cho phép bạn định nghĩa và thay đổi cấu trúc của mô hình trong quá trình chạy, điều này rất hữu ích cho việc debug và xây dựng mô hình linh hoạt hơn

– Autograd: PyTorch cung cấp một hệ thống tự động tính đạo hàm (autograd), giúp tính toán gradient cho việc lan truyền ngược (backpropagation) dễ dàng Điều này rất hữu ích trong quá trình đào tạo mô hình học sâu

– Tích Hợp GPU: PyTorch dễ dàng tích hợp với GPU để tăng tốc quá trình tính toán Điều này đặc biệt quan trọng khi làm việc với mô hình học sâu có tính toán phức tạp

– Dynamic Batching và Data Loading: PyTorch cho phép tạo các batch có kích thước khác nhau và tự động quản lý việc nạp dữ liệu (data loading) Điều này giúp tối ưu việc sử dụng bộ nhớ và tăng tốc quá trình đào tạo

– Tích Hợp Numpy: PyTorch tích hợp tốt với thư viện Numpy, cho phép bạn làm việc dễ dàng với dữ liệu số và tính toán

– Module API: PyTorch cung cấp giao diện lập trình module cho việc xây dựng và quản lý mô hình Điều này giúp tạo ra mã dễ đọc, dễ hiểu và tái sử dụng

– Rich Ecosystem: PyTorch có một hệ sinh thái phong phú với nhiều thư viện hỗ trợ như torchvision (xử lý ảnh), torchaudio (xử lý âm thanh), transformers (xử lý ngôn ngữ tự nhiên), và nhiều thư viện khác

Thư viện ĐH Thăng Long

11 – Active Community: PyTorch có một cộng đồng đông đảo và năng động, cung cấp nhiều tài liệu, ví dụ và hỗ trợ trực tuyến

Flask là một web frameworks, nó thuộc loại micro-framework được xây dựng bằng ngôn ngữ lập trình Python Flask cho phép bạn xây dựng các ứng dụng web từ đơn giản tới phức tạp

Nó có thể xây dựng các API nhỏ, ứng dụng web chẳng hạn như các trang web, blog, trang wiki hoặc một website dựa theo thời gian hay thậm chí là một trang web thương mại Flask được thiết kế để đơn giản và linh hoạt, giúp người phát triển xây dựng các ứng dụng web một cách nhanh chóng và dễ dàng

Một số điểm nổi bật và đặc điểm chính của Flask:

– Micro Framework: Flask được gọi là "micro" framework vì nó cung cấp một số chức năng cơ bản để xây dựng ứng dụng web mà không có nhiều thành phần phức tạp và tích hợp sẵn Điều này giúp người phát triển có sự linh hoạt để lựa chọn các thành phần khác để sử dụng theo ý muốn

– Cấu trúc Đơn Giản: Flask không yêu cầu một cấu trúc dự án phức tạp Bạn có thể tổ chức mã nguồn của mình theo cách bạn muốn, giúp dễ dàng hiểu và quản lý mã nguồn

– Routing: Flask cho phép bạn định nghĩa các đường dẫn (routes) và liên kết chúng với các hàm xử lý để xác định cách ứng dụng xử lý các yêu cầu từ người dùng

– Templates: Flask hỗ trợ sử dụng các template engine như Jinja2 để tạo giao diện người dùng động và tái sử dụng các thành phần giao diện

– HTTP Methods: Flask hỗ trợ các phương thức HTTP như GET, POST, PUT, DELETE để xử lý các loại yêu cầu khác nhau

Tích hợp các nền tảng khác

Wikipedia là một bách khoa toàn thư tự do, là kết quả của sự cộng tác của chính những người đọc từ khắp nơi trên thế giới Tất cả mọi người đều có thể sửa đổi ở các trang wiki, ngoại trừ các cá nhân bị tước quyền sửa đổi và những trang bị khóa

12 MediaWiki API là một API được cung cấp bởi phần mềm MediaWiki, một hệ thống quản lý nội dung được sử dụng rộng rãi để xây dựng và quản lý các trang web dựa trên wiki, trong đó Wikipedia là một ví dụ nổi bật

API này cho phép người dùng tương tác và truy cập dữ liệu trên các trang web dựa trên MediaWiki thông qua các yêu cầu HTTP, đồng thời cung cấp các phương thức để truy vấn và chỉnh sửa dữ liệu trên các trang web này API MediaWiki có thể được sử dụng để thực hiện các tác vụ như:

– Truy vấn Thông tin: Bạn có thể sử dụng API để truy vấn thông tin về các bài viết, trang, người dùng, lịch sử chỉnh sửa, hình ảnh và nhiều loại dữ liệu khác trên trang web dựa trên MediaWiki

– Tìm Kiếm: API cho phép bạn thực hiện các tìm kiếm trên trang web dựa trên các tiêu chí như từ khóa, tên người dùng, thời gian chỉnh sửa, v.v

– Chỉnh Sửa và Tạo Mới: Bạn có thể sử dụng API để tạo mới bài viết, chỉnh sửa nội dung, thêm mới hình ảnh và phương tiện truyền thông, thậm chí có thể thực hiện các thao tác phức tạp như tạo và xóa trang

– Lấy Dữ Liệu Cấu Trúc: API cung cấp dữ liệu cấu trúc về các phân đoạn của trang như danh sách các mục con, liên kết nội bộ và liên kết ngoại

– Xác thực và Quản lý Người Dùng: API cho phép quản lý người dùng như đăng nhập, đăng ký, lấy thông tin người dùng, và thay đổi quyền hạn

Firebase Authentication là một dịch vụ xác thực và quản lý người dùng được cung cấp bởi nền tảng phát triển ứng dụng di động và web Firebase, được phát triển bởi Google Dịch vụ này cung cấp các dịch vụ phụ trợ, SDK dễ sử dụng và thư viện giao diện người dùng được tạo sẵn để xác thực người dùng Nó hỗ trợ xác thực bằng mật khẩu, số điện thoại, Google, Facebook, Twitter, v.v.:

– Quản Lý Tài Khoản Người Dùng: Firebase Authentication cho phép ta quản lý thông tin tài khoản người dùng như tên, hình ảnh đại diện,…

– Xác Thực Email: Firebase Authentication cung cấp khả năng xác thực email, trong đó người dùng cần xác nhận địa chỉ email của họ qua một liên kết xác thực được gửi qua email

– Xác thực qua bên thứ ba: Firebase Authentication SDK cung cấp các phương pháp cho phép người dùng đăng nhập bằng tài khoản Google, Facebook, Twitter, GitHub,

– Xác Thực Số Điện Thoại: Bằng cách tích hợp dịch vụ SMS, Firebase Authentication cho phép xác thực người dùng qua số điện thoại Một mã xác thực sẽ được gửi tới số điện thoại của người dùng để xác minh danh tính

Thư viện ĐH Thăng Long

13 – Quản Lý Phiên Đăng Nhập: Firebase Authentication quản lý các phiên đăng nhập của người dùng một cách tự động, giúp đảm bảo tính bảo mật và an toàn cho việc truy cập

– Xác thực ẩn danh: Người dùng có thể sử dụng các tính năng yêu cầu xác thực mà không yêu cầu người dùng đăng nhập trước bằng cách tạo tài khoản ẩn danh tạm thời

Nếu người dùng có thể đăng ký để nâng cấp tài khoản ẩn danh lên tài khoản thông thường

Firestore Database là cơ sở dữ liệu linh hoạt, có thể mở rộng để phát triển thiết bị di động, web và máy chủ từ Firebase và Google Cloud Nó giữ cho dữ liệu của được đồng bộ hóa trên các ứng dụng thông qua trình nghe thời gian thực và cung cấp hỗ trợ ngoại tuyến cho thiết bị di động và web để xây dựng các ứng dụng phản hồi hoạt động bất kể độ trễ mạng hoặc kết nối Internet Cloud Firestore cũng cung cấp khả năng tích hợp liền mạch với các sản phẩm Firebase và Google Cloud khác

Cloud Firestore là một cơ sở dữ liệu NoSQL được lưu trữ trên nền tảng đám mây, cho phép ứng dụng trên các nền tảng Apple, Android và web truy cập trực tiếp thông qua các SDK native Cloud Firestore cũng có sẵn trong các SDK native cho Node.js, Java, Python, Unity, C++, và Go, cùng với REST và RPC APIs

Theo mô hình dữ liệu NoSQL của Cloud Firestore, dữ liệu được lưu trữ trong các tài liệu (documents) chứa các trường tương ứng với các giá trị Các tài liệu này được lưu trữ trong các bộ sưu tập (collections), là các thùng chứa cho các tài liệu và có thể sử dụng để tổ chức dữ liệu và xây dựng các truy vấn Tài liệu hỗ trợ nhiều loại dữ liệu khác nhau, từ chuỗi và số đơn giản đến các đối tượng lồng nhau phức tạp Ta cũng có thể tạo các bộ sưu tập con (subcollections) trong các tài liệu và xây dựng cấu trúc dữ liệu phân cấp

Hơn nữa, truy vấn trong Cloud Firestore mạnh mẽ, hiệu quả và linh hoạt Ta có thể tạo các truy vấn sâu để truy xuất dữ liệu tại mức tài liệu mà không cần truy xuất toàn bộ bộ sưu tập hoặc các bộ sưu tập con Ngoài ra có thể sử dụng tính năng sắp xếp, lọc và giới hạn vào các truy vấn hoặc sử dụng con trỏ (cursors) để phân trang kết quả Để duy trì dữ liệu trong ứng dụng luôn cập nhật mà không cần truy xuất toàn bộ cơ sở dữ liệu mỗi khi có cập nhật, ta có thể thêm chế độ nghe thời gian thực Bằng cách thêm chế độ thời gian thực, ứng dụng sẽ nhận thông báo về một bản chụp dữ liệu mỗi khi dữ liệu đang theo dõi thay đổi, chỉ cần truy xuất dữ liệu mới Để bảo vệ quyền truy cập đến dữ liệu trong Cloud Firestore, ta có thể sử dụng Firebase Authentication và Cloud Firestore Security Rules cho các nền tảng Android, Apple, và JavaScript, hoặc Identity and Access Management (IAM) cho các ngôn ngữ phía máy chủ

Mô hình MVVM [11]

1.4.1 Mô hình MVVM là gì?

MVVM là viết tắt của Model - View - ViewModel, đây là mô hình hỗ trợ two-way data binding giữa View và View Model

1.4.2 Các thành phần trong mô hình MVVM

Mô hình MVVM được chia làm 3 lớp xử lý gồm Model – View – ViewModel:

– View: Tương tự như trong mô hình MVC, View là phần giao diện của ứng dụng để hiển thị dữ liệu và nhận tương tác của người dùng Một điểm khác biệt so với các ứng

16 dụng truyền thống là View trong mô hình này tích cực hơn, nó có khả năng thực hiện các hành vi và phản hồi lại người dùng thông qua tính năng binding, command

– Model: Cũng tương tự như trong mô hình MVC, Model là các đối tượng giúp truy xuất và thao tác trên dữ liệu thực sự

– View Model: Là lớp trung gian giữa View và Model View Model có thể được xem là thành phần thay thế cho Controller trong mô hình MVC Nó chứa các mã lệnh thực hiện Data Binding, Command Một điểm cần lưu ý là trong mô hình MVVM, các tầng bên dưới sẽ không biết được các thông tin gì về các tầng trên của nó

ViewModel sẽ đảm nhận công việc đồng bộ dữ liệu từ Model lên View Mối quan hệ giữa View và View-Model là View sẽ được ánh xạ tới View Model nhưng ViewModel lại không biết thông tin gì về View nó được ẩn giấu qua cách sử dụng Data-binding và cơ chế của mô hình Observer, một ViewModel có thể được ánh xạ từ nhiều View

Trong mô hình MVVM, các tầng bên dưới sẽ không biết được các thông tin gì về tầng bên trên nó ViewModel cũng không hề biết gì về View, một ViewModel có thể sử dụng cho nhiều View thường được gọi là binding data, có thể là 1 chiều hoặc 2 chiều tùy nhu cầu của ứng dụng

1.4.3 Cài đặt mô hình MVVM

Thông thường khi sử dụng với MVVM chúng ta nên tạo 3 thư mục chính chứa các file code liên quan

Tại đây chứa các file giao diện và mỗi file giao diện đều có class code- behind đi kèm Đặc biệt file code-behind ta sẽ không sử dụng đến, mọi điều cần làm sẽ chuyển xuống class ViewModel Tất nhiên là bạn có thể code trong file code-behind của XAML nhưng đồng nghĩa điều đó sẽ phá vỡ quy ước của MVVM Bạn có thể khai báo thuộc tính datacontext hoặc vài thiết lập khác nhưng nên hạn chế tối thiểu code ở đây Views được sử dụng để kết hợp với các mô hình MVVM, Nó dùng để cung cấp một sự chia tách gọn gàng của khái niệm giữa UI và presentation logic và data

Trong thư mục Models tạo các tầng chứa dữ liệu và bất kỳ liên kết validation, logic nghiệp vụ để chắc chắn tính toàn vẹn của data, bạn có thể tách ra như một Repositories khác, chúng được dùng như một phần của mô hình MVVM

Thông thường trong một file giao diện thì ta tạo ra một class View Models tương ứng (có đôi lúc ta tạo nhiều class phụ giúp tinh giản file code và gọi chúng trong class ViewModels chính)

Thư viện ĐH Thăng Long

17 ViewModels sẽ sử dụng các models nếu cần định nghĩa dữ liệu Sự liên kết giữa View- ViewModel giúp chúng gửi và nhận dữ liệu, để hiểu rõ ta cần tìm hiểu các khái niệm về Binding, DataContext, Behaviors SDK, nhờ đó ta tách code-behind của View và đưa xuống View Model

Ngoài ra một lớp ViewModels chứa presentation logic và state của ứng dụng ViewModel cần chứa các chức năng của ứng dụng ViewModels định nghĩa properties, commands và events để chuyển đổi controls trong view cần data- bind

Binding Data trong MVVM là điều không bắt buộc, một số implement chỉ đơn giản làm ViewModel như một lớp trung gian giữa Model-View, lớp này giữ nhiệm vụ format data hoặc mapping trạng thái của View Tuy nhiên cách này khiến cho ViewModel trở thành Presenter và đưa kiến trúc này về MVP

1.4.4 Ưu & nhược điểm của mô hình MVVM a) Ưu điểm

– Thực hiện Unit testing bây giờ sẽ rất dễ dàng, vì bạn thực sự không phụ thuộc vào view

– MVVM sẽ tạo sự tương tác hiệu quả giữa designer và developer

– Tăng khả năng sử dụng lại các thành phần hay việc thay đổi giao diện chương trình mà không cần phải viết lại code quá nhiều

– Phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp, bảo trì b) Nhược điểm

– Khả năng duy trì khi view có thể gán cả biến và biểu thức, các logic không liên quan sẽ tăng dần theo thời gian, ảnh hưởng đến việc thêm code vào XML

– Đối với dự án nhỏ việc áp dụng mô hình MVVM gây cồng kềnh, tốn thời gian trong quá trình phát triển Tốn thời gian trung chuyển dữ liệu của các thành phần

– Đối với dự án lớn hơn, nó gây khó khăn và mất thời gian để thiết kế các ViewModel – Việc liên kết dữ liệu cho tất cả các thành phần gây khó khăn trong việc debug khi cơ sở dữ liệu phức tạp

Mô hình nhận diện cây [13]

1.5.1 Giới thiệu về mô hình nhận diện cây

Nghiên cứu này đã sử dụng một bộ dữ liệu hình ảnh có mức độ mơ hồ cao, gồm 306,146 hình ảnh cây cảnh với 1,081 loài, được chia thành hai bộ:

(i) Bộ dữ liệu có sự mất cân bằng lớp mạnh: một số loài sẽ có số lượng hình ảnh lớn hơn nhiều so với các loài khác

18 (ii) Bộ dữ liệu có nhiều loài cây với hình dạng tương đồng về mặt hình thái Ngoài ra, bộ dữ liệu này có sự biến thiên cao giữa các loài, thực vật có thể có hình dáng khác nhau tuỳ theo mùa, các bông hoa thuộc cùng 1 loài có thể có màu sắc khác nhau hoặc người chụp chỉ chụp 1 phần của cây Sự kết hợp giữa những biến thiên này với hình ảnh có chất lượng không tối ưu dẫn đến các cặp hình ảnh sẽ rất khó hoặc thậm chí không thể phân biệt được Vì vậy, ngay cả một nhà thực vật học chuyên nghiệp cũng có thể không thể gán nhãn cho những hình ảnh như vậy một cách chắc chắn Điều đó sẽ cung cấp một thách thức thực tế và phức tạp cho các mô hình phân loại, đặc biệt là những mô hình được thiết kế để xử lý sự mất cân bằng và đa dạng trong dữ liệu hình ảnh

Hình 1.3: Ví dụ về bộ dữ liệu có hình dáng khác nhau nhưng cùng 1 loài [14]

Hình 1.4: Ví dụ về bộ dữ liệu có hình dáng giống nhau nhưng khác loài [15]

Thư viện ĐH Thăng Long

1.5.2 Phương pháp sử dụng để nhận diện cây

Bộ dữ liệu nhận diện này thích hợp để đánh giá các phương pháp và thuật toán phân loại giá trị tập hợp Do đó, tác giả đề xuất hai chỉ số đánh giá là macro-average top-k accuracy, macro-average average-k accuracy và được huấn luyện sử dụng neural network và hàm mất mát cross-entropy Trong đó:

– Macro-average top-k accuracy: tỉ lệ các trường hợp mô hình đưa ra đáp án chính xác trong top-k kết quả, được tính trung bình qua tất cả các lớp Đây là một chỉ số quan trọng để đánh giá khả năng nhận diện của mô hình, đặc biệt là trong các tình huống mà người dùng quan tâm đến cả các kết quả không chắc chắn nhất

– Macro-average average-k accuracy: tỉ lệ trung bình của độ chính xác kết quả trên tất cả các lớp, khi mô hình được đánh giá với các giá trị k khác nhau Chỉ số này cung cấp cái nhìn tổng quan về hiệu suất trung bình của mô hình đối với các kịch bản khác nhau

– Neural Network [16]: mạng nơ-ron nhân tạo, là một chuỗi những thuật toán được đưa ra để tìm kiếm các mối quan hệ cơ bản trong tập hợp các dữ liệu thông qua việc bắt bước cách thức hoạt động từ não bộ con người Mạng nơ ron nhân tạo được xem là hệ thống của các tế bào thần kinh nhân tạo, có khả năng thích ứng được với mọi thay đổi từ đầu vào Do vậy, nó có thể đưa ra được mọi kết quả một cách tốt nhất có thể mà không cần phải thiết kế lại những tiêu chí đầu ra

– Hàm mất mát cross-entropy [17]: hàm mất mát thường được sử dụng trong các bài toán phân loại, đặc biệt là trong neural network để phân loại các mẫu dữ liệu vào các lớp khác nhau Hàm cross-entropy được sử dụng để đo lường sự tương đồng giữa phân phối xác suất dự đoán của mô hình và phân phối xác suất thực tế của các lớp

Trong quá trình đào tạo, hình ảnh được chuyển thành kích thước 256 và cắt ngẫu nhiên kích thước 224 × 224, là kích thước tiêu chuẩn cho nhiều mô hình neural network Các mô hình được tối ưu hóa bằng phương pháp SGD, momentum là 0.9, tăng tốc Nesterov, sử dụng kích thước batch là 32 cho tất cả các mô hình và trọng lượng giảm là 1.10^(-4) Đối với bộ phân loại baverage-k, plug-in sẽ tính toán độ chính xác trên tập kiểm tra và sử dụng ngưỡng đó để tính macro-average average-k accuracy trên tập thử nghiệm

– SGD [18]: phương pháp tối ưu hóa phổ biến trong huấn luyện neural network Thay vì sử dụng toàn bộ tập huấn luyện thì sau mỗi lần, SGD sẽ lấy ngẫu nhiên 1 phần tử ở tập huấn luyện và thực hiện tính lại vector độ dốc dựa chỉ dựa trên 1 điểm dữ liệu

Việc tính toán dựa trên 1 điểm dữ liệu sẽ khiến thuật toán chạy nhanh hơn bởi có rất ít dữ liệu cần xử lý ở mỗi vòng lặp

– Momentum là 0.9 [18]: tham số được sử dụng để giữ lại một phần của hướng cập nhật trước đó, giúp giảm độ dao động và tăng tốc quá trình hội tụ Trong trường hợp này, 90% của hướng cập nhật trước đó được giữ lại và sử dụng để tính hướng cập nhật hiện tại

20 – Tăng tốc Nesterov [18]: là một biến thể của SGD giúp cải thiện tốc độ hội tụ và khả năng tìm ra điểm cực tiểu cục bộ Thay vì tính gradient tại vị trí hiện tại, tăng tốc

Nesterov tính gradient tại một điểm dự đoán trong tương lai gần và sử dụng gradient này để cập nhật trọng số, giúp giảm độ dao động của quá trình tối ưu hóa và tăng khả năng hội tụ đến điểm cực tiểu

– Kích thước batch là 32: Kích thước batch là số lượng mẫu dữ liệu được sử dụng để tính gradient và cập nhật trọng số trong mỗi lần huấn luyện Trong trường hợp này, mỗi lần cập nhật trọng số, mô hình sẽ sử dụng 32 mẫu dữ liệu từ tập huấn luyện

– Trọng lượng giảm là 1.10^(-4) [19]: một kỹ thuật được sử dụng để kiểm soát overfitting bằng cách thêm một thành phần giảm trọng lượng vào hàm mất mát Trong trường hợp này, mỗi lần cập nhật trọng số, hàm mất mát sẽ được cộng thêm một phần tử giảm trọng lượng với hệ số là 1.10^(-4)

– Bộ phân loại baverage-k: được sử dụng để đánh giá hiệu suất của mô hình trong việc phân loại dữ liệu thành nhiều lớp khác nhau Chỉ số baverage-k được tính toán bằng cách lấy macro-average average-k accuracy trên tập thử nghiệm

1 số mô hình học sâu đã được đào tạo là ResNet, DenseNets, InceptionResNet-v2, MobileNetv2, AlexNet, SqueezeNet…

Sau khi đã đào tạo 1 số mô hình thần kinh sâu,… ta có bảng so sánh độ chính xác các mô hình như sau:

Hình 1.5: So sánh top1 accuracy và macro-average top1 accuracy của một số mô hình học máy [20]

Thư viện ĐH Thăng Long

21 Tuy nhiên, độ chính xác sẽ phụ thuộc rất nhiều vào số lượng hình ảnh của mỗi loài

PHÂN TÍCH, ĐẶC TẢ CHỨC NĂNG HỆ THỐNG

Mô tả bài toán

Ứng dụng nhận diện cây kết hợp các tính năng nhận diện cây từ ảnh, đặt thông báo nhắc nhở tưới cây và cộng đồng chia sẻ kiến thức về cây sẽ giúp người dùng dễ dàng quản lý và chăm sóc cây cối trong môi trường sống của họ

2.1.1 Nhận diện cây từ ảnh Đây là tính năng chính của ứng dụng, cho phép người dùng chụp hoặc tải lên ảnh của cây mà họ muốn nhận diện Ứng dụng sử dụng công nghệ nhận diện hình ảnh để xác định loài cây dựa trên hình dáng, màu sắc, lá, hoa, quả và các đặc điểm khác của cây đó

Sau khi nhận diện thành công, ứng dụng sẽ cung cấp thông tin chi tiết về cây, bao gồm tên gọi khoa học và thông tin về tính cách, điều kiện sinh sống, cách chăm sóc và những điều cần lưu ý

Nếu không có kết quả nhận diện hoặc không hài lòng về kết quả nhận diện, người dùng có thể tìm kiếm cây theo tên hoặc tự cung cấp thêm thông tin về cây (thông tin này sẽ được cập nhật vào danh sách cây trong cơ sở dữ liệu)

2.1.2 Đặt thông báo nhắc nhở tưới cây

Tính năng này cho phép người dùng thiết lập thông báo nhắc nhở tưới cây theo lịch trình Người dùng có thể chọn tần suất và thời điểm tưới cây dựa trên yêu cầu của từng loại cây Ứng dụng sẽ gửi thông báo nhắc nhở đến người dùng vào thời gian đã đặt, giúp người dùng duy trì lịch trình chăm sóc cây một cách đều đặn, đảm bảo cây luôn đủ nước và dưỡng chất, giúp cây phát triển mạnh mẽ và khỏe mạnh

Người dùng có thể bật, xoá thông báo hoặc sửa thông tin thông báo Các thông tin thông báo được lưu trên cơ sở dữ liệu

2.1.3 Cộng đồng chia sẻ kiến thức về cây

Tính năng này tạo ra một cộng đồng trực tuyến dưới dạng forum cho những người yêu thích và quan tâm đến cây cối Người dùng có thể đăng bài để chia sẻ hình ảnh, kinh nghiệm chăm sóc, câu hỏi và kiến thức về cây cảnh Họ cũng có thể tìm kiếm thông tin từ cộng đồng cũng như yêu thích và bình luận vào bài viết của mình hoặc người dùng khác Điều này tạo ra một môi trường học hỏi và trao đổi về cây, từ đó thúc đẩy sự tương tác và hứng thú của người dùng với cây trồng

Thư viện ĐH Thăng Long

Yêu cầu nghiệp vụ

– BR1 Đăng nhập: Ứng dụng phải đảm bảo khả năng đăng nhập, đăng xuất, chỉnh sửa thông tin tài khoản của người dùng

– BR2 Đăng ký tài khoản: Ứng dụng phải đảm bảo khả năng đăng ký tài khoản của người dùng Sau khi đăng ký, người dùng có thể đăng nhập lại vào tài khoản đó và lưu trữ được dữ liệu cũ

– BR3 Nhận diện cây: Ứng dụng phải đảm bảo khả năng nhận diện cây từ ảnh và trả về kết quả nhận diện

– BR4 Tìm kiếm cây: Ứng dụng phải đảm bảo khả năng tìm kiếm cây theo tên người dùng nhập

– BR5 Tạo cây mới: Ứng dụng phải đảm bảo khả năng tạo cây mới với các thông tin người dùng nhập như tên, ảnh, mô tả, cách chăm sóc cây

– BR6 Xem thông tin cây: Ứng dụng phải đảm bảo khả năng xem thông tin gồm tên, ảnh, nguồn gốc, mô tả, cách chăm sóc cây

– BR7 Thêm cây vào bộ sưu tập: Ứng dụng phải đảm bảo khả năng người dùng có thể thêm cây vào bộ sưu tập cá nhân Người dùng có thể chỉnh sửa tên và thêm ảnh cây trong bộ sưu tập

– BR8 Xem danh sách cây trong bộ sưu tập: Ứng dụng phải đảm bảo khả năng xem danh sách cây trong bộ sưu tập cá nhân của người dùng

– BR9 Thông báo nhắc nhở: Ứng dụng phải đảm bảo khả năng đặt thông báo nhắc nhở của người dùng và hệ thống cần thông báo chính xác tại thời gian người dùng đã đặt

– BR10 Quản lý lịch chăm sóc: Ứng dụng phải đảm bảo khả năng hiển thị lịch chăm sóc cho từng loại cây theo ngày

– BR11 Xem bài viết: Ứng dụng phải đảm bảo khả năng hiển thị các thông tin tất cả bài viết đã được đăng trên Cộng đồng

– BR12 Xem chi tiết bài viết: Ứng dụng phải đảm bảo khả năng hiển thị đầy đủ thông tin của bài viết được chọn

– BR13 Tương tác bài viết: Ứng dụng phải đảm bảo khả năng cho phép người dùng có thể yêu thích và bình luận bài viết

– BR14 Tìm kiếm và lọc bài viết: Ứng dụng phải đảm bảo khả năng tìm kiếm và lọc các bài viết trên Cộng đồng

– BR15 Đăng bài viết: Ứng dụng phải đảm bảo khả năng người dùng có thể đăng bài viết trên Cộng đồng Các người dùng khác có thể tương tác với bài viết – BR16 Xem trang cá nhân: Ứng dụng phải đảm bảo khả năng người dùng có thể xem trang cá nhân của người dùng khác và xem, chỉnh sửa trang cá nhân của bản thân

Sơ đồ Usecase các chức năng chính

Hình 2.1: Sơ đồ Usecase hệ thống

– UC#01 - Đăng ký tài khoản: Hệ thống yêu cầu tất cả các tác nhân tham gia HT phải đăng nhập để có thể thực hiện các chức năng do hệ thống cung cấp Do vậy, việc đầu tiên cần làm là tạo 1 tài khoản để sử dụng

– UC#02 - Đăng nhập: Hệ thống yêu cầu tất cả các tác nhân tham gia HT phải đăng nhập để có thể thực hiện các chức năng do hệ thống cung cấp

– UC#03 - Đăng xuất: Hệ thống cho phép người dùng có thể đăng xuất khỏi hệ thống

– UC#04 - Nhận diện cây: Hệ thống cho phép người dùng có thể gửi ảnh lên server và nhận kết quả nhận diện – UC#05 - Tìm kiếm cây: Hệ thống cho phép người dùng có thể tìm kiếm cây theo tên

– UC#06 - Tạo cây mới: Hệ thống cho phép người dùng tạo cây mới vào cơ sở dữ liệu với các thông tin người dùng nhập như tên, ảnh, mô tả, cách chăm sóc

Thư viện ĐH Thăng Long

25 – UC#07 - Xem thông tin cây: Hệ thống cho phép người dùng xem thông tin cây bao gồm tên, ảnh, mô tả, cách chăm sóc

– UC#08 - Thêm cây vào bộ sưu tập: Hệ thống cho phép người dùng có thể thêm cây vào bộ sưu tập cá nhân

– UC#09 - Xem danh sách cây trong bộ sưu tập: Hệ thống cho phép người dùng có thể xem danh sách các cây đã thêm vào bộ sưu tập cá nhân

– UC#10 - Đặt thông báo: Hệ thống cho phép người dùng đặt thông báo nhắc nhở chăm sóc cây

– UC#11 - Quản lý lịch chăm sóc: Hệ thống cho phép người dùng xem lịch chăm sóc dựa trên thông tin thông báo của cây

– UC#12 - Xem bài viết: Hệ thống cho phép người dùng xem danh sách bài viết đã được đăng tải, người dùng có thể tìm kiếm bài viết mà mình quan tâm

– UC#13 - Xem chi tiết bài viết: Hệ thống cho phép người dùng có thể xem chi tiết bài viết bao gồm nội dung, ảnh và bình luận trong bài viết và tương tác với bài viết đó

– UC#14 - Đăng bài viết: Hệ thống cho phép người dùng có thể đăng bài viết gồm: nội dung và ảnh

– UC#15 – Xem trang cá nhân: Hệ thống cho phép người dùng có thể xem và chỉnh sửa thông tin cá nhân của mình và xem trang cá nhân của người dùng khác

2.3.3 Bảng ánh xạ yêu cầu nghiệp vụ với các Usecase

BR1 Đăng nhập UC01, UC03

BR2 Đăng ký tài khoản UC02

BR3 Nhận diện cây UC04

BR4 Tìm kiếm cây UC05

BR5 Tạo cây mới UC06

BR6 Xem thông tin cây UC07

BR7 Thêm cây vào bộ sưu tập UC08

BR8 Xem danh sách cây trong bộ sưu tập UC09

BR9 Thông báo nhắc nhở UC10

BR10 Quản lý lịch chăm sóc UC11

BR11 Xem bài viết UC12

BR12 Xem chi tiết bài viết UC13

BR13 Tương tác bài viết UC12, UC13

BR14 Tìm kiếm và lọc bài viết UC12

BR15 Đăng bài viết UC14

BR16 Xem trang cá nhân UC15

Bảng 2.1: Bảng ánh xạ yêu cầu nghiệp vụ với các Usecase

Sơ đồ kiến trúc tổng thể

Hình 2.2: Sơ đồ kiến trúc tổng thể hệ thống

Hệ thống được thiết kế với 2 phần chính, bao gồm: client-side và server-side

– Client-side: Ứng dụng IOS (native – viết bằng Swift) + Người dùng tương tác với ứng dụng

+ Ứng dụng trao đổi dữ liệu với server thông qua phương thức HTTP để phục vụ việc nhận diện cây và dữ liệu chi tiết cây

+ Giao tiếp với API của Firebase o Firebase Authentication: phục vụ việc đăng nhập, đăng ký qua gmail o Firestore Database: phục vụ việc đăng, bình luận bài viết, lưu trữ bộ sưu tập cây, lịch chăm sóc cây o Firebase Storage: phục vụ việc lưu trữ ảnh cây và ảnh bài viết – Server-side: Sử dụng Python

Thư viện ĐH Thăng Long

27 + Server trao đổi dữ liệu với ứng dụng IOS thông qua phương thức HTTP, server sẽ trả các dữ liệu cho client dưới dạng JSON

+ Lưu trữ dữ liệu học máy và trả về kết quả nhận diện + Giao tiếp với MediaWiki API để lấy thông tin mô tả cây từ Wikipedia

Đặc tả các chức năng

2.5.1 UC#01: Đăng ký tài khoản

UC#01 ĐĂNG KÝ TÀI KHOẢN Độ phức tạp:

Chức năng này dùng để tạo một tài khoản cho người dùng đăng nhập vào hệ thống Người dùng truy cập ứng dụng, sau đó chọn đăng ký tài khoản và nhập đầy đủ thông tin yêu cầu để tạo tài khoản cho mình

Tiền điều kiện Người dùng phải có tài khoản email/icloud

Thành công Người dùng có một tài khoản đăng nhập vào ứng dụng

Lỗi Người dùng cần đăng ký lại hoặc hủy thao tác ĐẶC TẢ CHỨC NĂNG Luồng sự kiện chính

Chức năng này bắt đầu khi người dùng muốn đăng ký một tài khoản trên hệ thống thông qua email

• Sau khi truy cập vào ứng dụng, người dùng chọn chức năng Đăng ký qua email/icloud

• Hệ thống mở cửa sổ đăng nhập từ Google/Icloud

• Người dùng nhấn vào tài khoản sử dụng để đăng ký

• Nếu người dùng chưa có tài khoản, hệ thống hiển thị giao diện nhập thông tin gồm ảnh và tên

• Người dùng nhập đầy đủ thông tin yêu cầu, sau đó nhấn nút Đăng ký để hoàn

Luồng sự kiện phát sinh/ Kịch bản phát sinh

Nhập thiếu thông tin tài khoản

Khi người dùng ấn đăng ký, nếu nhập thiếu thông tin tên, ứng dụng sẽ không thể ấn nút đăng ký, người dùng cần nhập đầy đủ thông tin để có thể đăng ký tài khoản

Thông tin tài khoản đã tồn tại trong hệ thống

Khi người dùng ấn đăng ký, để đảm bảo tính duy nhất của mỗi tài khoản trên hệ thống, thông tin email/icloud gửi lên sẽ được kiểm tra trên hệ thống để xem đã tồn tại người dùng này chưa

Nếu email hoặc icloud đã tồn tại trên hệ thống thì chuyển đến màn hình chính với tài khoản đã tồn tại

Không thể đăng ký tài khoản do lỗi hệ thống

Khi người dùng ấn đăng ký, nếu xảy ra lỗi từ hệ thống hoặc lỗi kết nối tới hệ thống, ứng dụng sẽ hiển thị thông báo cho người dùng biết và gợi ý cách giải quyết sự cố nếu có

Hình 2.3: Màn hình chào Hình 2.4: Màn hình nhập thông tin đăng ký

Thư viện ĐH Thăng Long

Hình 2.5: Màn hình lỗi đăng nhập/đăng ký

UC#02 ĐĂNG NHẬP TÀI KHOẢN Độ phức tạp:

Hệ thống cho phép người dùng đăng nhập thông qua tên đăng nhập và mật khẩu đã được người sử dụng đăng ký tài khoản từ trước Sau khi đăng nhập vào hệ thống, người dùng có thể sử dụng các chức năng của hệ thống

Tiền điều kiện Người dùng phải có tài khoản trong hệ thống

Thành công Người dùng có thể sử dụng các chức năng của ứng dụng

Lỗi Người dùng cần đăng nhập lại hoặc hủy thao tác ĐẶC TẢ CHỨC NĂNG

Chức năng này bắt đầu khi người dùng muốn sử dụng bất kì chức năng nào khác trong ứng dụng

• Sau khi truy cập vào ứng dụng, người dùng chọn chức năng Đăng nhập bằng email/icloud

• Hệ thống mở cửa sổ đăng nhập từ Google/Icloud

• Người dùng nhấn vào tài khoản sử dụng để đăng ký

• Nếu tài khoản đã tồn tại trên hệ thống thì ứng dụng sẽ thông báo đăng nhập thành công và chuyển đến màn hình chính của ứng dụng

Luồng sự kiện phát sinh/ Kịch bản phát sinh

Thông tin tài khoản chưa tồn tại trong hệ thống

Nếu tài khoản chưa tồn tại trong hệ thống, ứng dụng sẽ hiển thị màn hình thông tin đăng ký với email đã nhập

Không thể đăng nhập tài khoản do lỗi hệ thống

Khi người dùng ấn đăng nhập, nếu xảy ra lỗi từ hệ thống hoặc lỗi kết nối tới hệ thống, ứng dụng sẽ hiển thị thông báo cho người dùng biết và gợi ý cách giải quyết sự cố nếu có

UC#03 ĐĂNG XUẤT TÀI KHOẢN Độ phức tạp:

Chức năng này cho phép người dùng thoát khỏi trạng thái đăng nhập hệ thống, người dùng sau khi đã đăng xuất sẽ không thể thực hiện chức năng nào nữa và bắt buộc phải đăng nhập lại khi muốn sử dụng hệ thống

Tiền điều kiện Người dùng đã đăng nhập hệ thống

Thư viện ĐH Thăng Long

Người dùng sẽ đăng xuất ra khỏi tài khoản đang đăng nhập trong ứng dụng

Lỗi Người dùng cần thực hiện lại hoặc hủy thao tác ĐẶC TẢ CHỨC NĂNG Luồng sự kiện chính

Chức năng này cho phép người dùng đăng xuất khỏi tài khoản đang đăng nhập trong ứng dụng Sau khi đăng xuất, người dùng sẽ không thể sử dụng các chức năng bên trong ứng dụng cho tới khi đăng nhập trở lại

• Tại màn hình Trang cá nhân, người dùng ấn Đăng xuất tại góc phải để đăng xuất tài khoản

• Ứng dụng sẽ hiển thị dialog yêu cầu người dùng xác nhận đồng ý đăng xuất

• Người dùng xác nhận đăng xuất, ứng dụng sẽ quay lại màn hình đăng nhập

Luồng sự kiện phát sinh/ Kịch bản phát sinh

Không thể đăng xuất tài khoản do lỗi hệ thống

Khi người dùng xác nhận đăng xuất, nếu xảy ra lỗi từ hệ thống hoặc lỗi kết nối tới hệ thống, ứng dụng sẽ hiển thị thông báo cho người dùng biết và gợi ý cách giải quyết sự cố nếu có

UC#04 NHẬN DIỆN CÂY Độ phức tạp:

Mô tả Chức năng này cho phép người dùng chụp ảnh hoặc chọn ảnh cây từ thư viện và hệ thống sẽ trả về kết quả nhận diện

Tiền điều kiện Người dùng đã đăng nhập hệ thống

Thành công Ứng dụng hiển thị kết quả nhận diện

Người dùng cần thực hiện lại hoặc hủy thao tác ĐẶC TẢ CHỨC NĂNG Luồng sự kiện chính

Chức năng này cho phép người dùng chụp ảnh hoặc chọn ảnh cây từ thư viện và hệ thống sẽ trả về kết quả nhận diện

• Tại màn hình chính, người dùng chọn nhận diện từ ảnh

• Ứng dụng hiển thị màn chọn ảnh

• Người dùng có thể chụp ảnh hoặc chọn ảnh từ máy, nhấn xác nhận và đợi kết quả nhận diện từ hệ thống

• Hệ thống nhận ảnh và trả về kết quả

Luồng sự kiện phát sinh/ Kịch bản phát sinh

Không có kết quả nhận diện

Nếu hệ thống không có kết quả nhận diện chính xác, màn hình kết quả hiển thị “Cannot Identify”

Không thể chụp, chọn ảnh do người dùng không cấp quyền cho ứng dụng

Nếu người dùng không cấp quyền chụp, chọn ảnh cho ứng dụng, ứng dụng sẽ hiển thị thông báo cho người dùng biết và yêu cầu người dùng cấp quyền

Không thể nhận diện do lỗi hệ thống

Nếu xảy ra lỗi từ hệ thống hoặc lỗi kết nối tới hệ thống, ứng dụng sẽ hiển thị thông báo cho người dùng biết và gợi ý cách giải quyết sự cố nếu có

Thư viện ĐH Thăng Long

Hình 2.6: Màn hình chụp ảnh Hình 2.7: Màn hình chờ kết quả nhận diện

Hình 2.8: Màn hình kết quả nhận diện Hình 2.9: Màn hình không có kết quả nhận diện

UC#05 TÌM KIẾM CÂY Độ phức tạp:

Trung bình Mô tả Chức năng này cho phép người dùng tìm kiếm cây theo tên

Tiền điều kiện Người dùng đã đăng nhập hệ thống

Thành công Ứng dụng hiển thị kết quả tìm kiếm

Lỗi Người dùng cần thực hiện lại hoặc hủy thao tác ĐẶC TẢ CHỨC NĂNG Luồng sự kiện chính

Chức năng này cho phép người dùng tìm kiếm cây theo tên

• Tại màn hình chính, người dùng chọn tìm kiếm cây

• Ứng dụng hiển thị màn hình tìm kiếm

• Người dùng nhập thông tin

• Hệ thống nhận thông tin và trả về kết quả tìm kiếm theo tên cây

Luồng sự kiện phát sinh/ Kịch bản phát sinh

Không có kết quả tìm kiếm

Nếu hệ thống không có kết quả tìm kiếm, màn hình kết quả hiển thị “No result to show ”

Không thể tìm kiếm do lỗi hệ thống

Nếu xảy ra lỗi từ hệ thống hoặc lỗi kết nối tới hệ thống, ứng dụng sẽ hiển thị thông báo cho người dùng biết và gợi ý cách giải quyết sự cố nếu có

Thư viện ĐH Thăng Long

Hình 2.10: Màn hình tìm kiếm Hình 2.11: Màn hình không có kết quả tìm kiếm

UC#06 TẠO CÂY MỚI Độ phức tạp:

Mô tả Hệ thống cho phép người dùng tạo cây mới vào cơ sở dữ liệu với các thông tin người dùng nhập như tên, ảnh, mô tả, cách chăm sóc

Tiền điều kiện Người dùng đã đăng nhập hệ thống

Cây mà người dùng tạo được cập nhật trên cơ sở dữ liệu Người dùng có thể xem thông tin và tìm kiếm cây đó

Lỗi Người dùng cần thực hiện lại hoặc hủy thao tác ĐẶC TẢ CHỨC NĂNG Luồng sự kiện chính

Hệ thống cho phép người dùng tạo cây mới vào cơ sở dữ liệu với các thông tin người dùng nhập như tên, ảnh, mô tả, cách chăm sóc

● Tại màn hình tìm kiếm, người dùng nhấn nút tạo cây mới

● Hệ thống hiển thị màn hình nhập thông tin cây với các thông tin bao gồm: o Ảnh o Tên người dùng đặt o Tên khoa học o Mô tả o Cách chăm sóc

● Sau khi nhập đủ thông tin, người dùng nhấn xác nhận

● Hệ thống kiểm tra thông tin và cập nhật cây mới vào cơ sở dữ liệu

Luồng sự kiện phát sinh/ Kịch bản phát sinh

Không thể tạo cây mới do lỗi hệ thống

Nếu xảy ra lỗi từ hệ thống hoặc lỗi kết nối tới hệ thống, ứng dụng sẽ hiển thị thông báo cho người dùng biết và gợi ý cách giải quyết sự cố nếu có.

Hình 2.12: Màn hình tạo cây Hình 2.13: Màn hình lỗi tạo cây

Thư viện ĐH Thăng Long

2.5.7 UC#07: Xem thông tin cây

UC#07 XEM THÔNG TIN CÂY Độ phức tạp:

Mô tả Hệ thống cho phép người dùng xem thông tin cây bao gồm tên, ảnh, mô tả, cách chăm sóc cây

Tiền điều kiện Người dùng đã đăng nhập hệ thống

Thành công Ứng dụng hiển thị thông tin cây bao gồm tên, ảnh, mô tả, cách chăm sóc

Lỗi Người dùng cần thực hiện lại hoặc hủy thao tác ĐẶC TẢ CHỨC NĂNG Luồng sự kiện chính

Hệ thống cho phép người dùng xem thông tin cây bao gồm tên, ảnh, mô tả, cách chăm sóc

• Người dùng chọn cây cần xem thông tin

• Hệ thống hiển thị màn hình thông tin cây với các thông tin bao gồm: o Ảnh o Tên khoa học o Tên thông dụng, nguồn gốc, khí hậu thích hợp o Cách chăm sóc (nếu có) o Mô tả

Luồng sự kiện phát sinh/ Kịch bản phát sinh

Không thể xem thông tin do lỗi hệ thống

THIẾT KẾ CHỨC NĂNG, CƠ SỞ DỮ LIỆU VÀ API

Cấu trúc chung

Hình 3.1: Cấu trúc chung của chức năng

– Actor: Tác nhân tham gia hệ thống

– Form: Form là lớp trung gian thể hiện sự tương tác giữa hệ thống và các actor

– Controller: Lớp điều khiển thực hiện chức năng chính của Usecase

– Entity: Lớp thực thể chứa những thông tin tồn tại và được lưu trữ lâu dài trong hệ thống – Database: Cơ sở dữ liệu

Thiết kế một số chức năng

Hình 3.2: Sơ đồ tuần tự chức năng Đăng ký

Thư viện ĐH Thăng Long

Hình 3.3: Sơ đồ tuần tự chức năng Đăng nhập

Hình 3.4: : Sơ đồ tuần tự chức năng Đăng xuất

Hình 3.5: Sơ đồ tuần tự chức năng Nhận diện cây

Hình 3.6: Sơ đồ tuần tự chức năng Tìm kiếm cây

Thư viện ĐH Thăng Long

Hình 3.7: Sơ đồ tuần tự chức năng Tạo cây

3.2.7 UC#07: Xem thông tin cây

Hình 3.8: Sơ đồ tuần tự chức năng Xem thông tin cây

3.2.8 UC#08: Quản lý cây trong bộ sưu tập

Hình 3.9: Sơ đồ tuần tự chức năng Quản lý cây trong bộ sưu tập

3.2.9 UC#09: Xem danh sách cây trong bộ sưu tập

Hình 3.10: Sơ đồ tuần tự chức năng Xem danh sách cây trong bộ sưu tập

Thư viện ĐH Thăng Long

Hình 3.11: Sơ đồ tuần tự chức năng Đặt thông báo

3.2.11 UC#11: Quản lý lịch chăm sóc

Hình 3.12: Sơ đồ tuần tự chức năng Quản lý lịch chăm sóc

Hình 3.13: Sơ đồ tuần tự chức năng Xem bài viết

3.2.13 UC#13: Xem chi tiết bài viết

Hình 3.14: Sơ đồ tuần tự chức năng Xem chi tiết bài viết

Thư viện ĐH Thăng Long

Hình 3.15: Sơ đồ tuần tự chức năng Đăng bài viết

3.2.15 UC#15: Xem trang cá nhân

Hình 3.16: Sơ đồ tuần tự chức năng Xem trang cá nhân

Thiết kế CSDL

Hệ thống được thiết kế nhằm mục đích lưu thông tin người dùng, bài viết và các cây của người dùng Trong đó, thông tin người dùng gồm có tên, email và ảnh đại diện Người dùng có thể thêm, sửa, xoá cây trong bộ sưu tập cá nhân và xem thông tin về cây bao gồm ảnh, tên, mô tả và cách chăm sóc cây Sau khi cây đã được thêm vào bộ sưu tập, người dùng có thể đặt các thông báo tưới nước, bón phân, cắt tỉa và đổi hướng chậu cho cây Các thông báo gồm các thông tin như ngày cuối cùng chăm sóc, ngày tiếp theo chăm sóc, giờ chăm sóc và khoảng cách giữa các ngày chăm sóc Ngoài ra, người dùng có thể xem, yêu thích, bình luận và đăng bài viết lên cộng đồng Thông tin bài viết gồm nội dung, ảnh, số lượt thích và bình luận

3.3.2 Lựa chọn các danh từ làm lớp thực thể hoặc thuộc tính

– Người dùng -> Lớp User: tên, email, ảnh đại diện – Cây -> Lớp Plant: tên, mô tả

– Ảnh cây -> Lớp PlantCustomImageURL – Cách chăm sóc cây -> Lớp CareGuide

– Thông báo tưới nước -> Lớp WaterNotification: ngày cuối cùng chăm sóc, ngày tiếp theo chăm sóc, giờ chăm sóc, khoảng cách giữa các ngày chăm sóc

– Thông báo bón phân-> Lớp FertilizeNotification: ngày cuối cùng chăm sóc, ngày tiếp theo chăm sóc, giờ chăm sóc, khoảng cách giữa các ngày chăm sóc

– Thông báo cắt tỉa -> Lớp PruneNotification: ngày cuối cùng chăm sóc, ngày tiếp theo chăm sóc, giờ chăm sóc, khoảng cách giữa các ngày chăm sóc

– Thông báo đổi hướng chậu -> Lớp RepotNotification: ngày cuối cùng chăm sóc, ngày tiếp theo chăm sóc, giờ chăm sóc, khoảng cách giữa các ngày chăm sóc

– Bài viết -> Lớp Post: nội dung – Ảnh bài viết -> Lớp PostImageLink – Lượt thích bài viết -> Lớp Like – Bình luận bài viết -> Lớp Comment

3.3.3 Xác định quan hệ giữa các lớp thực thể

– Một người dùng có nhiều cây trong bộ sưu tập -> quan hệ giữa User và Plant là 1-n – Một cây có nhiều ảnh -> quan hệ giữa Plant và PlantCustomImageURL là 1-n – Cách chăm sóc là thành phần của một cây -> quan hệ giữa CareGuide và Plant là 1-1

– Thông báo tưới cây là thành phần của một cây -> quan hệ giữa WaterNotification và Plant là 1-1

Thư viện ĐH Thăng Long

63 – Thông báo bón phân là thành phần của một cây -> quan hệ giữa FertilizeNotification và Plant là 1-1

– Thông báo cắt tỉa là thành phần của một cây -> quan hệ giữa PruneNotification và Plant là 1-1

– Thông báo đổi hướng chậu là thành phần của một cây -> quan hệ giữa RepotNotification và Plant là 1-1

– Một người dùng thể đăng nhiều bài viết -> quan hệ giữa User và Post là 1-n – Một bài viết có nhiều ảnh -> quan hệ giữa Post và PostImageLink là 1-n

– Một người dùng có thể thích nhiều bài viết -> quan hệ giữa User và Like là 1-n, quan hệ giữa Post và Like là 1-n

– Một người dùng có thể bình luận nhiều bài viết -> quan hệ giữa User và Comment là 1-n, quan hệ giữa Post và Comment là 1-n

3.3.5 Mô tả tổng quan từng bảng

STT Tên bảng Mô tả

1 User Lưu trữ thông tin người dùng

2 Plant Lưu trữ các cây trong bộ sưu tập của người dùng 3 PlantCustomImageURL Lưu trữ các ảnh cây của người dùng

4 CareGuide Lưu trữ thông tin chăm sóc cây 5 WaterNotification Lưu trữ thông tin thông báo tưới nước 6 FertilizeNotification Lưu trữ thông tin thông báo bón phân 7 RepotNotification Lưu trữ thông tin thông báo đổi hướng cây 8 PruneNotification Lưu trữ thông tin thông báo cắt tỉa

9 Post Lưu trữ các bài viết trong hệ thống 10 PostImageLink Lưu trữ các ảnh bài viết

11 Comment Lưu trữ bình luận bài viết

12 Like Lưu trữ lượt thích bài viết

Bảng 3.1: Danh sách các bảng trong CSDL

Bảng Thuộc tính Kiểu dữ liệu Mô tả

User id STRING Primary key avatarURL STRING Đường dẫn tới ảnh đại diện người dùng email STRING Email người dùng name STRING Tên người dùng

Bảng 3.2: Bảng cơ sở dữ liệu User

Bảng Thuộc tính Kiểu dữ liệu Mô tả

Plant id INT Primary key ownerId STRING Foreign Key title STRING Tên cây imageLink STRING Đường dẫn tới ảnh cây

Thư viện ĐH Thăng Long

65 desc STRING Mô tả cây customName STRING Tên cây người dùng đặt

Bảng 3.3: Bảng cơ sở dữ liệu Plant

Bảng Thuộc tính Kiểu dữ liệu Mô tả

PlantCusto mImageUR L id STRING Primary key plantId INT Foreign Key customImageURL STRING Đường dẫn tới ảnh cây của người dùng

Bảng 3.4: Bảng cơ sở dữ liệu PlantCustomImageURL

Bảng Thuộc tính Kiểu dữ liệu Mô tả

CareGuide id STRING Primary key plantId STRING Foreign Key category STRING Loại cây climate STRING Khí hậu phù hợp common STRING Tên thường gọi latin STRING Tên khoa học family STRING Họ của cây origin STRING Nguồn gốc tempmax INT Nhiệt độ cao nhất cây có thể chịu đựng tempmin INT Nhiệt độ thấp nhất cây có thể chịu đựng ideallight STRING Ánh sáng phù hợp torelatedlight STRING Hướng ánh sáng phù hợp watering STRING Cách tưới phù hợp

Bảng 3.5: Bảng cơ sở dữ liệu CareGuide

Bảng Thuộc tính Kiểu dữ liệu Mô tả

WaterNotifi cation id STRING Primary key plantId INT Foreign Key lastDay TIMESTAMP Ngày cuối cùng cây được chăm sóc nextDayNotify TIMESTAMP Ngày tiếp theo gửi thông báo chăm sóc numberDays INT Khoảng cách ngày chăm sóc timeNotify TIMESTAMP Giờ thông báo

Bảng 3.6: Bảng cơ sở dữ liệu WaterNotification

Bảng Thuộc tính Kiểu dữ liệu Mô tả

FertilizeNot ification id STRING Primary key plantId INT Foreign Key lastDay TIMESTAMP Ngày cuối cùng cây được chăm sóc nextDayNotify TIMESTAMP Ngày tiếp theo gửi thông báo chăm sóc numberDays INT Khoảng cách ngày chăm sóc timeNotify TIMESTAMP Giờ thông báo

Bảng 3.7: Bảng cơ sở dữ liệu FertilizeNotification

Bảng Thuộc tính Kiểu dữ liệu Mô tả

RepotNotifi cation id STRING Primary key plantId INT Foreign Key lastDay TIMESTAMP Ngày cuối cùng chăm sóc cây nextDayNotify TIMESTAMP Ngày tiếp theo gửi thông báo chăm sóc numberDays INT Khoảng cách ngày chăm sóc timeNotify TIMESTAMP Giờ thông báo

Bảng 3.8: Bảng cơ sở dữ liệu RepotNotification

Thư viện ĐH Thăng Long

Bảng Thuộc tính Kiểu dữ liệu Mô tả

PruneNotifi cation id STRING Primary key plantId INT Foreign Key lastDay TIMESTAMP Ngày cuối cùng cây được chăm sóc nextDayNotify TIMESTAMP Ngày tiếp theo gửi thông báo chăm sóc numberDays INT Khoảng cách ngày chăm sóc timeNotify TIMESTAMP Giờ thông báo

Bảng 3.9: Bảng cơ sở dữ liệu PruneNotification

Bảng Thuộc tính Kiểu dữ liệu Mô tả

Post id STRING Primary key ownerId STRING Foreign Key ownerName STRING Tên người đăng bài viết ownerAvtImageLink STRING Đường dẫn tới ảnh đại diện của người đăng bài viết createdDate TIMESTAMP Ngày đăng bài viết content STRING Nội dung bài viết

Bảng 3.10: Bảng cơ sở dữ liệu Post

Bảng Thuộc tính Kiểu dữ liệu Mô tả

PostImageL ink id STRING Primary key postId STRING Foreign Key imageLink STRING Đường dẫn tới ảnh bài viết

Bảng 3.11: Bảng cơ sở dữ liệu PostImageLink

Bảng Thuộc tính Kiểu dữ liệu Mô tả

Comment id STRING Primary key postId STRING Foreign Key ownerId STRING Foreign Key ownerName STRING Tên người bình luận ownerAvtImageLink STRING Đường dẫn tới ảnh đại diện của người bình luận createdDate TIMESTAMP Ngày bình luận bài viết content STRING Nội dung bình luận

Bảng 3.12: Bảng cơ sở dữ liệu Comment

Bảng Thuộc tính Kiểu dữ liệu Mô tả

Like id STRING Primary key postId STRING Foreign Key ownerId STRING Foreign Key

Bảng 3.13: Bảng cơ sở dữ liệu Like

Thiết kế API

3.4.1 Cấu trúc tổng thể của API

API sử dụng cấu trúc với 2 thành phần chính là Controller và Model Phần View được lược bỏ Lúc này, phần Controller chỉ trả về các dữ liệu Json

Phần Controller được chia thành các Action khác nhau Mỗi Action thực hiện môn nghiệp vụ duy nhất trong nhóm nghiệp vụ được bao bọc bởi Controller

Về kiểu HTTP Request, API có hỗ trợ Restful Api Qua đó các router của API đa số sẽ sử dụng danh từ và tác thao tác với API sẽ phụ thuộc vào 4 kiểu Request là: GET; POST; PUT, DELETE và tham số đường dẫn truyền vào

3.4.2 Api hệ thống sử dụng

Người dùng có thể nhận diện cây từ ảnh, tìm kiếm cây theo tên, xem thông tin về cây

Nếu như cây người dùng cần không có trong cơ sở dữ liệu, người dùng có thể tự tạo cây và các thông tin về cây để cập nhật vào cơ sở dữ liệu chung

Thư viện ĐH Thăng Long

/plant/predict Mục đích: Nhận diện cây từ ảnh

Phương thức: POST Tham số:

• image (body) - kiểu base64, bắt buộc

/plant/search Mục đích: Tìm kiếm cây theo tên

• keyword (body) - kiểu string, bắt buộc

/plant/info/{id} Mục đích: Lấy thông tin cây theo id

• id: kiểu int, bắt buộc

/newId Mục đích: Tạo id cây mới trong cơ sở dữ liệu

/createPlant Mục đích: Tạo cây mới trong cơ sở dữ liệu

• id (body) – kiểu string, bắt buộc

• ownerId (body) - kiểu string, bắt buộc

• latin (body) - kiểu string, bắt buộc

• desc (body) - kiểu string, bắt buộc

• image_link (body) - kiểu string, bắt buộc

• tempmax (body) - kiểu int, bắt buộc

• tempmin (body) - kiểu int, bắt buộc

• ideallight (body) - kiểu string, bắt buộc

• toleratedlight (body) - kiểu string, bắt buộc

• watering (body) - kiểu string, bắt buộc

Bảng 3.14: API hệ thống sử dụng

CÀI ĐẶT VÀ TRIỂN KHAI HỆ THỐNG

Môi trường cài đặt

– Hệ điều hành iOS phiên bản 14.0 trở lên – Bộ nhớ cần ít nhất 300Mb

– Kết nối internet thông qua Wi-Fi hoặc dữ liệu di động

Ngày đăng: 04/09/2024, 17:05

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] "Swift (ngôn ngữ lập trình)," [Online]. Available: https://vi.wikipedia.org/wiki/Swift_(ngôn_ngữ_lập_trình). [Accessed 28 01 2024] Sách, tạp chí
Tiêu đề: Swift (ngôn ngữ lập trình)
[2] "Python (ngôn ngữ lập trình)," [Online]. Available: https://vi.wikipedia.org/wiki/Python_(ngôn_ngữ_lập_trình). [Accessed 16 01 2024] Sách, tạp chí
Tiêu đề: Python (ngôn ngữ lập trình)
[3] "UIKit Framework," [Online]. Available: https://developer.apple.com/documentation/uikit. [Accessed 03 02 2024] Sách, tạp chí
Tiêu đề: UIKit Framework
[4] "What is PyTorch, and How Does It Work: All You Need to Know," [Online]. Available: https://www.simplilearn.com/what-is-pytorch-article. [Accessed 27 02 2024] Sách, tạp chí
Tiêu đề: What is PyTorch, and How Does It Work: All You Need to Know
[5] "Flask (web framework)," [Online]. Available: https://en.wikipedia.org/wiki/Flask_(web_framework). [Accessed 13 01 2024] Sách, tạp chí
Tiêu đề: Flask (web framework)
[6] "MediaWiki API," [Online]. Available: https://www.mediawiki.org/wiki/MediaWiki. [Accessed 13 01 2024] Sách, tạp chí
Tiêu đề: MediaWiki API
[7] "Firebase Authentication," [Online]. Available: https://firebase.google.com/docs/auth. [Accessed 20 01 2024] Sách, tạp chí
Tiêu đề: Firebase Authentication
[8] "Cloud Firestore," [Online]. Available: https://firebase.google.com/docs/firestore. [Accessed 20 01 2024] Sách, tạp chí
Tiêu đề: Cloud Firestore
[9] "Cloud Storage for Firebase," [Online]. Available: https://firebase.google.com/docs/storage. [Accessed 20 01 2024] Sách, tạp chí
Tiêu đề: Cloud Storage for Firebase
[10] "Ngrok," [Online]. Available: https://kb.pavietnam.vn/ngrok-su-dung-ngrok-cho-du-an-tu-localhost-ra-ngoai-internet.html.. [Accessed 15 01 2024] Sách, tạp chí
Tiêu đề: Ngrok
[11] "Mô hình MVVM," [Online]. Available: https://images.viblo.asia/52a8cf0b-b5fb-457b-967f-ce406975b2d0.png. [Accessed 27 01 2024] Sách, tạp chí
Tiêu đề: Mô hình MVVM
[12] "Tìm hiểu về mô hình MVVM," [Online]. Available: https://viblo.asia/p/tim-hieu-ve-mo-hinh-mvvm-maGK7vW95j2. [Accessed 27 01 2024] Sách, tạp chí
Tiêu đề: Tìm hiểu về mô hình MVVM
[13] C. Garcin and A. Joly and P. Bonnet and A. Affouard and JC Lombardo and M. Chouet and M. Servajean and T. Lorieul and J. Salmon, "Pl@ntNet-300K: a plant image dataset with high label ambiguity and a long-tailed distribution," in NeurIPS Datasets and Benchmarks 2021, 2021 Sách, tạp chí
Tiêu đề: Pl@ntNet-300K: a plant image dataset with high label ambiguity and a long-tailed distribution
[14] C. Garcin and A. Joly and P. Bonnet and A. Affouard and \JC Lombardo and M. Chouet and M. Servajean and T. Lorieul and J. Salmon, "Ví dụ về bộ dữ liệu có hình dáng khác nhau nhưng cùng 1 loài," in NeurIPS Datasets and Benchmarks 2021, 2021 Sách, tạp chí
Tiêu đề: Ví dụ về bộ dữ liệu có hình dáng khác nhau nhưng cùng 1 loài
[15] C. Garcin and A. Joly and P. Bonnet and A. Affouard and \JC Lombardo and M. Chouet and M. Servajean and T. Lorieul and J. Salmon, "Ví dụ về bộ dữ liệu có hình dáng giống nhau nhưng khác loài," in NeurIPS Datasets and Benchmarks 2021, 2021 Sách, tạp chí
Tiêu đề: Ví dụ về bộ dữ liệu có hình dáng giống nhau nhưng khác loài
[16] "Tổng quan về Neural Network(mạng Nơ Ron nhân tạo) là gì?," [Online]. Available: https://itnavi.com.vn/blog/neural-network-la-gi. [Accessed 20 03 2024] Sách, tạp chí
Tiêu đề: Tổng quan về Neural Network(mạng Nơ Ron nhân tạo) là gì
[17] N. Tyagi, "What is Cross-Entropy in Machine learning?," [Online]. Available: https://medium.com/analytics-steps/what-is-cross-entropy-in-machine-learning-10479639ec28. [Accessed 28 03 2024] Sách, tạp chí
Tiêu đề: What is Cross-Entropy in Machine learning
[18] "Gradient Descent," [Online]. Available: https://machinelearningcoban.com/2017/01/16/gradientdescent2/. [Accessed 31 03 2024] Sách, tạp chí
Tiêu đề: Gradient Descent
[19] T. T. Trực, "Các phương pháp tránh Overfitting," [Online]. Available: https://viblo.asia/p/cac-phuong-phap-tranh-overfitting-gDVK24AmlLj. [Accessed 26 03 2024] Sách, tạp chí
Tiêu đề: Các phương pháp tránh Overfitting
[20] C. Garcin and A. Joly and P. Bonnet and A. Affouard and \JC Lombardo and M. Chouet and M. Servajean and T. Lorieul and J. Salmon, "So sánh top1 accuracy và macro- average top1 accuracy của một số mô hình học máy," in NeurIPS Datasets and Benchmarks 2021, 2021 Sách, tạp chí
Tiêu đề: So sánh top1 accuracy và macro-average top1 accuracy của một số mô hình học máy

HÌNH ẢNH LIÊN QUAN

Hình 1.3: Ví dụ về bộ dữ liệu có hình dáng khác nhau nhưng cùng 1 loài [14] - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 1.3 Ví dụ về bộ dữ liệu có hình dáng khác nhau nhưng cùng 1 loài [14] (Trang 26)
Hình 1.4: Ví dụ về bộ dữ liệu có hình dáng giống nhau nhưng khác loài [15] - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 1.4 Ví dụ về bộ dữ liệu có hình dáng giống nhau nhưng khác loài [15] (Trang 26)
Hình 1.5: So sánh top1 accuracy và macro-average top1 accuracy của một số mô hình học máy [20] - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 1.5 So sánh top1 accuracy và macro-average top1 accuracy của một số mô hình học máy [20] (Trang 28)
Hình 2.1: Sơ đồ Usecase hệ thống - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 2.1 Sơ đồ Usecase hệ thống (Trang 32)
Hình 2.5: Màn hình lỗi đăng nhập/đăng ký - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 2.5 Màn hình lỗi đăng nhập/đăng ký (Trang 37)
Hình 2.6: Màn hình chụp ảnh  Hình 2.7: Màn hình chờ kết quả nhận diện - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 2.6 Màn hình chụp ảnh Hình 2.7: Màn hình chờ kết quả nhận diện (Trang 41)
Hình 2.15: Màn hình chỉnh sửa thông tin  Hình 2.16: Màn hình lỗi thêm cây vào bộ sưu - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 2.15 Màn hình chỉnh sửa thông tin Hình 2.16: Màn hình lỗi thêm cây vào bộ sưu (Trang 48)
Hình 2.26: Màn hình cộng đồng  Hình 2.27: Màn hình lỗi lấy thông tin bài viết - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 2.26 Màn hình cộng đồng Hình 2.27: Màn hình lỗi lấy thông tin bài viết (Trang 56)
Hình 2.32: Màn hình trang cá nhân - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 2.32 Màn hình trang cá nhân (Trang 61)
Hình 3.2: Sơ đồ tuần tự chức năng Đăng ký - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.2 Sơ đồ tuần tự chức năng Đăng ký (Trang 62)
Hình 3.3: Sơ đồ tuần tự chức năng Đăng nhập - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.3 Sơ đồ tuần tự chức năng Đăng nhập (Trang 63)
Hình 3.4: : Sơ đồ tuần tự chức năng Đăng xuất - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.4 : Sơ đồ tuần tự chức năng Đăng xuất (Trang 63)
Hình 3.5: Sơ đồ tuần tự chức năng Nhận diện cây - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.5 Sơ đồ tuần tự chức năng Nhận diện cây (Trang 64)
Hình 3.6: Sơ đồ tuần tự chức năng Tìm kiếm cây - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.6 Sơ đồ tuần tự chức năng Tìm kiếm cây (Trang 64)
Hình 3.7: Sơ đồ tuần tự chức năng Tạo cây - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.7 Sơ đồ tuần tự chức năng Tạo cây (Trang 65)
Hình 3.8: Sơ đồ tuần tự chức năng Xem thông tin cây - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.8 Sơ đồ tuần tự chức năng Xem thông tin cây (Trang 65)
Hình 3.9: Sơ đồ tuần tự chức năng Quản lý cây trong bộ sưu tập - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.9 Sơ đồ tuần tự chức năng Quản lý cây trong bộ sưu tập (Trang 66)
Hình 3.10: Sơ đồ tuần tự chức năng Xem danh sách cây trong bộ sưu tập - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.10 Sơ đồ tuần tự chức năng Xem danh sách cây trong bộ sưu tập (Trang 66)
Hình 3.11: Sơ đồ tuần tự chức năng Đặt thông báo - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.11 Sơ đồ tuần tự chức năng Đặt thông báo (Trang 67)
Hình 3.12: Sơ đồ tuần tự chức năng Quản lý lịch chăm sóc - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.12 Sơ đồ tuần tự chức năng Quản lý lịch chăm sóc (Trang 67)
Hình 3.13: Sơ đồ tuần tự chức năng Xem bài viết - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.13 Sơ đồ tuần tự chức năng Xem bài viết (Trang 68)
Hình 3.14: Sơ đồ tuần tự chức năng Xem chi tiết  bài viết - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.14 Sơ đồ tuần tự chức năng Xem chi tiết bài viết (Trang 68)
Hình 3.15: Sơ đồ tuần tự chức năng Đăng bài viết - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.15 Sơ đồ tuần tự chức năng Đăng bài viết (Trang 69)
Hình 3.16: Sơ đồ tuần tự chức năng Xem trang cá nhân - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.16 Sơ đồ tuần tự chức năng Xem trang cá nhân (Trang 69)
Hình 3.17: Lược đồ CSDL - lập trình ứng dụng nhận diện cây trên nền tảng
Hình 3.17 Lược đồ CSDL (Trang 71)
Bảng  Thuộc tính  Kiểu dữ liệu  Mô tả - lập trình ứng dụng nhận diện cây trên nền tảng
ng Thuộc tính Kiểu dữ liệu Mô tả (Trang 74)
Bảng  Thuộc tính  Kiểu dữ liệu  Mô tả - lập trình ứng dụng nhận diện cây trên nền tảng
ng Thuộc tính Kiểu dữ liệu Mô tả (Trang 76)
Bảng 3.14: API hệ thống sử dụng - lập trình ứng dụng nhận diện cây trên nền tảng
Bảng 3.14 API hệ thống sử dụng (Trang 77)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w