Logo STC

Computer Vision – hledáme podobné obrázky pomocí AI

Azure Programming17. 5. 2020

#cognitiveServices#ComputerVision#představení#studenti#učitelé

Chcete si vytvořit aplikaci, která bude popisovat a kategorizovat obrázky pomocí umělé inteligence a potom najde další k němu podobné? Tak dnes si takový jednoduchý příklad ukážeme.

Chcete si to jen vyzkoušet?

Tento projekt je také dostupný ve webové verzi na adrese related-pics.now.sh a tak není potřeba k vyzkoušení umělé inteligence žádné programování. Ale pokud máte chvíli na seberozvoj, můžeme se na to pustit.

O projektu

Tento projekt je určen k demonstraci služby Computer Vision v Azure za využití služby PixaBay. Do námi vytvořeného programu budeme schopni vložit adresu na obrázek a poté dostat obrázky, o kterých si myslí náš program, že jsou mu podobné.

Co budeme potřebovat?

  • Textový editor (pokud žádný nemáte, doporučuji Visual Studio Code [zdarma ke stažení zde]).
  • Python prostředí (ke stažení zde) [budeme potřebovat Python 3.0 a novější].

Instalace Pythonu

V této podkapitole si ukážeme, jak na instalaci Pythonu 3.8.2

Výběr verze Pythonu
Výběr verze Pythonu
Stránka s instalacemi Pythonu 3.8.2
Stránka s instalacemi Pythonu 3.8.2
Instalační soubor pro Python 3.8.
Instalační soubor pro Python 3.8.

Poté na nás vyskočí Windows okno, na kterém zvolíme volbu ANO

Instalace proběhla úspěšně
Instalace proběhla úspěšně

klikneme na tlačítko "Close" a můžeme dále pokračovat

Instalace Visual Studio Code

Na stránce code.visualstudio.com klikneme na tlačítko "Download for Windows"

Obrázek stránek https://code.visualstudio.com/
Obrázek stránek https://code.visualstudio.com/

Ihned poté by mělo stahování začít - po stažení soubor otevřeme a přijmeme licenční podmínky - a klineme "Next".

Vybereme instalační destinaci, klikneme next, necháme další stránku se zástupci jak je, a klikneme Next ještě jednou.

Okno s instalační cestou VS Code
Okno s instalační cestou VS Code
Vytvoření zástupce VS Code
Vytvoření zástupce VS Code

Nakonec už jen zatrhneme políčko pro přidání VS Code do naší systémové cesty (PATH), klikneme Install a máme hotovo.

Extra možnosti v instalaci VS Code
Extra možnosti v instalaci VS Code
Dokončení instalace VS Code
Dokončení instalace VS Code

Jdeme na to!

V této sekci článku si krok po kroku ukážeme, jak si vytvořit vlastní Computer Vision program.

Poté pár vteřin počkáme a je hotovo.

Získávání API klíčů

Tato kapitola se věnuje získávání klíčů API (aplikační programovací rozhraní), neboli klíč, který nám umožní se na našich službách (Azure a PixaBay autentifikovat).

Azure

Nejprve budete potřebovat aktivní předplatné Azure for Students, anebo jiné. Návod na aktivaci najdete zde:

https://blog.studentstc.cz/azure-programming/aktivace-azure-for-students/

Poté se můžeme přesunout na Microsoft Azure Portal.

Microsoft Azure Portal Dashboard
Microsoft Azure Portal Dashboard

Zde vyhledáme pojem "Computer Vision."

Vyhledávací pole na Azure Portalu
Vyhledávací pole na Azure Portalu

Poté ze sekce "Marketplace" klikneme na "Computer Vision," vyplníme formulář a vybereme "Create new."

Zakládaci formulár na Computer Vision
Zakládaci formulár na Computer Vision

Poté v postranním menu vybereme "All resources" u projektu, který jsme právě vytvořili a přejdeme na "Quick start," kde najdeme naše údaje, které budeme nadále potřebovat.

Obrázek Quickstart stránky v Azure
Obrázek Quickstart stránky v Azure

PixaBay

  • Nejdříve se zaregistrujeme / přihlásíme na službu PixaBay.
  • Poté přejdeme na stránku API Dokumentace. Zde najdeme náš API klíč.
Stránka API dokumentace služby PixaBay
Stránka API dokumentace služby PixaBay

