● Xây dựng bộ phân loại hình ảnh tùy chỉnh bằng việc đào tạo mô hình TensorFlow hiện có:○ Ứng dụng trí tuệ nhân tạo và học máy nhằm cải thiện độ chính xác và hiệu quả của các hệ thống ph
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
Hoàng Tuấn Linh 2021607036
Lê Hữu Dũng 2021608432
Hà Nội, 2024
Trang 2LỜI CẢM ƠN
Trước tiên, nhóm chúng em xin gửi lời cảm ơn chân thành và sâu sắc nhất
đến thầy T.S Hà Mạnh Đào, giảng viên môn học Một số công nghệ phát triển
phần mềm Trong suốt quá trình thực hiện bài tập và báo cáo này, thầy đã luôntận tình hướng dẫn, giải đáp những thắc mắc và gợi mở cho chúng em nhiềuhướng tiếp cận mới mẻ Những kiến thức mà thầy truyền đạt không chỉ giúpnhóm hiểu rõ hơn về các công nghệ phát triển phần mềm mà còn tạo tiền đềquan trọng để chúng em áp dụng vào các bài toán thực tế
Sự quan tâm, nhiệt huyết và những ý kiến đóng góp quý báu từ thầykhông chỉ giúp chúng em hoàn thành bài báo cáo một cách tốt nhất mà còn khơidậy niềm đam mê nghiên cứu, sáng tạo trong lĩnh vực công nghệ Thầy khôngchỉ là người hướng dẫn mà còn là người truyền cảm hứng, giúp chúng em vữngtin hơn vào khả năng của mình
Chúng em nhận thức rằng, sự thành công của báo cáo này là kết quả của
cả một quá trình học hỏi, thử nghiệm và điều chỉnh, và trong quá trình đó, sự chỉdẫn tận tình của thầy đóng vai trò rất quan trọng Từng lời khuyên, từng phảnhồi của thầy đều là kim chỉ nam giúp nhóm khắc phục khó khăn và cải thiệnchất lượng bài làm
Một lần nữa, nhóm chúng em xin bày tỏ lòng biết ơn sâu sắc tới thầy HàMạnh Đào Chúng em sẽ luôn ghi nhớ những kiến thức, kinh nghiệm mà thầy đãtruyền đạt và hy vọng sẽ tiếp tục nhận được sự chỉ dẫn từ thầy trong nhữngchặng đường học tập và nghiên cứu sắp tới
Chúng em xin chân thành cảm ơn!
Nhóm sinh viên thực hiện
Nhóm 15
Trang 3MỤC LỤC
LỜI CẢM ƠN 2
MỤC LỤC 3
DANH MỤC HÌNH ẢNH 5
MỞ ĐẦU 8
1 Lý do chọn đề tài 8
2 Mục đích 8
3 Đối tượng và phạm vi nghiên cứu 9
4 Ý nghĩa khoa học và thực tiễn 10
5 Cấu trúc của báo cáo 11
CHƯƠNG 1 NGHIÊN CỨU THIẾT KẾ, XÂY DỰNG VÀ TRIỂN KHAI ỨNG DỤNG MICROSERVICE VỚI DỊCH VỤ THU THẬP VÀ PHÂN LOẠI ĐÁNH GIÁ SẢN PHẨM 12
1.1 PHƯƠNG PHÁP THIẾT KẾ DDD 12
1.1.1 Giới thiệu 12
1.1.2 Các khái niệm cơ bản của DDD 12
1.1.3 Thiết kế trong DDD 14
1.1.4 Quá trình triển khai DDD 14
1.2 Cấu trúc chương trình, thiết kế DDD của chương trình, cài đặt và chạy chương trình 14
1.2.1 Cấu trúc chương trình 14
1.2.2 Thiết kế DDD của chương trình 17
1.2.3 Cài đặt và chạy chương trình 18
1.3 Triển khai dự án với Docker Swarm hoặc Kubenetes hoặc Docker với Kubenetes 20
1.3.1 Kiến thức 20
1.3.2 Triển khai dự án 23
CHƯƠNG 2 XÂY DỰNG BỘ PHÂN LOẠI HÌNH ẢNH BẰNG CÁCH ĐÀO TẠO LẠI MÔ HÌNH TENSORFLOW HIỆN CÓ VỚI ML.NET 25
2.1 TỔNG QUAN VỀ ĐỀ TÀI 25
2.1.1 Các khái niệm cơ bản 25
2.1.2 Tổng quan bài toán 29
2.2 CẤU TRÚC CHƯƠNG TRÌNH VÀ CÁC HÀM API SỬ DỤNG 32
2.2.1 Cấu trúc chương trình 32
2.2.2 Các hàm API sử dụng 35
2.3 CÀI ĐẶT VÀ CHẠY CHƯƠNG TRÌNH 38
Trang 42.3.1 Khởi tạo chương trình 38
2.3.2 Xây dựng cấu trúc chương trình 41
2.3.3 Xây dựng, đào tạo và đánh giá mô hình 44
2.3.4 Chạy chương trình 45
2.4 KẾT QUẢ CHẠY CHƯƠNG TRÌNH 47
2.4.1 Kết quả đào tạo mô hình 47
2.4.2 Kết quả đánh giá mô hình 47
2.4.3 Kết quả phân loại hình ảnh 47
CHƯƠNG 3 TÌM HIỂU VỀ BLOCKCHAIN VÀ XÂY DỰNG ỨNG DỤNG NGÂN HÀNG 49
3.1 TỔNG QUAN VỀ ĐỀ TÀI 49
3.1.1 Các khái niệm cơ bản 49
3.1.2 Tổng quan về bài toàn 54
3.2 CÀI ĐẶT VÀ CHẠY CHƯƠNG TRÌNH 60
3.2.1 Khởi tạo dự án 60
3.2.2 Xây dựng và biên dịch hợp đồng thông minh 64
3.2.3 Triển khai hợp đồng thông minh 68
3.2.4 Xây dựng frontend React cho Dapp 75
3.3 KẾT QUẢ CHẠY CHƯƠNG TRÌNH 89
3.3.1 Kết nối ví Metamask 89
3.3.2 Chức năng gửi tiền 90
3.3.3 Chức năng rút tiền 92
KẾT LUẬN 94
TÀI LIỆU THAM KHẢO 96
Trang 6Hình 2 31 Dữ liệu đào tạo mô hình 47
Trang 7Hình 3 33 Khởi chạy Metamask 68
Hình 3 35 Lấy private key của tài khoản trên mạng Ganache 70
Hình 3 47 Hàm connectWallet trong file walletFunction.js 77 Hình 3 48 Hàm getWalletStatus trong file walletFuction.js 78
Trang 8MỞ ĐẦU
1 Lý do chọn đề tài
Trong thời đại công nghệ 4.0, việc ứng dụng công nghệ thông tin vào cáclĩnh vực khác nhau của đời sống và sản xuất đã trở thành một xu hướng tất yếu.Các công nghệ tiên tiến như microservice, trí tuệ nhân tạo (AI), và blockchainđang ngày càng chứng minh vai trò quan trọng trong việc tối ưu hóa quy trình
và nâng cao hiệu quả Tuy nhiên, thực tế cho thấy việc triển khai và ứng dụngcác công nghệ này tại Việt Nam vẫn còn nhiều hạn chế, đặc biệt là trong việckhai thác tối đa tiềm năng của chúng để giải quyết các vấn đề thực tiễn
Microservice, một phương pháp tiếp cận hiện đại trong thiết kế hệ thống,mang lại tính linh hoạt, khả năng mở rộng và bảo trì dễ dàng Trong khi đó, trítuệ nhân tạo và học máy (machine learning) cung cấp các công cụ mạnh mẽ đểphân tích dữ liệu và tự động hóa các tác vụ phức tạp, đặc biệt là trong việc phânloại và xử lý dữ liệu hình ảnh Blockchain, với những đặc tính độc đáo như tínhminh bạch và bảo mật, đang tạo nên một cuộc cách mạng trong các lĩnh vực tàichính, quản lý dữ liệu và giao dịch trực tuyến
Việc nghiên cứu đề tài này không chỉ nhằm khai thác các ưu điểm củatừng công nghệ mà còn hướng đến việc tích hợp chúng vào các giải pháp thựctiễn, đáp ứng nhu cầu ngày càng cao trong quản lý, sản xuất và dịch vụ Thôngqua nghiên cứu, chúng tôi mong muốn không chỉ tạo ra các ứng dụng hữu ích
mà còn góp phần thúc đẩy sự phát triển công nghệ tại Việt Nam, nâng cao nănglực cạnh tranh của quốc gia trong lĩnh vực công nghệ thông tin
2 Mục đích
Mục đích chính của nghiên cứu bao gồm:
● Phát triển và triển khai một ứng dụng microservice hiện đại:
○ Xây dựng một hệ thống thu thập và phân loại đánh giá sản phẩm từngười dùng dựa trên phản hồi thực tế Hệ thống này không chỉ hỗtrợ doanh nghiệp hiểu rõ hơn về nhu cầu và mong muốn của kháchhàng mà còn cải thiện chất lượng dịch vụ và sản phẩm
○ Microservice được chọn làm kiến trúc chính nhờ tính linh hoạt, dễbảo trì và khả năng mở rộng, đảm bảo rằng hệ thống có thể pháttriển theo yêu cầu của doanh nghiệp
Trang 9● Xây dựng bộ phân loại hình ảnh tùy chỉnh bằng việc đào tạo mô hình TensorFlow hiện có:
○ Ứng dụng trí tuệ nhân tạo và học máy nhằm cải thiện độ chính xác
và hiệu quả của các hệ thống phân loại hình ảnh Mô hình được đàotạo lại để xử lý các tác vụ chuyên biệt, đáp ứng nhu cầu phân loạitrong các lĩnh vực như y tế (chẩn đoán hình ảnh), sản xuất (kiểmtra chất lượng sản phẩm), và giáo dục (phân tích nội dung họcliệu)
○ Việc sử dụng ML.NET không chỉ giúp tối ưu hóa quy trình đào tạo
mà còn tích hợp hiệu quả với các nền tảng khác, tạo ra các hệ thốngthông minh và dễ sử dụng
● Nghiên cứu về công nghệ blockchain và xây dựng một ứng dụng ngân hàng với độ bảo mật cao:
○ Blockchain được xem như một giải pháp tối ưu cho các vấn đề bảomật và minh bạch trong giao dịch tài chính Nghiên cứu tập trungvào việc xây dựng một ứng dụng ngân hàng phi tập trung, nơi màcác giao dịch được thực hiện một cách an toàn và minh bạch
○ Ứng dụng ngân hàng này không chỉ cung cấp một nền tảng giaodịch tiện lợi mà còn nâng cao lòng tin của người dùng đối với cácgiải pháp tài chính kỹ thuật số, mở ra cơ hội ứng dụng blockchainvào các lĩnh vực khác như quản lý dữ liệu, bảo hiểm, và thươngmại điện tử
Tóm lại, mục đích của nghiên cứu không chỉ dừng lại ở việc tìm hiểu vàứng dụng công nghệ mà còn hướng đến việc tạo ra các giải pháp thực tiễn, giúpgiải quyết các vấn đề thực tế và nâng cao hiệu quả trong quản lý và sản xuất.Nghiên cứu đặt trọng tâm vào việc tích hợp các công nghệ hiện đại vào các kịchbản ứng dụng cụ thể, từ đó mở ra những hướng phát triển mới trong tương lai
3 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu: Nghiên cứu tập trung vào ba lĩnh vực công nghệ chính:
● Microservice: Sử dụng Spring Boot và Kafka để xây dựng các hệ thốngphân tán, có khả năng mở rộng và dễ bảo trì, đặc biệt trong việc thu thập
và phân loại đánh giá sản phẩm từ khách hàng
● Trí tuệ nhân tạo (AI): Sử dụng ML.NET để đào tạo lại mô hìnhTensorFlow hiện có, tạo ra một hệ thống phân loại hình ảnh tùy chỉnh với
Trang 10độ chính xác cao, nhằm giải quyết các bài toán thực tế như nhận diệnhình ảnh trong các lĩnh vực y tế, giáo dục và sản xuất.
● Blockchain: Sử dụng Solidity để phát triển các ứng dụng phi tập trung(DApps), trong đó tập trung vào xây dựng một ứng dụng ngân hàng vớikhả năng bảo mật dữ liệu cao và minh bạch trong các giao dịch tài chính
Phạm vi nghiên cứu: Nghiên cứu được thực hiện với ba nội dung chính:
● Ứng dụng microservice: Phân tích yêu cầu, thiết kế kiến trúc, và triểnkhai dịch vụ thu thập và phân loại đánh giá sản phẩm, đảm bảo khả năngtích hợp với các hệ thống hiện có
● Trí tuệ nhân tạo với ML.NET: Đào tạo lại mô hình TensorFlow để nângcao hiệu suất phân loại hình ảnh, thực hiện các thử nghiệm trên dữ liệuthực tế và đánh giá hiệu quả của mô hình cải tiến
● Blockchain: Phát triển một ứng dụng ngân hàng sử dụng công nghệblockchain, thực hiện các thử nghiệm về tính bảo mật và hiệu suất giaodịch trong môi trường mô phỏng trước khi áp dụng thực tế
Phạm vi nghiên cứu bao gồm việc áp dụng các công nghệ trên vào môi trường
mô phỏng để đảm bảo tính khả thi và khả năng triển khai, đồng thời đưa ra cáckhuyến nghị cho việc ứng dụng vào thực tế trong tương lai
4 Ý nghĩa khoa học và thực tiễn
Ý nghĩa khoa học: Nghiên cứu đóng góp vào việc mở rộng tri thức trong
các lĩnh vực công nghệ thông tin, trí tuệ nhân tạo và blockchain Qua đó, cungcấp một cơ sở lý thuyết và thực nghiệm để phát triển các giải pháp công nghệtiên tiến
Ý nghĩa thực tiễn: Các kết quả nghiên cứu mang lại những lợi ích thiết
thực, bao gồm:
● Hỗ trợ doanh nghiệp cải thiện chất lượng sản phẩm và dịch vụ dựa trênphân tích đánh giá của khách hàng
● Tăng cường hiệu quả trong việc xử lý và phân loại dữ liệu hình ảnh, phục
vụ cho các ứng dụng chuyên ngành như y tế hoặc sản xuất
● Cung cấp một giải pháp ngân hàng dựa trên blockchain có khả năng bảomật và minh bạch, góp phần xây dựng niềm tin của người dùng vào cácdịch vụ tài chính số hóa
Trang 115 Cấu trúc của báo cáo
Báo cáo được chia thành 3 nội dung chính, mỗi nội dung phản ánh một trọngtâm nghiên cứu cụ thể:
● Phần 1: Nghiên cứu, xây dựng và triển khai ứng dụng microservice với
dịch vụ thu thập và phân loại đánh giá sản phẩm Phần này đi sâu vàocách tiếp cận microservice, từ phân tích yêu cầu, thiết kế kiến trúc, đếntriển khai thực tiễn
● Phần 2: Đào tạo lại mô hình TensorFlow hiện có để tạo bộ phân loại hình
ảnh tùy chỉnh bằng ML.NET Nội dung bao gồm việc đánh giá mô hìnhhiện tại, cải thiện hiệu năng, và triển khai trên dữ liệu thực tế
● Phần 3: Tìm hiểu về blockchain và xây dựng ứng dụng ngân hàng Phần
này tập trung vào cơ sở lý thuyết của blockchain, thiết kế giải pháp ứngdụng, và thử nghiệm tính khả thi trong môi trường thực tế
Nội dung báo cáo được trình bày một cách chi tiết nhằm mang lại cái nhìn tổngquan và sâu sắc về từng phần, đồng thời liên kết chúng thành một tổng thể hàihòa Qua đó, báo cáo không chỉ cung cấp một nền tảng lý thuyết vững chắc màcòn mở ra các hướng nghiên cứu và ứng dụng trong tương lai
Trang 12CHƯƠNG 1 NGHIÊN CỨU THIẾT KẾ, XÂY DỰNG VÀ TRIỂN KHAI ỨNG DỤNG MICROSERVICE VỚI DỊCH VỤ THU THẬP VÀ PHÂN
LOẠI ĐÁNH GIÁ SẢN PHẨM 1.1 PHƯƠNG PHÁP THIẾT KẾ DDD
1.1.1 Giới thiệu
1.1.1.1 Tổng quan về DDD
Domain-Driven Design (DDD) là một phương pháp tiếp cận trong thiết
kế phần mềm, nhấn mạnh vào việc xây dựng hệ thống dựa trên sự hiểu biết sâusắc về domain (lĩnh vực nghiệp vụ) mà hệ thống đó phục vụ Phương pháp nàyđược giới thiệu bởi Eric Evans vào năm 2003 với mục tiêu giải quyết các vấn đềphức tạp trong phần mềm bằng cách mô hình hóa chặt chẽ các khái niệm nghiệpvụ
1.1.1.2 Tầm quan trọng của DDD trong phát triển phần mềm.
- Giải quyết nghiệp vụ phức tạp: DDD giúp mô hình hóa chính xác các quytrình nghiệp vụ, đảm bảo phần mềm phản ánh đúng thực tế
- Tăng tính linh hoạt và mở rộng: Hệ thống được chia thành các BoundedContext, phát triển độc lập, dễ thay đổi
- Cải thiện chất lượng mã nguồn: Mã nguồn rõ ràng, dễ bảo trì, phản ánhtrực tiếp các khái niệm nghiệp vụ
- Tăng hiệu suất giao tiếp: Sử dụng Ubiquitous Language giúp đội ngũ pháttriển và chuyên gia nghiệp vụ hiểu nhau tốt hơn
- Thích nghi với sự thay đổi: Hệ thống dễ dàng cập nhật khi nghiệp vụ thayđổi
- Giảm rủi ro: Kiểm soát sự phức tạp, giảm lỗi thiết kế và lỗi nghiệp vụ
- Hỗ trợ kiến trúc hiện đại: Phù hợp với Microservices và Event-DrivenArchitecture
1.1.2 Các khái niệm cơ bản của DDD
1.1.2.1 Domain (Lĩnh vực)
- Domain là phạm vi kinh doanh hoặc lĩnh vực hoạt động mà phần mềmđược xây dựng để giải quyết Đây là nơi tập trung các vấn đề và cơ hộicủa hệ thống
1.1.2.2 Entity (Thực thể)
- Entity là một khái niệm cơ bản trong DDD, đại diện cho các đối tượngtrong domain có danh tính duy nhất và có thể thay đổi trạng thái theo thờigian
Trang 131.1.2.3 Value Object (Đối tượng giá trị)
- Value Object là một trong những khái niệm cốt lõi của DDD Đây là cácđối tượng được xác định dựa trên giá trị mà chúng đại diện, chứ khôngphải danh tính riêng
1.1.2.4 Aggregate (Tập hợp)
- Aggregate là một nhóm các đối tượng (thường là Entity và Value Object)liên kết với nhau, được quản lý như một đơn vị duy nhất Aggregate giúpkiểm soát sự nhất quán của dữ liệu trong một phần cụ thể của domain
1.1.2.5 Repository (Kho lưu trữ)
- Repository là một khái niệm quan trọng trong DDD, dùng để quản lý vàtruy xuất các Aggregate từ cơ sở dữ liệu hoặc bất kỳ nguồn lưu trữ nàokhác Nó đóng vai trò như một trung gian giữa domain và các hệ thốnglưu trữ (ví dụ: cơ sở dữ liệu)
1.1.2.6 Service (Dịch vụ)
- Trong DDD, Service là một khái niệm quan trọng dùng để đại diện chomột đối tượng hoặc thành phần chịu trách nhiệm xử lý các thao tácnghiệp vụ mà không thuộc về bất kỳ Entity hoặc Value Object nào CácService thường đóng vai trò như một "đối tượng bên ngoài" để xử lý cáclogic nghiệp vụ, giúp hệ thống trở nên linh hoạt và dễ quản lý
1.1.2.7 Bounded Context (Ngữ cảnh giới hạn)
- Bounded Context là một khái niệm quan trọng trong DDD, chỉ ra phạm vitrong đó một mô hình domain cụ thể và ngôn ngữ chung (UbiquitousLanguage) được áp dụng một cách nhất quán Mỗi Bounded Context cóthể có một mô hình nghiệp vụ riêng biệt, không bị xung đột với các ngữcảnh khác trong hệ thống
1.1.2.8 Ubiquitous Language (Ngôn ngữ chung)
- Ubiquitous Language là một ngôn ngữ thống nhất được sử dụng giữa cácthành viên trong đội ngũ phát triển phần mềm và các chuyên gia nghiệp
vụ (business experts) Mục tiêu của Ubiquitous Language là đảm bảorằng mọi người cùng sử dụng một từ vựng, các khái niệm và định nghĩagiống nhau khi giao tiếp về hệ thống, giúp giảm thiểu sự hiểu lầm và tăngtính chính xác trong việc mô hình hóa domain (lĩnh vực nghiệp vụ)
Trang 141.1.3 Thiết kế trong DDD
1.1.3.1 Strategic Design (Thiết kế chiến lược)
- Strategic Design trong DDD là một cách tiếp cận tập trung vào việc địnhhình cấu trúc tổng thể của hệ thống, phân chia các phần mềm thành cácBounded Context và xác định cách chúng tương tác với nhau Mục tiêucủa Strategic Design là giúp các nhóm phát triển và các bên liên quanhiểu rõ phạm vi và các ưu tiên của domain, đảm bảo rằng các mô hìnhnghiệp vụ được xây dựng một cách thống nhất và linh hoạt
1.1.3.2 Tactical Design (Thiết kế chiến thuật)
- Tactical Design là phần thiết kế chi tiết trong DDD, giúp xây dựng vàtriển khai mô hình domain một cách cụ thể Nó tập trung vào các thànhphần cụ thể của phần mềm như Entity, Value Object, Aggregate,Repository, Factory, và Domain Event Các yếu tố này đóng vai trò quantrọng trong việc thực thi và duy trì mô hình domain đã được xác địnhtrong Strategic Design
1.1.4 Quá trình triển khai DDD
- Khám phá và xác định Domain: Làm việc với các bên liên quan để hiểu rõnghiệp vụ và phạm vi của hệ thống
- Xác định các Bounded Contexts: Phân chia hệ thống thành các phần riêng biệt
và rõ ràng, mỗi phần có một mô hình và ngôn ngữ chung
- Xây dựng Ubiquitous Language: Tạo ra ngôn ngữ chung cho tất cả các bênliên quan, giúp cải thiện giao tiếp và tránh hiểu lầm
- Thiết kế chiến lược và chiến thuật: Phân chia hệ thống và triển khai các môhình trong từng Bounded Context
- Áp dụng các kỹ thuật DDD: Sử dụng các mô hình và công cụ như Event
Sourcing, CQRS, và Domain Events để cải thiện tính linh hoạt và mở rộng của
hệ thống
1.2 Cấu trúc chương trình, thiết kế DDD của chương trình, cài đặt và chạy chương trình.
1.2.1 Cấu trúc chương trình
1.2.1.1 Giới thiệu chung
Dự án triển khai ứng dụng microservice sử dụng Spring Cloud Chươngtrình triển khai 2 dịch vụ microservice, một dịch vụ là ProductService có chức
Trang 15năng thu thập đánh giá sản phẩm từ trang web của bên thứ ba và dịch vụ còn lại
là ReviewService kết hợp tất cả các đánh giá liên quan đến một sản phẩm nhấtđịnh Có 2 chiến lược thiết kế được sử dụng trong chương trình là non-reactive
và reactive:
- Non-reactive design: phương pháp này sẽ sử dụng REST API để giao tiếp giữacác dịch vụ theo cách không phản ứng và sẽ lưu trữ dữ liệu trong cơ sở dữ liệuMySQL
Hình 1 1 Thiết kế non-reactive
Sử dụng phương pháp này sẽ có một số nhương điểm:
● Việc giao tiếp giữa các dịch vụ rất khó quản lý và phức tạp: Tạm thờikhông có dịch vụ, bảo trì API
● Việc gỡ lỗi có thể khá khó khăn
● Các dịch vụ vi mô thường có chi phí rất cao
● Điều tệ nhất bạn có thể làm là phát triển một khối phân tán nếu bạn khôngbiết cách xây dựng các dịch vụ vi mô
- Reactive design: Ý tưởng đằng sau phương pháp này là nó có thể sử dụng tốthơn các tài nguyên của máy chủ Do thực thi song song, nó cũng có thể xử lýnhiều giao dịch cùng một lúc Các dịch vụ vi mô rất phù hợp với các khuôn khổJava reactive do việc sử dụng tài nguyên cao hơn và hiệu quả hơn này
Trang 16Hình 1 2 Thiết kế reactive
Phương pháp này có thể kết hợp Spring WebFlux với Cloud Streaming bằngcách sử dụng Kafka Middleware và MongoDB Database với reactive driverssẵn sàng sử dụng cho Spring Boot để lưu trữ dữ liệu
1.2.1.3 Kiến trúc giao tiếp và xử lý
● Message Broker (Kafka): Vai trò của việc xử lý không đồng bộ và truyềnthông giữa các dịch vụ
● Feign Clients: Cách sử dụng Feign để giao tiếp giữa các dịch vụ
● Cache Layer: Vai trò và ảnh hưởng đến hiệu suất hệ thống
1.2.1.4 Quản lý cấu hình và theo dõi
● Configuration Server: Cách quản lý cấu hình tập trung
Trang 17● Distributed Traces (Zipkin): Tầm quan trọng của theo dõi phân tán trongviệc kiểm tra và giám sát hệ thống.
1.2.1.5 Lưu trữ và dữ liệu
● MongoDB: Mô tả về hệ thống lưu trữ dữ liệu và các tính năng của cơ sở
dữ liệu NoSQL này
1.2.1.6 Triển khai và môi trường
● Private Docker Registry: Cách thức container hóa các dịch vụ và triểnkhai
● Các công cụ bên ngoài (3rd party URL): Mô tả tích hợp với các hệ thốngbên ngoài để thu thập thông tin đánh giá sản phẩm
1.2.2 Thiết kế DDD của chương trình
1.2.2.1 Xác định Domain chính
● Product Domain: Quản lý thông tin sản phẩm, có các hành động chínhnhư thêm, cập nhật, và xóa sản phẩm Đây là một bounded context độclập và chỉ tương tác với các domain khác qua các sự kiện và API
● Review Domain: Quản lý các đánh giá sản phẩm, bao gồm các thao tác
để tổng hợp các đánh giá của sản phẩm Domain này có thể tương tác vớiProduct Domain để xác nhận thông tin sản phẩm
● Authentication Domain: Quản lý xác thực và phân quyền người dùng,giúp bảo mật các domain khác bằng cách kiểm tra quyền truy cập
1.2.2.2 Thiết kế chiến lược
Thiết kế chiến lược trong DDD tập trung vào việc chia hệ thống thành cácBounded Context và định nghĩa cách các domain tương tác với nhau:
2 Mối quan hệ giữa các Context:
○ Context Mapping: Các context này giao tiếp với nhau qua các sựkiện không đồng bộ qua Kafka
Trang 18○ Event-Driven Communication: Dữ liệu và sự kiện giữa Product vàReview Context được trao đổi qua Kafka, giúp tăng tính độc lập vàtránh sự phụ thuộc trực tiếp.
3 Chia domain theo chiến lược:
○ Product và Review được chia thành các domain riêng biệt, triểnkhai độc lập, nhưng có sự phối hợp thông qua các sự kiện và xácthực từ Authentication Context
1.2.2.3 Thiết kế chiến thuật
Thiết kế chiến thuật trong DDD tập trung vào các thành phần nhỏ hơn bên trongtừng Bounded Context, như Entities, Value Objects, Aggregates, Repositories,
6 Application Services:
○ Dịch vụ ứng dụng chịu trách nhiệm điều phối các hoạt động liênquan đến Product hoặc Review khi có các yêu cầu từ API Gateway
1.2.3 Cài đặt và chạy chương trình
Đầu tiên ta tải và cài đặt IntelliJ IDEA trên tranghttps://www.jetbrains.com.Tải và cài đặt Apache Maven trên tranghttps://maven.apache.org/download.cgiSau đó mở IntelliJ chọn Clone Repository để clone dự án về máy
Trang 19Hình 1 3 Clone dự án trên IntelIJ
Sau đó mở Terminal trong IntelliJ và chạy lệnh để tiến hành build dự án
Đợi một lúc màn hình hiện như vậy là quá trình build đã thành công
Trang 20Khái niệm Docker
- Docker là một nền tảng mã nguồn mở để phát triển, phân phối và chạycác ứng dụng Nó giúp tách các ứng dụng khỏi cơ sở hạ tầng dễ dàng hơn,đảm bảo phân phối phần mềm nhanh chóng Docker rút ngắn thời giangiữa việc tạo mã và triển khai bằng cách phối hợp quản lý cơ sở hạ tầngvới xử lý ứng dụng
- Các ứng dụng được đóng gói và chạy bên trong những gì được gọi làcontainer, là môi trường được cô lập lỏng lẻo trong hệ sinh thái Docker.Nhờ sự cô lập này, nhiều container có thể chạy đồng thời trên một máychủ duy nhất, cải thiện tính bảo mật Vì chúng nhẹ, container loại bỏ nhucầu thiết lập máy chủ bằng cách đóng gói tất cả các yêu cầu để thực thiứng dụng Vì container là hằng số trên các môi trường được chia sẻ, nên
sự cộng tác diễn ra suôn sẻ
Kiến trúc Docker
Trang 21Hình 1 5 Kiến trúc Docker
- Docker Daemon: Docker daemon còn được gọi là Dockerd quản lý cácđối tượng Docker như container, image, volume, network, … Nó lắngnghe các yêu cầu API Docker cho việc này Để quản lý các dịch vụDocker, nó cũng có thể giao tiếp với các daemon khác
- Docker Client: Để tương tác với Docker, hầu hết người dùng sử dụngDocker client như CLI Trong dòng lệnh, khi bạn chạy lệnh Docker nhưDocker run, nó sẽ gửi lệnh đến dockerd để thực thi Docker client có thểgiao tiếp với nhiều daemon
- Docker Desktop: Docker Desktop là một cách dễ dàng để truy cậpDocker Đây là một ứng dụng có thể chạy trên Windows, Mac cũng nhưLinux Nó cho phép bạn thực hiện tất cả các chức năng liên quan đếnDocker Docker Desktop đi kèm với daemon, client, compose,Kubernetes và nhiều hơn nữa được tích hợp vào đó
- Docker Registries: Một Docker registry có các Docker image được lưutrữ trong đó Docker registry công khai phổ biến nhất là Docker Hub màbất kỳ ai cũng có thể sử dụng Theo mặc định, Docker tìm kiếm imagetrên Docker Hub Khi bạn thực hiện lệnh docker pull hoặc run, dockerd sẽkéo các image cần thiết từ registry Tương tự như vậy đối với lệnhDocker push
Trang 22- Docker Objects: Docker có image, container, network, volume, plugin vàcác đối tượng khác liên quan đến nó mà bạn sẽ sử dụng trong suốt hànhtrình Docker.
● Image: Docker Image là một khuôn mẫu (template) dùng để tạo ra cáccontainer Nó chứa tất cả những gì ứng dụng cần để chạy, bao gồm:
+ Mã nguồn ứng dụng
+ Các thư viện phụ thuộc
+ Cài đặt hệ điều hành cần thiết
❖ Vai trò:Đảm bảo rằng môi trường runtime luôn nhất quán trên mọimáy (local, staging, production)
● Containers: là một phiên bản chạy của Docker Image Mỗi container
là một môi trường độc lập, chạy ứng dụng mà không bị ảnh hưởng bởicác ứng dụng khác
❖ Vai trò: Cung cấp môi trường runtime cho ứng dụng Cho phép côlập tài nguyên như CPU, RAM, và network
● Networks: Docker Network cho phép các container giao tiếp với nhauhoặc với thế giới bên ngoài Mặc dù các container được tách biệt theomặc định, chúng ta có thể sử dụng Docker để xây dựng các mạng ảo chophép các container giao tiếp an toàn với nhau Các mạng này có thể có độphức tạp từ đơn giản đến phức tạp, với các tùy chọn trình điều khiển khácnhau cung cấp các chức năng đa dạng
● Storage: Các ứng dụng thông thường phụ thuộc vào hệ thống lưu trữ cungcấp năng lượng cho máy chủ Với các volume, Docker cung cấp mộtphương pháp thích ứng hơn Các thư mục lưu trữ dữ liệu bên ngoài chínhvùng chứa được gọi là volume Điều này đảm bảo dữ liệu an toàn cho dùvùng chứa bị dừng hay được khôi phục
Trang 231.3.2 Triển khai dự án
Đầu tiên ta truy cập websitehttps://www.docker.com/products/docker-desktop/
để tải và cài đặt Docker Sau đó đăng nhập và mở phần mềm Docker lên
Chương trình sử dụng Spring Profiles và Docker Compose Profiles để triển khai
dự án theo 2 phương pháp là reactive và non-reactive Để khởi động các serviceđược định nghĩa trong file docker-compose.yml và kích hoạt profile cụ thể ta
mở Terminal trong IntelliJ lên và chạy lệnh:
Cho phương pháp reactive:
Cho phương pháp non-reactive:
Sau khi chạy lệnh ta sẽ đợi một lúc để Docker tải về các Images cần thiết cho dựán
Hình 1 6 Các Images triển khai trên Docker
và khởi động các Containers của các service trong profile
Trang 24Hình 1 7 Các service triển khai trên Docker
Sau khi triển khai dự án lên Docker, bây giờ ta có thể dễ dàng quản lý cácservice trong chương trình bằng cách chạy các containers tương ứng chứa cácservice Ta có thể truy cập spring Eureka để quản lý danh sách các service của
dự án
Hình 1 8 Spring Eureka quản lý các service
Trang 25CHƯƠNG 2 XÂY DỰNG BỘ PHÂN LOẠI HÌNH ẢNH BẰNG CÁCH ĐÀO TẠO LẠI MÔ HÌNH TENSORFLOW HIỆN CÓ VỚI ML.NET 2.1 TỔNG QUAN VỀ ĐỀ TÀI
2.1.1 Các khái niệm cơ bản
2.1.1.1 ML.NET
ML.NET là một thư viện mã nguồn mở do Microsoft phát triển, đượcthiết kế để xây dựng các ứng dụng học máy (Machine Learning) trong hệ sinhthái NET Được giới thiệu lần đầu vào năm 2018, ML.NET cho phép các nhàphát triển tạo, huấn luyện và triển khai các mô hình học máy với các ngôn ngữphổ biến như C# và F# Khác với các framework học máy khác như TensorFlowhay PyTorch, ML.NET tập trung vào việc tích hợp liền mạch với hệ sinh thái.NET, giúp các lập trình viên dễ dàng sử dụng học máy trong các ứng dụng hiện
có mà không cần chuyển đổi ngữ cảnh hoặc học một ngôn ngữ lập trình mới
Hình 2 1 Kiến trúc của ML.NET
ML.NET hoạt động trên các hệ điều hành phổ biến như Windows, macOS
và Linux, giúp các ứng dụng dễ dàng triển khai trong môi trường đa dạng.ML.NET hỗ trợ các mô hình học máy truyền thống (regression, classification,
Trang 26clustering) và tích hợp các mô hình học sâu (deep learning) thông qua:TensorFlow, ONNX (Open Neural Network Exchange).
ML.NET là mã nguồn mở và miễn phí, được phát triển dưới sự bảo trợcủa Microsoft và cộng đồng trên GitHub Điều này cho phép mọi người đónggóp để cải tiến và mở rộng khả năng của framework ML.NET hỗ trợ các ứngdụng phổ biến trong hệ sinh thái NET như: ứng dụng web (ASP.NET), ứngdụng máy tính để bàn (WPF, WinForms), hay các ứng dụng đám mây trênMicrosoft Azure
ML.NET đang được ra mắt như một phần của NET Foundation và kholưu trữ hiện nay chứa các API NET cho cả mục đích đào tạo và sử dụng môhình, cùng với nhiều phép biến đổi và trình học cần thiết cho nhiều tác vụ ML
Hình 2 2 Thành phần của ML.NET
Một số các thành phần của ML.NET:
- MLContext là trung tâm của ML.NET, cung cấp môi trường làm việc vàcác công cụ cần thiết để: Tiền xử lý dữ liệu, huấn luyện mô hình, dựđoán
Trang 27- DataView là định dạng dữ liệu dùng trong ML.NET, tương tự nhưDataFrame trong Python Nó cho phép xử lý dữ liệu lớn một cách hiệuquả và dễ dàng tương thích với pipeline của mô hình.
- Pipeline là chuỗi các bước tiền xử lý và huấn luyện mô hình, đảm bảo quátrình xử lý dữ liệu và xây dựng mô hình diễn ra một cách tuần tự
- AutoML (Model Builder) giúp các nhà phát triển không cần kinh nghiệmchuyên sâu vẫn có thể: Tự động chọn thuật toán học máy phù hợp, huấnluyện mô hình với tập dữ liệu thực tế, triển khai mô hình một cách nhanhchóng
Cơ chế hoạt động của ML.NET gồm 2 quy trình:
- Quy trình tuần hoàn để tạo/đào tạo/đánh giá mô hình ML dựa trên dữ liệulịch sử Khi bạn hài lòng với chất lượng của mô hình, bạn lưu nó dướidạng tệp mô hình ML.NET được tuần tự hóa (định dạng zip)
- Chạy/triển khai mô hình ML được đào tạo tùy chỉnh của bạn trong ứngdụng người dùng cuối để thực hiện dự đoán
Hình 2 3 Quy trình hoạt động của ML.NET
2.1.1.2 TensorFlow
TensorFlow là một thư viện mã nguồn mở do Google phát triển, đượcthiết kế để xây dựng và triển khai các ứng dụng học sâu (deep learning) và học
Trang 28máy (machine learning) TensorFlow được sử dụng rộng rãi trong cả nghiên cứulẫn sản xuất nhờ khả năng mở rộng và hiệu suất cao.
Ứng dụng của TensorFlow:
- Xử lý ảnh: Nhận diện khuôn mặt, phân loại hình ảnh, tạo ảnh mới
- Xử lý ngôn ngữ tự nhiên: Dịch máy, tóm tắt văn bản, chatbot
- Nhận dạng giọng nói: Chuyển đổi giọng nói thành văn bản, điềukhiển thiết bị bằng giọng nói
- Dự báo: Dự báo thời tiết, dự báo giá chứng khoán
- Khoa học y tế: Phân tích hình ảnh y tế, phát hiện bệnh sớm
Các khái niệm cơ bản trong TensorFlow:
- Tensor: Đối tượng cơ bản trong TensorFlow, biểu diễn dữ liệunhiều chiều
- Graph: Một tập hợp các phép toán được định nghĩa trên các tensor
- Session: Một môi trường để thực thi các phép toán trong graph
- Variable: Một tensor có giá trị có thể thay đổi trong quá trình huấnluyện mô hình
- Operation: Một phép toán thực hiện trên các tensor
Nguyên lý hoạt động của TensorFlow:
TensorFlow là một thư viện tính toán số và biểu diễn dữ liệu bằngcấu trúc đồ thị (graph) để tạo và huấn luyện các mô hình học máy Các đồthị này bao gồm các nút (nodes) và các cạnh (edges) được sử dụng đểbiểu diễn các phép tính và dữ liệu tương ứng trong mô hình Một cáchtổng quát, quá trình huấn luyện mô hình học máy trong TensorFlow trảiqua các bước sau:
- Xây dựng đồ thị tính toán: Người dùng xác định cấu trúc đồthị tính toán bằng cách khai báo các biến (variables) và cácphép tính (operations) trong mô hình
- Định nghĩa hàm mất mát: Hàm mất mát (loss function) đượcđịnh nghĩa để đo lường sự khác biệt giữa đầu ra dự đoán của
mô hình và giá trị thực tế
- Tối ưu hóa mô hình: Quá trình tối ưu hóa được sử dụng đểtìm ra các giá trị tham số tối ưu nhằm giảm thiểu hàm mấtmát
- Huấn luyện mô hình: Dữ liệu huấn luyện được đưa vào môhình để huấn luyện và cập nhật các giá trị tham số
- Đánh giá mô hình: Dữ liệu kiểm tra được sử dụng để đánhgiá hiệu suất của mô hình
Trang 29- Sử dụng mô hình: Mô hình đã huấn luyện được sử dụng để
dự đoán và phân loại các dữ liệu mới
Hình 2 4 Nguyên lý hoạt động mô hình TensorFlow
2.1.2 Tổng quan bài toán
2.1.2.1 Mô tả bài toán
Bài toán yêu cầu phân loại hình ảnh thành các nhóm cụ thể như: thựcphẩm, đồ chơi hay thiết bị Đây là một dạng bài toán học máy liên quan đếnphân loại hình ảnh sử dụng các mô hình học sâu (Deep Learning) được đào tạobằng mạng nơ-ron chứa nhiều tầng học và tập dữ liệu các ảnh đầu vào được gánnhãn vào một trong ba nhóm dựa trên đặc điểm trực quan
Việc đào tạo một mô hình phân loại hình ảnh từ đầu đòi hỏi phải thiết lậphàng triệu tham số, một tấn dữ liệu đào tạo được gắn nhãn và một lượng lớn tàinguyên tính toán (hàng trăm giờ GPU) Mặc dù không hiệu quả bằng việc đàotạo một mô hình tùy chỉnh từ đầu, việc sử dụng một mô hình được đào tạo trướccho phép bạn rút ngắn quá trình này bằng cách làm việc với hàng nghìn hìnhảnh so với hàng triệu hình ảnh được gắn nhãn và xây dựng một mô hình tùychỉnh khá nhanh chóng (trong vòng một giờ trên một máy không có GPU) Vớibài toán này thu nhỏ quy trình đó xuống hơn nữa, chỉ sử dụng một tá hình ảnhđào tạo
Dự án này sử dụng mô hình học sâu TensorFlow là Inception Model, một
mô hình nhận dạng hình ảnh phổ biến được đào tạo trên ImageNet tập dữ liệu
Mô hình TensorFlow phân loại toàn bộ hình ảnh thành một nghìn lớp, chẳng
Trang 30hạn như "Umbrella", "Jersey" và "Dishwasher" Vì Inception Model đã đượcđào tạo trước trên hàng ngàn hình ảnh khác nhau, nên bên trong nó chứa các đặcđiểm hình ảnh cần thiết để nhận dạng hình ảnh Chúng ta có thể sử dụng các đặcđiểm hình ảnh bên trong này trong mô hình để đào tạo một mô hình mới với ítlớp hơn nhiều.
Như được hiển thị trong sơ đồ sau, chúng ta thêm tham chiếu đến các góiML.NET NuGet trong các ứng dụng NET hoặc NET Framework của mình.Bên trong, ML.NET bao gồm và tham chiếu đến TensorFlow thư viện gốc chophép viết mã tải TensorFlow tệp mô hình đã đào tạo hiện có
Hình 2 5 Gói ML.NET NuGet
○ Phân loại hình ảnh theo các nhóm thực phẩm, đồ chơi hay thiết bị
○ Việc phân loại tự động này có thể ứng dụng trong nhiều lĩnh vực,
từ nhận diện sản phẩm trong thương mại điện tử đến quản lý khohàng hoặc tự động hóa trong công nghiệp
Trang 312.1.2.2 Yêu cầu bài toán
● Dữ liệu đầu vào:
○ Mô hình TensorFlow là Inception Model đã được đào tạo
Hình 2 6 Mô hình TesnsorFlow
○ Tập hình ảnh được gán nhãn rõ ràng
Hình 2 7 Tập hình ảnh được gán nhãn
● Dữ liệu đầu ra:
Một mô hình TensorFlow được đào tạo lại, có khả năng:
○ Phân loại chính xác nhóm của hình ảnh đầu vào là food, toy hayappliance
○ Đạt được độ chính xác cao trên tập kiểm tra
● Yêu cầu kỹ thuật:
○ Sử dụng ML.NET Image Classification API để xây dựng pipeline
Trang 322.1.2.3 Ứng dụng thực tiễn
● Quản lý kho hàng: Phân loại ảnh chụp sản phẩm để tự động hóa việc sắpxếp hàng hóa trong kho
● Ứng dụng giáo dục: Giúp trẻ em học cách phân biệt thực phẩm, đồ chơi
và thiết bị qua ứng dụng tương tác
● Thương mại điện tử: Tự động phân loại sản phẩm từ hình ảnh do ngườidùng tải lên
2.1.2.4 Tính cấp thiết của bài toán
● Phân loại hình ảnh là một phần quan trọng trong các hệ thống trí tuệ nhântạo, giúp tiết kiệm thời gian và công sức so với việc phân loại thủ công
● Ứng dụng mô hình học máy kết hợp TensorFlow và ML.NET cho phéptạo ra các giải pháp linh hoạt, có khả năng mở rộng và tích hợp vào nhiều
2.2.1.1 Các thư viện phụ thuộc
- Chứa các thư viện NET cơ bản để xây dựng ứng dụng NET
Trang 33Hình 2 9 Các thư viện của dự án
- Các thư viện ML.NET
● Microsoft.ML: Tạo pipeline và huấn luyện mô hình phân loại đa lớp
● Microsoft.ML.ImageAnalytics: Xử lý hình ảnh đầu vào (resize, trích xuấtpixel)
● SciSharp.TensorFlow.Redist: Kết nối trực tiếp với TensorFlow để tải vàchạy mô hình pretrained
● Microsoft.ML.TensorFlow: Tích hợp mô hình TensorFlow vào pipeline
để trích xuất đặc trưng từ hình ảnh
2.2.1.2 Mô hình và dữ liệu đầu vào
- Mô hình và dữ liệu đầu vào được chứa trong thư mục assets của project
Trang 34Hình 2 10 Tài nguyên dự án
- Trong thư mục images chứa các hình ảnh dùng để train và test mô hình và 2file tags.tsv dùng để train và test-tags.tsv dùng để test chứa tên ảnh và nhãntương ứng đã phân loại
- Trong thư mục Inception chứa mô hình TensorFlow đã được đào tạo làInception Model
Trang 352.2.1.3 Các Class đối tượng trong chương trình
Hình 2 11 Các Class trong dự án
- Class ImageData.cs là lớp dữ liệu hình ảnh đầu vào
- Class ImagePrediction.cs là lớp phân loại hình ảnh thuộc loại nào
- Class Program.cs là lớp chính của chương trình dùng để xây dụng, đào tạo,đánh giá và chạy chương trình
Trang 36● Chức năng: Lấy đường dẫn thư mục hiện tại nơi chương trình đang chạy.
● Công dụng: Đảm bảo các đường dẫn luôn dựa trên thư mục hiện hành,giúp tính di động của chương trình cao hơn
- Console.WriteLine
● Namespace: System
● Chức năng: Xuất dữ liệu ra giao diện dòng lệnh (Console)
● Công dụng: Hiển thị thông tin trong quá trình huấn luyện, đánh giá, và dựđoán để người dùng theo dõi
● Chức năng: Tải hình ảnh từ thư mục vào pipeline ML.NET
● Công dụng: Chuẩn bị hình ảnh cho các bước xử lý tiếp theo
- ResizeImages
● Namespace: Microsoft.ML.Transforms
● Chức năng: Thay đổi kích thước hình ảnh theo thông số đầu vào
● Công dụng: Đưa hình ảnh về kích thước mà mô hình TensorFlow yêu cầu(224x224)
- ExtractPixels
● Namespace: Microsoft.ML.Transforms
Trang 37● Chức năng: Trích xuất giá trị pixel từ hình ảnh, chuẩn hóa chúng (theogiá trị Mean và Scale).
● Công dụng: Chuẩn bị dữ liệu pixel cho mô hình TensorFlow
- LoadTensorFlowModel
● Namespace: Microsoft.ML.TensorFlow
● Chức năng: Tải mô hình TensorFlow từ tệp pb vào pipeline ML.NET
● Công dụng: Sử dụng mô hình TensorFlow pretrained để trích xuất đặctrưng
○ Chức năng: Chuyển đổi nhãn văn bản thành giá trị số
○ Công dụng: Phù hợp với yêu cầu của các thuật toán học máy
● MapKeyToValue:
○ Chức năng: Chuyển giá trị số về nhãn văn bản
○ Công dụng: Hiển thị kết quả dễ hiểu cho người dùng
● Chức năng: Đánh giá hiệu suất của mô hình trên tập kiểm tra
● Công dụng: Tính toán các metric như LogLoss và PerClassLogLoss
- CreatePredictionEngine
● Namespace: Microsoft.ML
● Chức năng: Tạo công cụ dự đoán cho từng mẫu dữ liệu cụ thể
● Công dụng: Dự đoán trên một ảnh duy nhất
Trang 382.3 CÀI ĐẶT VÀ CHẠY CHƯƠNG TRÌNH
2.3.1 Khởi tạo chương trình
2.3.1.1 Cài đặt môi trường
- Truy cập link https://visualstudio.microsoft.com/vs/ để tải về và cài đặt VisualStudio 2022
- Sau khi tải xong màn hình lựa chọn hiện ra, ta chọn NET desktopdevelopment để tải về các hỗ trợ xây dựng ứng dụng NET
Hình 2 12 Tải các hỗ trợ cho ứng dụng NET
- Sau khi tải thành công chúng ta mở Visual Studio 2022 để đăng nhập và tạomột project Console App đặt tên là PhanLoaiAnh
Hình 2 13 Khởi tạo dự án
- Chọn phiên bản NET phù hợp vậy là tạo thành công project
Trang 392.3.1.2 Tải các thư viện ML.NET cần thiết
- Trong Solution Explorer, kích chuột phải vào project và chọn Manage NuGetPackages
- Một màn hình NuGet hiện ra, chọn Package source là nuget.org Sau đó tìmgói Microsoft.ML và chọn install để tải về project
Hình 2 14 Tải các thư viện cần thiết
- Chọn Ok hay đồng ý License Acceptance để hoàn tất tải xuống
- Tương tự như vậy tải xuống các thư viện Microsoft.ML.ImageAnalytics ,SciSharp.TensorFlow.Redist và Microsoft.ML.TensorFlow
- Sau khi tải thành công trong dự án mở Dependencies, xem Packages ta sẽ thấycác thư viện vừa tải
Hình 2 15 Kiểm tra thư viện
- Vậy là ta đã tải thành công các thư viện cho dự án
Trang 402.3.1.3 Tải các tài nguyên cần thiết
- Truy cập đường dẫn sau để tải xuống mô hình TensorFlow đã được huấn luyện
là Inception Model và tập dữ liệu các hình ảnh đầu vào để huấn luyện và testhttps://github.com/dotnet/samples/blob/main/machine-learning/tutorials/TransferLearningTF/image-classifier-assets.zip
- Sau khi tải về, giải nén và thêm vào dự án
Hình 2 16 Tải tài nguyên dự án
- Chọn từng file trong assets kích chuột phải và chọn properties, ở phần Copy toOutput Directory chọn Copy if newer