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

Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin

185 76 0

Đ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 đề Xây Dựng Ứng Dụng Ios Đếm Vật Thể Mật Độ Cao Trong Hình Ảnh Dựa Vào Học Máy Và Xử Lý Ảnh
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ Án Tốt Nghiệp
Định dạng
Số trang 185
Dung lượng 16,69 MB

Cấu trúc

  • Chương 1 (14)
    • 1.1. Mục tiêu (14)
    • 1.2. Nội dung (14)
      • 1.2.1. Tổng quan về các phương pháp đếm vật thể mật độ cao trong hình ảnh 1 1.2.2. Tổng quan về SwiftUI framework (14)
      • 1.2.3. Tổng quan về Flask, Gunicorn, SocketIO và Flask-SocketIO (16)
  • Chương 2 (18)
    • 2.1. Các phương pháp đếm vật thể (18)
      • 2.1.1. Phương pháp xử lý ảnh số bằng thư viện OpenCV (18)
      • 2.1.2. Phương pháp kết hợp xử lý ảnh bằng OpenCV và DO-U-Net (19)
      • 2.1.3. Đếm bằng sử dụng học máy và neural networks (21)
    • 2.2. Server (22)
      • 2.2.1. Ngôn ngữ phát triển (22)
      • 2.2.2. Công cụ thực hiện (22)
      • 2.2.3. Triển khai Server (23)
    • 2.3. Client – iOS (24)
      • 2.3.1. Tính năng chính (24)
      • 2.3.2. Ngôn ngữ phát triển (24)
      • 2.3.3. Công nghệ sử dụng (25)
      • 2.3.4. Thư viện sử dụng (25)
  • Chương 3 (26)
    • 3. PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH (26)
      • 3.1. Xử lý ảnh số bằng thư viện OpenCV (26)
        • 3.1.1. Giới thiệu về OpenCV (26)
        • 3.1.2. Ứng dụng của OpenCV (26)
        • 3.1.3. Cách sử dụng OpenCV để đếm vật thể (26)
        • 3.1.4. Kết quả (36)
        • 3.1.5. Đánh giá chi tiết (40)
        • 3.1.6. Kết luận (40)
      • 3.2. Phương pháp sử dụng Học máy và Neural Networks (41)
        • 3.2.1. Keras RetinaNet (41)
        • 3.2.2. Precise Detection in Densely Packed Scenes – CVPR 2019 paper (43)
        • 3.2.3. Sử dụng phương pháp trong luận văn (47)
  • Chương 4 (51)
    • 4. MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU (51)
      • 4.1. Bộ dữ liệu đã thu thập, đánh nhãn trong đề tài (51)
        • 4.1.1. Dataset trứng (51)
        • 4.1.2. Dataset ống gỗ (51)
        • 4.1.3. Dataset thép hình tròn (52)
        • 4.1.4. Dataset đồng tiền (53)
        • 4.1.5. Dataset nắp chai (54)
        • 4.1.6. Dataset thùng giấy (55)
        • 4.1.7. Dataset ống thép hình chữ nhật (55)
        • 4.1.8. Dataset viên bi (56)
        • 4.1.9. Dataset hộp điện thoại (57)
        • 4.1.10. Dataset bàn phím (58)
      • 4.2. Model học máy đã huấn luyện được trong đề tài (59)
        • 4.2.1. Trứng (59)
        • 4.2.2. Bi (62)
        • 4.2.3. Ống thép hình chữ nhật (65)
        • 4.2.4. Ống thép hình tròn (68)
        • 4.2.5. Thùng giấy (70)
        • 4.2.6. Hộp điện thoại iPhone (73)
        • 4.2.7. Bàn phím (75)
        • 4.2.8. Khúc gỗ hình tròn (77)
        • 4.2.9. Đồng xu (80)
        • 4.2.10. Nắp chai (83)
  • Chương 5 (86)
    • 5. PYTHON SERVER (86)
      • 5.1. Flask, Gunicorn, Flask-SocketIO và SocketIO (86)
        • 5.1.1. Giới thiệu (86)
        • 5.1.2. Cài đặt và sử dụng (87)
      • 5.2. Tổng quan nguyên lý hoạt động (88)
      • 5.3. Các API chính (88)
        • 5.3.1. Đếm (88)
        • 5.3.2. Chuẩn bị (88)
        • 5.3.3. Upload (89)
        • 5.3.4. Thêm template (89)
        • 5.3.5. Xoá template (89)
  • Chương 6 (90)
    • 6. ỨNG DỤNG iOS (90)
      • 6.1. Công nghệ sử dụng - SwiftUI (90)
        • 6.1.1. Giới thiệu về SwiftUI (90)
        • 6.1.2. Yêu cầu sử dụng (90)
        • 6.1.3. Cấu trúc của SwiftUI (90)
        • 6.1.4. Ưu điểm của SwiftUI (93)
        • 6.1.5. Nhược điểm của SwiftUI (94)
      • 6.2. Đặc tả yêu cầu phần mềm (94)
        • 6.2.1. Mô hình Usecase (94)
        • 6.2.2. Database Diagram (95)
      • 6.3. Tổng quan nguyên lý hoạt động (95)
      • 6.4. Các chức năng chính (95)
        • 6.4.1. Lựa chọn template cần đếm (96)
        • 6.4.2. Lựa chọn hình ảnh và đếm (96)
        • 6.4.3. Lưu và hiển thị lịch sử (98)
        • 6.4.4. Đề xuất template mới (99)
        • 6.4.5. Thêm, sửa, xoá template (Admin) (100)
        • 6.4.6. Đánh giá sau mỗi lần đếm (100)
      • 6.5. Prototype (101)
        • 6.5.1. Screenflow (101)
        • 6.5.2. Danh sách các màn hình (101)
      • 6.6. Đặc tả các màn hình (103)
        • 6.6.1. SC01.Home Screen (103)
        • 6.6.2. SC02.Count Screen (106)
        • 6.6.3. SC03.Select Image Screen (108)
        • 6.6.4. SC04.Selected Image Screen (110)
        • 6.6.5. SC05.Change Image Screen (112)
        • 6.6.6. SC06.Count Result Screen (114)
        • 6.6.7. SC07.Share Result Screen (116)
        • 6.6.8. SC08.Tap Image Screen (118)
        • 6.6.9. SC09.Zoom Image Screen (120)
        • 6.6.10. SC10.Guest Tab Screen (122)
        • 6.6.11. SC11.Admin Tab Screen (124)
        • 6.6.12. SC12.User Tab Screen (126)
        • 6.6.13. SC13.Login Screen (128)
        • 6.6.14. SC14.Register Screen (130)
        • 6.6.15. SC15.Template List Screen (132)
        • 6.6.16. SC16.Remove Template Screen (134)
        • 6.6.17. SC17.Add Template Screen (136)
        • 6.6.18. SC18.Template Photo Added Screen (138)
        • 6.6.19. SC19.Propose Template Screen (140)
        • 6.6.20. SC20.Object Photo Added Screen (142)
        • 6.6.21. SC21.Count History Screen (144)
        • 6.6.22. SC22.Remove History Screen (145)
      • 6.7. Đặc tả cơ sở dữ liệu (147)
  • Chương 7 (149)
    • 7. KẾT QUẢ VÀ THỰC NGHIỆM (149)
      • 7.1. Kết quả (149)
      • 7.2. So sánh (177)
        • 7.2.1. So sánh với ứng dụng CountThings (177)
        • 7.2.2. So sánh với ứng dụng Mediscount (178)
      • 7.3. Thực nghiệm (179)
      • 7.4. Nhận xét và phân tích (179)
  • Chương 8 (181)
    • 8. TỔNG KẾT (181)
      • 8.1. Kết luận (181)
      • 8.2. Khó khăn (181)
        • 8.2.1. Khó khăn trong quá trình tìm hiểu phương pháp đếm (181)
        • 8.2.2. Khó khăn trong quá trình xây dựng server và triển khai server (181)
        • 8.2.3. Khó khăn trong quá trình chuẩn bị dataset (182)
      • 8.3. Hướng phát triển (182)
        • 8.3.1. Tăng độ chính xác (182)
        • 8.3.2. Giảm thời gian đếm (182)
        • 8.3.3. Cải tiến ứng dụng phía client (182)
        • 8.3.4. Cải tiến server (183)
        • 8.3.5. Thêm nhiều loại vật thể mới thiết thực (183)
  • TÀI LIỆU THAM KHẢO (184)

Nội dung

Mục tiêu

- Tìm hiểu thuật toán đếm số lượng vật thể trong hình ảnh bằng học máy và xử lý ảnh số

Xây dựng ứng dụng đếm vật thể mật độ cao qua hình ảnh trên thiết bị iOS sử dụng học máy và xử lý ảnh số, với việc phát triển ứng dụng iOS bằng SwiftUI framework Ứng dụng sẽ có chức năng chính là đếm số lượng vật thể trong hình ảnh, đồng thời nghiên cứu và cài đặt các tính năng cần thiết để đảm bảo hiệu quả đếm vật thể Giao diện người dùng sẽ được thiết kế thân thiện, cho phép hiển thị kết quả rõ ràng và thu thập ý kiến đánh giá của người dùng sau mỗi lần đếm để cải thiện ứng dụng Cuối cùng, quá trình tối ưu hóa hiệu năng và tốc độ xử lý sẽ được thực hiện để nâng cao trải nghiệm người dùng.

