Identyfikacja kart, na jaką zasługują Twoje streamy. Zbudowana dla breaków, openingów i sprzedaży na żywo.
cardstream ogląda Twój break, opening albo transmisję i identyfikuje każdą kartę kolekcjonerską w chwili, gdy pojawia się w kadrze: nazwa, set i pewność, na żywo. Analizuj swoje streamy sprzedażowe systemem śledzenia kart stworzonym dla streamerów, którzy chcą wiedzieć więcej.
Od Pokémon po Magic: The Gathering
Wybierz kategorię dla danej transmisji, a cały silnik pójdzie za nią: detekcja, bramki i zapytanie o identyfikację od razu celują we właściwy endpoint. Każde dopasowanie wraca z nazwą, setem, kodem setu, numerem karty, serią i rokiem.
Kolekcjonerskie gry karciane
collectibles/v2/tcg_id Single z TCG, nowe i vintage, prosto ze streamu. Endpoint czyta ilustrację, ramkę i tekst, więc karta jest identyfikowana z tego samego obrazu, na który patrzą Twoi widzowie: bez wypatrywania symbolu setu i bez mrużenia oczu nad numerem karty.
- Pokémon
- Magic: The Gathering
- Yu-Gi-Oh!
- One Piece
- Lorcana
- Digimon
- Dragon Ball Super
- Flesh and Blood
- Star Wars Unlimited
- Star Wars Destiny
- MetaZoo
- Riftbound
- Weiss Schwarz
- Union Arena
- Force of Will
- Grand Archive
- Vanguard
- Marvel Champions
- Sorcery
- Final Fantasy
- Gundam
- Duel Masters
- Naruto Mythos
- Hololive
- Garbage Pail Kids
Karty sportowe sport_id
Karty rookie, parallele, inserty i autografy ze wszystkich najważniejszych dyscyplin (baseball, koszykówka, futbol amerykański, piłka nożna, hokej i inne): dokładnie ta karta, ten set i ten rok.
Ocenione karty w slabach slab_id
Czyta etykietę na etui ocenionej karty: karta zamknięta w slabie PSA, BGS lub CGC zostaje zidentyfikowana bez rozbijania etui.
Komiksy comics_id
Okładki identyfikowane tak samo jak karty: tytuł, numer i rok, z jednej nieruchomej klatki.
Podłącz komercyjny system rozpoznawania albo własny
Wszystko, co rozstrzyga, czy w ogóle pytać, dzieje się przed samą identyfikacją: detekcja, bramka ruchu i bramka tożsamości działają lokalnie i nie zależą od dostawcy. Samo zapytanie to jeden wymienny krok: standardowo Ximilar, komercyjna usługa identyfikacji kart albo model wytrenowany samodzielnie i uruchomiony na własnym sprzęcie.
To jeden mały interfejs: wchodzi wycinek karty, wychodzi dopasowanie. Zaimplementuj IdentifyTarget, a każda bramka, każde ograniczenie częstotliwości i każdy próg przed nim działają dokładnie tak jak wcześniej: nadal jeden wycinek na każdą nową kartę, bez względu na to, kto odpowiada.
# własny system rozpoznawania, ten sam silnik class HouseIdentifier(IdentifyTarget): def identify(self, crop_bgr): return my_service.match(crop_bgr) # tak czy inaczej jeden wycinek na każdą nową kartę $ cardstream-web --detector rfdetr
Jedno zapytanie na kartę, nie na klatkę
Chodzi o to, by analiza streamu ograniczała się do zapytań, które naprawdę mówią coś nowego. Alternatywa open source dla zamkniętych usług SaaS do rozpoznawania kart: żadnej platformy pośrodku, żadnych licencji na stanowisko. Twój sprzęt, Twój klucz API i maszyna stanów, która pyta tylko wtedy, gdy karta w kadrze jest naprawdę nowa.
Naiwne rozwiązanie działające klatka po klatce przy 15 fps wysyła 54 000 zapytań o identyfikację na godzinę. cardstream wysyła jedno na każdą pokazaną kartę, czyli około stu w ciągu tej samej godziny.
Ta sama godzina, to samo wideo, te same karty: 54 000 zapytań kontra mniej więcej 100. Bramki ruchu i tożsamości działają lokalnie, na Twoim sprzęcie, a zapytanie wychodzi dopiero wtedy, gdy w kadrze znieruchomieje naprawdę nowa karta.
Bez abonamentu SaaS, bez opłat za stanowisko, bez uzależnienia od dostawcy. Postaw wszystko u siebie, razem z identyfikacją, albo podłącz API Ximilar.
Wszystko, czego potrzebuje stream z kartami
Współprowadzący, który nie przegapi żadnej karty: dla sprzedających na żywo na platformach w stylu Whatnot i Fanatics Live, do box breaków, streamów sklepów z kartami i katalogowania kolekcji. Wszędzie tam, gdzie przed kamerą lądują kartoniki.
Rozpoznana, gdy tylko wejdzie w kadr
Bez przycisku skanowania. Bez czekania. Po prostu pokaż kartę: od kartonika do nazwy karty mija mniej więcej pół sekundy, a nazwa, set i pewność pojawiają się na żywo na streamie.
Jedno zapytanie na kartę
Bramka ruchu i oparta na embeddingach bramka tożsamości działają lokalnie, na Twoim procesorze. Trzymasz kartę nieruchomo: zero powtórnych zapytań. Zmieniasz kartę: dokładnie jedno nowe.
Dowolne źródło streamu
Kamera internetowa, pliki wideo, RTSP, RTMP i SRT: pobierane przez cardstream albo wysyłane prosto z OBS dzięki --listen. Do tego klatki JPEG przez WebSocket dla nietypowych setupów.
Dowolny backend identyfikacji
Standardowo Ximilar collectibles/v2. Ten sam silnik możesz też skierować na komercyjny system rozpoznawania kart albo na własny, samodzielnie wytrenowany i hostowany.
Własne modele mile widziane
Wagi lokalizatora są nasze: dostrojony model segmentacji RF-DETR na licencji Apache-2.0, pobierany przez instalator. Detektory zwracające prostokąty (RF-DETR, RT-DETRv2) też są obsługiwane, jeśli wolisz własny eksport.
Open source, na własnym sprzęcie
Jeden pakiet w języku Python na liberalnej licencji. Czytaj kod, forkuj go, uruchamiaj na własnym sprzęcie. Twój klucz, Twoje dane, Twoja infrastruktura.
Dość sprytny, by wiedzieć, kiedy nie pytać API
Między Twoim streamem a API stoi maszyna stanów. Każda klatka przechodzi przez DecisionCore, jedną maszynę stanów działającą lokalnie, a trzy lokalne bramki decydują, kiedy ten jeden krok z API jest naprawdę uzasadniony.
Detekcja
lokalnie · bez zapytańZnajduje czworokąt karty i przygotowuje czysty, wyprostowany wycinek. Lokalna bramka ruchu ogranicza jej częstotliwość na trzech poziomach: ruch, nieruchoma karta, pusty kadr.
Bramka ruchu
lokalnie · bez zapytańTania średnia różnica między klatkami. Dopiero gdy obraz jest spokojny przez N klatek, karta zasługuje na bliższe spojrzenie. Wciąż się rusza? Czekamy.
Bramka tożsamości
lokalnie · bez zapytańPorównanie embeddingów odpowiada na jedno pytanie: czy to ta sama karta co przed chwilą? Ta sama karta → jeszcze raz wynik z pamięci podręcznej.
Identyfikacja
ximilar · 1 zapytanieDopiero naprawdę nowa, nieruchoma karta uruchamia zapytanie o identyfikację do API Ximilar: asynchronicznie, po krótkiej zwłoce, poza pętlą klatek. Wynik wraca na żywo.
Streamujesz w pojedynkę?
Jedna osoba, jedna kamera, jedna długa noc breaków. Żeby wiedzieć, jaka karta jest na ekranie, nie trzeba mieć zespołu inżynierów. Podłącz stream, który i tak już prowadzisz, i pozwól, by cardstream analizował go na żywo, bez względu na to, czy sprzedajesz na którejś z platform, czy prosto z własnego kanału.
- Whatnot
- Fanatics Live
- eBay Live
- TikTok Shop
- Twitch
- YouTube Live
- własna strona
Żadnego dostępu do konta, żadnych kluczy API platform sprzedażowych, żadnego bota na czacie i żadnych powiązań z którąkolwiek z tych platform. cardstream czyta Twoje wideo i nic więcej.
Streamujesz już z OBS
Dodaj jedno wyjście więcej obok tego, które zasila Twoją transmisję. Kupujący widzą dokładnie to samo co wcześniej, a kopia tego samego obrazu trafia do programu cardstream i każda karta, która ląduje na stole, zostaje po drodze zidentyfikowana. Poniższy tryb nasłuchu wymaga systemowego programu ffmpeg. Możesz też całkiem pominąć drugie wyjście i pozwolić, by cardstream czytał kamerę wirtualną OBS jak zwykłą kamerę internetową.
$ cardstream-web --listen \ --source rtmp://0.0.0.0:1935/live # tu skieruj drugie wyjście OBS
Albo kamera, którą masz już na stole
Kamera nad stołem, grabber wideo, telefon w roli kamery internetowej: cokolwiek, pod czym otwierasz boostery i pokazujesz karty. Analiza działa na komputerze obok kamery, więc domyślnie pokój opuszcza tylko jeden wycinek na kartę.
$ cardstream-web --source 0 # kamera internetowa · interfejs w przeglądarce na localhost
Albo cokolwiek, co ma adres URL
Enkodery, miksery wideo, restreamery, drugie studio na drugim końcu miasta. Pobieranie przez RTSP, RTMP i SRT, a do tego klatki JPEG przez WebSocket, gdy setup jest własnej roboty.
$ cardstream-web \
--source rtsp://studio/stream1 Nakładka na żywo
Nazwa, set i pewność pojawiają się w chwili, gdy karta znieruchomieje: gotowe do odczytania na głos albo do wkomponowania z powrotem w scenę.
Każda karta zapisana
Bieżąca historia wszystkiego, co pokazujesz: miniatura każdej karty i czas, jaki spędziła na streamie. Zapisz ją na swoim koncie Ximilar i przejrzyj transmisję następnego ranka: co się sprzedało i ile było warte.
Na siły i kieszeń jednej osoby
Bez opłat za platformę, bez licencji na stanowisko. Trzygodzinna transmisja to garść zapytań o identyfikację, a nie jedno na każdą klatkę.
Krok po kroku: podłącz transmisję z Whatnot lub Fanatics Live →
Twoja transmisja, zapisana i gotowa do przejrzenia
cardstream działa na Twoim komputerze i domyślnie niczego nie przechowuje. Dodaj jedną flagę, a każda pokazana karta trafi też do sesji na Twoim koncie Ximilar: z ceną, czasem na ekranie i wycinkiem, z którego została zidentyfikowana. Po transmisji otwórz aplikację Ximilar i sprawdź, ile to wszystko było warte.
$ cardstream-web --price-stats \ --ximilar-stream NEW # wypisuje id sesji i zapisuje w trakcie transmisji
Transmisja w liczbach
Pokazane produkty, płatne zapytania do API, wartość rynkowa i średni czas na ekranie dla każdej sesji, a obok najcenniejsze produkty i najczęstsze sety.
Każda karta ze zdjęciem
Każdy wiersz zachowuje kartę, set, numer, cenę i wycinek, z którego została zidentyfikowana. Przeszukuj listę po produkcie lub secie i filtruj sesje według statusu, platformy i daty.
Zrób z tego własną ewidencję
Oznacz, co się sprzedało, dodaj notatkę, popraw błędne dopasowanie albo jego cenę, usuń fałszywe. Nazwij sesję i dołącz własne metadane: numer licytacji, koszty, kupujących.
Wróć tam, gdzie transmisja się urwała
Restart w trakcie transmisji? Podaj id sesji zamiast NEW, a transmisja potoczy się dalej w tej samej sesji, nawet jeśli została już zamknięta. Flaga --ximilar-workspace zapisuje ją w przestrzeni roboczej zespołu.
Domyślnie wyłączone: bez --ximilar-stream Twój komputer opuszcza wyłącznie zapytanie o identyfikację. Zapisywanie wymaga usługi Cardstream na koncie Ximilar. Płatne jest tylko rozpoczęcie sesji, a --no-ximilar-stream-images ogranicza zapis do tekstu.
Od zera do identyfikacji na żywo w 3 krokach
Zainstaluj
Virtualenv, wheel z wydania (ze sprawdzoną sumą kontrolną), wagi modeli i oba polecenia w Twoim PATH. Użyj skryptu, zainstaluj ten sam wheel z PyPI przez pip (wagi pobiera się osobno) albo sklonuj repozytorium i zbuduj wszystko samodzielnie. Docker i Windows znajdziesz na stronie pobierania.
$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh # inne sposoby instalacji → cardstream.ai/download
$ pip install 'cardstream[client,onnx]' # albo: uv tool install 'cardstream[client,onnx]' # wheel nie zawiera wag: rozpakuj dwa archiwa z cardstream.ai/models # i wskaż je flagami: $ cardstream-web --segmentor-model segmentation_model/onnx/model.onnx \ --embed-model similarity_model/onnx/model.onnx
$ git clone https://github.com/Ximilar-com/cardstream && cd cardstream $ ./scripts/build-from-source.sh --models $ source .venv/bin/activate
Podłącz system identyfikacji
Standardowo Ximilar collectibles/v2: klucz z ximilar.com to jedyne dane dostępowe, jakich potrzebuje cały system. Ten sam krok możesz też skierować na własny system rozpoznawania.
$ export XIMILAR_API_KEY=your-key
Skieruj kamerę na kartę
Otwórz interfejs w przeglądarce z obrazem z kamery internetowej albo podaj mu swoją transmisję: przez RTSP, który pobierze samodzielnie, albo przez RTMP wysyłany prosto z OBS. Cały wieczór otwierasz jeden set? Podaj go z góry, a endpoint przestanie zgadywać: angielskie karty Pokémon z setu CRI to trzy rzeczy mniej, w których można się pomylić. Ustawiaj --alphabet zawsze, gdy ustawiasz --game, bo podanie gry z góry wyłącza w endpoincie własne wykrywanie systemu pisma. Dodaj --price-stats, a każde dopasowanie przyniesie też ceny rynkowe w USD: medianę, przedział i ostatnią sprzedaż, na karcie i w historii. Dodaj --ximilar-stream NEW, żeby zapisać transmisję na swoim koncie Ximilar i przejrzeć ją później.
$ cardstream-web # → http://127.0.0.1:8001 (pokaż kartę do kamery) # Angielskie karty Pokémon, jeden set (CRI - Chaos Rising), z cenami rynkowymi w USD: $ cardstream-web --game Pokemon --set-code CRI --alphabet latin --price-stats
Open source. Na własnym sprzęcie. Twój stream, Twoje zasady.
Żadnej platformy pośrodku, żadnych licencji na stanowisko: podłącz API Ximilar albo własny system identyfikacji, a cardstream zapyta raz na każdą nową kartę zamiast raz na klatkę. Robisz breaki na Whatnot, prowadzisz transmisję w stylu Fanatics Live albo streamujesz z własnego setupu do live commerce? Uruchom cardstream jeszcze dziś wieczorem, na sprzęcie, który już masz.