شعار زيفيرنت

كيفية إنشاء تطبيق مرشد السعرات الحرارية باستخدام GenAI؟

التاريخ:

المُقدّمة

الذكاء الاصطناعي يحتوي على العديد من حالات الاستخدام، وبعض أفضلها موجود في مجال الصحة. يمكن أن يساعد الناس حقًا في الحفاظ على حياة أكثر صحة. ومع الطفرة المتزايدة في الذكاء الاصطناعي التوليدي، يتم إجراء بعض الطلبات هذه الأيام بتعقيد أقل. أحد التطبيقات المفيدة جدًا التي يمكن إنشاؤها هو تطبيق Calorie Advisor. في هذه المقالة، سنتناول هذا الأمر فقط، مستوحاة من الاهتمام بصحتنا. سنقوم ببناء تطبيق بسيط لمرشد السعرات الحرارية حيث يمكننا إدخال صور الطعام، وسيساعدنا التطبيق في حساب السعرات الحرارية لكل عنصر موجود في الطعام. هذا المشروع هو جزء من NutriGen، مع التركيز على الصحة من خلال الذكاء الاصطناعي.

نوتريجن

هدف التعلم

  • سيعتمد التطبيق الذي سنقوم بإنشائه في هذه المقالة على تقنيات الهندسة السريعة ومعالجة الصور الأساسية.
  • سنستخدم Google Gemini Pro Vision API في حالة الاستخدام الخاصة بنا.
  • بعد ذلك، سنقوم بإنشاء هيكل الكود، حيث سنقوم بمعالجة الصور والهندسة السريعة. وأخيرا، سوف نعمل على واجهة المستخدم باستخدام Streamlit.
  • بعد ذلك، سنقوم بنشر تطبيقنا على وجه يعانق منصة مجانية.
  • سنرى أيضًا بعض المشكلات التي سنواجهها في الإخراج حيث يفشل الجوزاء في تصوير عنصر غذائي ويعطي عددًا خاطئًا من السعرات الحرارية لذلك الطعام. سنناقش أيضًا الحلول المختلفة لهذه المشكلة.

الشروط المسبقة

لنبدأ بتنفيذ مشروعنا، ولكن قبل ذلك، يرجى التأكد من أن لديك فهمًا أساسيًا للذكاء الاصطناعي التوليدي وماجستير إدارة الأعمال. لا بأس إذا كنت تعرف القليل جدًا، لأننا في هذه المقالة سنقوم بتنفيذ الأشياء من الصفر.

بالنسبة إلى الهندسة الأساسية لـ Python، يلزم فهم أساسي للذكاء الاصطناعي التوليدي والإلمام بـ Google Gemini. بالإضافة إلى ذلك، المعرفة الأساسية انسيابي, جيثبو وجه يعانق المكتبات ضرورية. يعد الإلمام بالمكتبات مثل PIL لأغراض المعالجة المسبقة للصور مفيدًا أيضًا.

تم نشر هذه المقالة كجزء من مدونة علوم البيانات.

جدول المحتويات

خط أنابيب المشروع

سنعمل في هذه المقالة على بناء مساعد الذكاء الاصطناعي الذي يساعد خبراء التغذية والأفراد في اتخاذ قرارات مستنيرة بشأن خياراتهم الغذائية والحفاظ على نمط حياة صحي.

سيكون التدفق على النحو التالي: صورة الإدخال -> معالجة الصور -> الهندسة السريعة -> استدعاء الوظيفة النهائية للحصول على مخرجات صورة الإدخال للطعام. هذه لمحة موجزة عن كيفية تعاملنا مع بيان المشكلة هذا.

نظرة عامة على الجوزاء برو فيجن

الجوزاء برو هو متعدد الوسائط LLM تم إنشاؤها بواسطة جوجل. تم تدريبه ليكون متعدد الوسائط من الألف إلى الياء. يمكن أن يؤدي أداءً جيدًا في العديد من المهام، بما في ذلك التعليق على الصور، تصنيفوالتلخيص والإجابة على الأسئلة وما إلى ذلك. إحدى الحقائق الرائعة حول هذا الموضوع هي أنه يستخدم بنية وحدة فك ترميز المحولات الشهيرة لدينا. وتم تدريبه على أنواع متعددة من البيانات، مما يقلل من تعقيد حل المدخلات متعددة الوسائط وتوفير مخرجات عالية الجودة.