Xây dựng một Python Server để xử lý thuật toán đếm vật thể và trả kết quả cho ứng dụng qua RESTful API là một quy trình quan trọng Đầu tiên, cần tìm hiểu về Flask và Gunicorn để tạo ra một Python Server đơn giản có khả năng thực thi thuật toán sử dụng mô hình học máy Bên cạnh đó, việc khám phá các dịch vụ đám mây cũng rất cần thiết để triển khai Python Server một cách hiệu quả.

Nội dung

1.2.1 Tổng quan về các phương pháp đếm vật thể mật độ cao trong hình ảnh

1.2.1.1 Phương pháp xử lý ảnh bằng OpenCV

OpenCV, short for Open Source Computer Vision Library, was established by Intel in 1999 It is an open-source library designed for computer vision applications, providing a robust platform for developers and researchers in the field.

Để đếm đối tượng bằng OpenCV, trước tiên cần đọc hình ảnh và chuyển đổi sang định dạng HSV (màu sắc, độ bão hòa, giá trị) Tiếp theo, tách vùng màu của vật thể cần phát hiện khỏi nền Sau đó, chuyển đổi sang ảnh xám và áp dụng Gaussian blur Sử dụng phương pháp threshold Otsu để chuyển đổi ảnh sang dạng nhị phân Cuối cùng, thực hiện các phép biến đổi hình thái (đóng) để loại bỏ các đối tượng nhỏ không mong muốn.

Chương 1: TỔNG QUAN o Tìm contour, tính contourArea và loại bỏ contour có contourArea quá nhỏ so với contourArea trung bình o Dùng Distance Transform và WaterShed Algorithm để tìm trọng tâm các contour, sau đó transform ngược về để tách rời các object ra o Tìm contour, và đếm số lượng contour o Vẽ kết quả contour, số lượng contour chính là số vật thể có trong hình

Kết quả đạt được từ phương pháp đếm bằng học máy và mạng nơ-ron cho thấy khả năng đếm vật thể, cụ thể là trứng gà Độ chính xác của phương pháp này tương đối cao, tuy nhiên chỉ đảm bảo đúng khi các quả trứng không chồng lên nhau và có sự phân biệt rõ ràng với màu nền.

- Các paper tham khảo chính: o Precise Detection in Dense Pakced Scenes - CVPR 2019:

Mục đích paper: Phát hiện các vật thể trong hình ảnh có mật độ dày đặc

Dataset: SKU110K gồm 11,762 hình với hơn 1,7 triệu bounding box của các hàng hoá trong siêu thị

Sử dụng trong luận văn: Train và sử dụng model khác dựa trên source code của bài báo o Keras RetinaNet:

Mục đích paper: Phát hiện vật thể trong hình ảnh Dataset: Open Images Dataset gồm hơn 9 triệu hình ảnh với hơn 500 classes khác nhau

The CVPR 2019 paper explores a training model for transfer learning that utilizes the pretrained Keras RetinaNet model, offering enhancements over the original version Refer to this article to gain insights on training and prediction techniques for your thesis.

- Môi trường quan trọng yêu cầu: o tensorflow 1.13.1 o tensorflow-gpu 1.13.1 o keras 2.2.4 o h5py 2.10.0 o keras_resnet 0.2.0

Để đếm đối tượng hiệu quả, trước tiên cần lựa chọn đối tượng cần đếm và thu thập hình ảnh Tiếp theo, việc đánh nhãn và chuẩn bị dataset phù hợp với các nghiên cứu là rất quan trọng Sau đó, thực hiện quá trình huấn luyện đầu tiên cho mô hình học máy bằng SKU110K CVPR, sử dụng model base của Keras RetinaNet với backbone là Resnet 50 Tiếp tục, tiến hành huấn luyện lần hai cho IoU layer của mô hình học máy Sau khi hoàn tất huấn luyện, sử dụng mô hình đã được train để dự đoán kết quả Cuối cùng, xử lý kết quả để đưa về định dạng x, h, height, width, score.

1.2.2 Tổng quan về SwiftUI framework

- SwiftUI là một framework của Apple được ra mắt vào WWDC 2019 dùng để xử lý và thiết kế giao diện theo theo cách mới – declarative

Thiết kế giao diện theo phong cách declarative giúp hình dung rõ ràng cách người dùng tương tác với giao diện, từ đó tạo ra mã nguồn dễ hiểu Ví dụ, chúng ta có thể chỉ định một danh sách với các mục bao gồm văn bản, định dạng căn chỉnh và màu sắc Mã code để thực hiện những yêu cầu này trở nên dễ viết và dễ đọc, giúp tiết kiệm thời gian trong quá trình phát triển và bảo trì.

- Sử dụng trong luận văn: Dùng để phát triển ứng dụng iOS Client

1.2.3 Tổng quan về Flask, Gunicorn, SocketIO và Flask-SocketIO

Flask là một micro web framework được phát triển bằng ngôn ngữ Python, ra mắt vào năm 2010 bởi Amin Ronacher Với kích thước nhỏ gọn, Flask không yêu cầu bất kỳ thư viện hay công cụ nào khi cài đặt, và không có các thành phần không cần thiết như database abstraction layer hay form validation Điều này giúp người mới bắt đầu với Python dễ dàng phát triển một web server hoặc website nhỏ Ngoài ra, Flask cũng cho phép nâng cấp và mở rộng dễ dàng trong các ứng dụng phức tạp, làm cho nó trở thành lựa chọn lý tưởng cho việc phát triển web server trong các luận văn.

Gunicorn là một máy chủ web Python tuân theo tiêu chuẩn WSGI (Web Server Gateway Interface), nổi bật với sự ổn định và thường được triển khai trong các môi trường sản phẩm thực tế (Vimentor, 2018) Nó dễ sử dụng và tương thích với nhiều framework web khác nhau như Django và Flask (Vimentor, 2018) Gunicorn cũng hỗ trợ chứng chỉ SSL, làm cho nó trở thành lựa chọn lý tưởng cho việc triển khai server trong các luận văn.

Chương 1: TỔNG QUAN o Flask-SocketIO và SocketIO là công cụ cho phép ứng dụng Flask giao tiếp 2 chiều có độ trễ thấp giữa client và server o Ứng dụng phía client có thể sử dụng bất kỳ ngôn ngữ nào trong JavaScript, Python, C++, Java và Swift o Sử dụng trong luận văn: Dùng để client theo dõi tiến độ đếm của server

Các phương pháp đếm vật thể

2.1.1 Phương pháp xử lý ảnh số bằng thư viện OpenCV

- OpenCV là một thư viện phổ biến hàng đầu của thị giác máy tính nên dễ tiếp cận và cài đặt

- OpenCV được tối ưu hoá và có tốc độ xử lý tương đối nhanh

- Document của OpenCV rõ ràng và dễ hiểu

- OpenCV có cộng đồng sử dụng đông đảo giúp cho việc tìm hiểu và sửa lỗi thuận tiện hơn

Giai đoạn đầu: Từ ngày 05/03/2021 đến ngày 25/03/2021

2.1.1.3 Hướng xử lý chính và từng bước thực hiện

This method is specifically designed for counting chicken eggs by identifying regions in an image that may contain eggs and subsequently counting the number of eggs within those areas For a comprehensive understanding, refer to the techniques outlined in "Image Segmentation with Watershed Algorithm" from the OpenCV Official Document (2021) and "Color Detection using OpenCV Python" by Praveen (2020).

- Bước 2: Chuyển sang dạng HSV để dễ dàng lấy vùng màu đỏ của trứng gà

- Bước 3: Lấy vùng màu đỏ bằng function inRange của OpenCV

- Bước 4: Convert ảnh sang Gray, sau đó dùng Gaussian blur

- Bước 5: Dùng Thresh Otsu để chuyển ảnh sang dạng nhị phân

- Bước 6: Dùng Morphological Transformatiosn kiểu closing để xoá những object nhỏ

- Bước 7: Tìm contour, tính contourArea trung bình để xoá những contourArea quá nhỏ so với trung bình Sau đó Negative ảnh

Tới đây có 2 cách để tìm số quả trứng trong hình

- Bước 8: Sử dụng HoughCircle của OpenCV để tìm hình tròn trong từng contour

Chương 2: NỀN TẢNG LÝ THUYẾT VÀ CÔNG NGHỆ

- Bước 9: Kết luận số quả trứng trong hình là số lượng hình tròn phát hiện được

- Bước 8: Dùng Distance Transformations để tìm trọng tâm của từng contour

- Bước 9: Tìm vùng hình ảnh trứng gà chắc chắn của hình dựa vào mật độ các điểm màu

- Bước 9: Tìm contour của hình vừa có được và kết luận số quả trứng gà trong hình là số lượng contour phát hiện được

