Tổng quan về hệ thống

Một phần của tài liệu Nhận dạng và ước lượng calo trong thực phẩm luận văn thạc sĩ công nghệ thông tin (Trang 44)

3.1.1. Mô tả hệ thống

Client

Hình 3.1. Mô hình tổng quan về trao đổi dữ liệu trong hệ thống

Hệ thống phần mềm Nhận dạng và ước lượng calo trong thực phẩm - được thiết kế theo kiến trúc client/server (Hình 3.1).

Hệ thống gồm 3 phần chính - Thiết bị Android (client);

- Giao thức HTTP (Công cụ Postman); - Server.

Phần 1 Thiết bị Android là một ứng dụng trên điện thoại thông minh, có giao diện người dùng giúp quản lý tương tác người dùng với ứng dụng, các hoạt động đầu vào như chụp hình, chọn hình ảnh từ thư viện điện thoại thông minh gửi lên server

và hiển thị kết quả do server gửi về, hiển thị các dữ liệu như bảng lịch, thông tin về calo, tên thực phẩm, tổng số calo người dùng nạp vào trong ngày.

Phần 2 Giao thức HTTP Công cụ Postman được sử dụng để tạo ra các request giúp trao đổi dữ liệu từ client và server.

Phần 3 là phần server thực hiện logic xử lý các yêu cầu từ client, như quản lý và phân phối các luồng xử lý độc lập, đảm bảo hiệu năng và chất lượng tính toán nhận dạng và ước lượng cho nhiều client trong cùng một thời điểm.

Server còn là nơi quản lý cơ sở dữ liệu, bao gồm mô hình nhận dạng và mô hình tính toán calo từ hình ảnh gửi lên từ client, các ảnh gửi lên được lưu trong cơ sở dữ liệu về tên gọi, lượng calo. Các lượng calo được tính toán lưu tại server theo từng ngày, gửi về người dùng, giúp người dùng có thể kiểm soát lượng calo nạp vào mỗi ngày.

Quá trình hoạt động của mô hình được thể hiện như Hình 3.2. Trong đó các bước thực hiện của server và client từ lúc khởi động ban đầu tới lúc kết thúc

- Client (Ứng dụng nhận dạng và ước lượng calo trên điện thoại thông minh) (1) Người dùng khởi động ứng dụng;

(2) Người dùng thực hiện chụp ảnh thực phẩm trên đĩa bằng camera của điện thoại, hoặc chọn ảnh đã chụp trước đó được lưu trong thư viện ảnh;

(3) Ảnh chụp được mã hóa, nén lại và gửi tới máy chủ;

(4) Ứng dụng đợi nhận kết quả nhận dạng từ máy chủ gửi về và hiển thị cho người dùng.

- Chương trình server

(1) Chương trình được khởi động và nạp các thư viện cần thiết;

(2) Chương trình nạp mô hình nhận dạng đã được huấn luyện trước đó; (3) Chương trình nạp mô hình tính toán calo;

(4) Giao thức gửi, nhận dữ liệu giữa ứng dụng phía client và chương trình server được cấu hình;

(5) Một loại các luồng xử lý được khởi tạo, đặt trạng thái ban đầu là trạng thái rỗi;

(6) Khi có ứng dụng client kết nối tới, chương trình kiểm tra trong danh sách các luồng xử lý và chọn một luồng đang ở trạng thái rỗi để nhận và tính toán dữ liệu do client gửi tới;

(7) Trong luồng xử lý

- Bắt đầu quá trình tính toán nhận dạng, cờ trạng thái là “bận”; - Thực hiện giải nén dữ liệu thành dữ liệu ảnh gốc;

- Sử dụng mô hình đã nạp để nhận dạng thực phẩm; - Sử dụng mô hình tính toán calo để tính toán calo; - Trả kết quả nhận dạng về cho ứng dụng client; - Kết thúc quá trình tính toán.

(8) Khi luồng xử lý đã hoàn thành quá trình tính toán nhận dạng và ước lượng calo trong thực phẩm, chương trình giải phóng luồng xử lý bằng cách cập nhật lại trạng thái hiện tại của luồng.

Hình 3.2. Luồng hoạt động của hệ thống

3.1.2. Môi trường và ngôn ngữ cài đặt cho hệ thống

Chương trình nhận dạng thực phẩm và ước lượng calo

Chương trình nhận dạng thực phẩm và ước lượng calo được viết bằng ngôn ngữ Python trên môi trường Windows.

Cấu hình desktop sử dụng để cài đặt chương trình CPU Intel Xenon E5-4650L @2.60GHz

RAM 32GB

GPU - Rx580 GDDR5 4GB

Hệ điều hành Window 10 Pro 64bits

Các thư viện cần để chạy được chương trình Python 3.7+, OpenCV, Pandas, Nump;

Ứng dụng Android được xây dựng trên phần mềm Android Studio 4.1.1 với các thư viện SDK và được chạy demo trên Google pixel 2 và thực nghiệm trên điện thoại sử dụng hệ điều hành Android;

Ngoài ra hệ thống còn chạy trên công cụ Postman để tạo POST and Request và server của Amazon.

3.2. Mô hình huấn luyện3.2.1. Bộ dữ liệu 3.2.1. Bộ dữ liệu

Bộ dữ liệu là thông tin đầu vào gồm các hình ảnh thực phẩm được chụp từ thực tế và các hình ảnh được tìm kiếm trên Internet sau đó được sắp xếp theo từng loại thực phẩm, phục vụ cho việc huấn luyện. Các loại thực phẩm được thể hiện như Hình 3.3.

Hình 3.3. Các loại thực phẩm trong bộ huấn luyện

Mỗi loại thực phẩm gồm 1000 mẫu được chia thành 2 thư mục phục vụ cho nhận dạng

+ Thư mục training data gồm 800 hình mỗi loại; + Thư mục validation gồm 200 hình mỗi loại.

Hình 3.4. Hình ảnh dữ liệu huấn luyện

Các hình ảnh sau đó được nhân bản nhờ ImageDatagenerator trong Keras để tạo ra các tập ảnh mới. Các hình ảnh mới được tạo ra có hình dạng biến đổi như xoay, kéo dãn, thay đổi chiều cao, chiều rộng của ảnh, hình ảnh bên dưới là phép biến đổi sau khi đã thực hiện phép biến đổi

Hình 3.5. Hình ảnh dữ liệu bài toán sử dụng ImageDatagenerator

3.3.2. Mô hình nhận dạng thực phẩm

Hình ảnh được tạo ra lưu trong bộ dữ liệu được huấn luyện để nhận dạng dựa trên mạng nơron tích chập CNN.

Luận văn đã sử dụng Framework của Tensorflow kết hợp thư viện Keras để huấn luyện nhận dạng thực phẩm.

Hình 3.6. Hình ảnh Model summary

Mô hình huấn luyện bao gồm 3 lớp tích chập và 3 lớp lấy mẫu max_pooling, ngoài ra còn sử dụng các hàm dropout, flatten và dense để lấy mẫu.

Ảnh đầu vào với kích thước 224 x 224 x 3 = 150K (3 tương ứng với 3 màu đỏ, xanh lục, xanh lam trong hệ màu RGB thông thường).

Tổng số tham số là 6.447.530.

Tổng số tham số được huấn luyện 6.447.530.

Mô hình huấn luyện trên được cài đặt các thông số như sau Batch_size = 16

Image_size = 224, 224

Mô hình được huấn luyện qua 50 lần.

Quy trình huấn luyện dữ liệu

Quá trình huấn luyện được thực hiện sau khi hoàn tất các bước trên Tốc độ huấn luyện nhanh hay chậm phụ thuộc vào Batch size, số Epoch, lượng dữ liệu.

Đồ thị Accuracy và Loss

Đồ thị 3.1. Train accuracy và loss accuracy

3.3. Mô hình xử lý ảnh ước lượng calo

Trong phép tính toán ước lượng calo trong luận văn sử dụng chính kích thước đĩa thực tế như Hình 3.7.

Kích thước của đĩa sau đó, được sử dụng làm tham chiếu cho việc đo tính toán kích thước thực của thực phẩm.

Hình 3.10. Kích thước đĩa tiêu chuẩn

Việc tính toán calo được thực hiện qua các bước như sau

- Thực hiện xử lý ảnh để lấy diện tích của đĩa và thực phẩm bằng pixel sau đó dựa vào kích thước thực tế của đĩa để tính kích thước thực của phần thực phẩm;

- Tính khối lượng thực tế của thực phẩm qua các thông số, thể tích của thực phẩm sau khi quy về hình dạng như hình cầu, hình trụ, hình khối chữ nhật;

- Từ khối lượng thực tế của thực phẩm suy ra lượng calo của thực phẩm dựa vào dữ liệu calo trên 100g thực phẩm đã được kiểm chứng từ Bộ Nông nghiệp Hoa Kỳ [18].

3.3.1. Xác định kích thước đĩa và kích thước thực phẩm

Để xác định kích thước của đĩa và kích thước thực phẩm từ ảnh chụp, luận văn sử dụng thư viện OpenCV thông qua xử lý ảnh.

Xác định kích thước đĩa được thể hiện qua các bước sau trong OpenCV trên Python

Bước 1 Đọc ảnh đầu vào Bước 2 Chuyển sang ảnh xám Bước 3 Khử nhiễu

Bước 4 Phân ngưỡng ảnh Bước 5 Vẽ các contour

Bước 6 Xác định biên dạng đĩa

Tiến trình xử lý biên dạng đĩa được mô tả như Hình 3.11

Hình 3.11. Quy trình thực hiện lấy biên dạng đĩa

Sau khi biên dạng đĩa được xác định quá trình xử lý ảnh được tiếp tục để xác định biên dạng thực phẩm. Hình ảnh đầu vào của bước tiếp theo là hình ảnh sau khi được xóa nền chỉ còn đĩa và thực phẩm.

Biên dạng thực phẩm được xác định qua các bước sau Bước 1 Đọc ảnh đầu

Bước 2 Chuyển ảnh sang hệ màu HSV (Hue, Saturation, Value) Bước 3 Tách rời thực phẩm

Bước 4 Chuyển sang ảnh xám Bước 5 Làm mịn ảnh

Bước 6 Phân ngưỡng ảnh Bước 7 Vẽ các contour

Bước 8 Xác định kích thước thực phẩm

Hình 3.12. Quy trình xác định kích thước thực phẩm

3.3.2. Tính toán ước lượng calo

Kết quả của quá trình xử lý ảnh là lấy được diện tích bề mặt của đĩa và diện tích bề mặt của thực phẩm được tính bằng pixel.

Tỷ lệ giữa pixel thực phẩm và tỷ lệ pixel đĩa là hệ số để tính ra diện tích thực phẩm thực tế từ đó quy ra thể tích để tính toán khối lượng của thực phẩm.

- Thể tích của thực phẩm.

- Khối lượng riêng của thực phẩm.

3.3.2.1. Tính thể tích thực phẩm

Việc tính thể tích của vật thể cần các yếu tố sau - Diện tích bề mặt của thực phẩm;

- Độ dày của thực phẩm.

a) Tính diện tích của bề mặt thực phẩm * Trong quá trình xử lý hình ảnh sẽ lấy được

- Diện tích của đĩa tính bằng pixel (được ký hiệu trong quá trình tính là “area”).

- Diện tích của thực phẩm bằng pixel (được ký hiệu trong quá trình tính là “area 1”)

Gọi

Sdis diện tích thực tế của đĩa

Sfood diện tích thực tế của thực phẩm

Tỷ lệ diện tích thực tế và diện tích tính bằng pixel của đĩa được ký hiệu là “a”

A = Sdis /area

Diện tích thực phẩm tính theo công thức sau S food = a * area1

* Đề tài nhận dạng 9 loại thực phẩm và được giả sử quy về các hình dạng khác nhau gồm

- Hình cầu (quả táo, hành tây, cam, cà chua); - Hình trụ (quả chuối, khoai lang, cà rốt); - Hình tròn biết độ dày (trứng chiên); - Hình hộp chữ nhật (bánh mì)

b) Thể tích của mỗi loại được tính như sau - Tính thể tích hình cầu

r=√ Sfood

π

Trong đó Sfood là diện tích của thực phẩm

Thể tích ước lượng thực phẩm theo hình cầu

V= 4

3 ∗ π ∗ r 3

- Tính thể tích hình trụ

Gọi h là chiều cao của thực phẩm sau khi tách biên

h = hpix a∗ Trong đó

a là tỉ lệ pix và cm

hpix là chiều cao lớn nhất của hình bao thực phẩm tính bằng pixel Bánh kính của đáy trụ

r= Sfoodh

π∗ Thể tích của hình trụ được tính như sau

V = h r∗ π ∗ 2

Thể tích của thực phẩm trứng cũng được tính theo thể tích của hình trụ với giả thiết chiều dày của trứng là 0.3 cm

- Thể tích hình hộp

Thể tích của hình hộp được tính bằng cách lấy diện tích của thực phẩm nhân cho chiều dày thực phẩm (giả sử mỗi lát cắt bánh mì có độ dày bằng 1.5cm)

Thể tích khối hộp được tính như sau

V = 1.5 Sfood∗

3.3.2.2. Tính khối lượng của thực phẩm

Khối lượng của thực phẩm được tính theo công thức sau

Trong đó

m là khối lượng của thực phẩm

V là thể tích ước lượng của thực phẩm d là khối lượng riêng của thực phẩm

3.3.2.3. Quy đổi calo

Lượng Calo được quy đổi theo công thức sau

Calo = m Calo100∗100

Trong đó

m là khối lượng của thực phẩm

Calo100 Lượng Calo của thực phẩm quy đổi trên 100g thực phẩm Lượng calo trên 100g được lấy từ nguồn dữ liệu được công bố và kiểm chứng bởi Bộ Nông nghiệp Hoa Kỳ [18]

Các thực phẩm được gắn nhãn như Bảng 3.1 dưới đây

Bảng 3.1. Khối lượng riêng và lượng calo trên 100g thực phẩm

Loại thực phẩm

Khối lượng riêng (g/cm3)

Calo trên 100

gram (kcal) Label

Hình dạng quy đổi Apple 0.609 53 1 Hình cầu Banana 0.94 89 2 Hình trụ Bread 0.23 26.6 3 Hình khối hộp Carrot 1.04 41 4 Hình trụ Egg 1.03 155 5 Hình tròn Onion 0.96 40 6 Hình cầu Orange 1.03 47 7 Hình cầu Sweetpotato 1.03 85.8 8 Hình trụ Tomato 0.47 18 9 Hình cầu

3.4. Ứng dụng Android

- Giao diện người dùng (UI User Interface)

- Giao diện ứng dụng được thiết kế một cách thân thiện với người sử dụng, dễ sử dụng và được xây dựng trên nền tảng Android Google flatform.

- Giao diện được thiết kế như sau (Hình 3.13) - Màn hình giao diện 1 (Main Activity) gồm + Tên phần mềm (Calories counter),

+ Ngày giờ tự động; + Khu vực hiển thị;

+ Nút nhấn chụp hình và lựa chọn hình từ calo; + Tổng số calo nhận được.

- Màn hình giao diện 2 (Hiển thị kết quả)

Sau khi tính toán calo từ ảnh chụp dữ liệu được trả về và hiển thị kết quả như Hình 3.14 sau

Hình 3.14. Hình ảnh giao diện ứng dụng khi nhận kết quả tính toán

Mỗi lần chụp ảnh, tính toán lượng calo sẽ được lưu lại trên khu vực hiển thị. Đối với mỗi ngày người dùng nạp calo từ khẩu phần thực phẩm vào, sau khi chụp sẽ được hệ thống lưu lại theo ngày. Với số calo nhận được người dùng có thể kiểm soát được khẩu phần ăn của mình sao cho phù hợp.

Sau khi ứng dụng được cài đặt, để sử dụng được ứng dụng người dùng cần thực hiện theo các bước sau

Bước 1 Bấm vào biểu tượng App

Bước 3 Lựa chọn chụp ảnh hoặc chọn hình từ thư viện Bước 4 Xác nhận gửi hình hoặc chụp hình

Kết quả sau khi thực hiện các bước trên thì người dùng sẽ thấy - Kết quả tên thực phẩm và lượng calo;

- Tổng lượng calo sau các lần chụp.

3.5. Kết quả thực nghiệm3.5.1. Mô hình nhận dạng 3.5.1. Mô hình nhận dạng

Với mô hình nhận dạng trên kiến trúc của Tensorflow và thư viện Keras kết quả nhận được với độ chính xác trên 98% được thể hiện qua Đồ thị 3.1 Train accuracy và validation accuracy.

Các hình ảnh trước khi đưa vào nhận dạng được resize theo kích thước đã được cài đặt trong model. Hình ảnh sẽ được resize với kích cỡ chiều dài 224px, chiều rộng 224px. Kết quả nhận dạng.

3.5.2. Mô hình tính toán ước lượng calo

Các hình ảnh được chụp trên điện thoại Samsung Galaxy J8, với độ phân giải 13 Mega pixel.

Các ảnh sau đó được tính toán trên mô hình tính toán ước lượng calo trên ngôn ngữ Python. Kết quả được ước lượng thể hiện trong Bảng 3.2.

Thực phẩm được chụp cũng được ghi lại khối lượng thực tế, khối lượng của mỗi loại được cân và ghi lại trên cân điện tử WH-B05, 5 kg và sai số 1g.

Hình 3.16. Hình ảnh kết quả cân thực phẩm để lấy khối lượng thực tế.

Sau khi cân nặng thực tế quả và chụp hình quả để ước lượng, quy đổi ra lượng calo thu được một số kết quả thể hiện trong Bảng 3.3.

Bảng 3.3. Bảng kết quả thực nghiệm

3.5.3. Ứng dụng Android

Các kết quả nhận dạng và tính toán ước lượng Calo được thực hiện trên Server, cho ra kết quả như sau

Loại thực phẩm Khối lượng thực tế (gram) Calo thực tế (Kcal)

Calo ước lượng (Kcal) Apple 202 107,1 115.6 Banana 38 33.8 32.3 Bread 22 5.8 4.0 Carrot 73 29.9 32.3 Egg 32 49.6 46.1 Onion 110 44 47.6 Orange 407 199.4 246.1 Sweetpotato 73 62.6 61.6 Tomato 62 11.2 9.4

Chương 4. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 4.1. Kết quả đạt được

4.1.1. Nhận dạng

- Trình bày được các kiến thức về Mạng nơ ron tích chập, Tensorflow và thư viện Keras, trong nhận dạng hình ảnh thực phẩm;

Một phần của tài liệu Nhận dạng và ước lượng calo trong thực phẩm luận văn thạc sĩ công nghệ thông tin (Trang 44)