[Hackathon] Calories Showing – App giúp kiểm tra calories từ hình ảnh thức ăn
Giới thiệu
(https://www.worldbank.org/en/news/infographic/2020/01/29/the-crippling-costs-of-obesity)
Ngày nay thế giới phải đối mặt với gánh nặng kép về dinh dưỡng bao gồm cả suy dinh dưỡng và thừa cân béo phì. Trong đó, tỷ lệ béo phì đang gia tăng rất nhanh. Số liệu gần đây cho thấy kể từ năm 1975, bệnh béo phì đã tăng gần gấp ba lần và hiện nó gây ra 4 triệu ca tử vong trên toàn thế giới mỗi năm. Năm 2016, trên thế giới có hơn 2 tỷ người trưởng thành (44%) bị thừa cân hoặc béo phì.
(https://www.azumio.com/blog/nutrition/healthy-eating-101-food-journaling)
Trong khi những người thừa cân đang nạp quá nhiều calories, thì những người thiếu cân lại không nạp đủ calories để duy trì chúng. Chính vì vậy các chuyên gia dinh dưỡng khuyên rằng mỗi chúng ta nên lập kế hoạch calories-in và calories-out hằng ngày để kiểm soát lượng calories, từ đó sẽ giúp cải thiện tình trạng suy dinh dưỡng hoặc thừa cân béo phì và để có cơ thể khỏe mạnh.
(https://atlasbiomed.com/blog/best-food-diary-guide-2020/)
Ngày nay dưới sự phát triển như vũ bão của công nghệ, đặc biệt là công nghệ AI (Artificial Intelligence), thì việc áp dụng nó phục vụ cuộc sống hằng ngày là một xu hướng tất yếu. Và áp dụng nó vào Fitness/Healthcare cũng không là ngoại lệ.
Những điều nêu trên là ý tưởng chính để team chúng tôi phát triển app Calories Showing. Chức năng của app là từ hình ảnh thức ăn chụp bằng camera điện thoại sẽ cho bạn biết lượng calories của thức ăn đó, từ đó giúp bạn điều chỉnh lượng calories của bản thân.
Calories Showing app
Công nghệ sử dụng
Để thuận tiện cho việc sử dụng trên cả thiết bị máy tính và điện thoại, team tôi quyết định xây dựng WebApp sử dụng ngôn ngữ Javascript (NodeJS). Ngoài ra, chúng tôi sử dụng MySQL để lưu trữ dữ liệu calories, cũng như để thuận tiện cho sau này phát triển thêm chức năng (ví dụ như lưu thông tin user).
Để việc deploy dễ dàng hơn, cũng như dễ mở rộng sau này, chúng tôi cũng sử dụng Docker cho các phần WebApp, MySQL.
Google Cloud Vision
Google Cloud Vision API cung cấp các pre-trained machine learning models mạnh mẽ thông qua REST API. Giúp các developer dễ dàng tích hợp vào ứng dụng của mình các tính năng như phát hiện các đối tượng, nhận dạng khuôn mặt, nhận dạng hình ảnh, phân loại, gán nhãn và trích xuất văn bản của văn bản in hoặc hình ảnh chữ viết tay.
Trong dự án chúng tôi sử dụng 2 chức năng của Google Cloud Vision API cung cấp đó là:
- Label Detection: phát hiện và trích xuất thông tin về các thực thể trong một hình ảnh, trên một nhóm các danh mục.
- Object Localization: phát hiện và trích xuất nhiều đối tượng trong một hình ảnh
Từ kết quả trả về từ Google Cloud Vision và dữ liệu thu thập từ database sẽ trả về cho user lượng calories của thức ăn đó.
Bảng giá của Google Cloud Vision
Phù hợp với dự án nhỏ với số lượng user sử dụng ít. Khi số lượng user trở nên lớn hơn thì số tiền phải trả cũng tăng lên rất nhiều.
=> Chính vì vậy, không nên phụ thuộc mà cần có giải pháp thay thế (sẽ được trình bày ở phần sau)
Giao diện, chức năng của app
Chọn hình ảnh từ máy hoặc chụp từ camera điện thoại
Từ hình ảnh đã chọn, AI sẽ detect thức ăn mà bạn đã chụp, ngoài ra bạn cũng có thể nhập tay những thức ăn còn thiếu
Cuối cùng là màn hình kết quả, bạn có thể nhập vào số lượng của mỗi loại thức ăn để hệ thống tính toán lượng calories
Các vấn đề chưa giải quyết được và định hướng phát triển trong tương lai
Độ chính xác thấp
Google Vision tập dữ liệu detect rộng nhưng không chuyên sâu đối với thức ăn, chính vì vậy độ chính xác thấp.
Ví dụ đối với hình ảnh trái Kiwi, thì kết quả trả về của Google Cloud Vision rất chung chung là Fruit và Food.
Để cải thiện độ chính xác thì có các giải pháp sau:
- Thay thế Google Cloud Vision bằng dịch vụ AI API chuyên về thức ăn như FoodAI, LogMeal API,.. Ưu điểm là độ chính xác cao hơn, mức độ dễ dùng tương tự Google Cloud Vision. Nhược điểm là giá cao và phụ thuộc vào nhà cung cấp API, không thể thêm mới dữ liệu training các món ăn khác.
- Tự xây dựng và training model Deep Learning chuyên biệt về thức ăn. Ưu điểm là độ chính xác cao, làm chủ công nghệ nên có thể tự thêm mới dữ liệu training các món ăn tùy theo nhu cầu. Nhược điểm là yêu cầu là cần có thời gian để research model tối ưu nhất, cần phải có datasets (dữ liệu hình ảnh có gán nhãn) đủ lớn thì mới có được độ chính xác cao.
=> Sau khi thảo luận và căn nhắc chúng tôi quyết định chọn kết hợp giải pháp: Tự xây dựng và training model Deep Learning chuyên biệt về thức ăn (Python, Tensorflow), song song với đó là sử dụng Google Cloud Vision.
Việc kết hợp giải pháp sẽ giúp:
- Giảm được một phần chi phí phải trả cho Google Cloud Vision API
- Khắc phục hạn chế ban đầu của model tự xây dựng đó là độ chính xác chưa cao do datasets còn ít và chưa tìm được model tối ưu.
- Tách phần xây dựng model Deep Learning thành một phần riêng, để không vì nó mà làm ảnh hưởng đến việc xây dựng thêm tính năng của app.
- Khi model Deep Learning tự xây dựng đã đạt được độ chính xác mong muốn thì loại bỏ Google Cloud Vision khỏi flow dự án.
Xác định lượng calories phụ thuộc vào database
Trường hợp thức ăn không có trong database thì không cách nào có thể chọn được (kể cả nhập tay).
Giải pháp: Trường hợp không detect được thì hiển thị dialog hỏi user là có muốn sử dụng hình ảnh đã tải lên để giúp bổ sung vào cơ sở dữ liệu của app hay không => Nếu user đồng ý thì tiến hành lưu hình ảnh mà user đã sử dụng vào storage, từ hình ảnh đó chúng tôi sẽ tìm hiểu thông tin về calories để lưu vào database, đồng thời thu thập datasets để training model Deep Learning.
Định hướng phát triển trong tương lai
1/ Xây dựng thêm nhiều tính năng để để trở thành một app hoàn thiện. Các tính năng dự kiến phát triển thêm: đăng ký, đăng nhập, tính lượng calories cần thiết mỗi ngày, cảnh báo thiếu/thừa lượng calories, lập kế hoạch giảm cân/tăng cân,…
2/ Cải thiện độ chính xác của AI, xây dựng, tối ưu model Deep Learning.
Chính vì vậy nhóm chúng tôi sẽ chia làm 2 nhóm nhỏ. Nhóm phụ trách phát triển tính năng cho app và nhóm xây dựng, tối ưu model Deep Learning.
Tài liệu tham khảo
https://www.worldbank.org/en/news/infographic/2020/01/29/the-crippling-costs-of-obesity
https://cloud.google.com/vision