Có thể đếm được trứng gà trong hình với tốc độ tương đối cao, tối đa khoảng 10 trứng gà

- Ưu điểm: o Tốc độ xử lý nhanh, kết quả tương đối chính xác o Không cần server cấu hình cao để xử lý

Nhược điểm của phương pháp này bao gồm việc cần xác định chính xác vùng màu của đối tượng cần đếm, chẳng hạn như màu của trứng gà theo chuẩn HSV Ngoài ra, trong trường hợp các đối tượng chồng chéo hoặc tiếp xúc với nhau, việc xác định cũng trở nên khó khăn Hơn nữa, nếu các đối tượng có màu tương tự với màu nền, sẽ dễ xảy ra nhầm lẫn và dẫn đến kết quả không chính xác.

Kết quả của phương pháp hiện tại chỉ mang tính chất thực hành và tìm hiểu, không thể áp dụng vào thực tế Do đó, cần tìm kiếm phương pháp tối ưu hơn để đạt được kết quả chính xác hơn.

2.1.2 Phương pháp kết hợp xử lý ảnh bằng OpenCV và DO-U-Net

Phương pháp xử lý ảnh bằng OpenCV chỉ cho kết quả chính xác khi các vật thể tách rời và khác biệt với màu nền Do đó, nhóm đã nghiên cứu và tham khảo tài liệu về DO-U-Net để cải thiện khả năng phân đoạn.

Counting nhằm tách các vật thể bị chạm viền lên nhau

Kết hợp 2 phương pháp để có kết quả chính xác hơn

Giai đoạn 2: Từ ngày 25/03/2021 đến ngày 30/03/2021

2.1.2.3 Tổng quan về DO-U-Net

DO-U-Net, hay còn gọi là Dual-Output U-Net, là một mạng nơ-ron được phát triển bởi các tác giả Toyah Overton và Allan Tucker Mạng này được thiết kế nhằm mục đích tách biệt các đối tượng chồng lấp, giúp cải thiện khả năng phân vùng và đếm các đối tượng trong hình ảnh.

(counting) DO-U-Net là một kiểu Encoder-Decoder, Fully Convolutional Network (FCN)

- Source code GitHub: https://github.com/ToyahJade/DO-U-Net

- Hình ảnh Demo từ paper:

Chương 2: NỀN TẢNG LÝ THUYẾT VÀ CÔNG NGHỆ

Hình 2.2 Minh hoạ DO-U-Net

- Việc đánh nhãn và train theo mạng DO-U-Net khó khăn và tốn nhiều thời gian, nhưng kết quả đạt được không như dự định

- Neural Network của DO-U-Net khá nặng, thời gian đưa ra kết quả quá lâu 2.1.2.5 Nhận xét, mục tiêu

Vì những bất cập và khó khăn của phương pháp, nhóm đã thay đổi phương pháp và tham khảo paper khác để có kết quả tốt hơn

2.1.3 Đếm bằng sử dụng học máy và neural networks

Do những hạn chế còn tồn tại của hai phương pháp trước đó, nhóm nghiên cứu đã tìm hiểu và tham khảo thêm nhiều tài liệu về học máy nhằm đạt được kết quả tốt hơn.

Giai đoạn 3: Từ ngày 31/03/2021 đến hiện tại

Đã thực hiện đánh nhãn cho 10 bộ dataset, bao gồm các đối tượng như trứng, gỗ, ống thép hình tròn, ống thép hình chữ nhật, bi, đồng xu, hộp iPhone, thùng giấy carton, bàn phím và bao gạo Mỗi loại dataset chứa khoảng 50 hình ảnh và 2000 bounding box, giúp nâng cao độ chính xác trong việc nhận diện và phân loại đối tượng.

- Thu thập hơn 5 bộ dataset có sẵn là: BCCD, Fruit, Ship on Earth,

Sau hơn 150 lần huấn luyện, chúng tôi đã lựa chọn 9 mô hình có hiệu suất tốt cho 9 bộ dữ liệu đã được gán nhãn tương ứng Tuy nhiên, đối với bộ dữ liệu bao gạo, không có mô hình nào đạt được kết quả chính xác.

- Kết quả có độ chính xác tương đối cao, hầu hết các object được phát hiện hết (ngoại trừ những trường hợp bị khuất quá nhiều)

Công nghệ này mang lại nhiều ưu điểm vượt trội, bao gồm độ chính xác cao và khả năng nhận diện tốt, cùng với độ tin cậy cao Thời gian dự đoán trung bình chỉ khoảng 5 đến 10 giây mỗi lần, giúp tối ưu hóa quy trình làm việc Ngoài ra, kích thước mô hình nhỏ gọn (148MB mỗi mô hình) cho phép hoạt động hiệu quả trên các server có cấu hình bình thường Thời gian huấn luyện cũng tương đối ngắn, chỉ mất khoảng 3-4 giờ cho mỗi lần huấn luyện với 100 epoch và 250 bước mỗi epoch.

Nhược điểm của hệ thống bao gồm thời gian xử lý lâu với hình ảnh có độ phân giải cao, có thể mất hơn 1 phút để đưa ra kết quả Ngoài ra, hình ảnh có dung lượng lớn hơn 10MB có thể gây ra tình trạng crash và sập server Hệ thống cũng nhận diện được các loại vật thể khác, mặc dù không phải dự đoán bằng mô hình tương ứng.

Hiện tại, nhóm đã đạt được kết quả tốt, tuy nhiên cần nghiên cứu các phương pháp tối ưu hóa tốc độ dự đoán và tăng cường dữ liệu để cải thiện kết quả hơn nữa.

Server

Python là ngôn ngữ lập trình phổ biến cho việc phát triển server trong quá trình thực hiện luận văn Với khả năng dễ tiếp cận và sức mạnh vượt trội, Python là lựa chọn hàng đầu cho các ứng dụng xử lý ảnh và học máy.

Chương 2: NỀN TẢNG LÝ THUYẾT VÀ CÔNG NGHỆ

Flask là công cụ dùng phát triển server xuyên suốt trong quá trình thực hiện vì nó là công cụ mạnh mẽ và phù hợp nhất cho đề tài

Vì server được phát triển bằng Flask, nên triển khai server bằng Gunicorn là lựa chọn phù hợp suốt quá trình thực hiện

Heroku là một nền tảng đám mây (PasS - Platform as a Service) cho phép lập trình viên dễ dàng xây dựng, triển khai, quản lý và mở rộng ứng dụng Nền tảng này nổi bật với tính linh hoạt, khả năng tiếp cận cao và chi phí hợp lý Heroku hỗ trợ triển khai cho ngôn ngữ Python và nhiều ngôn ngữ lập trình khác, đồng thời cung cấp các dịch vụ tiện ích cần thiết như SSL.

Trong quá trình thực hiện luận văn, nhóm đã sử dụng Heroku để triển khai server với chi phí thấp và có bản miễn phí, đặc biệt trong giai đoạn đầu để thực hiện chức năng đếm trứng gà bằng OpenCV Link server được sử dụng là: https://my-kounter.herokuapp.com Sau đó, nhóm chuyển sang sử dụng Amazon Web Service – Elastic Compute Cloud từ ngày 25/03/2021 đến 30/03/2021.

Amazon Web Services (AWS) là nền tảng đám mây ra mắt vào năm 2006, cung cấp dịch vụ hạ tầng CNTT cho doanh nghiệp thông qua mô hình điện toán đám mây Trong đó, Elastic Compute Cloud (EC2) là dịch vụ web cho phép người dùng truy cập vào khả năng tính toán linh hoạt và bảo mật trên nền tảng đám mây.

2021) Cho phép chúng ta thuê và điều khiển một máy tính Virtual Machine trên đám mây hoạt động liên tục và có thể kết nối từ client

Trong quá trình thực hiện luận văn, nhóm đã sử dụng dịch vụ AWS EC2, nơi cung cấp miễn phí một máy ảo (VM) với cấu hình tương đối, phù hợp cho các chương trình học máy và học sâu nhẹ Cụ thể, nhóm đã triển khai một VM Ubuntu để thực hiện phương pháp kết hợp DO-Unet và OpenCV trong giai đoạn 2 của nghiên cứu.

2.2.3.3 Google Cloud Platform – Compute Engine

Google Cloud Platform (GCP) là nền tảng điện toán đám mây cho phép cá nhân, tổ chức và doanh nghiệp xây dựng, phát triển và vận hành ứng dụng trên hệ thống phần mềm của Google Trong đó, Compute Engine cung cấp dịch vụ máy tính ảo (VM), cho phép người dùng tùy chọn cấu hình phù hợp với giá cả tương ứng VM hoạt động liên tục và có thể kết nối từ client thông qua HTTP hoặc HTTPS.

Nhóm đã sử dụng Google Cloud và Compute Engine để triển khai một server có cấu hình cao (4 nhân CPU và 8GB RAM) nhằm thực hiện dự đoán kết quả từ mô hình học máy trong giai đoạn 3 cho đến hiện tại.

Client – iOS

