Umělá inteligence | Google | Programování

Jak se dá hrát s programátorskými nástroji: Google Cloud AI hledá správné odpovědi z televizní soutěže Kalendárium

Technologie „umělé inteligence“ jsou snadno dostupné a dají se využívat i zábavným způsobem. Krásným příkladem je využití Google Cloud AI k hledání odpovědí v televizní soutěži, jak jej na svém blogu popsal Ivan Kutil, CTO a Google Cloud Architect ve firmě AppSatori. S jeho svolením inspirativní návod publikujeme i zde.

Naprogramoval jsem aplikaci, která hledá (resp. spíš zná) správné odpovědi na soutěžní otázky z pořadu Kalendárium a to vše pomocí Google Cloud AI. Jde o několik integrací na API, část algoritmizace, vyhodnocení a shrnutí výsledků do jednoho emailu. Dnes vám popíšu jak jsem to udělal.

Kalendárium.png 
Schéma procesu automatického hledání odpovědi na otázky z Kalendária

Mám rád pořad České televize Kalendárium, který je vysílán pravidelně každou neděli dopoledne. Na konci každého dílu je zobrazena fotka známé osoby, která slaví v daném týdnu výročí (včetně datumu narození a úmrtí). Soutěžící mají za úkol poznat o koho jde. A zde mě napadlo, zda by tato činnost nemohla být zautomatizována pomocí technologií.

Jak na to? Přes Google Apps Script

Integraci na televizní vysílání jsem měl vymyšlenou dvěma způsoby, ale nakonec mi to ulehčilo práci zobrazování fotky na stránkách pořadu.

export.gifct_1.png 
Otázka zveřejněná v televizním pořadu • Proces usnadnil fakt, že je otázka zveřejněna i na webu pořadu

Celou aplikaci jsem se rozhodl napsat v technologii Google Apps Script, která nabízí online IDE editor, provoz aplikace v cloudu a možnost rychlého napojení na Google služby.

05.png

První krokem je načtení obrázku s danou osobou a rokem narození ze stránek pořadu České televize. Pro snadnější parsování dat z HTML jsem si v Apps Scriptech vytvořil vlastní knihovnu, která toto zjednodušuje (viz můj článek Easy data scraping with Google Apps Script in 5 minutes).

Po z parsování HTML dostaneme URL adresu obrázku, na kterém je fotka a text:

Rozpoznávání jsem rozdělil na dvě oblasti - analýza obrazu s detekcí textu a analýza obrazu s detekcí webu.. K obojímu využívám naučené modely Google v rámci Google Cloud Platformy dostupné přes API.

06.jpg

Analýza textu

Pro první část využívám Google Cloud Vision API a jeho funkci Text detection. Ta umí v obrázku udělat OCR a najít viditelný text. Technicky stačí zavolat jeden request na REST API. 

Takhle zhruba vypadá výsledek:

07.png

Nejdůležitější je text s datumem narození:

 K d o t o b y l ? * 4 . 2 . 1 9 0 1 - * 1 0 . 1 2 . 1 9 8 7

Dalším krokem je prostý dotaz do Google s těmito datumy. Aby to nebylo tak jednoduché, tak Google neposkytuje API ke svému vyhledávači. Lze to obejít přes Google Custom Search Engine. Ta vám poskytuje možnost naklikat si vlastní vyhledávač nad definovaným rozsahem internetu (tj. přidáte jaké stránky má a nemá prohledávat). Poté můžete své dotazy pokládat přes API.

08.png

Vyhledávání na Google jsem použil i v jiných projektech, tak jsem si připravil vlastní knihovnu SearchApp kam stačí dát pouze ID parametr vyhledávače Custom Search Engine a pak dále API klíč od Google.

09.png

Takto vypadá výsledek v JSONu, kdy v poli items jsou jednotlivé výsledky vyhledávání. Zde je už jen algoritmus, který z <TITLE>  stránky vytáhne text, resp. nejčastěji opakované jméno.

10.png

Prvním kandidátem na správnou odpověď je Jascha Heifetz.

Analýza obrazu

Pro zvýšení přesnosti probíhá ještě čistá analýza obrazových dat. 

Nejdříve je potřeba obrázek oříznout, aby se použila pouze fotka s osobou. Pro ořezávání vypublikoval mikroslužbu (funkci) postavenou na nodejs s balíček Jimp. Tato funkce je nasazena v Google Cloud Functions a funguje jako jednoduché API (dostane obrázek - ořízne - vrátí obrázek)

11.png

Takto oříznutou fotku pošlu na Google Cloud Vision API, ale tentokrát s příznakem "WEB_DETECTION". To mi vrátí zda se na internetu neobjevuje podobná fotka a zda Google už danou osobou nezná.

Výsledkem je opět JSON. Z nalezených stránek s obrázkem (objekt WebPage) mě zajímá pouze jejich TITLE, který opět použiju jako vstupní zdroj. Opět pomocí algoritmus zpracuji jako jméno/text se vyskytuje nejčastěji.

12.png

Dále umí Google vrátit tzv. WebEntity objekt, který identifikuje osoby z Google Knowledge Graphu

13.jpg

V příkladu vidíte, že největší skóre má osoba s identifikátorem kg:/m/01tbm7

14.png

Pro získání reálného jména jmen z nalezených identifikátorů jsem využil Google Knowledge Graph Search API. Na JSON výsledků vidíte, že pod kg:/m/01tbm7 se skrývá opět Jascha Heifetz.

15.png

A jsme u konce, kdy zbývá jen sesbírat možné kandidáty. V tomto příkladu je vysoká pravděpodobnost, že na obrázku je Jascha Heifetz, což byl litevský houslista židovského původu.

Odeslání odpovědi raději s kontrolou

Aplikace napsaná v Google Apps Scriptu na můj email pošle odpověď, abych mohl před odesláním přeci jenom zkontrolovat, že se omylem nepošle třeba  „undefined“. Pro jednoduchost už mám připravenou šablonu textu a stačí v emailu kliknout na Poslat Gmail.

16.png 

Pro shrnutí celý zautomatizovaný proces zabere v cloudu cca 15 sekund. Je plně autonomní, protože je nastaven na spuštění každou neděli. 

17.png 
A takto soutěžím již delší dobu...

Pokud jste dočetli až jsem (tak jsem rád!), možná se ptáte, zda jsem v soutěži už někdy vyhrál.

Moje odpověď je ne. 

Kalendárium je oblíbené a vysílané v atraktivní čas. Očekávám, že mají stovky až tisíce správných odpovědí každý týden od lidí, které baví dohledávat informace v encyklopediích a na internetu. Mě zas baví hledat zajímavé automatizace, nové možnosti integrace a využití Google v soukromém i pracovním životě. Celou ukázku tak berte hlavně jako inspiraci, jak lze také využívat Google Cloud Platform, Google Apps Script, Knowledge Graph a další technologie.

Diskuze (3) Další článek: Čtečky otisku prstu by mohly být přesnější. Mohly by měřit i cévy pod kůží

Témata článku: , , , , , , , , , , , , , , , , , , , , , , ,