Thuật toán phân loại sản phẩm a Về Python

Một phần của tài liệu Thiết kế hệ thống tự động phân loại bánh kẹo sử dụng công nghệ xử lý ảnh (Trang 50 - 62)

- Khung băng tả

3.1.4.5 Thuật toán phân loại sản phẩm a Về Python

a. Về Python

Pythonlà một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu.

Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động, do vậy nó tương tự như Perl, Ruby, Scheme, Smalltalk, và Tcl. Python được phát triển trong một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý.

Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi theo thời gian, Python dần mở rộng sang mọi hệ điều hành từ MS-DÓ đến MAC-OS, OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix. Mặc dù sự phát triển của Python có sự đóng góp của rất nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn là tác giả chủ yếu của Python. Ông giữ vai trò chủ chốt trong việc quyết định hướng phát triển của Python.

Ứng dụng: ● Web development ● Machine learning ● Data analysis ● Data visualization b. Về YOLO

YOLO (You only look once) là một mô hình CNN để detect object với ưu điểm nổi trội là độ chính xác tốt hơn và tốc độ nhanh hơn nhiều so với những mô hình cũ. Thậm chí có thể chạy tốt trên những IOT device như Raspberry Pi.

Đầu vào của mô hình là một bộ lữ liệu ảnh. Đối với bài toán Object detection, Yolo không chỉ hỗ trợ chúng ta phân loại Object mà còn giúp xác định được chính xác vị trí của Object trong Video.

Hình 3.8 Sơ đồ thuật toán

Đầu vào của mô hình là một ảnh, mô hình sẽ nhận dạng ảnh có đối tượng nào hay không, sau đó sẽ xác định toạ độ của đối tượng trong bức ảnh. Ảnh đầu vào được chia thành S x S ô (thường là 3 x 3, 7 x 7, 9 x 9…)

Với đầu vào là 1 ảnh, đầu ra của mô hình sẽ là một ma trận 3 chiều có kích thước S x S x (5 x N + M) với N và M lần lượt là số lượng Box và Class mà mỗi ô cần dự đoán. Mỗi bouding box cần dự đoán 5 thành phần: x, y, w, h và predicttion. Với (x, y) là toạ độc tâm của bounding box, (w, h) lần lượt là chiều rộng và chiều cao của bounding box.

tổng

Prediction là xác suất của vật được tính là: P r ( O b j e c t ) ∗ I O U (

p r e d , t r u t h ) T r o n g đ ó :

Pr (Object): điểm dự đoán vật IOU (pred, truth): là tỉ lệ diện tích 2

Ứng dụng:

● Hệ thống theo dõi người ● Đếm số lượng vật thể

● Thanh toán tiền tại quầy hàng ● Chấm công tự động

c. Thuật toán

Với bài toán Object detection (nhận diện vật thể), thuật toán sử dụng YOLO v4 để training dữ liệu sản phẩm và dùng OpenCV (thư viện xử lý ảnh của Python) để xử lí và đưa ra kết quả.

Quá trình xây dựng thuật toán gồm 3 bước

Thu thập dữ liệu

Hệ thống dữ liệu ảnh đầu vào bao gồm 3 loại nhãn hàng bánh kẹo khác nhau: ● Chocopie: 1020 ảnh

● Oishi: 1046 ảnh ● Oreo: 989 ảnh ● Goute: 950 ảnh ● Alpenlibe: 940 ảnh

Dữ liệu hình ảnh đầu vào được chụp ngẫu nhiên với nhiều backgound khác nhau, cường độ ánh sáng khác nhau và nhiều góc cạnh khác nhau.

Gán nhãn và training

Gán nhãn:

Gắn nhãn là 1 bước cần có trước khi training dữ liệu.

Dữ liệu ảnh bánh kẹo được dán nhãn bằng Labelimage với 3 loại nhãn: “Oreo”, “Chocopie” và “Oishi”.

Quá trình dán nhãn sẽ cung cấp thông tin cần thiết của vật trong ảnh cho hệ thống training.

Hình 3.11 Quá trình gán nhãn

Khi dán nhãn, hệ thống xuất ra 1 file “.txt” chứa các thông tin của vật trong ảnh bao gồm:

1. Thứ tự của nhãn

2. Tọa độ tâm của hộp giới hạn

Do không gian máy giới hạn, chúng ta sử dụng Google Colab - là một sản phẩm từ Google Research, nó cho phép chạy các dòng code python thông qua trình duyệt. Google Colab bộ nhớ đám mây 40GB với Ram ảo là 13GB cho phép chúng ta training dữ liệu một cách nhanh chóng và hiệu quả.

Sau khi tải lên dữ liệu ảnh đầu vào, Google Colab tự động training dữ liệu một cách ổn định và an toàn.

Nhược điểm: Do là tài khoản miễn phí nên Google Colab sẽ hủy toàn bộ dữ liệu của chúng ta sau 10 tiếng.

Ước tính thời gian training:

● Với mỗi ảnh chúng ta có 1 bounding box, YOLO sẽ cần dự đoán tổng cộng 3000 bounding boxes. Giả sử mỗi batch của chúng ta có kích thước 64 ảnh và số lượng max_batches = 6000. Như vậy chúng ta cần dự đoán 1,152 tỉ bounding boxes

Kết quả khi thử nghiệm hệ thống

Chương trình được chạy thử nghiệm trên Laptop sử dụng camera 2D và cho ra kết quả với tỉ lệ chính xác cao.

Sau quá trình xử lí ảnh, chương trình cho ra một kết quả nhận diện chính xác từng loại bánh kẹo, Những thông tin của vật sẽ được hiển thị trên màn hình máy tính, bao gồm: ● Bounding box ● Label ● Confidence ● Fps Hình 3.12 Kết quả nhận diện

Hình 3.13 Kết quả nhận diện

Một phần của tài liệu Thiết kế hệ thống tự động phân loại bánh kẹo sử dụng công nghệ xử lý ảnh (Trang 50 - 62)