الخطوة الأولى: إنشاء البيئة الافتراضية

يعد إنشاء بيئة افتراضية ممارسة جيدة لعزل مشروعنا وتبعياته بحيث لا تتطابق مع الآخرين، ويمكننا دائمًا الحصول على إصدارات مختلفة من المكتبات التي نحتاجها في بيئات افتراضية مختلفة. لذلك، سنقوم بإنشاء بيئة افتراضية للمشروع الآن. للقيام بذلك، اتبع الخطوات المذكورة أدناه:

  • قم بإنشاء مجلد فارغ على سطح المكتب للمشروع.
  • افتح هذا المجلد في VS Code.
  • افتح الوحدة الطرفية.

اكتب الأمر التالي:

pip install virtualenv
python -m venv genai_project

يمكنك استخدام الأمر التالي إذا كنت تتلقى خطأ في سياسة التنفيذ sa et:

Set-ExecutionPolicy RemoteSigned -Scope Process

نحتاج الآن إلى تفعيل بيئتنا الافتراضية، لذلك استخدم الأمر التالي:

.genai_projectScriptsactivate

لقد نجحنا في إنشاء بيئتنا الافتراضية.

خطوة إنشاء بيئة افتراضية في Google Colab

يمكننا أيضًا إنشاء بيئتنا الافتراضية في Google Colab؛ إليك الإجراء خطوة بخطوة للقيام بذلك:

  • قم بإنشاء دفتر ملاحظات Colab جديد
  • استخدم الأوامر أدناه خطوة بخطوة
!which python
!python --version
#to check if python is installed or not
%env PYTHONPATH=
# setting python path environment variable in empty value ensuring that python
# won't search for modules and packages in additional directory. It helps
# in avoiding conflicts or unintended module loading.
!pip install virtualenv 
# create virtual environment 
!virtualenv genai_project
!wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

#This will help download the miniconda installer script which is used to create
# and manage virtual environments in python
!chmod +x Miniconda3-latest-Linux-x86_64.sh
# this command is making our mini conda installer script executable within
# the colab environment. 
!./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local
# this is used to run miniconda installer script and 
# specify the path where miniconda should be installed
!conda install -q -y --prefix /usr/local python=3.8 ujson
#this will help install ujson and python 3.8 installation in our venv.
import sys
sys.path.append('/usr/local/lib/python3.8/site-packages/')
#it will allow python to locate and import modules from a venv directory
import os
os.environ['CONDA_PREFIX'] = '/usr/local/envs/myenv'

# used to activate miniconda enviornment 
!python --version
#checks the version of python within the activated miniconda environment

ومن ثم، قمنا أيضًا بإنشاء بيئتنا الافتراضية في Google Colab. الآن، دعونا نتحقق ونرى كيف يمكننا إنشاء ملف .py أساسي هناك.

!source myenv/bin/activate
#activating the virtual environment
!echo "print('Hello, world!')" >> my_script.py
# writing code using echo and saving this code in my_script.py file
!python my_script.py
#running my_script.py file

سيؤدي هذا إلى طباعة Hello World لنا في الإخراج. هذا كل شيء. كان هذا كله يتعلق بالعمل مع البيئات الافتراضية في Google Colab. الآن، دعونا نواصل المشروع.

الخطوة 2: استيراد المكتبات اللازمة

import streamlit as st
import google.generativeaias genai 
import os 
from dotenv import load_dotenv
load_dotenv()
from PIL import Image

إذا كنت تواجه مشكلة في استيراد أي من المكتبات المذكورة أعلاه، فيمكنك دائمًا استخدام الأمر "pip install Library_name" لتثبيتها.

نحن نستخدم مكتبة Streamlit لإنشاء واجهة المستخدم الأساسية. سيتمكن المستخدم من تحميل صورة والحصول على المخرجات بناءً على تلك الصورة.

