Jde o to ptát se jednou za kartu, ne za každý snímek
Rozpoznávání karet už funguje. Namiřte dobrý model na sběratelskou kartu a za zhruba půl sekundy máte název, edici i číslo. Problém nastane, když to chcete pouštět na video. Ne technicky, ale čistě objemem.
Video je hlavně opakování. Karta, kterou držíte čtyři sekundy při patnácti snímcích za sekundu, to je šedesát obrázků jedné karty, a když se identifikačního endpointu zeptáte šedesátkrát, dostanete šedesátkrát stejnou odpověď. Přesně tohle dělá každé naivní zpracování streamu, a proto má analýza streamů pověst něčeho, co si může dovolit jen platforma s investory za zády.
cardstream existuje proto, aby tohle opakování odstranil. Je to malý stavový automat mezi vaším videem a voláním rozpoznávání, postavený téměř výhradně ze signálů, které si zjistí sám: ustálila se scéna, je to stejná karta jako před chvílí, je vůbec nějaká karta v záběru? Volání proběhne, když se ustálí opravdu nová karta, a jindy ne. Všechno ostatní běží na hardwaru, který už máte.
Jedno volání na kartu, ne na snímek
Hodina vysílání při patnácti snímcích za sekundu, což je horní hranice, na které je projekt ověřený, a zhruba sto různých karet před objektivem. Dva způsoby, jak analyzovat přesně stejné video:
identifikačních volání, jedno za každý snímek, a většina z nich se znovu ptá na něco, co bylo zodpovězeno před chvílí.
identifikačních volání, jedno za každou novou kartu, bez ohledu na snímkovou frekvenci a na to, jak dlouho kterou kartu držíte.
Zhruba 540× méně volání, a ten rozdíl není trik s čísly: je to celý návrh. Držte kartu v klidu a počet se nezmění. Pusťte kameru rychleji a počet se nezmění. Počet volání odpovídá kartám, které ukážete, ne hodinám, které streamujete.
Kdo se o projekt stará
Od lidí, kteří rozpoznávání provozují
cardstream pochází od týmu, který stojí za rozpoznáváním sběratelských předmětů v Ximilaru. Identifikační endpointy, které volá, jsou ty, které sami provozujeme v produkci, takže klienta i službu udržují titíž lidé.
Práce probíhá veřejně
Celý balíček je na GitHubu: stavový automat, obě varianty nasazení i rozhraní v prohlížeči. Nic z rozhodovací logiky se neskrývá za službou, do které nevidíte.
Testováno bez sítě
Celá sada testů běží offline a místo souborů modelů a HTTP volání používá náhražky. Forkněte repozitář na notebooku bez API klíče a pořád poznáte, jestli jste něco rozbili.
Na co kód nesmí zapomenout
-
Jedno volání na kartu, ne na snímek
Tady začíná každé rozhodnutí o návrhu. Pokud jde nějaký signál spočítat lokálně, proběhne dřív než jediné volání, které opouští počítač.
-
Rozhodovací logika jen na jednom místě
O tom, kdy volat, rozhoduje právě jeden modul. Ne kód rozházený mezi ovladač, transport a rozhraní, kde ho tři lidé můžou změnit třemi způsoby, ale jeden soubor, který přečtete na jedno posezení.
-
Ovladače zůstávají tenké
Plánování, logování a vstup/výstup patří ovladači; o tom, co se počítá jako nová karta, rozhoduje engine. Když změníte, jak snímky přicházejí, nikdy to potichu nezmění, kdy odejde volání.
-
Nic neblokuje smyčku snímků
Dekódování, detekce, HTTP i disk běží mimo smyčku. Pomalá identifikace zahodí snímek, ale nikdy z vašeho streamu neudělá narůstající zpoždění.
-
Žádná závislost na poskytovateli, ani na nás
Identifikační volání je jeden vyměnitelný krok za malým rozhraním. Každý filtr, omezení i mezipaměť fungují dál, i když volání nasměrujete úplně jinam.
-
Ve výchozím stavu na vlastním hardwaru
Váš hardware, váš klíč, vaše video. V klientském režimu opouští počítač jen jeden výřez na každou novou kartu, pokud se sami nerozhodnete ukládat vysílání do vlastního účtu Ximilar.
Co nás karty naučily
Něco z toho je natolik neintuitivní, že to zapisujeme tam, kde to další člověk najde: do repozitáře, vedle kódu, kterého se to týká.
Dobře míněná nápověda může zhoršit přesnost
Když endpointu řeknete, z jaké hry karta je, vypne se jeho vlastní klasifikátor písma a ten pak předpokládá latinku, takže japonská karta potichu odpovídá svému anglickému tisku. Změřeno, ne odhadnuto, a proto se nastavení hry bez písma považuje za chybu.
Trochu volnější výřez funguje líp
Těsný ořez kolem karty vypadá správně, ale funguje hůř. Výřez, který odchází, má záměrně okraj, protože trocha okolí je lepší než čistá hrana.
Zotavit se je lepší než předstírat
Když volání visí déle, než je časový limit, systém se sám odblokuje a pokračuje dál, místo aby čekal na výsledek, který možná nikdy nepřijde. Toto omezení je v repozitáři popsané, ne zametené pod koberec.
Čtěte ho, spouštějte ho, posílejte opravy
Repozitář je veřejný: jeden instalovatelný balíček pro Python s nezávislými volitelnými doplňky a rozhraním v prohlížeči. Váhy lokátoru a embeddingu jsou naše, natrénované a zveřejněné pod licencí Apache-2.0 spolu s vydáními. Hlášení problémů i pull requesty jsou vítané, hlavně zprávy ze skutečných vysílání, která odhalí věci, na které žádná testovací sestava nepřijde.
Samotné rozpoznávání je a vždy bude endpoint Ximilaru; to je ta část, za kterou stojí databáze karet. Všechno kolem si můžete upravit po svém.
Open source. Na vlastním hardwaru. Váš stream, vaše technika.
Žádná platforma uprostřed, žádná licence na uživatele: připojte Ximilar API nebo vlastní identifikační systém a cardstream ho zavolá jednou za každou novou kartu, ne za každý snímek. Ať děláte breaky na Whatnotu, vedete vysílání ve stylu Fanatics Live, nebo streamujete z vlastního prodejního řešení, spusťte cardstream ještě dnes večer na hardwaru, který už máte.