Nastavování systémových proměnných

Otevřeme si ve Windows Command Prompt [v české verzi příkazový řádek].

Zapínání příkazového řádku ve Windows
Zapínání příkazového řádku ve Windows

Nastavíme "COMPUTER_VISION_SUBSCRIPTION_KEY," "COMPUTER_VISION_ENDPOINT" a "PIXABAY_API_KEY" proměnné příkazem setx (za každým příkazem pro exekuci stiskneme Enter).
Příkazy si můžete jednoduše jeden po druhém zkopírovat a vložit do CMD.

setx COMPUTER_VISION_SUBSCRIPTION_KEY "your-key" setx COMPUTER_VISION_ENDPOINT "your-key" setx PIXABAY_API_KEY "your-key"

Před kódem

Vytvoříme na disku našeho počítače složku computer-vision-demo.

Vytváření nové složky
Vytváření nové složky

V našem textovém editoru otevřeme složku, kterou jsme vytvořili.

Obrázek otevírání složky ve Visual studio Code
Obrázek otevírání složky ve Visual studio Code

Vytvoříme soubor app.py.

Vytváření souboru ve VS code
Vytváření souboru ve VS code

Kód

Poznámka: Kód vždy otevřeme tak, že otevřeme náš soubor app.py. Pro jednodušší zobrazení je k dispozici také doplněk pro VS Code s názvem Python od Microsoftu (ke stažení zde).

Nainstalujeme a importujeme azure.cognitiveservices.vision.computervision.

pip install azure-cognitiveservices-vision-computervision

from azure.cognitiveservices.vision.computervision import ComputerVisionClient from azure.cognitiveservices.vision.computervision.models import TextOperationStatusCodes from azure.cognitiveservices.vision.computervision.models import TextRecognitionMode from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes from msrest.authentication import CognitiveServicesCredentials

Dále naimportujeme systémové balíčky a balíček requests.

pip install requests

from array import array import os import sys import time import json import requests

V našem kódu nastavíme proměnné z env.

subscription_key = os.environ['COMPUTER_VISION_SUBSCRIPTION_KEY'] endpoint = os.environ['COMPUTER_VISION_ENDPOINT']

Nastavíme URL adresu našeho obrázku, který bude program analyzovat.

remote_image_url = "https://studuj.digital/wp-content/uploads/2020/02/87803873.4jVCEG08._H8C0068copy.jpg"

2 čápi na střeše
2 čápi na střeše

Dále řekneme programu, jak má použít Azure s obrázkem. V našem případě ho budeme kategorizovat pomocí štítků.

tags_result_remote = computervision_client.tag_image(remote_image_url)

Poté se podíváme, jestli Azure vůbec nějaký štítek poznal a pokud ne, zobrazíme chybovou hlášku.

if (len(tags_result_remote.tags) == 0): print("No tags detected.")

Pokud nějaké ale najde, vytvoříme proměnnou se jménem pixabayUrl a nastavíme ji na URL adresu s naším API klíčem.

pixabayUrl = "https://pixabay.com/api/?key="+ pixabay +"&q="

Hned na to přidáme k URL adrese všechny tagy, které Azure detekoval.

for i,tag in enumerate(tags_result_remote.tags): if i < int(percisionLvl): print("#{} [{:.2f}]%".format(tag.name, tag.confidence * 100)) if i > 0: pixabayUrl += "+" + tag.name else: pixabayUrl += tag.name pixabayUrl += "&image_type=photo&pretty=true"

Teď už nám zbývá jen zavolat PixaBay API a zobrazit obrázky, které to našlo.

responce = requests.get(pixabayUrl) jsonedResponce = json.loads(responce.text) # převedeme odpověď na jednodušše formátovatelný JSON for i,hit in enumerate(jsonedResponce["hits"]): #Prolistujeme obrázky a vepíšeme je do konzole print(jsonedResponce["hits"][i]["largeImageURL"])

Výstup programu - odkazy na jednotlivé obrázky
Výstup programu - odkazy na jednotlivé obrázky

Závěr a výsledek

Je vidět, že náš program má ještě mouchy (orientuje se jen podle popisu obrázku a ne podle obrázku samotného), ale poznal hlavní součást obrázku a to byl i náš cíl. Výsledek je nakonec tento: (váš se může trochu lišit)