كيفية استخدام Flows مع واجهة برمجة التطبيقات Google Vision وGoogle Cloud Functions
طائر
06/10/2020
منشئ التدفقات
1 min read

النقاط الرئيسية
Flows أكثر من أداة بدون كود — إنها محرك أتمتة مرن يتيح لك توسيع سير العمل باستخدام الكود من خلال خدمات خارجية مثل وظائف Google السحابية أو AWS Lambda.
تعرض هذه الدورة التدريبية كيفية بناء روبوت دردشة Telegram يستخدم واجهة برمجة التطبيقات لرؤية Google لتحديد الصور (مثل اكتشاف ما إذا كانت الصورة تحتوي على هوت دوج 🥪).
تظهر هذه المثال كيف يمكن أن تتصل Flows بسهولة بــ واجهات برمجة التطبيقات للتعرف على الصور لمعالجة المحتوى المقدّم من المستخدم تلقائيًا.
يمكن للمطورين الاستفادة من هذه البنية لبناء أتمتة في العالم الحقيقي، مثل تأكيد التسليم، أو التحقق من الهوية، أو سير عمل مراقبة الجودة.
يجعل دمج واجهة برمجة التطبيقات لرؤية Google داخل وظيفة سحابية تمكين الرؤى المدعومة بالذكاء الاصطناعي (اكتشاف الكائنات، وثقة التسمية، استخراج البيانات الوصفية) التي يمكن أن تتفاعل معها Flows ديناميكيًا.
تُعتبر خطوة “جلب المتغيرات” في مُنشئ التدفق هي الجسر — حيث إنها تستدعي الوظيفة السحابية وتخزن استجابة واجهة برمجة التطبيقات للاستخدام لاحقًا في المحادثة.
يمكن استخدام كتل الردود متغيرات مثل {{isHotDog}} لتخصيص الردود، مما يحول البيانات الخام إلى رسائل دردشة سياقية.
بينما العرض ترفيهي، فإنه يوضح كيف يمكن للمطورين دمج منطق بدون كود مع الوظائف السحابية لفتح قدرات أتمتة قوية عبر قنوات المراسلة.
أهم النقاط في الأسئلة والأجوبة
ما هو Flow Builder؟
محرر التدفقات (أو التدفقات) هو محرك الأتمتة المرئي من Bird لإنشاء سير العمل الخاص بالتواصل عبر القنوات - لا يتطلب الأمر أي برمجة، على الرغم من أنه يمكن توسيعه بكود مخصص.
لماذا استخدام Google Cloud Functions مع Flows؟
تسمح لك وظائف السحابة بتشغيل كود بدون خادم لمعالجة البيانات (مثل تحليل الصور أو جلب بيانات API الخارجية) وإدخال النتائج مرة أخرى في سير العمل الخاص بك.
ماذا تفعل واجهة برمجة التطبيقات Google Vision في هذا الإعداد؟
يقوم بتحليل الصور - تحديد الكائنات أو التسمية أو المفاهيم (مثل "هوت دوج") - ويعيد بيانات منظمة إلى تدفقك.
كيف أربط دالة سحابية ببرنامج إنشاء التدفقات؟
استخدم خطوة تحصيل المتغيرات لاستدعاء نقطة النهاية العامة للوظيفة عبر HTTPS. يمكن استخدام الاستجابة (مثل،
{ "isHotDog": true }) في الخطوات اللاحقة.هل يمكن استخدام هذا في حالات الأعمال الحقيقية؟
بالتأكيد. يمكن أن validate delivery photos نفس الأسلوب، كشف العناصر التالفة، التعرف على الوثائق، أو التحقق من الوسائط المرفوعة.
ما الذي يجعل هذا التكامل قوياً؟
يجمع بين رؤية الذكاء الاصطناعي و المرونة بدون خادم و التواصل عبر قنوات متعددة، مما يمكّن من أتمتة أذكى دون الحاجة إلى صيانة البنية التحتية.
هل أحتاج إلى خبرة في البرمجة لمتابعة ذلك؟
التعرف الأساسي على جافا سكريبت (لخدمة Google Cloud Function) مفيد، ولكن معظم العملية - من ربط القنوات إلى منطق التدفق - هي بصرية وملائمة للمبتدئين.
الـFlows هو محرك أتمتة قوي يعتمد على السحب والإفلات لإنشاء تدفقات الاتصال. لقد تخيلنا في البداية أنه حل بدون كود، ولكننا وجدنا أن العديد من المستخدمين يمكنهم تحقيق سلوك قوي حقًا من خلال كتابة بعض التعليمات البرمجية لحالات الاستخدام المحددة. يمكن أن تكون هذه المقاطع من التعليمات البرمجية داخل Flow Builder، أو يمكن أن تكون وظائف سحابية من جهات خارجية مثل وظائف AWS Lambda أو وظائف Google Cloud.
هذه عرض بسيط يستخدم وظائف GoogleCloud و Flows للقيام بالتعرف على الصور على صورة أُرسلت على تيليجرام.
الـFlows هو محرك أتمتة قوي يعتمد على السحب والإفلات لإنشاء تدفقات الاتصال. لقد تخيلنا في البداية أنه حل بدون كود، ولكننا وجدنا أن العديد من المستخدمين يمكنهم تحقيق سلوك قوي حقًا من خلال كتابة بعض التعليمات البرمجية لحالات الاستخدام المحددة. يمكن أن تكون هذه المقاطع من التعليمات البرمجية داخل Flow Builder، أو يمكن أن تكون وظائف سحابية من جهات خارجية مثل وظائف AWS Lambda أو وظائف Google Cloud.
هذه عرض بسيط يستخدم وظائف GoogleCloud و Flows للقيام بالتعرف على الصور على صورة أُرسلت على تيليجرام.
الـFlows هو محرك أتمتة قوي يعتمد على السحب والإفلات لإنشاء تدفقات الاتصال. لقد تخيلنا في البداية أنه حل بدون كود، ولكننا وجدنا أن العديد من المستخدمين يمكنهم تحقيق سلوك قوي حقًا من خلال كتابة بعض التعليمات البرمجية لحالات الاستخدام المحددة. يمكن أن تكون هذه المقاطع من التعليمات البرمجية داخل Flow Builder، أو يمكن أن تكون وظائف سحابية من جهات خارجية مثل وظائف AWS Lambda أو وظائف Google Cloud.
هذه عرض بسيط يستخدم وظائف GoogleCloud و Flows للقيام بالتعرف على الصور على صورة أُرسلت على تيليجرام.
التدفقات وما بعدها
كمطور لFlows، أفكر كثيرًا في من هم مستخدمونا، ولماذا يستخدمون Flows، وما يحتاجون إليه لتحقيق أهدافهم؛ ثم، ما الميزات التي نحتاج إلى تنفيذها لخدمة هؤلاء المستخدمين بشكل أفضل.
Flows هي محرك قوي للتلقائية بالسحب والإفلات لإنشاء تدفقات الاتصال. في البداية تصورناها كحل بدون كود، ولكننا وجدنا أن العديد من المستخدمين يمكنهم الحصول على سلوك قوي حقًا عند كتابة بعض التعليمات البرمجية لحالات استخدام محددة. على سبيل المثال، يمكنك إنشاء تدفقات تقوم تلقائيًا بإنشاء العملاء والحالات في Salesforce بناءً على تفاعلات العملاء عبر قنوات متعددة. يمكن أن تكون هذه الأجزاء من التعليمات البرمجية داخل Flows، أو يمكن أن تكون وظائف سحابية من طرف ثالث مثل وظائف AWS Lambda أو وظائف Google Cloud.
حالة استخدام مثيرة: التعرف على الصور
كمثال قصير وخفيف، سأعرض لك كيفية تنفيذ تطبيق يتعرف على الهوت دوغ. سنقوم بإعداد تدفق في Flows، الذي سيتلقى الصور من المستخدمين ويحدد، ما إذا كانوا قد أرسلوا هوت دوغ أم لا.
بالنسبة للعديد من عملائنا، يمكن أن يكون هذا النوع من التعرف على الصور قويًا جدًا. تخيل أنك تدير خدمة توصيل وتريد التحقق من التوصيلات الناجحة تلقائيًا. مشابه لما سأظهره، يمكنك استخدام بيانات الموقع، وصور الطرود، وحتى توقيعات المستلمين لإنشاء تدفق تحقق في Flows.
كمطور لFlows، أفكر كثيرًا في من هم مستخدمونا، ولماذا يستخدمون Flows، وما يحتاجون إليه لتحقيق أهدافهم؛ ثم، ما الميزات التي نحتاج إلى تنفيذها لخدمة هؤلاء المستخدمين بشكل أفضل.
Flows هي محرك قوي للتلقائية بالسحب والإفلات لإنشاء تدفقات الاتصال. في البداية تصورناها كحل بدون كود، ولكننا وجدنا أن العديد من المستخدمين يمكنهم الحصول على سلوك قوي حقًا عند كتابة بعض التعليمات البرمجية لحالات استخدام محددة. على سبيل المثال، يمكنك إنشاء تدفقات تقوم تلقائيًا بإنشاء العملاء والحالات في Salesforce بناءً على تفاعلات العملاء عبر قنوات متعددة. يمكن أن تكون هذه الأجزاء من التعليمات البرمجية داخل Flows، أو يمكن أن تكون وظائف سحابية من طرف ثالث مثل وظائف AWS Lambda أو وظائف Google Cloud.
حالة استخدام مثيرة: التعرف على الصور
كمثال قصير وخفيف، سأعرض لك كيفية تنفيذ تطبيق يتعرف على الهوت دوغ. سنقوم بإعداد تدفق في Flows، الذي سيتلقى الصور من المستخدمين ويحدد، ما إذا كانوا قد أرسلوا هوت دوغ أم لا.
بالنسبة للعديد من عملائنا، يمكن أن يكون هذا النوع من التعرف على الصور قويًا جدًا. تخيل أنك تدير خدمة توصيل وتريد التحقق من التوصيلات الناجحة تلقائيًا. مشابه لما سأظهره، يمكنك استخدام بيانات الموقع، وصور الطرود، وحتى توقيعات المستلمين لإنشاء تدفق تحقق في Flows.
كمطور لFlows، أفكر كثيرًا في من هم مستخدمونا، ولماذا يستخدمون Flows، وما يحتاجون إليه لتحقيق أهدافهم؛ ثم، ما الميزات التي نحتاج إلى تنفيذها لخدمة هؤلاء المستخدمين بشكل أفضل.
Flows هي محرك قوي للتلقائية بالسحب والإفلات لإنشاء تدفقات الاتصال. في البداية تصورناها كحل بدون كود، ولكننا وجدنا أن العديد من المستخدمين يمكنهم الحصول على سلوك قوي حقًا عند كتابة بعض التعليمات البرمجية لحالات استخدام محددة. على سبيل المثال، يمكنك إنشاء تدفقات تقوم تلقائيًا بإنشاء العملاء والحالات في Salesforce بناءً على تفاعلات العملاء عبر قنوات متعددة. يمكن أن تكون هذه الأجزاء من التعليمات البرمجية داخل Flows، أو يمكن أن تكون وظائف سحابية من طرف ثالث مثل وظائف AWS Lambda أو وظائف Google Cloud.
حالة استخدام مثيرة: التعرف على الصور
كمثال قصير وخفيف، سأعرض لك كيفية تنفيذ تطبيق يتعرف على الهوت دوغ. سنقوم بإعداد تدفق في Flows، الذي سيتلقى الصور من المستخدمين ويحدد، ما إذا كانوا قد أرسلوا هوت دوغ أم لا.
بالنسبة للعديد من عملائنا، يمكن أن يكون هذا النوع من التعرف على الصور قويًا جدًا. تخيل أنك تدير خدمة توصيل وتريد التحقق من التوصيلات الناجحة تلقائيًا. مشابه لما سأظهره، يمكنك استخدام بيانات الموقع، وصور الطرود، وحتى توقيعات المستلمين لإنشاء تدفق تحقق في Flows.
خطة للنجاح
أولاً، سنقوم بإنشاء وظيفة سحابية، تتلقى طلبًا يحتوي على رابط لصورة، ثم تستخدم واجهة برمجة تطبيقات التعرف على الصور لمعالجة الصورة، وتستجيب سواء كانت هناك نقانق في الصورة أم لا.
ثم سنقوم ببناء تدفق، يستقبل رسالة من مستخدم عبر قناة الرسائل (تيليجرام في هذه الحالة)، ينفذ الوظيفة السحابية السابقة، ويستجيب للمستخدم سواء كانت هناك نقانق في الصورة التي أرسلها.
أولاً، سنقوم بإنشاء وظيفة سحابية، تتلقى طلبًا يحتوي على رابط لصورة، ثم تستخدم واجهة برمجة تطبيقات التعرف على الصور لمعالجة الصورة، وتستجيب سواء كانت هناك نقانق في الصورة أم لا.
ثم سنقوم ببناء تدفق، يستقبل رسالة من مستخدم عبر قناة الرسائل (تيليجرام في هذه الحالة)، ينفذ الوظيفة السحابية السابقة، ويستجيب للمستخدم سواء كانت هناك نقانق في الصورة التي أرسلها.
أولاً، سنقوم بإنشاء وظيفة سحابية، تتلقى طلبًا يحتوي على رابط لصورة، ثم تستخدم واجهة برمجة تطبيقات التعرف على الصور لمعالجة الصورة، وتستجيب سواء كانت هناك نقانق في الصورة أم لا.
ثم سنقوم ببناء تدفق، يستقبل رسالة من مستخدم عبر قناة الرسائل (تيليجرام في هذه الحالة)، ينفذ الوظيفة السحابية السابقة، ويستجيب للمستخدم سواء كانت هناك نقانق في الصورة التي أرسلها.
إعداد دالة Google Cloud
أولاً، سنحتاج إلى إعداد دالة سحابية. للبدء بسرعة، اتبع دليل البدء السريع لدوال Google السحابية. كـ ‘مشغل’ اختر مشغل HTTP، وبيئة التنفيذ: Node.js 10، وفي حقل كود المصدر أدرج مقتطف الكود. إنه كود بسيط، يتحقق مما إذا كانت الطلب تحتوي على كود JSON ويجيب بنعم أو لا.
/** * Responds to any HTTP request. * * @param {!express:Request} req HTTP request context. * @param {!express:Response} res HTTP response context. */ exports.helloWorld = (req, res) => { let message = req.query.url ? "yes" : "no"; res.setHeader('Content-Type', 'application/json'); res.status(200).send(JSON.stringify({ isHotDog: message })); };