نحن نستخدم Google Geneative للحصول على LLM وتحليل الصورة للحصول على عدد السعرات الحرارية في طعامنا.

يتم استخدام الصورة لإجراء بعض عمليات المعالجة المسبقة الأساسية للصورة.

الخطوة 3: إعداد مفتاح API

قم بإنشاء ملف .env جديد في نفس الدليل وقم بتخزين مفتاح API الخاص بك. يمكنك الحصول على جوجل الجوزاء API مفتاح من جوجل ميكر سويت.

الخطوة 4: وظيفة مولد الاستجابة

هنا، سوف نقوم بإنشاء وظيفة مولد الاستجابة. دعنا نقسمها خطوة بخطوة:

أولاً، استخدمنا الجينات. قم بالتكوين لتكوين واجهة برمجة التطبيقات (API) التي أنشأناها من موقع Google MakerSuite على الويب. بعد ذلك، قمنا بإنشاء الدالة get_gemini_response، والتي تأخذ معلمتين للإدخال: موجه الإدخال والصورة. هذه هي الوظيفة الأساسية التي ستعيد الإخراج في النص.

genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))

def get_gemini_response(input_prompt, image):

    model = genai.GenerativeModel('gemini-pro-vision')

    response = model.generate_content([input_prompt, image[0]])

    return response

نحن هنا نستخدم نموذج "Gemini-pro-vision" لأنه متعدد الوسائط. بعد استدعاء نموذجنا من تبعية genie.GenerativeModel، نقوم فقط بتمرير الموجه وبيانات الصورة إلى النموذج. أخيرًا، استنادًا إلى الإرشادات المقدمة في الموجه وبيانات الصورة التي قمنا بتزويدها، سيعيد النموذج المخرجات في شكل نص يمثل عدد السعرات الحرارية لمختلف العناصر الغذائية الموجودة في الصورة.

الخطوة 5: المعالجة المسبقة للصورة

تتحقق هذه الوظيفة مما إذا كانت المعلمة upload_file هي لا شيء، مما يعني أن المستخدم قد قام بتحميل ملف. إذا تم تحميل ملف، فإن الكود يتابع قراءة محتوى الملف بالبايت باستخدام طريقة getvalue() لكائن upload_file. سيؤدي هذا إلى إرجاع البايتات الأولية للملف الذي تم تحميله.

يتم تخزين بيانات البايتات التي تم الحصول عليها من الملف الذي تم تحميله بتنسيق قاموس ضمن زوج القيمة الرئيسية "mime_type" و"data". يقوم مفتاح "mime_type" بتخزين نوع MIME للملف الذي تم تحميله، والذي يشير إلى نوع المحتوى (على سبيل المثال، صورة/jpeg، صورة/png). يقوم مفتاح "البيانات" بتخزين وحدات البايت الأولية للملف الذي تم تحميله.

يتم بعد ذلك تخزين بيانات الصورة في قائمة تسمى image_parts، والتي تحتوي على قاموس يحتوي على نوع MIME وبيانات الملف الذي تم تحميله.

def input_image_setup(uploaded_file):
    if uploaded_file isnotNone:
        #Read the file into bytes
        bytes_data = uploaded_file.getvalue()
        image_parts = [
            {
                "mime_type":uploaded_file.type, 
                "data":bytes_data
            }
        ]
        return image_parts
    else:
        raise FileNotFoundError("No file uploaded")

الخطوة 6: إنشاء واجهة المستخدم

أخيرًا، حان الوقت لإنشاء واجهة المستخدم لمشروعنا. كما ذكرنا من قبل، سوف نستخدم مكتبة Streamlit لكتابة التعليمات البرمجية للواجهة الأمامية.

## initialising the streamlit app
st.set_page_config(page_title="Calories Advisor App")
st.header("Calories Advisor App")
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
image = ""
if uploaded_file isnotNone:
    image = Image.open(uploaded_file)
    st.image(image, caption="Uploaded Image", use_column_width=True)
submit = st.button("Tell me about the total calories")

في البداية، قمنا بإعداد تكوين الصفحة باستخدام set_page_config وأعطينا عنوانًا للتطبيق. بعد ذلك، أنشأنا رأسًا وأضفنا مربعًا لتحميل الملفات حيث يمكن للمستخدمين تحميل الصور. تعرض الصورة St. الصورة التي قام المستخدم بتحميلها إلى واجهة المستخدم. أخيرًا، يوجد زر إرسال، وبعد ذلك سنحصل على المخرجات من نموذج اللغة الكبير الخاص بنا، Gemini Pro Vision.

الخطوة 7: كتابة موجه النظام

حان الوقت لتكون مبدعًا. هنا، سنقوم بإنشاء موجه الإدخال الخاص بنا، ونطلب من النموذج أن يعمل كخبير تغذية. ليس من الضروري استخدام المطالبة أدناه؛ يمكنك أيضًا تقديم المطالبة المخصصة الخاصة بك. نحن نطلب من نموذجنا أن يتصرف بطريقة معينة في الوقت الحالي. استنادًا إلى صورة الإدخال الخاصة بالطعام المقدم، نطلب من نموذجنا قراءة بيانات الصورة وإنشاء المخرجات، مما سيعطينا عدد السعرات الحرارية للمواد الغذائية الموجودة في الصورة ويقدم حكمًا حول ما إذا كان الطعام صحيًا أم لا أو غير صحية. وإذا كان الطعام ضاراً، فإننا نطلب منه إعطاء بدائل مغذية أكثر للمواد الغذائية الموجودة في صورتنا. يمكنك تخصيصه بشكل أكبر وفقًا لاحتياجاتك والحصول على طريقة ممتازة لتتبع صحتك.

في بعض الأحيان قد لا يتمكن من قراءة بيانات الصورة بشكل صحيح، وسنناقش الحلول المتعلقة بهذا أيضًا في نهاية هذه المقالة.

input_prompt = """

You are an expert nutritionist where you need to see the food items from the 
image and calculate the total calories, also give the details of all 
the food items with their respective calorie count in the below fomat.

        1. Item 1 - no of calories

        2. Item 2 - no of calories

        ----

        ----

Finally you can also mention whether the food is healthy or not and also mention 
the percentage split ratio of carbohydrates, fats, fibers, sugar, protein and 
other important things required in our diet. If you find that food is not healthy 
then you must provide some alternative healthy food items that user can have 
in diet.

"""
if submit:

    image_data = input_image_setup(uploaded_file)

    response = get_gemini_response(input_prompt, image_data)

    st.header("The Response is: ")

    st.write(response)

أخيرًا، نحن نتحقق من أنه إذا قام المستخدم بالنقر فوق الزر "إرسال"، فسنحصل على بيانات الصورة من ملف الصورة

وظيفة input_image_setup التي أنشأناها سابقًا. بعد ذلك، نقوم بتمرير موجه الإدخال الخاص بنا وبيانات الصورة هذه إلى وظيفة get_gemini_response التي أنشأناها سابقًا. نحن نستدعي جميع الوظائف التي أنشأناها سابقًا للحصول على الناتج النهائي المخزن استجابةً لذلك.

الخطوة 8: نشر التطبيق على معانقة الوجه

حان الوقت للنشر. هيا نبدأ.

سوف نشرح أبسط طريقة لنشر هذا التطبيق الذي أنشأناه. هناك خياران يمكننا النظر فيهما إذا أردنا نشر تطبيقنا: أحدهما هو Streamlit Share، والآخر هو Hugging Face. هنا، سوف نستخدم Hugging Face للنشر؛ يمكنك تجربة استكشاف النشر على Streamlit Share iFaceu إذا كنت تريد ذلك. إليك الرابط المرجعي لذلك - النشر على Streamlit Share

أولاً، لنقم بسرعة بإنشاء ملف require.txt الذي نحتاجه للنشر.

افتح الوحدة الطرفية وقم بتشغيل الأمر أدناه لإنشاء ملف require.txt.

pip freeze > requirements.txt1plainText

