TỔNG QUAN
Mở đầu
Nhận dạng hình ảnh đã được ứng dụng rộng rãi trong nhiều lĩnh vực và đã trải qua nhiều giai đoạn phát triển từ xử lý ảnh đơn giản đến các phương pháp máy học và học sâu Phương pháp học sâu đã chứng minh được ưu điểm vượt trội trong việc phân tích dữ liệu lớn, đặc biệt trong các ứng dụng như nhận dạng hình ảnh, giọng nói và tìm kiếm đối tượng Các nghiên cứu tiêu biểu trong lĩnh vực này bao gồm công trình của Kawano và Yanai về nhận dạng thực phẩm dựa trên tính năng học sâu, cũng như nghiên cứu của Nguyễn Đắc Thành về nhận dạng và phân loại hoa quả trong ảnh màu.
Với sự phát triển của xã hội và công nghệ thông tin, ứng dụng máy học sâu ngày càng được sử dụng để nâng cao giá trị thực phẩm, góp phần cải thiện sức khỏe con người Một bữa ăn lành mạnh và đầy đủ dinh dưỡng trở nên cần thiết hơn bao giờ hết, đặc biệt khi xã hội đang đối mặt với tình trạng thừa cân và béo phì do thói quen ăn uống không hợp lý.
Hiện tượng thừa cân và béo phì không chỉ xuất hiện ở các nước Châu Âu và một số khu vực Châu Mỹ, mà còn đang gia tăng nhanh chóng ở các nước đang phát triển, với tỷ lệ béo phì ở người trưởng thành có thể đạt 30-40% Xu hướng này dự kiến sẽ tiếp tục gia tăng trong những thập niên tới, dẫn đến nhiều hệ lụy sức khỏe nghiêm trọng Nhiều nghiên cứu đã chỉ ra rằng sự gia tăng này liên quan đến lượng calo tiêu thụ quá mức.
Theo dõi thói quen ăn uống hàng ngày là điều cần thiết để kiểm soát lượng calo, giúp duy trì chất lượng cuộc sống tốt hơn.
Nghiên cứu của tác giả và cộng sự chỉ ra rằng ung thư vú, đại tràng và tuyến tiền liệt có liên quan đến lượng calo cao Lượng calo cao đứng thứ hai chỉ sau thuốc lá trong việc gây ra ung thư.
Theo báo cáo từ hội nghị dinh dưỡng thành phố Hồ Chí Minh, một chế độ ăn uống hợp lý với lượng calo đầy đủ không chỉ giúp tăng cường tuổi thọ mà còn giảm thiểu nguy cơ mắc các bệnh liên quan đến tuổi tác.
Thực phẩm chứa lượng calo cao nhưng thiếu dinh dưỡng có thể gây ra viêm toàn thân và giảm insulin, dẫn đến các vấn đề chuyển hóa như béo phì, tăng huyết áp, rối loạn lipid máu và glucose không dung nạp Nhiều nghiên cứu quốc tế đã chỉ ra rằng việc theo dõi lượng calo hàng ngày có thể hỗ trợ mọi người trong việc duy trì sức khỏe Các ứng dụng công nghệ hiện nay giúp người dùng theo dõi mức tiêu thụ thực phẩm và nâng cao nhận thức về thói quen ăn uống của họ.
Trong những năm gần đây, nhiều nghiên cứu quốc tế đã chỉ ra rằng kỹ thuật máy học và thị giác máy tính có khả năng phát triển các hệ thống tự động nhận diện các loại thực phẩm khác nhau.
Nghiên cứu về bệnh béo phì đã sử dụng công nghệ video để theo dõi hoạt động ăn uống hàng ngày của cá nhân Bằng cách sử dụng camera, nghiên cứu ghi lại lượng calo cung cấp và calo tiêu thụ, từ đó đánh giá chính xác lượng calo tiêu thụ của mỗi người.
Trong nghiên cứu này, các tác giả đã tiến hành thí nghiệm bằng cách gắn camera vào trước ngực của đối tượng để theo dõi hình ảnh ghi lại, sau đó truyền dữ liệu về máy tính qua USB Tuy nhiên, việc áp dụng phương pháp này cho nhiều đối tượng và ở các vị trí khác nhau gặp nhiều khó khăn.
Công trình nghiên cứu "Nhận dạng thực phẩm dựa trên phương pháp học sâu" đã ứng dụng các giải pháp học sâu và mạng nơ ron tích chập để phát triển một hệ thống nhận dạng thực phẩm hiệu quả Hệ thống này không chỉ phân loại và truy xuất tên thực phẩm mà còn theo dõi lượng thực phẩm tiêu thụ hàng ngày của người dùng dựa trên lượng calo đã được quy định trước Mặc dù các tác giả đã thực hiện việc nhận dạng thực phẩm và theo dõi calo tiêu thụ, nhưng nghiên cứu vẫn chỉ dừng lại ở việc xác định thực phẩm và lượng calo có sẵn trong từng loại thực phẩm.
Ngoài ra còn nhiều công trình khác như
Công trình nghiên cứu Hệ thống nhận dạng thực phẩm với Kernel học của tác giả Taichi Joutou, Keiji Yanai, 12/2009 [9];
Công trình nghiên cứu Nhận dạng nhiều hình ảnh thực phẩm bằng cách tìm kiếm theo vùng [10];
Công trình nghiên cứu Tự động nhận dạng thực phẩm sử dụng tính năng SPIN cho hệ thống thực phẩm [11];
Trong các nghiên cứu, các tác giả đã phát triển hệ thống nhận dạng và ước lượng thực phẩm trong bữa ăn, nhưng việc sử dụng video để theo dõi cá nhân gặp khó khăn trong ứng dụng rộng rãi Để cải thiện khả năng kiểm soát lượng calo nạp vào cơ thể hàng ngày, luận văn này giới thiệu giải pháp “Nhận dạng và ước lượng calo trong thực phẩm”, nhằm ước tính lượng calo có trong thực phẩm thông qua nhận dạng, từ đó giúp người dùng tự kiểm soát lượng thức ăn cần thiết mỗi ngày.
Mục tiêu của luận văn
Xây dựng ứng dụng chạy trên hệ điều hành Android để nhận dạng thực phẩm và tính lượng calo của thực phẩm.
Phạm vi và đối tượng nghiên cứu
Luận văn này nghiên cứu việc nhận dạng và ước lượng các loại thực phẩm riêng lẻ được bày trên đĩa, đồng thời không tập trung vào việc nhận dạng và ước lượng calo trong các món ăn hỗn hợp.
1.3.2 Đối tượng nghiên cứu Đối tượng nghiên cứu của luận văn gồm Táo, Chuối, Bánh mì, Trứng.
Phương pháp nghiên cứu
Phương pháp nghiên cứu trong luận văn này kết hợp lý thuyết với mô hình sử dụng ngôn ngữ Python và các thư viện để xử lý nhận dạng thực phẩm Dữ liệu đầu vào cho quá trình tính toán là hình ảnh được chụp từ các thiết bị di động, đồng thời kế thừa kết quả từ các nghiên cứu trước để thực hiện so sánh.
1.4.1 Phương pháp nghiên cứu lý thuyết
Nghiên cứu về nhận dạng sử dụng mạng nơ ron tích chập với Framework Tensorflow, đồng thời tìm hiểu các thuật toán xử lý ảnh như Otsu và Canny để phát hiện cạnh.
- Tham khảo các bài báo đã được công bố trong vấn đề xử lý hình ảnh và nhận dạng;
- Thu thập các dữ liệu thực phẩm phục vụ cho bài toán;
- Tham khảo các tài liệu liên quan đến ứng dụng các thư viện Keras và OpenCV trong nhận dạng và xử lý ảnh;
- Tham khảo tài liệu liên quan về hệ điều hành Android để xây dựng ứng dụng để giao tiếp dữ liệu giữa Android app và Server.
- Xây dựng một mô hình nhận dạng và xử lý ảnh trên Python dựa trên các thư viện cho học sâu Keras và thư viện OpenCV;
- Tính toán và ước lượng calo trong thực phẩm dựa vào hình ảnh chụp từ các thiết bị di động;
- Xây dựng ứng dụng trên hệ điều hành Android để hiển thị kết quả nhận dạng và lượng calo của thực phẩm nhận dạng;
- So sánh kết quả ước lượng trên ứng dụng và kết quả thực tế.
Ý nghĩa khoa học và thực tiễn của luận văn
Thực hiện kết hợp giữa Framework Tensorflow, Framework tốt nhất trong nhận dạng hình ảnh và thư viện Keras để đạt được được kết quả nhận dạng tốt hơn;
Xử lý hình ảnh đã mang lại những kết quả khả quan, nhưng việc ước lượng calo từ hình ảnh thực phẩm vẫn phụ thuộc vào nhiều yếu tố như góc chụp, khoảng cách chụp và độ sáng tối của bức ảnh.
Xây dựng ứng dụng cho người dùng có thể kiểm soát lượng thực phẩm ăn trong ngày;
Trong tương lai hướng phát triển của luận văn sẽ tối ưu các thuật toán để nhận dạng tính toán được chính xác hơn.
Mô hình ứng dụng trên Android có thể giúp người dùng biết được lượng calo trong thực phẩm mà luận văn đã nghiên cứu.
Luận văn kết hợp nhận dạng và xử lý ảnh, tạo nền tảng cho nghiên cứu với bộ dữ liệu lớn hơn Điều này cũng hỗ trợ phát triển ứng dụng cung cấp thông tin dinh dưỡng đầy đủ, giúp cá nhân kiểm soát lượng calo và các thông tin dinh dưỡng hàng ngày, từ đó nâng cao chất lượng cuộc sống và đảm bảo sức khỏe.
Cấu trúc luận văn
Luận văn được chia làm 4 chương
Nêu lý do chọn đề tài, mục tiêu, đối tượng, phạm vi nghiên cứu, phương pháp nghiên cứu và ý nghĩa của đề tài
LÝ THUYẾT VỀ NHẬN DẠNG VÀ XỬ LÝ ẢNH
Nhận dạng thực phẩm
Để nhận dạng thực phẩm, luận văn sử dụng mạng nơ ron tích chập với
2.1.1 Mạng nơ ron tích chập
Mạng nơ ron tích chập (CNN) là một trong những mô hình học sâu phổ biến nhất hiện nay, nổi bật với khả năng nhận dạng và phân loại hình ảnh với độ chính xác cao, thậm chí vượt trội hơn cả con người trong nhiều trường hợp Mô hình này đang được phát triển rộng rãi và ứng dụng trong các hệ thống xử lý ảnh lớn của các công ty như Facebook, Google và Amazon, phục vụ cho nhiều mục đích khác nhau như tự động gắn thẻ, tìm kiếm ảnh và gợi ý sản phẩm cho người tiêu dùng.
Mạng CNN ra đời nhằm cải tiến cách học thông tin từ ảnh, khắc phục những hạn chế của mạng nơron truyền thẳng (Feedforward Neural Network) do sử dụng các lớp liên kết đầy đủ Việc này dẫn đến sự gia tăng nhanh chóng số lượng liên kết và khối lượng tính toán khi kích thước ảnh lớn Hơn nữa, việc liên kết đầy đủ gây ra sự dư thừa, vì thông tin chủ yếu nằm ở sự phụ thuộc giữa các điểm ảnh gần nhau, không cần quan tâm đến các điểm ảnh xa Mạng CNN với kiến trúc mới cho phép xây dựng liên kết chỉ từ một phần cục bộ trong ảnh, giúp cải thiện hiệu suất xử lý và giảm thiểu tính toán.
Kiến trúc Mạng nơron tích chập
Các lớp cơ bản trong một mạng CNN bao gồm lớp tích chập
Convolutional layers, along with the Rectified Linear Unit (ReLU) activation function, pooling layers, and fully-connected layers, are adjusted in quantity and arrangement to develop training models tailored to specific problems.
Hình 2.1 Kiến trúc cơ bản của một mạng tích chập
Lớp tích chập là thành phần quan trọng nhất trong mạng CNN, thể hiện tư tưởng xây dựng sự liên kết cục bộ thay vì kết nối toàn bộ các điểm ảnh Các liên kết cục bộ này được tính toán thông qua phép tích chập giữa các giá trị điểm ảnh trong một vùng ảnh cục bộ và các bộ lọc có kích thước nhỏ.
Hình 2.2 Ví dụ bộ lọc tích chập được sử dụng trên ma trận điểm ảnh
Bộ lọc 3x3 trong Hình 2.2 [12] được áp dụng bằng cách dịch chuyển qua từng vùng ảnh, giúp tạo ra một bức ảnh mới có kích thước nhỏ hơn hoặc bằng kích thước ảnh đầu vào Kích thước của bức ảnh mới phụ thuộc vào các khoảng trắng được thêm ở viền bức ảnh gốc và được tính theo công thức cụ thể.
- o kích thước ảnh đầu ra i kích thước ảnh đầu vào p kích thước khoảng trắng phía ngoài viền của ảnh gốc k kích thước bộ lọc s bước trượt của bộ lọc
Hình 2.3 Trường hợp thêm/không thêm viền trắng vào ảnh khi tích chập
Khi đưa một bức ảnh vào lớp tích chập, chúng ta nhận được một loạt ảnh đầu ra tương ứng với các bộ lọc đã áp dụng Các trọng số của bộ lọc này được khởi tạo ngẫu nhiên ban đầu và sẽ được cải thiện dần trong suốt quá trình huấn luyện.
- Lớp kích hoạt phi tuyến ReLU
Lớp kích hoạt phi tuyến trong mô hình huấn luyện đóng vai trò quan trọng trong việc duy trì tính phi tuyến sau các phép toán tuyến tính qua các lớp tích chập Các hàm kích hoạt như ReLU, sigmoid và tanh được sử dụng để giới hạn biên độ giá trị đầu ra Trong số đó, hàm ReLU được ưa chuộng nhờ vào cài đặt đơn giản và tốc độ xử lý nhanh, đồng thời vẫn đảm bảo hiệu quả tính toán, với nguyên tắc chuyển tất cả các giá trị âm thành 0.
Lớp ReLU thường được sử dụng ngay sau lớp tích chập, tạo ra một ảnh mới có kích thước tương đương với ảnh đầu vào Các giá trị điểm ảnh trong ảnh mới gần như giống hệt, ngoại trừ việc các giá trị âm đã bị loại bỏ.
Một thành phần quan trọng trong mạng CNN là lớp lấy mẫu (Pooling), thường được sử dụng sau lớp tích chập và lớp ReLU Lớp này giúp giảm kích thước ảnh đầu ra trong khi vẫn giữ lại thông tin quan trọng từ ảnh đầu vào Việc giảm kích thước dữ liệu không chỉ giảm số lượng tham số mà còn tăng hiệu quả tính toán Lớp lấy mẫu sử dụng cửa sổ trượt để quét qua các vùng trong ảnh, tương tự như lớp tích chập, nhưng thay vì thực hiện phép tích chập, lớp này chọn một giá trị duy nhất đại diện cho toàn bộ thông tin của vùng ảnh đó.
Hình 2.4 minh họa các phương thức lấy mẫu phổ biến hiện nay, bao gồm Max Pooling (lấy giá trị điểm ảnh lớn nhất) và Average Pooling (tính giá trị trung bình của các điểm ảnh trong vùng ảnh cục bộ) [13].
Hình 2.4 Phương thức Avarage Pooling và Max Pooling
Mỗi ảnh đầu vào sau khi qua quá trình lấy mẫu sẽ cho ra một ảnh đầu ra tương ứng, với kích thước giảm đáng kể nhưng vẫn đảm bảo giữ lại các đặc trưng cần thiết cho các bước tính toán tiếp theo.
- Lớp kết nối đầy đủ
Lớp kết nối đầy đủ trong mạng nơron hiện đại được thiết kế tương tự như mạng nơron truyền thống, với tất cả các điểm ảnh được kết nối với node trong lớp tiếp theo Tuy nhiên, kích thước ảnh đầu vào đã được giảm bớt đáng kể, vẫn giữ lại các thông tin quan trọng cho nhận dạng Nhờ đó, quá trình nhận dạng bằng mô hình truyền thẳng trở nên đơn giản và nhanh chóng hơn so với các mạng nơron truyền thống.
TensorFlow là một thư viện phần mềm được phát triển bởi Google Brain Team, chuyên nghiên cứu trong lĩnh vực trí tuệ nhân tạo Thư viện này hỗ trợ nghiên cứu và ứng dụng học máy cũng như học sâu, giúp các nhà phát triển và nhà nghiên cứu thực hiện các dự án AI hiệu quả hơn.
TensorFlow sử dụng đại số kết hợp để tối ưu hóa và tính toán, giúp rút ngắn thời gian thực hiện các biểu thức toán học phức tạp.
Tensorflow hoạt động dựa trên nguyên lý đồ thị dòng chảy dữ liệu.
TensorFlow cho phép tạo ra đồ thị luồng dữ liệu, mô tả cách thức di chuyển của dữ liệu qua các nút xử lý Mỗi nút trong đồ thị đại diện cho một phép toán, trong khi các kết nối giữa các nút là các mảng dữ liệu đa chiều, được gọi là “tensor”.
Các phần tử của Tensorflow gồm
Trong Tensorflow mỗi node là một phép tính tức thời, mỗi phép tính này gồm có một hoặc nhiều dữ liệu đầu vào và lớn hơn 0 đầu ra.
Ước lượng calo
Để ước lượng calo từ ảnh chụp, các công việc cần phải xử lý bao gồm
Xử lý ảnh là một bước quan trọng trong việc xác định biên dạng của thực phẩm so với biên dạng tham chiếu Các biên dạng thực phẩm được trích xuất từ ảnh bằng cách áp dụng các thuật toán như Otsu và Canny, giúp cải thiện độ chính xác trong việc phân tích hình ảnh.
- Sau khi lấy được biên dạng thực phẩm áp dụng các công thức toán học cơ bản sẽ tính được thể tích và khối lượng của thực phẩm.
2.2.1 Quá trình xử lý ảnh
Quá trình xử lý ảnh trong luận văn được thể hiện qua lược đồ sau
Hình 2.12 Lược đồ các giai đoạn xử lý ảnh
Hình ảnh đầu vào được chụp từ camera và tải lên thông qua phần mềm Android Quá trình xử lý ảnh trên server sẽ phụ thuộc vào chất lượng hình ảnh, vì vậy những bức ảnh có độ sáng và tương phản tốt sẽ mang lại kết quả chính xác hơn trong các bước tiếp theo.
Tiền xử lý là bước quan trọng trong quy trình xử lý ảnh, nhằm cải thiện độ tương phản, khử nhiễu, khử bóng và khử độ lệch Mục tiêu của giai đoạn này là nâng cao chất lượng ảnh, chuẩn bị cho các bước xử lý phức tạp hơn sau đó.
Phân đoạn ảnh là bước quan trọng trong xử lý ảnh, nơi hệ thống phân tích hình ảnh thành các thành phần có đặc tính tương đồng Quá trình này dựa trên việc xác định biên hoặc các vùng liên thông, với tiêu chí như màu sắc hoặc mức xám để phân loại các vùng này.
Dựa vào phân đoạn ảnh để tách rút đặc trưng, sau đó tìm biên dạng của vật thể.
Nhận dạng và xuất ảnh là bước cuối cùng trong quá trình xử lý ảnh, giúp tạo ra hình ảnh cuối cùng với các vật thể được tách rời rõ ràng.
2.2.2 Một số thuật toán trong xử lý ảnh
Thuật toán Otsu được ứng dụng trong xử lý ảnh để phân ngưỡng ảnh một cách tự động dựa trên mức xám của ảnh (lược đồ xám).
Lược đồ xám là đồ thị thể hiện tần suất xuất hiện các mức xám trong ảnh, với trục hoành biểu diễn giá trị mức xám từ 0 đến 255 và trục tung biểu diễn tần suất của các mức xám đó.
(�� ) là tần suất xuất hiện mức xám. n k giá trị điểm ảnh tại vị trí k.
Hình 2.13 Lược đồ xám của ảnh [17]
Sau khi thống kê mức xám từ ảnh ban đầu, ta sẽ thu được một đồ thị với hai đỉnh: một đỉnh đại diện cho các vùng thực phẩm và đỉnh còn lại cho vùng nền Theo phương pháp Otsu, ngưỡng k tối ưu được xác định là giá trị tại đó sự chênh lệch σ b2 giữa hai đoạn trên đồ thị đạt cực đại.
Giá trị σ b2 được định nghĩa như sau σ b2 = a 1 (m 1 − m t ) 2 + a 2 (m 2 − m t ) 2
Trong đó m 1 và m 2 biểu diễn giá trị trung bình tương ứng với đoạn 1 và đoạn
2, a 1 và a 2 là tần suất xuất hiện của m 1 và m 2 Ứng dụng thuật toán Otsu Threshold trong xử lý ảnh
Kỹ thuật phân ngưỡng trong xử lý ảnh bao gồm hai phương pháp chính: Global threshold và Otsu threshold Global threshold sử dụng một giá trị cố định để phân tích mức xám của ảnh, trong khi phương pháp Otsu tự động chọn một giá trị ngưỡng dựa trên mức xám trung bình của ảnh đầu vào, từ đó xác định các mức xám còn lại.
Dưới đây là một ví dụ về Global threshold thực hiện trên OpenCV. Ảnh gốc Ảnh threshold Global
Hình 2.14 Hình ảnh phân ngưỡng xám theo Global threshold
Trong phương pháp phân ngưỡng toàn cục (global thresholding), mức xám của ảnh được xác định dựa trên giá trị chuẩn T7, tương ứng với mức xám thấp nhất Từ mức xám này, các mức xám tiếp theo được tính toán dựa trên giá trị của từng điểm ảnh Một trong những kỹ thuật phổ biến trong phân ngưỡng là phương pháp Otsu, giúp tối ưu hóa việc phân chia các mức xám.
Với kỹ thuật phân ngưỡng theo Otsu hình ảnh threshold cho một kết quả tốt hơn so với Threshold Global. Ảnh gốc Ảnh threshold Otsu
Hình 2.15 Ảnh phân ngưỡng khi thêm thuật toán Otsu.
Mục đích của việc phát hiện biên là giảm thiểu số lượng dữ liệu trong hình ảnh mà vẫn giữ được các đặc tính cấu trúc cần thiết cho xử lý hình ảnh tiếp theo Trong số nhiều phương pháp phát hiện biên, phương pháp Canny, được phát triển bởi John F Canny vào năm 1986, nổi bật như một trong những công cụ phổ biến nhất trong lĩnh vực xử lý hình ảnh.
Để thực hiện thuật toán Canny nhằm lấy biên dạng của vật thể, quy trình cần tuân theo các bước được mô tả trong Hình 2.16.
Hình 2.16 Quy trình phát hiện biên dựa trên thuật toán Canny
Hình ảnh nhiễu là điều không thể tránh khỏi trong các bức ảnh chụp từ máy quay, vì vậy việc giảm nhiễu là cần thiết để phân biệt nó với các biên Để làm điều này, trước tiên, ảnh được làm mịn bằng bộ lọc Gauss Sau đó, thuật toán Canny được áp dụng để xác định các khu vực có sự thay đổi cường độ mức xám mạnh nhất dựa trên Gradient tại mỗi điểm ảnh.
Gradient tại mỗi điểm ảnh được tính theo công thức sau
Hướng gradient là luôn luôn vuông góc với cạnh Nó được làm tròn vào một trong bốn hướng 0 0 ,45 0 ,90 0 ,135 0
Sau khi xác định được Gradient, thuật toán sẽ loại bỏ các biên dư thừa và phân ngưỡng nhằm xác định chính xác các cạnh Hình 2.18 minh họa quá trình xác định biên bằng thuật toán Canny.
����(�) = ���−1( ) Ảnh gốc Phát hiện biên sau khi áp dụng Canny
Hình 2.18 Ảnh xác định biên bằng thuật toán Canny
XÂY DỰNG HỆ THỐNG PHẦN MỀM NHẬN DẠNG VÀ ƯỚC LƯỢNG CALO
Tổng quan về hệ thống
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
- Giao thức HTTP (Công cụ Postman);
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 quản lý cơ sở dữ liệu, bao gồm mô hình nhận dạng và tính toán calo từ hình ảnh người dùng gửi lên Các ảnh này được lưu trữ kèm theo tên gọi và lượng calo Mỗi ngày, lượng calo được tính toán và lưu trữ tại server, sau đó gửi về cho người dùng, giúp họ kiểm soát lượng calo nạp vào hàng ngày.
Quá trình hoạt động của mô hình được mô tả trong Hình 3.2, bao gồm các bước thực hiện của server và client từ giai đoạn khởi động ban đầu cho đến khi 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.
(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;
Khi một ứng dụng client kết nối, chương trình sẽ kiểm tra danh sách các luồng xử lý và chọn một luồng đang rỗi để tiếp nhận và xử lý dữ liệu từ client.
- 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.
Khi quá trình tính toán nhận dạng và ước lượng calo trong thực phẩm hoàn tất, chương trình sẽ giải phóng luồng xử lý bằng cách cập nhật trạng thái hiện tại của nó.
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.
Thư viện được dùng là Keras, Framework Tensorflow.
Cấu hình desktop sử dụng để cài đặt chương trình
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 là một ứng dụng Android được phát triển trên nền tảng Android Studio 4.1.1, sử dụng các thư viện SDK Ứng dụng đã được chạy thử nghiệm trên thiết bị Google Pixel 2 và các điện thoại khác 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.
Mô hình huấn luyện
Bộ dữ liệu bao gồm hình ảnh thực phẩm chụp từ thực tế và tìm kiếm trên Internet, được phân loại theo từng loại thực phẩm để phục vụ cho quá trình huấn luyện Các loại thực phẩm này được thể hiện trong 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 được nhân bản bằng cách sử dụng ImageDataGenerator trong Keras, nhằm tạo ra các tập ảnh mới với các biến đổi như xoay, kéo dãn và thay đổi kích thước Hình ảnh dưới đây minh họa các phép biến đổi đã được thực hiện.
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.
Model sử dụng để huấn luyện là model Sequential.
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, cùng với các hàm dropout, flatten và dense để xử lý dữ liệu Ảnh đầu vào có kích thước 224 x 224 x 3, tương ứng với 150K pixel, trong đó 3 màu đại diện cho hệ màu RGB là đỏ, xanh lục và xanh lam.
Tổng số tham số là 6.447.530.
Tổng số tham số được huấn luyện 6.447.530.
Quá trình thực hiện nhận dạng được thể hiện như Hình 3.7.
Hình 3 7 Hình ảnh diễn giải mô hình huấn luyện
Mô hình huấn luyện trên được cài đặt các thông số như sau
Mô hình được huấn luyện qua 50 lần.
Quy trình huấn luyện dữ liệu
Hình 3.8 Quy trình thực hiện huấn luyện dữ liệu
Quá trình huấn luyện diễn ra sau khi hoàn thành các bước chuẩn bị trước đó Tốc độ huấn luyện có thể nhanh hay chậm tùy thuộc vào kích thước Batch, số Epoch và khối lượng dữ liệu sử dụng.
Hình 3.9 Hình ảnh quá trình huấn luyện Đồ thị Accuracy và Loss Đồ thị 3.1 Train accuracy và loss accuracy
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 để xác định 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 toán 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, cần xác định các thông số và thể tích của thực phẩm sau khi chuyển đổi về các hình dạng như hình cầu, hình trụ hoặc hình khối chữ nhật Việc này giúp đảm bảo tính chính xác trong việc đo lường và định lượng thực phẩm.
Dựa vào khối lượng thực tế của thực phẩm, chúng ta có thể suy ra lượng calo của thực phẩm đó bằng cách sử dụng dữ liệu calo trên 100g thực phẩm đã được kiểm chứng từ Bộ Nông nghiệp Hoa Kỳ.
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 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 xác định biên dạng đĩa, quá trình xử lý ảnh tiếp tục để xác định biên dạng thực phẩm Hình ảnh đầu vào cho bước tiếp theo là hình ảnh đã được xóa nền, chỉ còn lại đĩ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ẩmBước 4 Chuyển sang ảnh xámBướ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à pixel đĩa là yếu tố quan trọng để xác định diện tích thực phẩm, từ đó tính toán thể tích và khối lượng của thực phẩm Để thực hiện việc tính toán khối lượng thực phẩm, cần xem xét các yếu tố liên quan.
- 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à
- 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”)
Sdis diện tích thực tế của đĩa
S food 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 = S dis /area Diện tích thực phẩm tính theo công thức sau
* Đề 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
Gọi r là bán kính ước lượng từ hình ảnh tách biên của thực phẩm 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
- Tính thể tích hình trụ
Chiều cao của thực phẩm sau khi tách biên được tính bằng công thức h = hpix * a, trong đó a là tỉ lệ giữa pixel và cm, và 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ụ được xác định bằng r = Sfood / (π * h) Thể tích của hình trụ có thể được tính dựa trên các thông số này.
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 của hình hộp được xác định bằng cách nhân diện tích của thực phẩm với chiều dày của nó Ví dụ, nếu mỗi lát cắt bánh mì có độ dày là 1.5cm, ta có thể dễ dàng tính toán thể tích của bánh mì bằng công thức này.
Thể tích khối hộp được tính như sau
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 m =V d∗
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
Lượng Calo được quy đổi theo công thức sau
Trong bài viết này, chúng tôi cung cấp thông tin về lượng calo trong thực phẩm, cụ thể là 100 calo trên 100g thực phẩm Khối lượng thực phẩm được tính là m, và lượng calo này được xác định dựa trên dữ liệu đã được công bố và kiểm chứng bởi Bộ Nông nghiệp Hoa Kỳ.
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
Calo trên 100 gram (kcal) Label Hình dạng quy đổi
Ứ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),
+ Nút nhấn chụp hình và lựa chọn hình từ calo;
+ Tổng số calo nhận được.
Hình 3.13 Màn hình chính của ứng dụng.
- 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, lượng calo sẽ được ghi lại trên hệ thống hiển thị Người dùng có thể nhập calo từ khẩu phần thực phẩm hàng ngày, và sau khi chụp, hệ thống sẽ lưu trữ thông tin này theo từng ngày Nhờ vào số calo đã ghi nhận, người dùng có thể dễ dàng kiểm soát khẩu phần ăn của mình một cách hợp lý.
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 2 Bấm vào biểu tượng máy ảnh trên màn hình chính
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.