بعد ذلك، ستحتاج إلى نشر هذه الدالة. لاختبارها داخل منصة Google Cloud، اتبع الخطوات من الدليل.
لاختبارها من متصفحك، انتقل إلى عنوان URL التالي مع إدخال العنوان المحدد لدالتك:
https://your-function-address.cloudfunctions.net/HotDogOrNot/?url=hello يجب أن تعيد {“isHotDog”: true} والعنوان https://your-function-address.cloudfunctions.net/HotDogOrNot يجب أن يعيد {“isHotDog”: false}.
عمل رائع! لقد قمت بإعداد دالة سحابية من Google. الآن نحتاج إلى جعل دالتنا السحابية أكثر ذكاءً.
أولاً، سنحتاج إلى إعداد دالة سحابية. للبدء بسرعة، اتبع دليل البدء السريع لدوال Google السحابية. كـ ‘مشغل’ اختر مشغل HTTP، وبيئة التنفيذ: Node.js 10، وفي حقل كود المصدر أدرج مقتطف الكود. إنه كود بسيط، يتحقق مما إذا كانت الطلب تحتوي على كود JSON ويجيب بنعم أو لا.
/** * Responds to any HTTP request. * * @param {!express:Request} req HTTP request context. * @param {!express:Response} res HTTP response context. */ exports.helloWorld = (req, res) => { let message = req.query.url ? "yes" : "no"; res.setHeader('Content-Type', 'application/json'); res.status(200).send(JSON.stringify({ isHotDog: message })); };

بعد ذلك، ستحتاج إلى نشر هذه الدالة. لاختبارها داخل منصة Google Cloud، اتبع الخطوات من الدليل.
لاختبارها من متصفحك، انتقل إلى عنوان URL التالي مع إدخال العنوان المحدد لدالتك:
https://your-function-address.cloudfunctions.net/HotDogOrNot/?url=hello يجب أن تعيد {“isHotDog”: true} والعنوان https://your-function-address.cloudfunctions.net/HotDogOrNot يجب أن يعيد {“isHotDog”: false}.
عمل رائع! لقد قمت بإعداد دالة سحابية من Google. الآن نحتاج إلى جعل دالتنا السحابية أكثر ذكاءً.
أولاً، سنحتاج إلى إعداد دالة سحابية. للبدء بسرعة، اتبع دليل البدء السريع لدوال Google السحابية. كـ ‘مشغل’ اختر مشغل HTTP، وبيئة التنفيذ: Node.js 10، وفي حقل كود المصدر أدرج مقتطف الكود. إنه كود بسيط، يتحقق مما إذا كانت الطلب تحتوي على كود JSON ويجيب بنعم أو لا.
/** * Responds to any HTTP request. * * @param {!express:Request} req HTTP request context. * @param {!express:Response} res HTTP response context. */ exports.helloWorld = (req, res) => { let message = req.query.url ? "yes" : "no"; res.setHeader('Content-Type', 'application/json'); res.status(200).send(JSON.stringify({ isHotDog: message })); };

بعد ذلك، ستحتاج إلى نشر هذه الدالة. لاختبارها داخل منصة Google Cloud، اتبع الخطوات من الدليل.
لاختبارها من متصفحك، انتقل إلى عنوان URL التالي مع إدخال العنوان المحدد لدالتك:
https://your-function-address.cloudfunctions.net/HotDogOrNot/?url=hello يجب أن تعيد {“isHotDog”: true} والعنوان https://your-function-address.cloudfunctions.net/HotDogOrNot يجب أن يعيد {“isHotDog”: false}.
عمل رائع! لقد قمت بإعداد دالة سحابية من Google. الآن نحتاج إلى جعل دالتنا السحابية أكثر ذكاءً.
إعداد واجهة برمجة تطبيقات Google Vision
لنجعلها أكثر ذكاءً، دعنا نضيف التعرف على الصور. لهذا الغرض، سنستخدم واجهة برمجة تطبيقات رؤية جوجل. للبدء، اتبع الخطوات 1-4 في دليل بدء استخدام واجهة برمجة التطبيقات لرؤية. في البرنامج التعليمي، ستقوم بتفعيل واجهة برمجة التطبيقات لرؤية وإنشاء حساب خدمة لاستخدامه.
الآن، ارجع إلى وظيفة السحابة التي أنشأتها. قم بتبديل "متغيرات البيئة، والشبكات، والمهلات والمزيد" وفي ملف "حساب الخدمة" اختر حساب خدمة VisionAPI الذي أنشأته للتو. الآن يمكننا الوصول إلى واجهة برمجة التطبيقات لرؤية داخل دالتنا.

الآن دعنا نغير الكود. في علامة تبويب "Package.json"، قم بإدخال هذا الكود. سيضيف مكتبة واجهة برمجة تطبيقات رؤية جوجل كاعتماد لوظيفتك.
{ "name": "sample-http", "version": "0.0.1", "dependencies": { "@google-cloud/vision": "^1.11.0" } }
في علامة تبويب "Index.js"، قم بتحديث الكود الموجود مع مقتطف الكود التالي.
/** * Responds to any HTTP request. * * @param {!express:Request} req HTTP request context. * @param {!express:Response} res HTTP response context. */ exports.helloWorld = (request, response) => { var url = request.query.url || request.body.url; if (url == null || url == "" ) { response.status(400).json({ error: "Must include a 'url' query parameter." }); } getImageLabels(url) .then(labels => { // You can use 'console.log(labels);' command to check labels you got // We filter all labels if they contain "hot dog" in label description // And have a score > 0.6, which mean that VisionAPI is at least 60% sure that there is a hotdog on a picture labels = labels.filter(function(label) { return label.description.toLowerCase().includes("hot dog") && label.score > 0.6; }); // If labels array contains at least 1 element, then we found a hot-dog! if (labels.length > 0) { response.status(200).json({isHotDog: true, error: ""}); } else { response.status(200).json({isHotDog: false, error: ""}); } }) .catch(err => { response.status(500).json({ error: err }); }); }; async function getImageLabels(imageUrl) { // Imports the Google Cloud client library const vision = require('@google-cloud/vision'); // Creates a client const client = new vision.ImageAnnotatorClient(); // Performs label detection on the image file const [result] = await client.labelDetection(imageUrl); const labels = result.labelAnnotations; return labels }

ما الفرق مقارنة بالإصدار السابق؟ أضفنا طلبًا إلى VisionAPI، والذي يعيد الملصقات التي وجدتها على الصورة. ثم نقوم بتصفية هذه الملصقات حسب الوصف: إذا كانت تحتوي على “هوت دوغ” وإذا كانت لديها ثقة أكبر من 60% في تلك الملصق. إذا بقي على الأقل ملصق واحد بعد التصنيف، فهذا يعني أننا وجدنا هوت دوغ في الصورة.
ميزات واجهة برمجة التطبيقات لرؤية | ما الذي يمكّن في العمليات |
|---|---|
ملصقات الكائنات (مثل، “هوت دوغ”) | تحديد الكائنات وأتمتة الإجراءات بناءً على الكشف |
درجات الثقة | التحكم في الدقة (مثل، > 60% من الثقة ينفذ سير العمل) |
استخراج البيانات الوصفية | تضمين السياق مثل الأرقام، الكائنات، والبيئة |
مكتبة قابلة للتوسع | إضافة المزيد من الكشف المدعوم بالذكاء الاصطناعي بالإضافة إلى الهوت دوغ |
لفهم كيفية عمل واجهة برمجة تطبيقات رؤية جوجل ولعرض الردود النموذجية، تحقق من وثائق واجهة برمجة التطبيقات لرؤية الرسمية.
بعد ذلك، قم بنشر النسخة الجديدة من وظيفتنا. لاختبارها من متصفحك، ابحث عن أي صورة لهوت دوغ واحفظ عنوان URL الخاص بها. الآن انتقل إلى عنوان URL لوظيفتك (مع إدخال العنوان الصحيح لوظيفتك) https://عنوان-وظيفتك.cloudfunctions.net/HotDogOrNot?url=url_to_image واستبدل “url_to_image” بعنوان URL للصورة الموجودة. إذا كانت هناك هوت دوغ في الصورة، ستعيد الصفحة {“isHotDog”: true}.
الآن دعنا نربط هذه الوظيفة بمحرر التدفق.
لنجعلها أكثر ذكاءً، دعنا نضيف التعرف على الصور. لهذا الغرض، سنستخدم واجهة برمجة تطبيقات رؤية جوجل. للبدء، اتبع الخطوات 1-4 في دليل بدء استخدام واجهة برمجة التطبيقات لرؤية. في البرنامج التعليمي، ستقوم بتفعيل واجهة برمجة التطبيقات لرؤية وإنشاء حساب خدمة لاستخدامه.
الآن، ارجع إلى وظيفة السحابة التي أنشأتها. قم بتبديل "متغيرات البيئة، والشبكات، والمهلات والمزيد" وفي ملف "حساب الخدمة" اختر حساب خدمة VisionAPI الذي أنشأته للتو. الآن يمكننا الوصول إلى واجهة برمجة التطبيقات لرؤية داخل دالتنا.

الآن دعنا نغير الكود. في علامة تبويب "Package.json"، قم بإدخال هذا الكود. سيضيف مكتبة واجهة برمجة تطبيقات رؤية جوجل كاعتماد لوظيفتك.
{ "name": "sample-http", "version": "0.0.1", "dependencies": { "@google-cloud/vision": "^1.11.0" } }
في علامة تبويب "Index.js"، قم بتحديث الكود الموجود مع مقتطف الكود التالي.
/** * Responds to any HTTP request. * * @param {!express:Request} req HTTP request context. * @param {!express:Response} res HTTP response context. */ exports.helloWorld = (request, response) => { var url = request.query.url || request.body.url; if (url == null || url == "" ) { response.status(400).json({ error: "Must include a 'url' query parameter." }); } getImageLabels(url) .then(labels => { // You can use 'console.log(labels);' command to check labels you got // We filter all labels if they contain "hot dog" in label description // And have a score > 0.6, which mean that VisionAPI is at least 60% sure that there is a hotdog on a picture labels = labels.filter(function(label) { return label.description.toLowerCase().includes("hot dog") && label.score > 0.6; }); // If labels array contains at least 1 element, then we found a hot-dog! if (labels.length > 0) { response.status(200).json({isHotDog: true, error: ""}); } else { response.status(200).json({isHotDog: false, error: ""}); } }) .catch(err => { response.status(500).json({ error: err }); }); }; async function getImageLabels(imageUrl) { // Imports the Google Cloud client library const vision = require('@google-cloud/vision'); // Creates a client const client = new vision.ImageAnnotatorClient(); // Performs label detection on the image file const [result] = await client.labelDetection(imageUrl); const labels = result.labelAnnotations; return labels }

ما الفرق مقارنة بالإصدار السابق؟ أضفنا طلبًا إلى VisionAPI، والذي يعيد الملصقات التي وجدتها على الصورة. ثم نقوم بتصفية هذه الملصقات حسب الوصف: إذا كانت تحتوي على “هوت دوغ” وإذا كانت لديها ثقة أكبر من 60% في تلك الملصق. إذا بقي على الأقل ملصق واحد بعد التصنيف، فهذا يعني أننا وجدنا هوت دوغ في الصورة.
ميزات واجهة برمجة التطبيقات لرؤية | ما الذي يمكّن في العمليات |
|---|---|
ملصقات الكائنات (مثل، “هوت دوغ”) | تحديد الكائنات وأتمتة الإجراءات بناءً على الكشف |
درجات الثقة | التحكم في الدقة (مثل، > 60% من الثقة ينفذ سير العمل) |
استخراج البيانات الوصفية | تضمين السياق مثل الأرقام، الكائنات، والبيئة |
مكتبة قابلة للتوسع | إضافة المزيد من الكشف المدعوم بالذكاء الاصطناعي بالإضافة إلى الهوت دوغ |
لفهم كيفية عمل واجهة برمجة تطبيقات رؤية جوجل ولعرض الردود النموذجية، تحقق من وثائق واجهة برمجة التطبيقات لرؤية الرسمية.
بعد ذلك، قم بنشر النسخة الجديدة من وظيفتنا. لاختبارها من متصفحك، ابحث عن أي صورة لهوت دوغ واحفظ عنوان URL الخاص بها. الآن انتقل إلى عنوان URL لوظيفتك (مع إدخال العنوان الصحيح لوظيفتك) https://عنوان-وظيفتك.cloudfunctions.net/HotDogOrNot?url=url_to_image واستبدل “url_to_image” بعنوان URL للصورة الموجودة. إذا كانت هناك هوت دوغ في الصورة، ستعيد الصفحة {“isHotDog”: true}.
الآن دعنا نربط هذه الوظيفة بمحرر التدفق.
لنجعلها أكثر ذكاءً، دعنا نضيف التعرف على الصور. لهذا الغرض، سنستخدم واجهة برمجة تطبيقات رؤية جوجل. للبدء، اتبع الخطوات 1-4 في دليل بدء استخدام واجهة برمجة التطبيقات لرؤية. في البرنامج التعليمي، ستقوم بتفعيل واجهة برمجة التطبيقات لرؤية وإنشاء حساب خدمة لاستخدامه.
الآن، ارجع إلى وظيفة السحابة التي أنشأتها. قم بتبديل "متغيرات البيئة، والشبكات، والمهلات والمزيد" وفي ملف "حساب الخدمة" اختر حساب خدمة VisionAPI الذي أنشأته للتو. الآن يمكننا الوصول إلى واجهة برمجة التطبيقات لرؤية داخل دالتنا.

الآن دعنا نغير الكود. في علامة تبويب "Package.json"، قم بإدخال هذا الكود. سيضيف مكتبة واجهة برمجة تطبيقات رؤية جوجل كاعتماد لوظيفتك.
{ "name": "sample-http", "version": "0.0.1", "dependencies": { "@google-cloud/vision": "^1.11.0" } }
في علامة تبويب "Index.js"، قم بتحديث الكود الموجود مع مقتطف الكود التالي.
/** * Responds to any HTTP request. * * @param {!express:Request} req HTTP request context. * @param {!express:Response} res HTTP response context. */ exports.helloWorld = (request, response) => { var url = request.query.url || request.body.url; if (url == null || url == "" ) { response.status(400).json({ error: "Must include a 'url' query parameter." }); } getImageLabels(url) .then(labels => { // You can use 'console.log(labels);' command to check labels you got // We filter all labels if they contain "hot dog" in label description // And have a score > 0.6, which mean that VisionAPI is at least 60% sure that there is a hotdog on a picture labels = labels.filter(function(label) { return label.description.toLowerCase().includes("hot dog") && label.score > 0.6; }); // If labels array contains at least 1 element, then we found a hot-dog! if (labels.length > 0) { response.status(200).json({isHotDog: true, error: ""}); } else { response.status(200).json({isHotDog: false, error: ""}); } }) .catch(err => { response.status(500).json({ error: err }); }); }; async function getImageLabels(imageUrl) { // Imports the Google Cloud client library const vision = require('@google-cloud/vision'); // Creates a client const client = new vision.ImageAnnotatorClient(); // Performs label detection on the image file const [result] = await client.labelDetection(imageUrl); const labels = result.labelAnnotations; return labels }

ما الفرق مقارنة بالإصدار السابق؟ أضفنا طلبًا إلى VisionAPI، والذي يعيد الملصقات التي وجدتها على الصورة. ثم نقوم بتصفية هذه الملصقات حسب الوصف: إذا كانت تحتوي على “هوت دوغ” وإذا كانت لديها ثقة أكبر من 60% في تلك الملصق. إذا بقي على الأقل ملصق واحد بعد التصنيف، فهذا يعني أننا وجدنا هوت دوغ في الصورة.
ميزات واجهة برمجة التطبيقات لرؤية | ما الذي يمكّن في العمليات |
|---|---|
ملصقات الكائنات (مثل، “هوت دوغ”) | تحديد الكائنات وأتمتة الإجراءات بناءً على الكشف |
درجات الثقة | التحكم في الدقة (مثل، > 60% من الثقة ينفذ سير العمل) |
استخراج البيانات الوصفية | تضمين السياق مثل الأرقام، الكائنات، والبيئة |
مكتبة قابلة للتوسع | إضافة المزيد من الكشف المدعوم بالذكاء الاصطناعي بالإضافة إلى الهوت دوغ |
لفهم كيفية عمل واجهة برمجة تطبيقات رؤية جوجل ولعرض الردود النموذجية، تحقق من وثائق واجهة برمجة التطبيقات لرؤية الرسمية.
بعد ذلك، قم بنشر النسخة الجديدة من وظيفتنا. لاختبارها من متصفحك، ابحث عن أي صورة لهوت دوغ واحفظ عنوان URL الخاص بها. الآن انتقل إلى عنوان URL لوظيفتك (مع إدخال العنوان الصحيح لوظيفتك) https://عنوان-وظيفتك.cloudfunctions.net/HotDogOrNot?url=url_to_image واستبدل “url_to_image” بعنوان URL للصورة الموجودة. إذا كانت هناك هوت دوغ في الصورة، ستعيد الصفحة {“isHotDog”: true}.
الآن دعنا نربط هذه الوظيفة بمحرر التدفق.
إنشاء تدفق في Flows
قم بتسجيل الدخول إلى لوحة معلومات Bird أو سجل للحصول على حساب إذا لم يكن لديك واحد.
إذا كنت جديداً على Flows وليس لديك أي قنوات تم إعدادها، ستحتاج إلى الانتقال إلى صفحة إعداد القناة، واختيار إعداد قناة Telegram. لقد اخترت Telegram لهذا العرض التقديمي لأنه سهل وسريع الإعداد.

الآن لديك قناة يمكننا استخدامها في Flows. انتقل إلى صفحة Flows، أنشئ تدفقاً مخصصاً جديداً، واختر مشغل قناة “Telegram”.

سيتم توجيهك إلى صفحة التدفق، حيث ينبغي عليك اختيار قناة Telegram الخاصة بك كمشغل، وفي حالتنا هي “Hotdog”. يرجى إضافة خطوتين: “Fetch variables” و“Reply to channel message”.
داخل خطوة “Fetch variables” سنقوم باستدعاء وظيفة السحابة الخاصة بنا واسترداد الاستجابة إلى المتغير “isHotDog” والتي ستحتوي على “true” أو “false” كاستجابة من وظيفة GoogleCloud. في حقل URL، يرجى إدراج عنوان URL لوظيفتك https://your-function-address.cloudfunctions.net/HotDogOrNot وملء جميع الحقول الأخرى كما هو موضح في صورة "محتوى خطوة Fetch variable".
وداخل خطوة “Reply to channel message” سنقوم بالرد على العميل برسالة تحتوي على إجابة نعم أو لا. لذلك، قم بإدخال النص التالي في حقل
قم بتسجيل الدخول إلى لوحة معلومات Bird أو سجل للحصول على حساب إذا لم يكن لديك واحد.
إذا كنت جديداً على Flows وليس لديك أي قنوات تم إعدادها، ستحتاج إلى الانتقال إلى صفحة إعداد القناة، واختيار إعداد قناة Telegram. لقد اخترت Telegram لهذا العرض التقديمي لأنه سهل وسريع الإعداد.

الآن لديك قناة يمكننا استخدامها في Flows. انتقل إلى صفحة Flows، أنشئ تدفقاً مخصصاً جديداً، واختر مشغل قناة “Telegram”.

سيتم توجيهك إلى صفحة التدفق، حيث ينبغي عليك اختيار قناة Telegram الخاصة بك كمشغل، وفي حالتنا هي “Hotdog”. يرجى إضافة خطوتين: “Fetch variables” و“Reply to channel message”.
داخل خطوة “Fetch variables” سنقوم باستدعاء وظيفة السحابة الخاصة بنا واسترداد الاستجابة إلى المتغير “isHotDog” والتي ستحتوي على “true” أو “false” كاستجابة من وظيفة GoogleCloud. في حقل URL، يرجى إدراج عنوان URL لوظيفتك https://your-function-address.cloudfunctions.net/HotDogOrNot وملء جميع الحقول الأخرى كما هو موضح في صورة "محتوى خطوة Fetch variable".
وداخل خطوة “Reply to channel message” سنقوم بالرد على العميل برسالة تحتوي على إجابة نعم أو لا. لذلك، قم بإدخال النص التالي في حقل
قم بتسجيل الدخول إلى لوحة معلومات Bird أو سجل للحصول على حساب إذا لم يكن لديك واحد.
إذا كنت جديداً على Flows وليس لديك أي قنوات تم إعدادها، ستحتاج إلى الانتقال إلى صفحة إعداد القناة، واختيار إعداد قناة Telegram. لقد اخترت Telegram لهذا العرض التقديمي لأنه سهل وسريع الإعداد.

الآن لديك قناة يمكننا استخدامها في Flows. انتقل إلى صفحة Flows، أنشئ تدفقاً مخصصاً جديداً، واختر مشغل قناة “Telegram”.

سيتم توجيهك إلى صفحة التدفق، حيث ينبغي عليك اختيار قناة Telegram الخاصة بك كمشغل، وفي حالتنا هي “Hotdog”. يرجى إضافة خطوتين: “Fetch variables” و“Reply to channel message”.
داخل خطوة “Fetch variables” سنقوم باستدعاء وظيفة السحابة الخاصة بنا واسترداد الاستجابة إلى المتغير “isHotDog” والتي ستحتوي على “true” أو “false” كاستجابة من وظيفة GoogleCloud. في حقل URL، يرجى إدراج عنوان URL لوظيفتك https://your-function-address.cloudfunctions.net/HotDogOrNot وملء جميع الحقول الأخرى كما هو موضح في صورة "محتوى خطوة Fetch variable".
وداخل خطوة “Reply to channel message” سنقوم بالرد على العميل برسالة تحتوي على إجابة نعم أو لا. لذلك، قم بإدخال النص التالي في حقل
نتائج


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


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


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