2.3.1 Tính năng chính Ứng dụng iOS được xây dựng nhằm mục đích tạo điều kiện thuận lợi để kiểm tra lại độ chính xác của phương pháp đếm và để cho người dùng có thể tiếp cận được ứng dụng đếm thông qua hình ảnh nên chỉ bao gồm những tính năng thực sự cần thiết của một ứng dụng iOS dùng để đếm số vật thể trong hình ảnh Những tính năng chính gồm:

- Chọn hình ảnh từ ảnh chụp trực tiếp hoặc ảnh có sẵn trong thư viện để đếm

- Đếm và hiển thị kết quả với các tuỳ chọn như hiện độ chính xác, thay đổi độ chính xác

- Chia sẻ kết quả sau khi đếm

- Lưu lại lịch sử đếm

Swift là ngôn ngữ lập trình hướng đối tượng do Apple phát triển, được sử dụng để xây dựng ứng dụng cho nhiều thiết bị, bao gồm smartphone như iPhone và iPad, hệ điều hành macOS, đồng hồ với WatchOS, tivi qua tvOS, cùng nhiều thiết bị điện tử khác.

Chương 2: NỀN TẢNG LÝ THUYẾT VÀ CÔNG NGHỆ

- Ngôn ngữ lập Swift sẽ hỗ trợ tất cả các khái niệm cơ bản của lập trình C và Objective-C như đa luồng, hướng đối tượng, lập trình sự kiện, v.v

Apple đã giới thiệu nhiều tính năng nâng cao trong Swift mà Objective-C không có, bao gồm quản lý bộ nhớ tự động, các giao thức (protocols), các kiểu tập hợp như mảng (array), tập hợp (set) và từ điển (dictionary), tuples, dữ liệu tự định nghĩa, cùng với lập trình hướng giao thức.

2.3.4.1 Công cụ quản lý và cài đặt thư viện

CocoaPods là một công cụ quản lý thư viện dành cho ứng dụng viết bằng Swift hoặc Objective-C, giúp tổ chức và quản lý các thư viện bên ngoài theo một định dạng chuẩn Công cụ này được phát triển bởi Eloy Durán và Fabio Pelosin vào năm 2011.

2011 CocoaPods được truyền cảm hứng từ sự kết hợp cảu ácc dự án Ruby, Rubygems và Bundler

2.3.4.2 Danh sách các thư viện

- Alamofire: Sử dụng để gửi request lên server từ client thông qua

- JGProgressHUD: Sử dụng để hiển thị giao diện đang xử lý tiến trình

- SDWebImageSwiftUI: Sử dụng để hiển thị hình ảnh kiểu lazy loading

- KYDrawerController: Sử dụng để xử lý menu bar bên phải

- ASCollectionViewSwiftUI: Sử dụng để hiển thị danh sách các hình ảnh được chọn dạng collection

- SwiftyJSON: Dùng để chuyển đổi từ response JSON sang dictionary dễ dàng

- Firebase iOS SDK: Sử dụng để đăng nhập bằng Facebook, đăng nhập bằng email,

- SnapKit: Sử dụng để làm giao diện UIKit bằng code, tạo constraint thủ công

- OpenCV: Sử dụng OpenCV trong thiết bị iOS

- TLPhotoPicker: Sử dụng để làm giao diện chọn hình ảnh từ thư viện

- Parse: Gửi request trong background

- UIImageColors: Chọn màu nổi bật chủ đạo trong hình ảnh

- SokectIO: Sử dụng SocketIO trong thiết bị iOS

- LightBox: Sử dụng làm giao diện xem chi tiết kết quả

- SwiftUIRefresh: Tính năng pull to refresh của SwiftUI

PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

GitHub soucre code: https://github.com/hosituan/SKU110K_code

3.1 Xử lý ảnh số bằng thư viện OpenCV

“OpenCV is a library of programming functions mainly aimed at real-time computer vision Originally developed by Intel, it was later supported by Willow

Garage then Itseez The library is cross-platform and free for use under the open- source Apache 2 License.” (Wikipedia, 2021)

OpenCV là thư viện mã nguồn mở chuyên dụng cho các ứng dụng thị giác máy tính, nổi bật với tốc độ xử lý nhanh Ban đầu được phát hành bởi Intel, thư viện này sau đó nhận được sự hỗ trợ và phát triển từ Willow Garage và Itseez.

OpenCV được phát hành theo giấy phép BSD nên nó được miễn phí sử dụng cho học tập và sử dụng với mục đích thương mại

OpenCV hỗ trợ các ngôn ngữ Python, C++, C, Java và các nền tảng như

Windows, Linux, MacOS, iOS và cả Android

OpenCV có tài liệu hướng dẫn chi tiết và một cộng đồng người dùng rộng lớn trên toàn cầu, đang ngày càng phát triển Điều này giúp việc tiếp cận, học hỏi và sử dụng OpenCV trở nên dễ dàng hơn bao giờ hết.

Vì những ưu điểm vượt trội của OpenCV nên nó được ứng dụng rất nhiều trong thực tế, ví dụ (TopDev, 2021):

- Kiểm tra và giám sát xe

- Phân tích hình ảnh y học

- Nghệ thuật sắp đặt tương tác

- Robot và xe hơi tự lái

- Tìm kiếm, phục hồi ảnh/video

- Kiểm tra và giám sát tự động

3.1.3 Cách sử dụng OpenCV để đếm vật thể

Phương pháp này được tổng hợp từ nhiều nguồn tài liệu khác nhau, chủ yếu dựa vào tài liệu chính thức của OpenCV và hai bài viết về Phân đoạn hình ảnh sử dụng Thuật toán Watershed.

2021) và Color Detection using OpenCV Python (Praveen, 2020)

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

- Bước 2, 3 (chuyển sang không gian màu HSV và lấy vùng màu đỏ) tham khảo ở Color Detection using OpenCV Python

- Bước 5 (Thresh OTSU), 7 (findCountour) , 8 (Distance Transform) tham khảo ở Image Segmentation with Watershed Algorithm Input:

Hình 3.1 Ảnh đầu vào phương pháp OpenCV

- Bước 1: Đọc hình ảnh: o Function: cv2.imread o Output:

Hình 3.2 Kết quả bước 1 phương pháp OpenCV

- Bước 2: Chuyển đổi sang không gian màu HSV o Function: cv2.cvtColor(image, cv2.COLOR_BGR2HSV) o Output:

Hình 3.3 Kết quả bước 2 phương pháp OpenCV

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

Step 3: Extract the red regions in the image There are two red regions defined in HSV: lower_red (H=0, S=0, V=0) and upper_red (H=180, S=255, V=255) To achieve this, use the function cv2.inRange(hsv_img, lower_red, upper_red) to isolate these areas The output will reveal the detected red regions in the image.

Hình 3.4 Kết quả bước 3 phương pháp OpenCV

- Bước 4: Chuyển đổi ảnh sang Gray, Gaussion blur o Function: cv2.cvtColor(, cv2.COLOR_BGR2GRAY) và cv2.GaussianBlur(,(5,5),0) o Output:

Hình 3.5 Kết quả bước 4 phương pháp OpenCV

- Bước 5: Sử dụng Thresh OTSU để chuyển sang ảnh nhị phân: o Function: cv2.threshold(,0,255,cv2.THRESH_BINARY_INV+cv2. THRESH_OTSU) o Output:

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

Hình 3.6 Kết quả bước 5 phương pháp OpenCV

- Bước 6: Dùng Morphological Transformatiosn kiểu closing để xoá những object nhỏ: o Function: cv2.morphologyEx(, cv2.MORPH_CLOSE, np.ones((5,5), np.uint8)) o Output:

Hình 3.7 Kết quả bước 6 phương pháp OpenCV

- Bước 7: Tìm contour, tính contourArea trung bình để loại bỏ những object quá nhỏ: o Function: cv2.findContours(, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) o Output:

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

Hình 3.8 Kết quả bước 7 phương pháp OpenCV

Tới đây, ta có 2 cách để tìm quả trứng trong hình

Cách 1: Sử dụng HoughCircle để tìm hình tròn trong từng contour

- Bước 8: Sử dụng HoughCircle để tìm hình tròn và vẽ hình tròn đó lên ảnh gốc o Function: cv2.HoughCircles() và cv2.circle() o Output:

Hình 3.9 Kết quả cách 1 phương pháp OpenCV

Cách 2: Sử dụng Distance Transform để tìm trọng tâm và vẽ lên contour

In Step 8, utilize Distance Transform and Watershed techniques to extract the object from the image The function used is cv2.distanceTransform(mask, cv2.DIST_L2, 5) followed by cv2.threshold(dist_transform, 0.2 * dist_transform.max(), 255, 0) It is crucial to note that the value of 0.2 plays a significant role in this step; a larger value results in a smaller output image that is closer to the center, while a smaller value may hinder the separation of the object.

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

Hình 3.10 Kết quả bước 8, cách 2 phương pháp OpenCV

Hình 3.11 Kết quả bước 9, cách 2 phương pháp OpenCV

- Bước 9: Tìm contour và vẽ hình tròn bao quanh contour lên hình ảnh gốc o Function: cv2.findContour() o Output:

Hình 3.12 Kết quả cách 2 phương pháp OpenCV

Phương pháp này đã đem lại kết quả tương đối tốt, thời gian xử lý rất nhanh

- Một số hình ảnh đã đếm đúng:

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

Hình 3.13 Ví dụ kết quả đúng thứ nhất

Hình 3.14 Ví dụ kết quả đúng thứ 2

Hình 3.15 Ví dụ kết quả đúng thứ 3

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

Hình 3.16 Ví dụ kết quả đúng thứ 4

- Một số hình ảnh đếm sai:

Hình 3.17 Ví dụ kết quả sai thứ nhất

Hình 3.18 Ví dụ kết quả sai thứ 2

Thuật toán này có nhiều ưu điểm nổi bật, bao gồm kết quả tương đối tốt với độ chính xác cao và thời gian xử lý nhanh chóng Nó không yêu cầu phần cứng mạnh mẽ, đồng thời thuật toán cũng không quá phức tạp nhờ sự hỗ trợ đầy đủ từ thư viện OpenCV Chỉ cần xác định trước vùng màu của loại vật thể cần đếm, bạn có thể dễ dàng phát hiện và đếm chính xác vật thể đó.

Kết quả phân tích có những nhược điểm như độ chính xác chưa cao đối với các hình ảnh khó khăn và bị khuất, khả năng khoanh vùng sai vị trí không phù hợp với kích thước quả trứng, và độ chính xác kém trong các hình ảnh có mật độ hoặc số lượng vật thể quá lớn.

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

Do những bất cập và khuyết điểm còn tồn tại, ảnh hưởng nghiêm trọng đến mục tiêu của đề tài, nhóm đã quyết định thay đổi phương pháp xử lý sang Học máy.

3.2 Phương pháp sử dụng Học máy và Neural Networks

GitHub source code: https://github.com/hosituan/kounter-server

GitHub Source code: https://github.com/fizyr/keras-retinanet

3.2.1.1 Giới thiệu về Keras RetinaNet

“Keras implementation of RetinaNet object detection as described in Focal

Loss for Dense Object Detection by Tsung-Yi Lin, Priya Goyal, Ross

Girshick, Kaiming He and Piotr Dollár.” (Keras RetinaNet, 2021)

Keras RetinaNet là một phương pháp cài đặt một mô hình phát hiện vật thể dựa theo mạng RetinaNet

Paper SKU-110K CVPR train based model dựa theo Keras Retinanet

Paper SKU-110K CVPR thêm 1 layer mới là Soft-IoU layer để train thêm một lần nữa tăng độ chính xác

Việc train, predict và convert interface model hoàn toàn dựa vào Keras RetinaNet

ResNet (Residual Network) được giới thiệu vào năm 2015 và đã giành vị trí thứ nhất trong cuộc thi ILSVRC 2015 với tỷ lệ lỗi top 5 chỉ 3.57% Ngoài ra, nó còn đứng đầu trong các cuộc thi ILSVRC và COCO 2015 về ImageNet Detection, ImageNet Localization, COCO Detection và COCO Segmentation Hiện nay, có nhiều biến thể của kiến trúc ResNet với số lớp khác nhau, bao gồm ResNet-18, ResNet-34, ResNet-50, ResNet-101, và ResNet-152, trong đó tên gọi ResNet được theo sau bởi số lượng lớp cụ thể.

3.2.1.3 Mục đích của mạng Resnet

Mạng Resnet là một mạng CNN được thiết kế để xử lý hàng trăm đến hàng nghìn lớp chập, giúp khắc phục hiện tượng Vanishing Gradient thường gặp khi xây dựng mạng CNN với nhiều lớp Quá trình huấn luyện bắt đầu từ lớp đầu ra đến lớp đầu vào, tính toán gradient của hàm mất mát cho từng trọng số, sau đó sử dụng Gradient Descent để cập nhật các tham số Số lần lặp (epoch) quyết định số lần duyệt qua tập huấn luyện và cập nhật trọng số, nhưng nếu quá ít vòng lặp, mạng sẽ không đạt kết quả tốt, trong khi quá nhiều vòng lặp sẽ kéo dài thời gian huấn luyện Mạng Resnet ra đời nhằm giải quyết vấn đề này, giúp cải thiện khả năng hội tụ của mạng và nâng cao hiệu suất trong quá trình đào tạo.

Hình 3.19 Cấu trúc mạng Resnet

Một mạng Resnet 50 bao gồm:

- Một tích chập với một kernel kích thước 7x7 và 64 kernel khác với một stride có kích thước 2 là 1 layer

- Max Pooling với kích thướng stride là 2 là 1 layer

Trong phép chập tiếp theo, cấu trúc bao gồm một kernel 1x1 với 64 kênh, tiếp theo là kernel 3x3 với 64 kênh, và cuối cùng là một kernel 1x1 với 256 kênh Ba lớp này được lặp lại tổng cộng 3 lần, tạo thành tổng cộng 9 lớp trong bước này.

- Tiếp theo là một kernel 1x1, 128 và sau đó là 3x3, 128 cuối cùng là 1x1, 512 Bước này lặp lại 4 lần nên ta có 12 layer

- Sau đó, một kernel 1x1, 256 và hai kernel nữa là 3x3, 256 và 1x1, 1024 Điều này lặp lại 6 lần nên ở bước này có tổng cộng 18 layer

- Sau đó, một kernel 1x1, 512 và hai kernel 3x3, 512 và 1x1, 2048 Điều này lặp lại 3 lần nên ta có 9 layer

- Cuối cùng, thực hiện average pool và kết thúc bằng một layer fully connected chứa 1000 nút Và cuối cùng là một hàm softmax để có 1 layer

Vậy tổng cộng có: 1 + 9 + 12 + 18 + 9 + 1 = 50 layers Deep Convolution Network

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

3.2.2 Precise Detection in Densely Packed Scenes – CVPR 2019 paper

Man-made scenes often feature a high density of closely positioned, identical objects, posing significant challenges for precise object detection Despite advancements in state-of-the-art object detectors, achieving accurate detection in these environments remains a difficult task To address this issue, we introduce an innovative deep-learning approach tailored for precise object detection in complex settings Our key contribution includes the development of a specialized layer that estimates the Jaccard index as a score for evaluating detection quality.

We introduce a novel EM merging unit that leverages quality scores to effectively address detection overlap ambiguities Additionally, we present SKU-110K, an extensive annotated dataset designed to represent packed retail environments, which is utilized for training and testing under challenging conditions Our detection tests on SKU-110K, along with counting tests on CARPK and PUCPR+, demonstrate that our method significantly outperforms existing state-of-the-art approaches by substantial margins.

Trích dẫn lời tựa từ bài báo:

Các hình ảnh chứa các vật thể được sắp xếp dày đặc, với nhiều đối tượng giống nhau và gần nhau, tạo ra thách thức lớn cho việc phát hiện đối tượng chính xác Việc nhận diện các đối tượng trong những bối cảnh này vẫn là một vấn đề khó khăn ngay cả với các công nghệ hiện tại Chúng tôi đề xuất một phương pháp dựa trên học sâu nhằm cải thiện khả năng phát hiện đối tượng chính xác trong các tình huống phức tạp này Những đóng góp của nghiên cứu này sẽ giúp nâng cao hiệu suất của các hệ thống phát hiện đối tượng.

- (1) Một lớp để ước tính số Jaccard là điểm chất lượng phát hiện

- (2) Đơn vị hợp nhất EM mới, sử dụng điểm chất lượng để giải quyết sự mơ hồ chồng chéo

Cuối cùng, SKU110K là một tập hợp dữ liệu phong phú bao gồm hình ảnh hàng hóa bán lẻ đã được đóng gói, được phát hành nhằm mục đích đào tạo và thử nghiệm theo các cài đặt đã đề ra.

MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

4.1 Bộ dữ liệu đã thu thập, đánh nhãn trong đề tài

Drive folder: https://drive.google.com/drive/folders/18oIQsmRKV5mvKcdYS4cDxNiU5yM mwMgK?usp=sharing

Hình 4.1 Dataset trứng Định dạng dataset: RetinaNet Keras CSV

Số lượng hình ảnh: 67 hình

Số lượng vật thể: 580 vật thể

Số lượng vật thể trung bình trên ảnh: 11 vật thể/hình

Hình 4.2 Dataset gỗ Định dạng dataset: RetinaNet Keras CSV

Số lượng vật thể: 1084 vật thể

Số lượng vật thể trung bình trên ảnh: 60 vật thể/hình

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.3 Dataset ống thép hình tròn Định dạng dataset: RetinaNet Keras CSV

Số lượng vật thể: 1000 vật thể

Số lượng vật thể trung bình trên ảnh: 63 vật thể/hình

Hình 4.4 Dataset đồng xu Định dạng dataset: RetinaNet Keras CSV

Số lượng vật thể: 1146 vật thể

Số lượng vật thể trung bình trên ảnh: 35 vật thể/hình

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.5 Dataset nắp chai Định dạng dataset: RetinaNet Keras CSV

Số lượng vật thể: 1334 vật thể

Số lượng vật thể trung bình trên ảnh: 29 vật thể/hình

Hình 4.6 Dataset thùng giấy Định dạng dataset: RetinaNet Keras CSV

Số lượng vật thể: 882 vật thể

Số lượng vật thể trung bình trên ảnh: 29 vật thể/hình

4.1.7 Dataset ống thép hình chữ nhật

Hình 4.7 Dataset ống thép hình chữ nhật Định dạng dataset: RetinaNet Keras CSV

Số lượng hình ảnh: 28 hình

Số lượng vật thể: 1548 vật thể

Số lượng vật thể trung bình trên ảnh: 55 vật thể/hình

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.8 Dataset viên bi Định dạng dataset: RetinaNet Keras CSV

Số lượng hình ảnh: 46 hình

Số lượng vật thể: 1835 vật thể

Số lượng vật thể trung bình trên ảnh: 40 vật thể/hình

Hình 4.9 Dataset hộp iPhone Định dạng dataset: RetinaNet Keras CSV

Số lượng hình ảnh: 37 hình

Số lượng vật thể: 1271 vật thể

Số lượng vật thể trung bình trên ảnh: 34 vật thể/hình

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.10 Dataset bàn phím Định dạng dataset: RetinaNet Keras CSV

Số lượng hình ảnh: 15 hình

Số lượng vật thể: 1328 vật thể

Số lượng vật thể trung bình trên ảnh: 89 vật thể/hình

4.2 Model học máy đã huấn luyện được trong đề tài

Drive folder: https://drive.google.com/drive/folders/1nb7oK5SY0g6DCNkactUporMnb4IFQj Fu?usp=sharing

Quá trình train gồm 100 epoch và 250 step per epoch, tại Google Colab

Hình 4.11 Biểu đồ classification_loss model trứng

Hình 4.12 Biểu đồ loss model trứng

Hình 4.13 Biểu đồ regression_loss model trứng

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.14 Biểu đồ val_classification_loss model trứng

Hình 4.15 Biểu đồ val_regression_loss model trứng

Hình 4.16 Biểu đồ loss train IoU layer model trứng

Hình 4.17 Biểu đồ val_regression_loss train IoU layer model trứng

Quá trình train gồm 100 epoch và 250 step per epoch, tại Google Colab

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.18 Biểu đồ classification_loss model viên bi

Hình 4.19 Biểu đồ loss model viên bi

Hình 4.20 Biểu đồ regression_loss model viên bi

Hình 4.21 Biểu đồ val_classification_loss model viên bi

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.22 Biểu đồ val_regression_loss model viên bi

Hình 4.23 Biểu đồ loss train IoU layer model viên bi

4.2.3 Ống thép hình chữ nhật

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab

Hình 4.24 Biểu đồ classification_loss model ống thép hình chữ nhật

Hình 4.25 Biểu đồ loss model ống thép hình chữ nhật

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.26 Biểu đồ regression_loss model ống thép hình chữ nhật

Hình 4.27 Biểu đồ val_regression_loss model ống thép hình chữ nhật

Hình 4.28 Biểu đồ loss train IoU layer model ống thép hình chữ nhật

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab

Hình 4.29 Biểu đồ classification_loss model ống thép hình tròn

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.30 Biểu đồ classification_loss model ống thép hình tròn

Hình 4.31 Biểu đồ regression_loss model ống thép hình tròn

Hình 4.32 Biểu đồ val_regression_loss model ống thép hình tròn

Hình 4.33 Biểu đồ loss train IoU layer model ống thép hình tròn

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.34 Biểu đồ classification loss model thùng giấy

Hình 4.35 Biểu đồ loss model thùng giấy

Hình 4.36 Biểu đồ Regression loss model thùng giấy

Hình 4.37 Biểu đồ Val_regression_loss model thùng giấy

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.38 Biểu đồ loss train IoU layer model thùng giấy

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab

Hình 4.39 Biểu đồ classification_loss model hộp điện thoại iPhone

Hình 4.40 Biểu đồ loss model hộp điện thoại iPhone

Hình 4.41 Biểu đồ regression_loss model hộp điện thoại iPhone

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.42 Biểu đồ val_regression_loss model hộp điện thoại iPhone

Hình 4.43 Biểu đồ loss train IoU layer model hộp điện thoại iPhone

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab

Hình 4.44 Biểu đồ classification_loss model bàn phím

Hình 4.45 Biểu đồ loss model bàn phím

Hình 4.46 Biểu đồ regression_loss model bàn phím

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.47 Biểu đồ val_regression_loss model bàn phím

Hình 4.48 Biểu đồ loss train IoU layer model bàn phím

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab

Hình 4.49 Biểu đồ classification_loss model khúc gỗ hình tròn

Hình 4.50 Biểu đồ loss model khúc gỗ hình tròn

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.51 Biểu đồ regression_loss model khúc gỗ hình tròn

Hình 4.52 Biểu đồ val_regression_loss model khúc gỗ hình tròn

Hình 4.53 Biểu đồ loss train IoU layer model khúc gỗ hình tròn

4.2.9.1 Train cho model base detector

Hình 4.54 Biểu đồ classification_loss model đồng xu

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.55 Biểu đồ regression_loss model đồng xu

Hình 4.56 Biểu đồ val_classification_loss model đồng xu

Hình 4.57 Biểu đồ val_regression_loss model đồng xu

Hình 4.58 Biểu đồ val_loss model đồng xu

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.59 Biểu đồ loss train IoU layer model đồng xu

Hình 4.60 Biểu đồ val_loss train IoU layer model đồng xu

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab

Hình 4.61 Biểu đồ classification_loss model nắp chai

Hình 4.62 Biểu đồ loss model nắp chai

Hình 4.63 Biểu đồ regression_loss model nắp chai

Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.64 Biểu đồ val_regression_loss model nắp chai

Hình 4.65 Biểu đồ loss train IoU layer model nắp chai

PYTHON SERVER

GitHub source code: https://github.com/hosituan/kounter-server

5.1 Flask, Gunicorn, Flask-SocketIO và SocketIO

- Là một micro web framework để phát triển Web bằng ngôn ngữ Python ra mắt vào năm 2010 bởi nhà phát triển Amin Ronacher

Kích thước của ứng dụng rất nhỏ gọn và nhẹ, không cần bất kỳ thư viện hay công cụ nào khi cài đặt Nó không sử dụng lớp trừu tượng cơ sở dữ liệu, xác thực biểu mẫu hay bất kỳ thành phần nào không thực sự cần thiết.

- Dễ dàng để một người mới về Python phát triển được một Web Server hoặc website nhỏ

- Dễ dàng nâng cấp, mở rộng trong ứng dụng phức tạp

- Sử dụng trong luận văn: Dùng để phát triển web server

- Theo khảo sát của Stack Overflow về độ phổ biến của các web framework cho thấy mức độ phổ biến của Flask tương đối cao:

Hình 5.1 Biểu đồ sử dụng web framework

Chương 5: PYTHON SERVER o Tốc độ o Hỗ trợ NoQuery o Tốt giản tuyệt đối, độ phức tạp tối thiểu o Dễ dàng kết nối tiện ích mở rộng o Cung cấp xử lý HTTP request o API độc đáo và mạch lạc o Hỗ trợ bảo mật cookie o Trình gỡ lỗi được nhúng trong trình duyệt o Document rõ ràng và dễ sử dụng

Mặc dù Flask nổi bật với sự đơn giản và nhẹ nhàng, nhưng người dùng thường phải tự cài đặt các gói phần mềm bổ sung và tiện ích mở rộng, cũng như thực hiện nhiều công việc khác để hoàn thiện dự án của mình.

Gunicorn is a stable WSGI (Web Server Gateway Interface) Python web server that is widely deployed in real-world production environments.

- Gunicorn dễ sử dụng và hỗ trợ nhiều web framework khác nhau như Django, Flask, (Vimentor, 2018)

- Sử dụng trong luận văn: Dùng để triển khai server 5.1.1.3 Flask-SocketIo và SocketIO

- Flask-SocketIO và SocketIO là công cụ cho phép ứng dụng Flask giao tiếp 2 chiều có độ trễ thấp giữa client và server

- Ứng dụng phía client có thể sử dụng bất kỳ ngôn ngữ nào trong JavaScript, Python, C++, Java và Swift

- Sử dụng trong luận văn: Dùng để client theo dõi tiến độ đếm của server

5.1.2 Cài đặt và sử dụng

- Cài đặt: pip install flask

Ví dụ cài đặt hai function chính ở file server.py: app = Flask( name ) if name == " main ": socketio.run(app,host='0.0.0.0',port,debugse, use_reloaderse)

@app.route('/', methods=['GET', 'POST']) def welcome(): return "Hello from My Kounter"

Cài đặt và sử dụng Flask rất đơn giản, chỉ với hai hàm cơ bản bạn đã có thể tạo một web server với đường dẫn chính trả về một dòng chữ đơn giản Gunicorn là một lựa chọn phổ biến để triển khai ứng dụng Flask.

- Cài đặt: pip install gunicorn

Cấu hình file wsgi.py để import và sử dụng file server.py from server import app if name == " main ": app.run()

Sau đó chạy lệnh: gunicorn bind 0.0.0.0:8080 wsgi:app Server sẽ được khởi động với WSGI Entry Point

- Cài đặt: pip install flask-socketio

To import the necessary package in your project, use `from flask_socketio import SocketIO, emit` When you want to send results back to the client, utilize the `emit()` function The client will receive the packet under the key "countResult" with the following code: `socketio.emit('countResult', { 'success': True })`.

5.2 Tổng quan nguyên lý hoạt động

Khi client gửi thông tin loại vật thể mà người dùng chuẩn bị đếm, server sẽ load model vào bộ nhớ sẵn

Khi người dùng bắt đầu đếm, hệ thống sẽ nhận diện hình ảnh cần đếm và sử dụng mô hình học máy đã được huấn luyện để xác định vị trí các vật thể Kết quả sẽ được chuyển đổi và trả về cho phía client dưới dạng tọa độ x, y, chiều cao, chiều rộng và điểm số.

Mục đích của hệ thống là nhận hình ảnh từ phía khách hàng, sau đó áp dụng mô hình học máy để xác định vị trí các vật thể có trong hình ảnh và trả kết quả về cho khách hàng dưới định dạng JSON.

Sử dụng SocketIO để thông báo cho client tiến độ thực hiện của Server

Mục đích của việc gửi thông tin lên server khi client chọn một loại vật thể là để chuẩn bị cho quá trình xử lý Do việc tải model vào RAM mất nhiều thời gian, hệ thống sẽ chủ động tải model trước khi nhận được thông tin, nhằm giảm thiểu thời gian đưa ra kết quả.

- Mục đích: Cho phép người dùng upload hình lên server và lưu vào bộ nhớ

Khi Admin thêm một template mới với DriveID (ID Google Drive của file mẫu), server sẽ cập nhật danh sách các mẫu và tải file đó về.

- Mục đích: Khi admin yêu cầu xoá template thì hệ thống sẽ xoá model đã tải và xoá model khỏi danh sách các model.

ỨNG DỤNG iOS

GitHub source code: https://github.com/hosituan/kounter-server

6.1 Công nghệ sử dụng - SwiftUI

SwiftUI là một framework mới do Apple phát triển, cung cấp API cho phép lập trình viên viết mã và làm việc trên tất cả các nền tảng của Apple, bao gồm iOS, iPadOS, watchOS và tvOS.

SwiftUI, được sử dụng từ iOS 13 trở lên, đang trở thành xu hướng mới trong phát triển ứng dụng Công nghệ này mang lại sự đơn giản trong quá trình lập trình và giúp tăng tốc độ xây dựng ứng dụng so với UIKit.

SwiftUI hiện đang trở thành lựa chọn phổ biến cho nhiều lập trình viên, mặc dù vẫn đang trong quá trình nâng cấp và hoàn thiện Sự tin tưởng vào khả năng phát triển mạnh mẽ của SwiftUI trong tương lai là lý do chính khiến nhiều người quyết định sử dụng công nghệ này.

- SwiftUI sẽ là một Framework mạnh mẽ trong tương lai gần, tuy còn nhiều thiếu sót nhưng Apple đã và đang ngày một hoàn thiện cho nó

- iOS tối thiểu là iOS 13

- MacOS Catalina và XCode 11 Beta trở lên để SwiftUI render Canvas

- Cấu trúc của SwiftUI gồm:

Hình 6.2 Cấu trúc project SwiftUI

6.1.3.1 Cách thức hoạt động

Trong iOS 13, AppDelegate vẫn giữ vai trò là điểm truy cập chính của ứng dụng, chịu trách nhiệm xử lý các sự kiện trong vòng đời ứng dụng Các phương thức trong AppDelegate cần thiết để phản hồi khi ứng dụng được khởi chạy, chạy nền, chuyển từ nền trước, và nhận dữ liệu.

- Ở AppDelegate, những điều chúng ta thường viết mã ứng dụng cho iOS

Trong ứng dụng, trình điều khiển xem đầu tiên (gọi là trình điều khiển xem gốc) được thiết lập tại phương thức func (_: didFinishLaunchingWithOptions :), đây là func đầu tiên mà hệ điều hành gọi khi khởi chạy ứng dụng Tại đây, chúng ta định cấu hình cài đặt ứng dụng và các thành phần khởi động, đăng ký trình xử lý thông báo, và phản hồi các sự kiện trong vòng đời của ứng dụng như khi ứng dụng chạy ở chế độ nền, foreground hoặc khi thoát Tuy nhiên, hiện tại chúng ta không cần quá quan tâm đến AppDelegate nữa, vì môi trường hoạt động chính đã chuyển sang SceneDelegate.

Từ iOS 13 trở lên, SceneDelegate đảm nhận vai trò quan trọng trong ứng dụng, thay thế UIWindow bằng UIScene Mỗi ứng dụng có thể có nhiều Scene, với mỗi Scene đóng vai trò nền tảng cho giao diện và nội dung của ứng dụng SceneDelegate chịu trách nhiệm về những gì hiển thị trên màn hình, bao gồm giao diện người dùng và dữ liệu Ngoài ra, người dùng có khả năng tạo bản sao của một Scene, cho phép chạy nhiều phiên bản của ứng dụng cùng lúc.

SceneDelegate là một phần quan trọng trong các dự án iOS mới, tự động tạo ra và bao gồm các sự kiện vòng đời như hoạt động và ngắt kết nối Class AppDelegate giờ đây có hai chức năng mới liên quan đến các phiên Scene, bao gồm application(:configurationForConnecting:options:) và application(:didDiscardSceneSessions:) Danh sách thuộc tính info.plist hiện nhận bản khai Sceneapplication (Application Scene Manifest), liệt kê các Scene của ứng dụng, bao gồm tên class, delegate và Storyboard Để thiết lập trình điều khiển xem đầu tiên của ứng dụng, chúng ta sử dụng scene(:willConnectTo:options:), tương tự như cách AppDelegate sử dụng didFinishLaunchingWithOptions.

Trong SceneDelegate, có một số chức năng quan trọng như sau: `sceneDidDisconnect(_:)` được gọi khi một Scene bị ngắt kết nối khỏi ứng dụng, tức là khi ứng dụng bị tắt `sceneDidBecomeActive(_:)` được kích hoạt khi người dùng bắt đầu tương tác với một Scene, chẳng hạn như khi quay trở lại ứng dụng từ một ứng dụng khác hoặc khi ứng dụng xuất hiện lần đầu `sceneWillResignActive(_:)` được gọi khi người dùng ngừng tương tác với một Scene, nghĩa là khi chuyển sang Scene khác Cuối cùng, `sceneWillEnterForeground(_:)` được kích hoạt khi một Scene đi vào trạng thái foreground, tức là bắt đầu hoặc tiếp tục từ trạng thái này.

Chương 6: ỨNG DỤNG iOS o sceneDidEntryBackground (_ :) được gọi khi một Scene vào background, tức là ứng dụng được thu nhỏ nhưng vẫn đang chạy ở background

6.1.3.2 Một số bộ phận khác của SwiftUI

- Assets.xcassets đây chính là nơi chứa ảnh của Project

- LaunchScreen.xib là màn hình chờ khi khởi động App

Trong giao diện ContenView, có hai thành phần chính là ContentView và ContentView_Previews ContentView là nơi để người dùng tạo giao diện bằng mã code, trong khi ContentView_Previews giúp đồng bộ trực tiếp giữa mã code và thiết kế, tạo ra sự tương tác mượt mà giữa chúng.

- Khởi chạy màn hình Preview nếu chúng ta muốn vừa code vừa xem sự thay đổi UI vừa được thêm vào bằng code một cách trực tiếp

Bên trong ContentView, biến body: some View đóng vai trò là Scene chính cho mỗi View Tất cả các thành phần bên trong đều phải tuân theo một Protocol chung, đó là View.

SwiftUI mang lại nhiều ưu điểm nổi bật, khiến nó trở thành lựa chọn hàng đầu cho việc xây dựng giao diện Đầu tiên, thiết kế theo phong cách declarative giúp đơn giản hóa quá trình lập trình Thứ hai, tốc độ phát triển ứng dụng nhanh hơn so với UIKit Hơn nữa, SwiftUI cho phép kết hợp cả UIKit và SwiftUI, tối ưu hóa lợi thế của cả hai framework Một điểm cộng lớn là nó cung cấp khung hình giao diện trực tiếp, giúp lập trình viên kiểm tra kết quả mà không cần khởi động Simulator hay thiết bị Thay vì sử dụng InterfaceBuilder, SwiftUI sử dụng Canvas, tự động thêm code khi kéo vào màn hình Preview Điều này cũng giúp loại bỏ các sự cố crash ứng dụng do quên kéo IBOutlet Không còn AutoLayout và các vấn đề liên quan, thay vào đó là các bố cục như VStack, ZStack, HStack, Groups, Lists, giúp việc quản lý code trong nhóm trở nên dễ dàng hơn.