سيؤدي هذا إلى إنشاء ملف نصي جديد يسمى المتطلبات. جميع تبعيات المشروع ستكون متاحة هناك. إذا تسبب هذا في حدوث خطأ، فلا بأس. يمكنك دائمًا إنشاء ملف نصي جديد في دليل العمل الخاص بك ونسخ ولصق ملف require.txt من رابط GitHub الذي سأقدمه بعد ذلك.

الآن، تأكد من أن لديك هذه الملفات في متناول يدك (لأن هذا هو ما نحتاجه للنشر):

  • app.py
  • .env (لبيانات اعتماد API)
  • requirements.txt

إذا لم يكن لديك واحد، خذ كل هذه الملفات وأنشئ حسابا على الوجه المحتضن. ثم قم بإنشاء مساحة جديدة وقم بتحميل الملفات هناك. هذا كل شئ. سيتم نشر تطبيقك تلقائيًا بهذه الطريقة. ستتمكن أيضًا من رؤية كيفية حدوث النشر في الوقت الفعلي. في حالة حدوث خطأ ما، يمكنك دائمًا اكتشاف ذلك باستخدام الواجهة البسيطة وبالطبع مجتمع الوجه المعانق، الذي يحتوي على الكثير من المحتوى حول حل بعض الأخطاء الشائعة أثناء النشر.

وبعد مرور بعض الوقت، ستتمكن من رؤية التطبيق يعمل. وو هوو! لقد قمنا أخيرًا بإنشاء ونشر تطبيقنا لتوقع السعرات الحرارية. تهانينا!!، يمكنك مشاركة رابط العمل الخاص بالتطبيق مع الأصدقاء والعائلة الذين قمت بإنشائهم للتو.

إليك رابط العمل للتطبيق الذي أنشأناه للتو - The Alorcaloriisor APP

لنختبر تطبيقنا من خلال توفير صورة إدخال له:

قبل:

نوتريجن

بعد:

نوتريجن

هنا هو الكامل رابط مستودع جيثب يتضمن كود المصدر والمعلومات المفيدة الأخرى المتعلقة بالمشروع.

يمكنك استنساخ المستودع وتخصيصه وفقًا لمتطلباتك. حاول أن تكون أكثر إبداعًا ووضوحًا في مطالبتك، لأن هذا سيمنح نموذجك المزيد من القوة لإنشاء مخرجات صحيحة ومناسبة.

نطاق التحسين

المشاكل التي يمكن أن تحدث في المخرجات الناتجة عن النموذج وحلولها:

في بعض الأحيان، قد تكون هناك مواقف لن تحصل فيها على الإخراج الصحيح من النموذج. قد يحدث هذا لأن النموذج لم يكن قادرًا على التنبؤ بالصورة بشكل صحيح. على سبيل المثال، إذا قدمت صورًا مدخلة لطعامك وكان طعامك يحتوي على مخللات، فقد يعتبره نموذجنا شيئًا آخر. وهذا هو الاهتمام الرئيسي هنا.

  • إحدى طرق معالجة ذلك هي من خلال تقنيات الهندسة السريعة الفعالة، مثل الهندسة السريعة السريعة، حيث يمكنك تغذية النموذج بالأمثلة، وبعد ذلك سيقوم بإنشاء المخرجات بناءً على الدروس المستفادة من تلك الأمثلة والموجه الذي قدمته.
  • الحل الآخر الذي يمكن أخذه في الاعتبار هنا هو إنشاء بياناتنا المخصصة وضبطها. يمكننا إنشاء بيانات تحتوي على صورة المادة الغذائية في عمود واحد ووصف العناصر الغذائية الموجودة في العمود الآخر. سيساعد هذا نموذجنا على تعلم الأنماط الأساسية والتنبؤ بالعناصر بشكل صحيح في الصورة المقدمة. وبالتالي، فإن الحصول على نتائج أكثر دقة لعدد السعرات الحرارية لصور الطعام أمر ضروري.
  • يمكننا المضي قدمًا من خلال سؤال المستخدم عن أهدافه الغذائية ومطالبة النموذج بإنشاء مخرجات بناءً على ذلك. (بهذه الطريقة، سنكون قادرين على تخصيص المخرجات الناتجة عن النموذج وإعطاء المزيد من المخرجات الخاصة بالمستخدم.)

وفي الختام

لقد بحثنا في التطبيق العملي للذكاء الاصطناعي التوليدي في مجال الرعاية الصحية، مع التركيز على إنشاء تطبيق Calorie Advisor. يعرض هذا المشروع إمكانات الذكاء الاصطناعي لمساعدة الأفراد في اتخاذ قرارات مستنيرة بشأن خياراتهم الغذائية والحفاظ على نمط حياة صحي. بدءًا من إعداد بيئتنا وحتى تنفيذ معالجة الصور والتقنيات الهندسية السريعة، قمنا بتغطية الخطوات الأساسية. يوضح نشر التطبيق على Hugging Face إمكانية وصوله إلى جمهور أوسع. تمت معالجة التحديات مثل عدم دقة التعرف على الصور من خلال حلول مثل الهندسة السريعة الفعالة. في الختام، يعد تطبيق Calorie Advisor بمثابة شهادة على القوة التحويلية للذكاء الاصطناعي التوليدي في تعزيز الرفاهية.

الوجبات السريعة الرئيسية

  • لقد ناقشنا الكثير حتى الآن، بدءًا من مسار المشروع ومن ثم مقدمة أساسية لنموذج اللغة الكبير Gemini Pro Vision.
  • ثم بدأنا بالتنفيذ العملي. لقد أنشأنا بيئتنا الافتراضية ومفتاح واجهة برمجة التطبيقات (API) من Google MakerSuite.
  • بعد ذلك، قمنا بتنفيذ جميع عمليات الترميز في البيئة الافتراضية التي تم إنشاؤها. علاوة على ذلك، ناقشنا كيفية نشر التطبيق على منصات متعددة، مثل Hugging Face وStreamlit Share.
  • وبصرف النظر عن ذلك، فقد نظرنا في المشاكل المحتملة التي يمكن أن تحدث، وناقشنا الحلول لتلك المشاكل.
  •  ولذلك، كان من الممتع العمل في هذا المشروع. شكرًا لك على بقائك حتى نهاية هذا المقال؛ أتمنى أن تتعلم شيئًا جديدًا.

الأسئلة المتكررة

Q1. ما هو نموذج Google Gemini Pro Vision؟

قامت Google بتطوير Gemini Pro Vision، وهي شهادة LLM مشهورة ومعروفة بقدراتها المتعددة الوسائط. ينفذ مهام مثل التعليق على الصور، والتوليد، والتلخيص. يمكن للمستخدمين إنشاء مفتاح API على موقع MakerSuite الإلكتروني للوصول إلى Gemini Pro Vision.

Q2. كيف يمكن تطبيق الذكاء الاصطناعي التوليدي في مجال الرعاية الصحية/التغذية؟

ج: يتمتع الذكاء الاصطناعي التوليدي بإمكانيات كبيرة لحل مشكلات العالم الحقيقي. بعض الطرق التي يمكن تطبيقها في مجال الصحة/التغذية هي أنها يمكن أن تساعد الأطباء على إعطاء وصفات طبية بناءً على الأعراض والعمل كمستشار تغذية، حيث يمكن للمستخدمين الحصول على توصيات صحية لنظامهم الغذائي.

Q3. كيف تحل الهندسة السريعة قضية استخدام الذكاء الاصطناعي التوليدي؟

ج: تعتبر الهندسة السريعة مهارة أساسية يجب إتقانها هذه الأيام. أفضل مكان لتعلم هندسة البوق من الأساسي إلى المتقدم هو هنا – https://www.promptingguide.ai/

Q4. كيف يمكن زيادة قدرة النموذج على توليد مخرجات أكثر صحة؟

ج: لزيادة قدرة النموذج على توليد مخرجات أكثر صحة، يمكننا استخدام الأساليب التالية: المطالبة الفعالة، والضبط الدقيق، والتوليد المعزز للاسترجاع (RAG).

الوسائط الموضحة في هذه المقالة ليست مملوكة لـ Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة