An AI villain against humanity! As a kid growing up in the 80s some of the coolest movies to come out were Terminator and Terminator 2 starring Arnold Schwarzenegger. ICYMI — an AI robot ( Arnold ) was sent from the future to try to destroy any chance of human resistance in the future.

Back then it felt far away into the future for us humans to construct a robot moving like that until this clip made the internet: https://www.youtube.com/watch?v=LikxFZZO2sk , a robot constructed by Boston Dynamics. A lot of people choked on their coffee that day.

If that thing ever becomes smart and hostile to humans we need to join Elon Musks Tesla in space :wink:

One really cutting edge scene in Terminator edged itself into my mind. The Terminator enters the motorcycle bar, scans the people and objects around the room, correctly classifying what the objects are, their color, size and if they are his target!

https://www.youtube.com/watch?v=zzcdPA6qYAU

Back then it was amazing, science fiction at its best.

Here’s the thing though, it’s not science fiction anymore. So many things have happened in the area of Machine Learning. The Machine Learning industry employs an army of data scientists that construct algorithms that given training data is able to correctly identify what it’s looking at.

A quite famous example is the pug or muffin training data in which we get a peek on how these algorithms are trained on countless images like this one:

I know some of you are probably chuckling by now, thinking we don’t need to worry about machines overtaking us any time soon :wink:

I mentioned it wasn’t science fiction anymore and it isn’t. Microsoft offers a whole suite of services called Azure Cognitive Services centering on

vision , This is image-processing algorithms that can identify , caption , index , moderate pictures and videos

, This is image-processing algorithms that can , , , and videos speech , Can convert spoken audio into text , use voice for verification or add speech recognition to your app

, Can convert , use or add your app language , Allow your apps to process natural language with pre-built scripts, evaluate sentiment and learn how to recognize what users want

, Allow your apps to with pre-built scripts, and learn how to knowledge , Map complex information and data in order to solve tasks such as intelligent recommendations and semantic search .

Map complex information and data in order to solve tasks such as and . search, Enable apps and services to harness the power of a web-scale , ad-free search engine with Search. Use search services to find exactly what you’re looking for across billions of web pages, images, videos and news search results

As you notice, where you to click on any of the above categories, each area leads to a ton of services and they are free to try. I don’t know about you but I feel like a kid in a candy store when someone tells me that here are a ton of APIs for you to use and especially if it makes Machine Learning usable for me as a developer.

To go with the introduced narrative let’s dive into the vision category, cause we want to see like a Terminator right? ;)

Let’s click on Celebrity and landmark recognition in images. Oh, cool we get a demo page where we can see the algorithms at work, try it before you buy it :)

Above we can see it requires us to input a URL for an image and it seems to respond with JSON. Ok, let’s give it something easy, a picture of Abe Lincoln:

And the winner is…. Abe Lincoln. Ok, that was easy let’s try something else:

I have to admit. I’m about nervous about this one ;). Ok, let’s see the results:

Ok, it recognized Arnold Schwarzenegger from the movie Terminator 2, good. I swear if it had mentioned John Connor I would have run for the hills, just kidding :)

Using Azure Cognitive Services

To start using the Cognitive Services API we need an API key. We need to take a few steps to acquire said key but it really isn’t that much. The Cognitive Services resides on Azure. To get a free Azure account head to this link:

Once you are signed up you could either be using the Azure portal or the Azure CLI. The Azure CLI enables us to talk to Azure from the command line which is usually way quicker and cooler, than clicking around in a UI.

Once we have come this far there are only four steps left, so stay with me and we will soon see the world like Arnold 😃.

What remains is the following:

create a resource group , this is a like a directory where you put all the things that belong together like accounts, databases, apps, it takes only a second to create

, this is a like a directory where you put all the things that belong together like accounts, databases, apps, it takes only a second to create create a cognitive services account , that’s also just a one-liner of code, creating this will give us our API key

, that’s also just a one-liner of code, creating this will give us our API key make a POST call to the API , it’s a very simple REST API call given they API key we get from constructing our cognitive services account

, it’s a very simple REST API call given they API key we get from constructing our cognitive services account parse the JSON response, we will get a JSON back and we will have a look at the different parts it gives us to see what we can show to our user

Create a resource group

The first thing we will need to do is to log in to Azure using the Azure CLI. To use the Azure CLI we first need to install it. Head over to this link for installation instructions, the installation instruction is different for different OS so make sure you pick the right one:

Let’s log in to Azure using the Azure CLI:

az login

This will open up a window in the browser where we login to our Azure account. Thereafter the terminal will have access to Azure.

Let’s now create the resource group:

az group create \ --name resourceforcogservices \ --location westeurope

The command here is az group create and we are giving it the following arguments:

name , this is a name we choose

, this is a name we choose location, we can select between a number of locations here depending on where we are in the world

For location, we have chosen westeurope , cause that’s where I am writing this article. So choose a region depending on where you are located. Here is the full list of supported regions:

westus2

southcentralus

centralus

eastus

westeurope

southeastasia

japaneast

brazilsouth

australiasoutheast

centralindia

Create an Azure Cognitive Services account

It’s quite easy to create this account. It’s done with the following command:

az cognitiveservices account create \ --kind ComputerVision \ --name ComputerVisionService \ --sku S1 \ --resource-group resourceforcogservices \ --location westeurope

Ok, our basic command is az cognitiveservices account create , thereafter we have added some arguments to said command:

kind , here we need to type what kind of Cognitive Services we will use, our value here needs to be ComputerVision

, here we need to type what kind of Cognitive Services we will use, our value here needs to be name , the name is simply the name of the service, which is ComputerVisionService

, the name is simply the name of the service, which is sku , means the pricing tier and is fixed for the lifetime of the service, we choose S1, which is really cheap.

, means the pricing tier and is fixed for the lifetime of the service, we choose S1, which is really cheap. resourcegroup , we have created this one previously and as stated before this is like a folder where everything that is related should be organized under

, we have created this one previously and as stated before this is like a folder where everything that is related should be organized under location, we keep going with westeurope here cause that’s what we started with, you are welcome to continue with the location you went with

Here is a link that will tell you more about pricing and different plans to manage the cost:

Once the Cognitive Services account is created then we can retrieve the API key. The following command will list our cognitive services account, including the API key:

az cognitiveservices account show \ --name ComputerVisionService \ --resource-group resourceforcogservices

Our command for retrieving the key is az cognitiveservices account show then we need to give said command some arguments:

name , this is the name of our service

, this is the name of our service resourcegroup, we keep using the resourcegroup westeurope that we chose initially

Make a POST call to the API

Now to make it easy to use when doing our REST call we will assign the API key to a shell variable and we can refer to said variable when we later do our REST call. Let’s do the assignment:

key=$(az cognitiveservices account keys list \ --name ComputerVisionService \ --resource-group resourceforcogservices \ --query key1 -o tsv)

The above lists all the keys on the account, picks out a key called key1 and assigns it to the variable key . Now we are all setup and ready to make our REST call.

Let’s have a look at our API and see what the URL looks like generally:

https://<region>.api.cognitive.microsoft.com/vision/v2.0/analyze?visualFeatures=<...>&details=<...>&language=<...>

We see that we need to replace region with whatever region we created our resource group and account with, in our case that is westeurope . Furthermore, we see the API is using a method called analyze and the parameters visualFeatures , details and language .

details , this can have value Landmarks or Celebrities

, this can have value or visualFeatures, this is about what kind of information you want back, The Categories option will categorize the content of the images like trees, buildings, and more. Faces will identify people’s faces and give you their gender and age

Ok, let’s see what the actual call looks like:

curl "https://westeurope.api.cognitive.microsoft.com/vision/v2.0/analyze?visualFeatures=Categories,Description&details=Landmarks" \ -H "Ocp-Apim-Subscription-Key: $key" \ -H "Content-Type: application/json" \ -d "{'url' : 'https://raw.githubusercontent.com/MicrosoftDocs/mslearn-process-images-with-the-computer-vision-service/master/images/mountains.jpg'}" \ | jq '.'

Above we call cURL and set the header Ocp-Apim-Subscription-Key to our API key, or more specifically to our variable key that contains our API key. We see that we create a BODY value with property url and set that to the image we want to analyze.

Looking at the response

Ok, we make the call, we were told there would be JSON. And there is, a whole lot of it :)

{ "categories": [{ "name": "outdoor_mountain", "score": 0.99609375, "detail": { "landmarks": [] } }], "description": { "tags": [ "snow", "outdoor", "mountain", "nature", "covered", "skiing", "man", "flying", "standing", "wearing", "side", "air", "slope", "jumping", "plane", "red", "hill", "riding", "people", "group", "yellow", "board", "doing", "airplane" ], "captions": [{ "text": "a snow covered mountain", "confidence": 0.956279380622841 }] }, "requestId": "<undisclosed>", "metadata": { "width": 600, "height": 462, "format": "Jpeg" } }

The score is indication of how certain it is of the results. With a value of 0.99609375 (max is 1.0) i would say it’s pretty darn certain. The captions is the algorithm trying to give us a normal sentence of what this is. It says it is: a snow-covered mountain . Let’s see for ourselves with the URL we provided to the service call:

Yep, looks like a Mountain to me, good Skynet ;)

Summary

I’ve taken you through my childhood and by now you know I’m a movie nerd, a bit of a skeptic on where all this AI, Machine Learning research is taking us. At the same time excited about all the cool apps I can build with Cognitive Services.

Here is also some food for thought. It’s easy to joke about killer robots especially when they come from the world of movies. With all great tech, we have a responsibility to do something useful with it, to serve mankind. Imagine algorithms like this mounted on drones or helicopters. Imagine further that a catastrophe has happened and you are looking for survivors and you got some great algorithms that quickly can aid you to find people. That can make a real difference, save lives.

I hope you are as excited as me and give it a try. The best way to get started is hopefully this blog post but it’s worth checking the LEARN platform and especially this course. Good luck :)

If you found this article useful/hilarious/ amusing / anything, please give me a clap :)