SwiftUI có một số nhược điểm như không hỗ trợ các phiên bản iOS thấp hơn iOS 13, mặc dù hơn 80% người dùng đã nâng cấp lên iOS 13 trở lên tính đến tháng 06/2020 theo thống kê từ Apple Bên cạnh đó, cộng đồng SwiftUI vẫn chưa phát triển mạnh mẽ và nó cũng không cho phép kiểm tra phân cấp ContentView_Previews.

6.2 Đặc tả yêu cầu phần mềm

STT Chức năng chính Guest User Admin

STT Chức năng chính Guest User Admin

6.3 Tổng quan nguyên lý hoạt động

Người dùng có thể lựa chọn template để đếm, sau đó chụp ảnh trực tiếp từ camera hoặc chọn hình ảnh từ thư viện Khi bấm đếm, ứng dụng sẽ gửi hình ảnh lên server và hiển thị tiến độ Kết quả sẽ được hiển thị và lưu lại lịch sử sau khi hoàn thành.

6.4.1 Lựa chọn template cần đếm:

Người dùng có thể lựa chọn template cần đếm ngay trên màn hình chính, nơi danh sách template được hiển thị dưới dạng danh sách với từng mục bao gồm hình ảnh và mô tả của template, cung cấp đầy đủ thông tin cần thiết Nếu template mong muốn không có trong danh sách, người dùng có thể nhấp vào nút "Đề xuất Template" để được chuyển đến màn hình đề xuất template.

Hình 6.3 Các thành phần chính của Home Screen

6.4.2 Lựa chọn hình ảnh và đếm:

Người dùng có hai lựa chọn để chọn hình ảnh cho việc đếm: chọn ảnh từ thư viện (Select from Library) hoặc chụp ảnh trực tiếp từ camera (Take photo) Khi nhấn vào bất kỳ mẫu nào trên màn hình chính (Home Screen), người dùng sẽ được chuyển đến màn hình đếm (Count Screen), nơi hiển thị thông tin về mẫu đã chọn (Template Information) Để bắt đầu quá trình chọn ảnh để đếm, người dùng chỉ cần nhấn vào nút chọn ảnh (Select Photo Button).

Hình 6.4 Các thành phần chính của Count Screen

Hình 6.5 Count Screen sau khi người dùng ấn Select Button

Ngày đăng: 05/06/2022, 17:37

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Vimentor. (2018). Chạy ứng dụng Flask với Gunicorn trên ubuntu. Được truy lục từ https://vimentor.com/vi/lesson/6-chay-ung-dung-flask-voi-gunicorn-tren-ubuntu Sách, tạp chí
Tiêu đề: Chạy ứng dụng Flask với Gunicorn trên ubuntu
Tác giả: Vimentor
Năm: 2018
[2] TOMOSIA. (2021). SwiftUI là gì? Được truy lục từ https://blog.tomosia.com/swiftui-la-gi/ Sách, tạp chí
Tiêu đề: SwiftUI là gì
Tác giả: TOMOSIA
Năm: 2021
[3] NIITHanoi. (2019). Flask là gì? Bạn biết gì về framework này? Được truy lục từ https://blog.tomosia.com/swiftui-la-gi/ Sách, tạp chí
Tiêu đề: Flask là gì? Bạn biết gì về framework này
Tác giả: NIITHanoi
Năm: 2019
[4] Keras RetinaNet. (2021). Keras RetinaNet. Được truy lục từ https://github.com/fizyr/keras-retinanet Sách, tạp chí
Tiêu đề: Keras RetinaNet
Tác giả: Keras RetinaNet
Năm: 2021
[5] Viblo Asia. (2020). Giới thiệu mạng ResNet. Được truy lục từ https://viblo.asia/p/gioi-thieu-mang-resnet-vyDZOa7R5wj Sách, tạp chí
Tiêu đề: Giới thiệu mạng ResNet
Tác giả: Viblo Asia
Năm: 2020
[6] OpenCV Official Document. (2021). Image Segmentation with Watershed Algorithm. Được truy lục từhttps://docs.opencv.org/master/d3/db4/tutorial_py_watershed.html Sách, tạp chí
Tiêu đề: Image Segmentation with Watershed Algorithm
Tác giả: OpenCV Official Document
Năm: 2021
[7] Praveen. (2020). Color Detection using OpenCV Python. Được truy lục từ https://medium.com/programming-fever/color-detection-using-opencv-python-6eec8dcde8c7 Sách, tạp chí
Tiêu đề: Color Detection using OpenCV Python
Tác giả: Praveen
Năm: 2020
[8] TopDev. (2020). Heroku là gì? Được truy lục từ https://topdev.vn/blog/heroku- la-gi/ Sách, tạp chí
Tiêu đề: Heroku là gì
Tác giả: TopDev
Năm: 2020
[9] Amazon. (2021). Amazon là gì? Được truy lục từ https://aws.amazon.com/vi/about-aws/ Sách, tạp chí
Tiêu đề: Amazon là gì
Tác giả: Amazon
Năm: 2021
[10] ITNAVI. (2020). Google Cloud Là Gì? Những Dịch Vụ Mà Google Cloud Cung Cấp. Được truy lục từ https://blog.itnavi.com.vn/google-cloud-la-gi-nhung-dich-vu-ma-google-cloud-cung-cap/ Sách, tạp chí
Tiêu đề: Google Cloud Là Gì? Những Dịch Vụ Mà Google Cloud Cung Cấp
Tác giả: ITNAVI
Năm: 2020
[11] Wikipedia. (2021). OpenCV. Được truy lục từ https://en.wikipedia.org/wiki/OpenCV Sách, tạp chí
Tiêu đề: OpenCV
Tác giả: Wikipedia
Năm: 2021
[13] PapeWithCode. (2019). Precise Detection in Densely Packed Scenes. Được truy lục từ https://paperswithcode.com/paper/precise-detection-in-densely-packed-scenes Sách, tạp chí
Tiêu đề: Precise Detection in Densely Packed Scenes
Tác giả: PapeWithCode
Năm: 2019
[14] PapeWithCode. (2019). Precise Detection in Densely Packed Scenes. Được truy lục từ https://paperswithcode.com/paper/precise-detection-in-densely-packed-scenes Sách, tạp chí
Tiêu đề: Precise Detection in Densely Packed Scenes
Tác giả: PapeWithCode
Năm: 2019
[15] Wikipedia. (2021). OpenCV. Được truy lục từ https://en.wikipedia.org/wiki/OpenCV Sách, tạp chí
Tiêu đề: OpenCV
Tác giả: Wikipedia
Năm: 2021
[16] Praveen. (2020). Color Detection using OpenCV Python. Được truy lục từ https://medium.com/programming-fever/color-detection-using-opencv-python-6eec8dcde8c7 Sách, tạp chí
Tiêu đề: Color Detection using OpenCV Python
Tác giả: Praveen
Năm: 2020
[17] OpenCV Official Document. (2021). Image Segmentation with Watershed Algorithm. Được truy lục từ Sách, tạp chí
Tiêu đề: Image Segmentation with Watershed Algorithm
Tác giả: OpenCV Official Document
Năm: 2021
[12] TopDev. (2021). Được truy lục từ https://topdev.vn/blog/opencv-la-gi-hoc-computer-vision-khong-kho/Tiếng Anh Link

HÌNH ẢNH LIÊN QUAN

Hình 3.15 Ví dụ kết quả đúng thứ 3 - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
Hình 3.15 Ví dụ kết quả đúng thứ 3 (Trang 38)
Hình 3.23 Code minh hoạ predict bằng phương pháp học máy - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
Hình 3.23 Code minh hoạ predict bằng phương pháp học máy (Trang 49)
Train set: 27 hình Validation set: 8 hình - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
rain set: 27 hình Validation set: 8 hình (Trang 54)
Train set: 33 hình Validation set: 4 hình - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
rain set: 33 hình Validation set: 4 hình (Trang 58)
Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
h ương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU (Trang 63)
Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
h ương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU (Trang 69)
Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
h ương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU (Trang 73)
Hình 4.38 Biểu đồ loss train IoU layer model thùng giấy 4.2.6.Hộp điện thoại iPhone - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
Hình 4.38 Biểu đồ loss train IoU layer model thùng giấy 4.2.6.Hộp điện thoại iPhone (Trang 73)
Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
h ương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU (Trang 75)
Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
h ương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU (Trang 79)
Chương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
h ương 4: MÔ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU (Trang 81)
Hình 6.6 Các thành phần của SelectedPhotoScreen - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
Hình 6.6 Các thành phần của SelectedPhotoScreen (Trang 98)
Hình 6.8 Các thành phần chính của History Screen 6.4.4.Đề xuất template mới: - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
Hình 6.8 Các thành phần chính của History Screen 6.4.4.Đề xuất template mới: (Trang 99)
Bảng 6.3 Chi tiết Count Screen - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
Bảng 6.3 Chi tiết Count Screen (Trang 107)
Bảng 6.4 Chi tiết Select Image Screen - Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh   đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin
Bảng 6.4 Chi tiết Select Image Screen (Trang 109)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN