Google | Umělá inteligence | 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.

Klepněte pro větší obrázek 
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.

Klepněte pro větší obrázekKlepněte pro větší obrázek 
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.

Klepněte pro větší obrázek

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.

Klepněte pro větší obrázek

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:

Klepněte pro větší obrázek

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.

Klepněte pro větší obrázek

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.

Klepněte pro větší obrázek

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.

Klepněte pro větší obrázek

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)

Klepněte pro větší obrázek

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.

Klepněte pro větší obrázek

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

Klepněte pro větší obrázek

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

Klepněte pro větší obrázek

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.

Klepněte pro větší obrázek

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.

Klepněte pro větší obrázek 

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. 

Klepněte pro větší obrázek 
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: Google, Umělá inteligence, Internet, Programování, Gmail, API, Google Apps Script, Česká televize, Kalendárium, Google Cloud Platform, Ivan Kutil, Obrázek, Apps Script, Custom Search Engine, Nástroj, Televizní soutěž, HTML, Knowledge Graph, Správná odpověď