إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
في هذا المقال، ستتعلم كيفية استخدام Python وTensorFlow وAzure Functions مع نموذج تعلم آلي لتصنيف صورة بناء على محتواها. لأنك تقوم بكل العمل محليا ولا تنشئ موارد Azure في السحابة، فلا توجد تكلفة لإكمال هذا الدرس.
- تهيئة بيئة محلية لتطوير Azure Functions في Python.
- استرداد نموذج التعلم الآلي المخصص في TensorFlow إلى تطبيق الدالة.
- إنشاء واجهة برمجة تطبيقات بروتوكول نقل النص الفائق بلا خادم لتصنيف صورة ما على أنها تحتوي على كلب أو قطة.
- استخدام واجهة برمجة التطبيقات من تطبيق ويب.
المتطلبات الأساسية
- حساب Azure مع اشتراك نشط. أنشئ حسابا مجانا.
- Python 3.7.4. (تم التحقق من Python 3.7.4 و Python 3.6.x باستخدام Azure Functions؛ Python 3.8 والإصدارات الأحدث غير مدعومة بعد.)
- أدوات Azure Functions الأساسية
- محرر كود مثل Visual Studio Code
التحقق من المتطلبات الأساسية
- في نافذة طرفية أو أوامر، شغل
func --versionللتحقق من أن أدوات Azure Functions الأساسية هي الإصدار 2.7.1846 أو أحدث. - شغل
python --version(لينكس/ماك أو إس) أوpy --version(Windows) للتحقق من تقارير الإصدار Python 3.7.x.
استنساخ مستودع البرنامج التعليمي
انُسخ، في المحطة الطرفية أو نافذة الأوامر، المستودع التالي باستخدام Git:
git clone https://github.com/Azure-Samples/functions-python-tensorflow-tutorial.gitانتقل إلى المجلد وافحص محتوياته.
cd functions-python-tensorflow-tutorial- "start"يمثل مجلد العمل الخاص بك للبرنامج التعليمي.
- "end" تمثل النتيجة النهائية والتنفيذ الكامل للرجوع إليه.
- تحتوي الموارد على نموذج التعلم الآلي ومكتبات المساعد.
- الواجهة الأمامية بمثابة موقع على شبكة الإنترنت يستخدم تطبيق الدالة.
إنشاء وتفعيل بيئة افتراضية بلغة Python
انتقل إلى مجلد البدء وشغل الأوامر التالية لإنشاء وتفعيل البيئة الافتراضية باسم.venv. تأكد من استخدام Python 3.7، الذي يدعمه Azure Functions.
cd start
python -m venv .venv
source .venv/bin/activate
إذا لم يقم Python بتثبيت حزمة venv على توزيعة لينكس الخاصة بك، شغل الأمر التالي:
sudo apt-get install python3-venv
شغل جميع الأوامر اللاحقة في هذه البيئة الافتراضية النشطة. (لإنهاء البيئة الافتراضية، شغِّل deactivate.)
إنشاء مشروع دوال محلية
في Azure Functions، مشروع الدوال هو حاوية لدالة أو أكثر فردية تستجيب كل منها لمشغل محدد. تشترك جميع الدوال في المشروع في نفس التكوينات المحلية والاستضافة. في هذا القسم، يمكنك إنشاء مشروع دالة يحتوي على دالة معيارية مفردة تسمى classify توفر نقطة نهاية "HTTP". إضافة الرموز الأكثر تحديداً في أي قسم لاحق.
في مجلد start، استخدم أدوات Azure Functions الأساسية لتهيئة تطبيق دوال Python:
func init --worker-runtime pythonبعد التهيئة، يحتوي المجلد "Start" على ملفات متنوعة للمشروع، بما في ذلك ملفات التهيئة المسماة local.settings.json و host.json. نظرا لأن local.settings.json يمكن أن يحتوي على أسرار تم تنزيلها من Azure، فإن الملف يستبعد من التحكم في المصدر افتراضيا في ملف .gitignore.
تلميح
ونظراً لربط مشروع الدالة بوقت التشغيل المحددة، يجب كتابة جميع الدوال في المشروع بنفس اللغة.
أضف دالة إلى مشروعك باستخدام الأمر التالي، حيث تمثل الوسيطة
--nameالاسم المميز للدالة خاصتك فيما تُحدد الوسيطة--templateمشغل الدالة. ينشئfunc newمجلداً فرعياً يطابق اسم الوظيفة الذي يحتوي على ملف تعليمات برمجية مناسب للغة المختارة للمشروع وملف تكوين باسم function.json .func new --name classify --template "HTTP trigger"ينشئ هذا الأمر مجلداً مطابقاً لاسم الدالة، ويُصنف. يرد في هذا المجلد ملفان: __init__.pynit .py، الذي يحتوي على تعليمة برمجية للدالة وfunction.json، الذي يصف مشغل الدالة وروابط الإدخال والإخراج الخاصة بها. للمزيد من التفاصيل حول محتويات هذه الملفات، انظر Programming model في دليل المطورين Python.
تشغيل الدالة محليًا
ابدأ الوظيفة بتشغيل مضيف التشغيل المحلي Azure Functions في مجلد start:
func startبمجرد أن ترى نقطة النهاية
classifyتظهر في المخرج، انتقل إلى الرابطhttp://localhost:7071/api/classify?name=Azure. يجب أن تظهر الرسالة "Hello Azure!" في المخرج.استخدم Ctrl-C لإيقاف المضيف.
استرد نموذج TensorFlow واضف التعليمات البرمجية للمساعد
لتعديل وظيفة classify لتصنيف الصورة بناء على محتواها، تستخدم نموذج TensorFlow مسبق تم تدريبه وتصديره من خدمة الرؤية المخصصة Azure. يصنف النموذج، الموجود في مجلد الموارد للعينة التي استنسختها سابقا، الصورة استناداً إلى ما إذا كانت تحتوي على كلب أو قطة. أضف بعد ذلك بعض الرموز المساعدة والتبعيات إلى المشروع الخاص بك.
لبناء نموذجك الخاص باستخدام الطبقة المجانية من خدمة الرؤية المخصصة، اتبع التعليمات في مستودع مشروع sample repository.
تلميح
إذا كنت ترغب في استضافة نموذج TensorFlow بشكل مستقل في تطبيق الدوال، يمكنك بدلاً من ذلك تحميل مشاركة ملف تحتوي على النموذج الخاص بك إلى تطبيق دالة Linux. لمعرفة المزيد، راجع مشاركات الملفات في Mount (Mount File Shares).
في مجلد البدء، شغل الأمر التالي لنسخ ملفات النموذج إلى مجلد التصنيف. تأكد من إدراج
\*في الأمر.cp ../resources/model/* classifyتحقق من أن المجلد تصنيف يحتوي على ملفات باسم model.pb وlabels.txt. إذا لم يكن كذلك، تحقق من تشغيل الأمر في مجلد البدء.
في المجلد البدء، شغل الأمر التالي لنسخ ملف مع التعليمات البرمجية للمساعدة إلى مجلد التصنيف:
cp ../resources/predict.py classifyتحقق من أن المجلد تصنيف يحتوي الآن على ملف باسم predict.py.
افتح start/requirements.txt في محرر نص واضف التبعيات التالية المطلوبة بواسطة التعليمات البرمجية للمساعد:
tensorflow==1.14 Pillow requestsاحفظ متطلبات.txt.
ثبت التبعيات عن طريق تشغيل الأمر التالي في ملف البدء. قد يستغرق التثبيت بضع دقائق، وخلال هذه الفترة يمكنك المتابعة مع تعديل الدالة في القسم التالي.
pip install --no-cache-dir -r requirements.txtعلى Windows، قد تواجه الخطأ "لم يتمكن من تثبيت الحزم بسبب EnvironmentError: [خطأ 2] لا يوجد مثل هذا الملف أو الدليل:" متبوعا باسم مسار طويل لملف مثل sharded_mutable_dense_hashtable.cpython-37.pyc. يحدث هذا الخطأ بشكل عام لأن عمق مسار المجلد طويل جدا. في هذه الحالة، اضبط مفتاح التسجيل
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabledإلى1لتمكين مسارات طويلة. بدلا من ذلك، تحقق من مكان تثبيت مفسر Python الخاص بك. إذا كان هذا الموقع يحتوي على مسار طويل، حاول إعادة تثبيته في مجلد ذي مسار أقصر.
تلميح
عند طلب predict.py لإجراء التنبؤ الأول، تُحمل الدالة باسم _initialize نموذج TensorFlow من القرص وتخزينه في المتغيرات العمومية. يسرع هذا التخزين المؤقت التنبؤات اللاحقة.
تحديث الدالة لتشغيل التوقعات
فتح تصنيف/__init__.py في محرر نص واضف الأسطر التالية بعد
importالعبارات الموجودة لاستعادة مكتبة JSON القياسية ومساعدي التوقع:import logging import azure.functions as func import json # Import helper script from .predict import predict_image_from_urlاستبدال محتويات
mainبالرمز التالي:def main(req: func.HttpRequest) -> func.HttpResponse: image_url = req.params.get('img') logging.info('Image URL received: ' + image_url) results = predict_image_from_url(image_url) headers = { "Content-type": "application/json", "Access-Control-Allow-Origin": "*" } return func.HttpResponse(json.dumps(results), headers = headers)تستلم هذه الدالة صورة بعنوان URL في معلمة سلسلة استعلام باسم
img. وتطلب بعد ذلكpredict_image_from_urlمن مكتبة المساعد لتنزيل الصورة وتصنيفها باستخدام نموذج TensorFlow. تُعيد الدالة استجابة بروتوكول نقل النص الفائق مع النتائج.هام
نظراً لاستدعاء نقطة نهاية "HTTP" هذه بواسطة صفحة ويب مستضافة على نطاق آخر، فإن الاستجابة تتضمن ترويسة
Access-Control-Allow-Originلتلبية متطلبات مشاركة الموارد المشتركة (CORS) الخاصة بالمتصفح.أثناء تطبيق الإنتاج، قم بتغيير
*إلى الأصل المحدد لصفحة الويب لمزيد من الأمان.احفظ التغييرات الخاصة بك، ثم افترض انتهاء تثبيت التبعيات وابدأ مضيف الدالة المحلية مرة أخرى مع
func start. تأكد من تشغيل المضيف في مجلد "start" مع تنشيط البيئة الافتراضية. سيبدأ المضيف، ولكن ستظهر أخطاء عند طلب الدالة.func startافتح في المتصفح عنوان URL التالي لطلب الدالة مع عنوان URL لصورة القط وتأكد من تصنيف ملف JSON المسترد للصورة على أنها صورة قطة.
http://localhost:7071/api/classify?img=https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.pngحافظ على تشغيل المضيف لأنك ستستخدمه في الخطوة التالية.
شغل الواجهة الأمامية لتطبيق الويب المحلية لاختبار دالة
لاختبار طلب نقطة نهاية الدالة من تطبيق ويب آخر، سيظهر لك تطبيق بسيط في المجلد الأمامي للمستودع.
افتح طرفية أو موجه أوامر جديد وفعل البيئة الافتراضية (كما هو موضح سابقا تحت إنشاء وتفعيل بيئة افتراضية Python).
انتقل إلى المجلد الأمامي للمستودع.
ابدأ خادم HTTP باستخدام Python:
python -m http.serverانتقل في المتصفح إلى
localhost:8000، ثم أدخل أحد عناوين "URL" التالية للصور في مربع النص، أو استخدم عنوان "URL" لأي صورة يمكن الوصول إليها بشكل عام.https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.pnghttps://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat2.pnghttps://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog1.pnghttps://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog2.png
حدد "Submit" لطلب نقطة نهاية الدالة لتصنيف الصورة.
إذا أبلغ المتصفح عن خطأ عند إرسال عنوان "URL" للصورة، تحقق من المحطة الطرفية التي تقوم بتشغيل تطبيق الدوال فيها. إذا رأيت خطأ مثل "لم يتم العثور على وحدة نمطية 'PIL'"، فقد تكون قد بدأت تطبيق الدوال في مجلد "start" دون تنشيط البيئة الافتراضية التي أنشأتها في وقت سابق. إذا كنت لا تزال ترى أخطاء، شغل
pip install -r requirements.txtمرة أخرى مع تنشيط البيئة الافتراضية والبحث عن الأخطاء.
إشعار
يصنف النموذج دائما محتوى صورة القطة أو الكلب على أنها صورة كلب افتراضياً بصرف النظر عن احتواء الصورة على أي منهما. تُصنف صور النمور والفهود، على سبيل المثال، عادة على أنها قطة، فيما تُصنف صور الأفيال أو الجزر أو الطائرات على أنها صورة كلب.
تنظيف الموارد
نظرا لأن هذا الدرس يعمل بالكامل محليا على جهازك، فلا توجد موارد أو خدمات Azure لتنظيفها.
الخطوات التالية
في هذا الدرس، تعلمت كيفية بناء وتخصيص نقطة نهاية API لواجهة HTTP باستخدام Azure Functions لتصنيف الصور باستخدام نموذج TensorFlow. تعلمت كذلك كيفية الاتصال بواجهة برمجة التطبيقات من تطبيق ويب. يمكنك استخدام التقنيات في هذا الدرس لبناء واجهات برمجة تطبيقات بأي تعقيد، وكل ذلك أثناء التشغيل على نموذج الحوسبة بدون خادم الذي توفره Azure Functions.
راجع أيضًا: