اكتشاف التصنيفات والوجوه والمعالم في الصور باستخدام واجهة برمجة تطبيقات Cloud Vision

تتيح لك واجهة برمجة تطبيقات Cloud Vision API فهم محتوى صورة من خلال تضمين نماذج فعّالة لتعلُم الآلة في واجهة برمجة تطبيقات REST بسيطة.

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

ما ستتعرّف عليه

  • إنشاء طلب Vision API واستدعاء واجهة برمجة التطبيقات باستخدام curl
  • استخدام طرق التصنيف، والويب، والوجه، والمعالم في واجهة برمجة التطبيقات للرؤية

ما متطلباتك

  • مشروع Google Cloud Platform
  • متصفح، مثل Chrome أو Firefox

كيف ستستخدم هذا البرنامج التعليمي؟

قراءة القراءة فقط قراءة القراءة وإكمال التدريبات

كيف تقيِّم تجربتك مع Google Cloud Platform؟

مبتدئ متوسط محترف

إعداد البيئة الذاتية

إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، يجب إنشاء حساب. تسجيل الدخول إلى وحدة تحكُّم Google Cloud Platform (console.cloud.google.com) وإنشاء مشروع جديد:

لقطة شاشة من 2016-02-10 الساعة 12:45:26.png

عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID.

بعد ذلك، ستحتاج إلى تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

من المفترض ألا يكلفك العمل على هذا الدرس التطبيقي أكثر من بضعة دولارات، ولكن قد يترتّب عليك أكثر إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجع قسم "عرض الأسعار التقديري" في نهاية هذا المستند).

يكون المستخدمون الجدد لخدمة Google Cloud Platform مؤهَّلين للاستفادة من فترة تجريبية مجانية تبلغ 300 دولار أمريكي.

انقر على رمز القائمة في أعلى يمين الشاشة.

اختَر واجهات برمجة التطبيقات والخدمات من القائمة المنسدلة وانقر على "لوحة البيانات".

انقر على تفعيل واجهات برمجة التطبيقات والخدمات.

بعد ذلك، ابحث عن "vision" في مربع البحث. انقر على Google Cloud Vision API:

انقر على تفعيل لتفعيل Cloud Identity Vision API:

انتظر لبضع ثوانٍ حتى يتم تفعيله. سترى ذلك بعد أن يتم تفعيلها:

Google Cloud Shell هو بيئة سطر أوامر تعمل في السحابة الإلكترونية. يتمّ تحميل هذا الجهاز الافتراضي الذي يعتمد على Debian إلى جميع أدوات التطوير التي ستحتاجها (gcloud وbq وgit وغيرها) وتوفّر دليلاً رئيسيًا دائمًا بحجم 5 غيغابايت. سنستخدم Cloud Shell لإنشاء طلبنا لـ Speech API.

لبدء استخدام Cloud Shell، انقر على الرمز &quot؛تفعيل Google Cloud Shell" لقطة شاشة يوم 2015-06-08 الساعة 5.30.32 مساءً.png في أعلى يسار شريط العناوين.

يتم فتح جلسة Cloud Shell داخل إطار جديد في أسفل وحدة التحكّم وتعرض رسالة سطر أوامر. انتظر حتى يظهر user@project:~$ رسالة مطالبة

بما أننا سنستخدم عنوان URL لإرسال طلب إلى واجهة برمجة التطبيقات Vision، سنضطر إلى إنشاء مفتاح واجهة برمجة التطبيقات لإدخال عنوان URL الخاص بطلبنا. لإنشاء مفتاح واجهة برمجة تطبيقات، انتقِل إلى قسم "بيانات الاعتماد" في واجهات برمجة التطبيقات (API) والخدمات في Cloud Console:

في القائمة المنسدلة، اختَر مفتاح واجهة برمجة التطبيقات:

بعد ذلك، انسخ المفتاح الذي أنشأته للتو.

الآن وبعد أن حصلت على مفتاح واجهة برمجة التطبيقات، احفظه في متغيّر بيئة لتجنُّب الحاجة إلى إدراج قيمة مفتاح واجهة برمجة التطبيقات في كل طلب. ويمكنك إجراء ذلك في Cloud Shell. تأكد من استبدال <your_api_key> بالمفتاح الذي نسخته للتو.

export API_KEY=<YOUR_API_KEY>

إنشاء حزمة Cloud Storage

هناك طريقتان لإرسال صورة إلى واجهة برمجة التطبيقات Vision API لاكتشاف الصور: يتم إرسال سلسلة صور مشفّرة بتنسيق base64 أو عبر تمرير عنوان URL لملف مخزّن في Google Cloud Storage. سنستخدم عنوان URL للتخزين في السحابة الإلكترونية. سننشئ حزمة Google Cloud Storage لتخزين الصور.

انتقِل إلى متصفِّح تخزين في Cloud Console لمشروعك:

بعد ذلك، انقر على إنشاء حزمة. امنح الحزمة اسمًا فريدًا (مثل رقم تعريف المشروع) وانقر على إنشاء.

تحميل صورة إلى الحزمة

انقر بزر الماوس الأيمن على صورة الكعك المُحلّى، ثم انقر على حفظ الصورة باسم واحفظها في مجلد "عمليات التنزيل" بتنسيق donuts.png.

انتقِل إلى الحزمة التي أنشأتها للتو في متصفِّح التخزين وانقر على تحميل الملفات. اختر بعد ذلك Donuts.png.

ويجب أن يظهر الملف في الحزمة:

بعد ذلك، عدِّل إذن الصورة.

انقر على إضافة عنصر.

إضافة كيان جديد للاسم Group، واسم allUsers:

يُرجى النقر على حفظ.

الآن بعد أن أنشأت الملف في حزمة البيانات، أنت على استعداد لإنشاء طلب Vision API، تمريره عنوان URL لصورة الكعك المُحلّى.

في بيئة Cloud Shell، أنشئ ملف request.json باستخدام الرمز أدناه، مع التأكد من استبدال my-bucket-name باسم حزمة Cloud Storage التي أنشأتها. ويمكنك إنشاء الملف باستخدام أحد محرِّري سطر الأوامر المفضَّل لديك (nano أو vim أو emacs) أو استخدام محرِّر Orion المدمج في Cloud Shell:

request.json

{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/donuts.png"
          } 
        },
        "features": [
          {
            "type": "LABEL_DETECTION",
            "maxResults": 10
          }
        ]
      }
  ]
}

إنّ أول ميزة لواجهة برمجة تطبيقات Cloud Vision API سنستكشفها هي رصد التصنيفات. ستؤدي هذه الطريقة إلى عرض قائمة بالتصنيفات (الكلمات) التي تتضمنها الصورة.

نحن الآن جاهزون لطلب Vision API باستخدام curl:

curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json  https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}

من المفترض أن يظهر ردّك على النحو التالي:

{
  "responses": [
    {
      "labelAnnotations": [
        {
          "mid": "/m/01dk8s",
          "description": "powdered sugar",
          "score": 0.9436922
        },
        {
          "mid": "/m/01wydv",
          "description": "beignet",
          "score": 0.7160288
        },
        {
          "mid": "/m/06_dn",
          "description": "snow",
          "score": 0.71219236
        },
        {
          "mid": "/m/02wvn_6",
          "mid": "/m/0bp3f6m",
          "description": "fried food",
          "score": 0.7075312
        },
        {
          "mid": "/m/02wvn_6",
          "description": "ricciarelli",
          "score": 0.5625
        },
        {
          "mid": "/m/052lwg6",
          "description": "baked goods",
          "score": 0.53270763
        }
      ]
    }
  ]
}

لقد تمكّنت واجهة برمجة التطبيقات من تحديد نوع محدّد من الكعك محلى، وهو عبارة عن كعكة رائعة، رائعة. بالنسبة إلى كل تصنيف ترصده واجهة برمجة التطبيقات Vision API، يتم عرض description مع اسم العنصر. ويؤدي أيضًا إلى عرض score، وهو رقم من 0 إلى 100 يشير إلى مدى تطابق الوصف مع ما يظهر في الصورة. ترتبط قيمة mid بالسلعة في منتصف الرسم البياني المعرفي من Google. ويمكنك استخدام mid عند استدعاء Knowledge Graph API للحصول على مزيد من المعلومات حول العنصر.

بالإضافة إلى الحصول على تصنيفات حول ما لدينا في الصورة، يمكن لواجهة برمجة التطبيقات Vision API البحث أيضًا على الإنترنت للحصول على تفاصيل إضافية عن الصور. ومن خلال واجهة برمجة تطبيقات webDetection، يمكنك الاستفادة من الكثير من البيانات المثيرة للاهتمام:

  • قائمة بالكيانات التي تم العثور عليها في صورتنا استنادًا إلى المحتوى من صفحات تحتوي على صور مشابهة
  • عناوين URL للصور ذات المطابقة التامة والجزئية والمُعثرة على الويب، إلى جانب عناوين URL لتلك الصفحات
  • عناوين URL لصور مشابهة، مثل إجراء بحث صور عكسي

لتجربة اكتشاف الويب، سنستخدم الصورة نفسها للأعمدة أعلاه. وكل ما نحتاج إلى تغييره هو سطر واحد في ملف request.json (يمكنك أيضًا الانتقال إلى الملفات غير المعروفة واستخدام صورة مختلفة تمامًا). ضمن قائمة الميزات، ما عليك سوى تغيير النوع من LABEL_DETECTION إلى WEB_DETECTION. يجب أن يظهر request.json الآن على النحو التالي:

request.json

{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/donuts.png"
          } 
        },
        "features": [
          {
            "type": "WEB_DETECTION",
            "maxResults": 10
          }
        ]
      }
  ]
}

ولإرساله إلى واجهة برمجة التطبيقات Vision API، يمكنك استخدام الأمر curl نفسه كما في السابق (ما عليك سوى الضغط على السهم المتّجه للأعلى في Cloud Shell):

curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json  https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}

لنتعرّف عن كثب على الردّ، بدءًا من webEntities. إليك بعض الكيانات التي عرضتها هذه الصورة:

 "webEntities": [
          {
            "entityId": "/m/01hyh_",
            "score": 0.7155,
            "description": "Machine learning"
          },
          {
            "entityId": "/m/01wydv",
            "score": 0.48758492,
            "description": "Beignet"
          },
          {
            "entityId": "/m/0105pbj4",
            "score": 0.3976,
            "description": "Google Cloud Platform"
          },
          {
            "entityId": "/m/02y_9m3",
            "score": 0.3782,
            "description": "Cloud computing"
          },
          ...
        ]

لقد تمت إعادة استخدام هذه الصورة في العديد من العروض التقديمية على Cloud ML APIs، ولهذا السبب عثرت واجهة برمجة التطبيقات على الكيانات "تعلُّم الآلة&&;;&;;Google Cloud Platform&"&&;;حوسبة Cloud&quot.

إذا عثرنا على عناوين URL التي تندرج ضمن fullMatchingImages وpartialMatchingImages وpagesWithMatchingImages، سنلاحظ أن العديد من عناوين URL تشير إلى هذا الموقع الإلكتروني المخصّص للترميز (meta meta!!).

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

"visuallySimilarImages": [
          {
            "url": "https://igx.4sqi.net/img/general/558x200/21646809_fe8K-bZGnLLqWQeWruymGEhDGfyl-6HSouI2BFPGh8o.jpg"
          },
          {
            "url": "https://spoilednyc.com//2016/02/16/beignetszzzzzz-852.jpg"
          },
          {
            "url": "https://img-global.cpcdn.com/001_recipes/a66a9a6fc2696648/1200x630cq70/photo.jpg"
          },
          ...
]

يمكننا الانتقال إلى عناوين URL هذه لمشاهدة الصور المشابهة:

رائع! وَلَكِنَّنِي الْمَطْلُوبُ الْآنْ تَجْرِبَةْ بِيتْ. ويشبه هذا البحث بالصور على صور Google:

ولكن من خلال Cloud Vision، يمكننا الوصول إلى هذه الوظيفة من خلال واجهة برمجة تطبيقات REST سهلة الاستخدام ودمجها في تطبيقاتنا.

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

تحميل صورة جديدة

لاستخدام هاتين الطريقتين الجديدتين، دعنا نحمِّل صورة جديدة تحتوي على وجوه ومعالم إلى حزمة Cloud Storage. انقر بزر الماوس الأيمن على الصورة التالية، ثم انقر على حفظ الصورة باسم واحفظها في مجلد "عمليات التنزيل" باسم selfie.png.

حمّله بعد ذلك إلى حزمة Cloud Storage بالطريقة نفسها التي فعلتها في الخطوة السابقة، مع الحرص على وضع علامة في مربّع الاختيار "المشاركة علنًا".

تعديل طلبنا

بعد ذلك، سنعدّل ملف request.json ليتضمن عنوان URL للصورة الجديدة، ولاستخدام ميزة"التعرّف على الوجوه والمعالم"بدلاً من رصد التصنيفات. تأكد من استبدال my-bucket-name باسم حزمة Cloud Storage:

request.json

{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/selfie.png"
          } 
        },
        "features": [
          {
            "type": "FACE_DETECTION"
          },
          {
            "type": "LANDMARK_DETECTION"
          }
        ]
      }
  ]
}

استدعاء Vision API وتحليل الرد

أنت الآن على استعداد لطلب Vision API باستخدام أمر curl نفسه الذي استخدمته أعلاه:

curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json  https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}

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

{
      "faceAnnotations": [
        {
          "boundingPoly": {
            "vertices": [
              {
                "x": 669,
                "y": 324
              },
              ...
            ]
          },
          "fdBoundingPoly": {
            ...
          },
          "landmarks": [
            {
              "type": "LEFT_EYE",
              "position": {
                "x": 692.05646,
                "y": 372.95868,
                "z": -0.00025268539
              }
            },
            ...
          ],
          "rollAngle": 0.21619819,
          "panAngle": -23.027969,
          "tiltAngle": -1.5531756,
          "detectionConfidence": 0.72354823,
          "landmarkingConfidence": 0.20047489,
          "joyLikelihood": "POSSIBLE",
          "sorrowLikelihood": "VERY_UNLIKELY",
          "angerLikelihood": "VERY_UNLIKELY",
          "surpriseLikelihood": "VERY_UNLIKELY",
          "underExposedLikelihood": "VERY_UNLIKELY",
          "blurredLikelihood": "VERY_UNLIKELY",
          "headwearLikelihood": "VERY_LIKELY"
        }
        ...
     }
}

تعرض لنا boundingPoly إحداثيات x وy حول الوجه في الصورة. fdBoundingPoly هو صندوق أصغر حجمًا من boundingPoly، وهو محاط بجزء من الوجه. السمة landmarks هي مجموعة من العناصر لكل ملامح الوجه (قد لا تكون تعرف بعضًا منها). يخبرنا هذا عن نوع المَعلم، إلى جانب الموضع الثلاثي الأبعاد لهذه الميزة (الإحداثي ي، ص، الإحداثي z) حيث يكون إحداثي z هو العمق. وتعطينا القيم المتبقية المزيد من التفاصيل عن الوجه، بما في ذلك احتمالية الفرح والحزن والغضب والمفاجأة. الكائن أعلاه مخصّص للشخص الذي يظهر في الصورة مرة أخرى، حيث يمكنك رؤية نوع من الوجوه المضحكة التي تشرح joyLikelihood لـ POSSIBLE.

لنلقِ نظرة على الجزء landmarkAnnotations من ردّنا:

"landmarkAnnotations": [
        {
          "mid": "/m/0c7zy",
          "description": "Petra",
          "score": 0.5403372,
          "boundingPoly": {
            "vertices": [
              {
                "x": 153,
                "y": 64
              },
              ...
            ]
          },
          "locations": [
            {
              "latLng": {
                "latitude": 30.323975,
                "longitude": 35.449361
              }
            }
          ]

هنا، تمكّنت Vision API من معرفة أن هذه الصورة قد تم التقاطها في البتراء، وهذا أمر رائع إلى حدٍّ ما نظرًا لأن الأدلة المرئية في هذه الصورة ضئيلة للغاية. يجب أن تكون القيم في هذه الاستجابة مشابهة لاستجابة labelAnnotations أعلاه.

حصلنا على mid من المعلم، واسمه (description)، إلى جانب الثقة score. يعرض boundingPoly المنطقة التي تم فيها التعرّف على المَعلم في الصورة. يخبرنا المفتاح locations بإحداثيات خط الطول وخط العرض لهذا المَعلم.

لقد استعرضنا واجهة برمجة تطبيقات Vision API&#39s، والتعرّف على الوجوه والتعرّف على الوجوه، وطرق اكتشاف المعالم، ولكن لا تزال هناك ثلاث طرق أخرى لم نستكشفها. يمكنك الاطّلاع على المستندات للتعرّف على هذه الأدوات الثلاثة الأخرى:

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

لقد تعلّمت كيفية تحليل الصور باستخدام Vision API. في هذا المثال، مررت واجهة برمجة التطبيقات لعنوان URL لصورتك في Google Cloud Storage. ويمكنك بدلاً من ذلك تمرير سلسلة مشفّرة بتنسيق base64.

المواضيع التي تناولناها

  • استدعاء Vision API باستخدام curl من خلال تمرير عنوان URL لصورة في حزمة Cloud Storage
  • استخدام تصنيفات واجهة برمجة التطبيقات Vision API والإنترنت والويب والوجه والمَعلم

الخطوات التالية