با Cloud Vision API برچسب‌ها، چهره‌ها و نشانه‌ها را در تصاویر شناسایی کنید

Cloud Vision API به شما امکان می دهد محتوای یک تصویر را با کپسوله کردن مدل های یادگیری ماشین قدرتمند در یک REST API ساده درک کنید.

در این آزمایشگاه، تصاویر را به Vision API ارسال می کنیم و می بینیم که اشیا، چهره ها و نشانه ها را شناسایی می کند.

چیزی که یاد خواهید گرفت

  • ایجاد یک درخواست Vision API و فراخوانی API با curl
  • با استفاده از روش‌های تشخیص برچسب، وب، چهره و نشانه‌های بینایی API

کلاهی که نیاز دارید

چگونه از این آموزش استفاده خواهید کرد؟

فقط از طریق آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

تجربه خود را با Google Cloud Platform چگونه ارزیابی می کنید؟

تازه کار حد واسط مسلط

تنظیم محیط خود به خود

اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:

اسکرین شات از 10/02/2016 12:45:26.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID خواهد شد.

در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در کنسول Cloud فعال کنید.

گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا اگر آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید).

کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.

روی نماد منو در سمت چپ بالای صفحه کلیک کنید.

APIs & services را از منوی کشویی انتخاب کنید و روی داشبورد کلیک کنید

روی Enable APIs and services کلیک کنید.

سپس، "Vision" را در کادر جستجو جستجو کنید. روی Google Cloud Vision API کلیک کنید:

برای فعال کردن Cloud Vision API روی Enable کلیک کنید:

چند ثانیه صبر کنید تا فعال شود. پس از فعال شدن این مورد را مشاهده خواهید کرد:

Google Cloud Shell یک محیط خط فرمان است که در Cloud اجرا می شود. این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه مورد نیاز شما ( gcloud ، bq ، git و موارد دیگر) بارگذاری شده است و یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد. ما از Cloud Shell برای ایجاد درخواست خود به Speech API استفاده می کنیم.

برای شروع کار با Cloud Shell، روی "فعال کردن Google Cloud Shell" کلیک کنید. اسکرین شات 08/06/2015 در ساعت 5.30.32 بعد از ظهر.png نماد در گوشه سمت راست بالای نوار هدر

یک جلسه Cloud Shell در داخل یک فریم جدید در پایین کنسول باز می شود و یک خط فرمان را نمایش می دهد. صبر کنید تا اعلان user@project:~$ ظاهر شود

از آنجایی که از curl برای ارسال درخواست به Vision API استفاده می کنیم، باید یک کلید API ایجاد کنیم تا در URL درخواست ما ارسال شود. برای ایجاد یک کلید API، به بخش اعتبارنامه‌های APIها و خدمات در کنسول Cloud خود بروید:

در منوی کشویی، کلید API را انتخاب کنید:

در مرحله بعد، کلیدی را که ایجاد کرده اید کپی کنید.

اکنون که یک کلید API دارید، آن را در یک متغیر محیطی ذخیره کنید تا از وارد کردن مقدار کلید API خود در هر درخواست اجتناب کنید. می توانید این کار را در Cloud Shell انجام دهید. حتماً کلیدی را که به تازگی کپی کردید جایگزین <your_api_key> کنید.

export API_KEY=<YOUR_API_KEY>

ایجاد یک سطل ذخیره سازی ابری

دو راه برای ارسال تصویر به Vision API برای تشخیص تصویر وجود دارد: با ارسال یک رشته تصویر کدگذاری شده base64 به API، یا ارسال URL یک فایل ذخیره شده در Google Cloud Storage. ما از یک URL فضای ذخیره سازی ابری استفاده خواهیم کرد. ما یک سطل Google Cloud Storage برای ذخیره تصاویر خود ایجاد خواهیم کرد.

برای پروژه خود به مرورگر Storage در کنسول Cloud بروید:

سپس روی ایجاد سطل کلیک کنید. به سطل خود یک نام منحصر به فرد (مانند شناسه پروژه خود) بدهید و روی ایجاد کلیک کنید.

یک تصویر را در سطل خود آپلود کنید

روی تصویر زیر از دونات کلیک راست کنید، سپس روی Save image as کلیک کنید و آن را در پوشه Downloads خود به عنوان donuts.png ذخیره کنید.

به سطلی که به تازگی در مرورگر ذخیره سازی ایجاد کرده اید بروید و روی آپلود فایل ها کلیک کنید. سپس donuts.png را انتخاب کنید.

شما باید فایل را در سطل خود ببینید:

سپس مجوز تصویر را ویرایش کنید.

روی Add Item کلیک کنید.

یک موجودیت جدید از Group و نام allUsers :

روی ذخیره کلیک کنید.

اکنون که فایل را در سطل خود دارید، آماده هستید تا یک درخواست Vision API ایجاد کنید و آدرس این عکس دونات را ارسال کنید.

در محیط 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
        }
      ]
    }
  ]
}

API توانست نوع خاصی از دونات ها را شناسایی کند (بنیتس)، جالب است! برای هر برچسب Vision API یافت شده، description با نام مورد برمی‌گرداند. همچنین یک score را برمی‌گرداند، عددی از 0 تا 100 که نشان می‌دهد چقدر اطمینان دارد که توضیحات با آنچه در تصویر است مطابقت دارد. مقدار mid ​​به وسط مورد در نمودار دانش Google نگاشت می شود. برای دریافت اطلاعات بیشتر در مورد مورد، می‌توانید هنگام تماس با Knowledge Graph API از mid استفاده کنید.

Vision API علاوه بر برچسب‌هایی که در تصویر ما وجود دارد، می‌تواند برای جزئیات بیشتر در مورد تصویر ما در اینترنت جستجو کند. از طریق روش webDetection API، داده‌های جالب زیادی دریافت می‌کنیم:

  • فهرستی از موجودات موجود در تصویر ما، بر اساس محتوای صفحات دارای تصاویر مشابه
  • نشانی‌های اینترنتی تصاویر منطبق دقیق و جزئی که در سراسر وب یافت می‌شوند، همراه با نشانی‌های اینترنتی آن صفحات
  • آدرس‌های اینترنتی تصاویر مشابه، مانند انجام جستجوی عکس معکوس

برای آزمایش تشخیص وب، از همان تصویر beignets از بالا استفاده می‌کنیم، بنابراین تنها چیزی که باید تغییر دهیم یک خط در فایل 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 APIهای ما مورد استفاده مجدد قرار گرفته است، به همین دلیل است که API موجودیت‌های "Machine Learning"، "Google Cloud Platform" و "Cloud Computing" را پیدا کرده است.

اگر URL های زیر fullMatchingImages ، partialMatchingImages و pagesWithMatchingImages را وارد کنیم، متوجه خواهیم شد که بسیاری از URL ها به این سایت Codelab اشاره می کنند (فوق متا!).

فرض کنید می‌خواهیم تصاویر دیگری از لباس‌های سفید را پیدا کنیم، اما نه دقیقاً همان تصاویر. اینجاست که بخش visuallySimilarImages از پاسخ API مفید است. در اینجا تعدادی از تصاویر مشابه بصری که پیدا کرده است:

"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 Images است:

اما با Cloud Vision، می‌توانیم با استفاده از یک REST API به این قابلیت دسترسی داشته باشیم و آن را در برنامه‌های خود ادغام کنیم.

در ادامه روش‌های تشخیص چهره و نشانه‌های شاخص Vision API را بررسی می‌کنیم. روش تشخیص چهره، داده‌های مربوط به چهره‌های موجود در یک تصویر، از جمله احساسات چهره‌ها و مکان آن‌ها در تصویر را برمی‌گرداند. تشخیص نقطه عطف می تواند نشانه های متداول (و مبهم) را شناسایی کند - نام نقطه عطف، مختصات طول جغرافیایی آن، و مکان جایی که علامت مشخصه در یک تصویر شناسایی شده است را برمی گرداند.

یک تصویر جدید آپلود کنید

برای استفاده از این دو روش جدید، بیایید یک تصویر جدید با چهره‌ها و نشانه‌ها در سطل فضای ذخیره‌سازی ابری خود آپلود کنیم. روی تصویر زیر راست کلیک کنید، سپس روی Save image as کلیک کنید و آن را به عنوان selfie.png در پوشه Downloads خود ذخیره کنید.

سپس آن را به همان روشی که در مرحله قبل انجام دادید در سطل فضای ذخیره‌سازی ابری خود آپلود کنید، مطمئن شوید که چک باکس «اشتراک‌گذاری عمومی» را علامت بزنید.

در حال به روز رسانی درخواست ما

در مرحله بعد، فایل request.json خود را به‌روزرسانی می‌کنیم تا نشانی اینترنتی تصویر جدید را درج کند و به جای شناسایی برچسب، از تشخیص چهره و نشانه‌ها استفاده کنیم. مطمئن شوید که 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 در پاسخ خود بیاندازیم. متوجه خواهید شد که API برای هر چهره ای که در تصویر یافت می شود یک شی را برمی گرداند - در این مورد، سه. در اینجا یک نسخه بریده شده از پاسخ ما آمده است:

{
      "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 آرایه‌ای از اشیاء برای هر یک از ویژگی‌های صورت است (بعضی از آنها ممکن است حتی در مورد آنها ندانید!). این به ما نوع نقطه عطف را به همراه موقعیت سه بعدی آن ویژگی (مختصات x،y،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 را بررسی کرده‌ایم، اما سه روش دیگر وجود دارد که کاوش نکرده‌ایم. برای آشنایی با سه مورد دیگر، در اسناد غوطه ور شوید:

  • تشخیص لوگو : شناسایی لوگوهای رایج و مکان آنها در یک تصویر.
  • تشخیص جستجوی ایمن : تعیین کنید که آیا یک تصویر حاوی محتوای صریح است یا خیر. این برای هر برنامه ای با محتوای تولید شده توسط کاربر مفید است. می‌توانید تصاویر را بر اساس چهار عامل فیلتر کنید: محتوای مربوط به بزرگسالان، پزشکی، خشونت‌آمیز و محتوای جعلی.
  • تشخیص متن : برای استخراج متن از تصاویر، OCR را اجرا کنید. این روش حتی می تواند زبان متن موجود در یک تصویر را شناسایی کند.

شما یاد گرفته اید که چگونه تصاویر را با Vision API تجزیه و تحلیل کنید. در این مثال، شما از API نشانی وب Google Cloud Storage تصویر خود را ارسال کردید. همچنین، می توانید یک رشته رمزگذاری شده با پایه 64 از تصویر خود را ارسال کنید.

آنچه را پوشش داده ایم

  • فراخوانی Vision API با curl با ارسال URL یک تصویر در یک سطل ذخیره‌سازی ابری
  • با استفاده از روش‌های تشخیص برچسب، وب، چهره و نشانه‌های Vision API

مراحل بعدی