Try using GCP's Vision API
table of contents
Hello.
I'm Mandai, in charge of Wild on the development team.
I previously played around with Microsoft's Emotion API, but Google Cloud Platform (GCP) also has an image detection API that uses similar machine learning.
This time, I have summarized the preparations for playing with this Vision API.
Requires Google Account
All you need to use GCP is a Google account and a credit card.
GCP's API has a free tier, and you can play with it if you just want to try it out, but there are some that require credit card registration.
The Vision API is exactly that type of API, and if a credit card is not registered, a dialog will appear saying "Payment required".
When you are told that you need to pay, you may feel reluctant to press the button, but it is okay because you will be asked for confirmation before you are charged beyond the free limit!
This psychological barrier is quite large.
If you want to enable billing, proceed to the billing account creation page.
If you register as a new member, you will receive a $300 credit that you can use for 60 days from registration.
Additionally, there is a free tier for using the Vision API, so as long as you don't use it recklessly, you can enjoy it for free.
Enabling Vision API on GCP
Create a suitable project and open API Manager from the hamburger on the top left.
Click the "Enable API" link next to the dashboard title
Click "Vision API" in the list of "Google Cloud Machine Learning" in the library
Click "Enable" next to the Google Cloud Vision API title to enable the API.
Get API key
Once the API is enabled, create an API key to access the API.
Select "Credentials" from the left side menu and press the "Create Credentials" button
Select "API Key" from the pull-down menu.
A dialog will appear displaying the API key, so copy and paste it and save it locally.
At the time of creation, anyone can use the API key by adding it to the request parameter, so use the "Restrict key" link to restrict the use of the API key.
There are four ways to restrict keys.
HTTP referrer
This type restricts API usage using referrer information embedded in the HTTP header.
This method is effective when used with a browser, etc.
IP address
Restrictions by IP address (IPv4/IPv6) are used when executing batch processing etc. on the server.
You can register multiple IP addresses so that you can access from multiple servers, and you can also specify a range using a subnet mask.
Android app
If you want to restrict usage from an android app, obtain the fingerprint of the SHA-1 signature certificate in the development environment and register it along with the package name.
iOS app
If you want to restrict usage from iOS apps, you need to register a bundle ID.
Even if you are only using it for testing purposes, it is better to put restrictions on it, but if you absolutely have to, you can create an API key as many times as you like, so we strongly recommend that you delete it immediately when you are done using it. .
Now you are ready to use the API.
test code
Now that the preparations are complete, I would like to test executing the API from PHP.
The basic information is all listed in the Google Cloud Vision API Documentation | Google Cloud Vision API | Google Cloud Platform If you want to implement it with PHP, you can either install the Google API Client Libraries from Getting Started | API Client Library for PHP (Beta) | Google Developers
This time, I'm going to write it thoroughly using curl.
Vision API is an image recognition API, so it is necessary to include image information in the request data.
The following image information can be used.
- Local image data
- Image data placed on Google Cloud Storage
As a side note, traffic is a bit of a concern when sequentially analyzing local image data.
When implementing a full-scale production environment, it may be a good idea to pay attention to bandwidth usage.
In this case, you need to pay attention to server storage, so you may want to consider storing images in Google Cloud Storage.
Public Internet URIs are not accepted as external sources, so if you want to integrate with AWS S3, etc., you will need to make some changes.
Using the Vision API using an API key is very easy, so feel free to post the code.
<?php $path = '/path/to/image.jpg'; $url = 'https://vision.googleapis.com/v1/images:annotate?key='. 'YOUR_SECRET_API_KEY'; $body = []; $res = []; file_exists($path) or die("file not found. path:". $path); $image = base64_encode(file_get_contents($path)); $body = [ 'requests' => [ [ 'image' => ['content' => $image], 'features' => [ ['type' => 'LABEL_DETECTION'], ['type' => 'TEXT_DETECTION'], ['type' = > 'FACE_DETECTION'], ['type' => 'LANDMARK_DETECTION'], ['type' => 'LOGO_DETECTION'], ['type' => 'SAFE_SEARCH_DETECTION'], ['type' => 'IMAGE_PROPERTIES'], ], ], ], ]; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', ], CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, CURLOPT_VERBOSE => true, CURLOPT_POSTFIELDS => json_encode($body), ]); try { $response = curl_exec($ch); } catch (Exception $ex){ var_dump($ex->getMessage()) ; } $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); echo "-- header --\n". substr($response, 0, $header_size). "\n"; echo "-- body --\n" . substr($response, $header_size). "\n";
If you specify the absolute path of the local image file in $path and enter the API key in "YOUR_SECRET_API_KEY", it will be analyzed.
(Operation confirmed in my PHP5.6 environment)
One problem I encountered was that I forgot to include the Content-Type in the header, but with Microsoft's Motion API without it, so I had a hard time noticing.
It's tempting to say that you can understand it by looking at the request, but as expected from Google, the specifications around this are very strict...
Well, did you receive the response successfully?
When playing on a console, depending on the image, the screen doesn't flow very fast?
This API is easy to analyze, but organizing the response data is the most demanding API.
Too much data is returned!
Looking at the response data seems like a pain, so I would like to do it after reorganizing.
That's it.