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.
Obsah
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
Poté na nás vyskočí Windows okno, na kterém zvolíme volbu ANO
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“
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.
Nakonec už jen zatrhneme políčko pro přidání VS Code do naší systémové cesty (PATH), klikneme Install a máme hotovo.
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:
Poté se můžeme přesunout na Microsoft Azure Portal.
Zde vyhledáme pojem „Computer Vision.“
Poté ze sekce „Marketplace“ klikneme na „Computer Vision,“ vyplníme formulář a vybereme „Create new.“
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.
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íč.
Nastavování systémových proměnných
Otevřeme si ve Windows Command Prompt [v české verzi příkazový řádek].
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.
V našem textovém editoru otevřeme složku, kterou jsme vytvořili.
Vytvoříme soubor app.py.
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"
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"])
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)