Dokumentacja
Wszystko działa na Twoim komputerze: zainstaluj, skieruj kamerę i ustaw, kiedy wolno mu wysyłać zapytania. Pogrupowane według tego, co chcesz zrobić.
Od zera do karty na ekranie
Jedno polecenie instaluje klienta, wagi modeli i shimy. Jedyne dane dostępowe w całym systemie to Twój klucz Ximilar.
Skrypt instalacyjny
Tworzy venv w ~/.cardstream, sprawdza wheel z wydania względem sum kontrolnych, pobiera wagi modeli i umieszcza oba polecenia w Twoim PATH. Pozostałe sposoby (wheel, Docker, kod źródłowy) znajdziesz na stronie pobierania.
$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh Wszystkie sposoby instalacji → Instalacja ręczna
Sklonowane repozytorium i pip też wystarczą. Dodatki (extras) są niezależne: [client] to interfejs i źródła, a [onnx] lub [torch] dostarczają backendy detektora i modelu embeddingów.
$ git clone https://github.com/Ximilar-com/cardstream && cd cardstream $ pip install -e '.[client,onnx]'
Twój klucz Ximilar
Identyfikację zapewnia Ximilar collectibles/v2. XIMILAR_API_KEY to jedyna zmienna środowiskowa, którą cokolwiek tu czyta. Cała reszta to flagi.
$ export XIMILAR_API_KEY=your-key
Pierwsze uruchomienie
Otwiera interfejs w przeglądarce z obrazem z kamery internetowej. Pokaż kartę do kamery: nakładka pokazuje, jak maszyna stanów podejmuje decyzję, a potem dopasowanie, gdy tylko nadejdzie.
$ cardstream-web # → http://127.0.0.1:8001
Sprawdź, co masz
Oba polecenia wypisują wersję i kończą pracę. Nie potrzebują plików modeli, więc działa to od razu po zakończeniu instalacji.
$ cardstream-web --version
cardstream 0.5.0 Bez interfejsu, dla setupów
Ten sam potok przetwarzania bez przeglądarki: wyniki trafiają na terminal. Te same flagi co w cardstream-web, jeden proces obok kamery.
$ cardstream-client --source 0 Podaj mu swoją transmisję
Źródła są wymienne, a analiza wygląda tak samo bez względu na to, które wybierzesz. Wszystko jest flagą, a najważniejsze z nich okno ustawień zmienia na żywo.
Kamery internetowe i pliki
W cardstream-web domyślna jest kamera internetowa w przeglądarce. Indeks kamery, plik wideo albo pojedynczy obraz działają wszędzie. Dobre do testów przed transmisją.
$ cardstream-web # kamera internetowa w przeglądarce $ cardstream-client --source clip.mp4
Pobieranie streamu
Skieruj go na kamerę IP, enkoder albo restreamer: rtsp://, rtmp://, srt:// oraz klatki JPEG przez ws://, z ponownym łączeniem w rosnących, ale ograniczonych odstępach.
$ cardstream-web --source rtsp://cam/stream1 Niech OBS wysyła
Uruchom go w trybie nasłuchu i dodaj w OBS jedno dodatkowe wyjście RTMP lub SRT. Wymaga systemowego programu ffmpeg (brew install ffmpeg).
$ cardstream-web --source rtmp://0.0.0.0:1935/live --listen Wartości podane z góry zawężają wyszukiwanie
Gra, kod setu i system pisma są sprawdzane lokalnie, zanim zostaną wysłane. Zawsze podawaj --alphabet razem z --game: po podaniu gry endpoint przestaje samodzielnie wykrywać alfabet.
$ cardstream-web --game "Pokémon" --alphabet japanese --set-code M4
Okno ustawień
Kategorię, grę, kod setu, alfabet i progi można zmieniać z przeglądarki w trakcie streamu: bez restartu, a kontrolki mają tę samą walidację co proces.
Trzy ustawienia rozdzielczości
To, co rejestruje kamera, to, co jest wysyłane, i to, co jest analizowane, to osobne liczby. Analiza działa na małym obrazie, a wycinek do identyfikacji jest wycinany na nowo z pełnej klatki.
$ cardstream-web --camera-width 3840 --width 1280 Zapisz transmisję, przejrzyj ją później
Domyślnie wyłączone. Jedna flaga zapisuje historię, którą buduje strona (każdą pokazaną kartę razem z jej wycinkiem), do sesji na Twoim koncie Ximilar, więc następnego ranka transmisja wciąż tam jest.
Historia z miniaturami
Interfejs w przeglądarce wymienia każdą pokazaną kartę, od najnowszej: miniaturę zidentyfikowanego wycinka, cenę (z --price-stats) i czas, jaki karta spędziła na streamie. Ta lista żyje na Twoim komputerze.
Zapisz transmisję
Flaga --ximilar-stream NEW rozpoczyna sesję i wypisuje jej id. Od tej chwili każdy wiersz historii jest zapisywany w trakcie transmisji: wysyłki idą partiami w tle, są ponawiane po błędach sieci i nigdy nie wstrzymują transmisji. Poprawne zakończenie pracy wysyła to, co zostało, i zamyka sesję.
$ cardstream-web --game "Pokémon" --alphabet latin \ --price-stats --ximilar-stream NEWZapisywanie transmisji w szczegółach →
Co jest wysyłane
Wiersze jako tekst (karta, set, cena, czas na streamie, stojące za nimi płatne zapytania) oraz wycinek, z którego zidentyfikowano każdy wiersz, najwyżej 1024 px: ten sam obraz, który dostało już zapytanie o identyfikację. Flaga --no-ximilar-stream-images ogranicza zapis do tekstu. Twoje konto Ximilar musi mieć usługę Cardstream.
$ cardstream-web --ximilar-stream NEW --no-ximilar-stream-images Przejrzyj ją w aplikacji Ximilar
Każda sesja trafia do sekcji Cardstream w aplikacji Ximilar: co i kiedy było pokazane, wartość transmisji, jej najcenniejsze produkty i najczęstsze sety oraz każda karta z wycinkiem. Oznacz, co się sprzedało, popraw błędne dopasowanie, dodaj notatki.
Otwórz aplikację Ximilar →Wznów po restarcie
Podaj id sesji zamiast NEW, a transmisja potoczy się dalej w tej samej sesji. Nawet jeśli zamknęło ją poprawne zakończenie pracy, po prostu otworzy się ponownie. Płatne jest tylko rozpoczęcie sesji, więc wznowienie nic nie kosztuje.
$ cardstream-web --ximilar-stream <session-id>
Przestrzenie robocze zespołu
Sesja jest zapisywana w domyślnej przestrzeni roboczej Twojego klucza API. Inną wskażesz flagą --ximilar-workspace. Podaj to samo id, gdy wznawiasz zapisaną tam sesję.
$ cardstream-web --ximilar-stream NEW \ --ximilar-workspace <workspace-id>
Jedno zapytanie o identyfikację na każdą nową kartę
Lokalne sygnały (ruch, detekcja, bramka tożsamości) decydują, kiedy zapytanie o identyfikację jest naprawdę uzasadnione. Oto ustawienia, które trzymają to w ryzach.
Progi
Próg wyniku nie dopuszcza słabych dopasowań do nakładki. Próg podobieństwa rozstrzyga, czy to ta sama karta, czy nowa. Ustawienie forget-after czyści pamięć, gdy karty nie ma wystarczająco długo.
$ cardstream-web --result-threshold 0.35 Zalecane uruchomienie
Segmentacja RF-DETR z bramką embeddingów w ONNX, czyli dostarczane ustawienia domyślne. Samo polecenie cardstream-web uruchamia dokładnie to, gdy wagi są już na miejscu. Wypisanie tych flag wprost daje dokładnie to samo.
$ cardstream-web \ --segmentor-model model/segmentation/onnx/model.onnx \ --embed-model model/similarity/onnx/model.onnx
Zostań na localhost
Lokalna aplikacja nie wymaga uwierzytelniania i przechowuje Twój klucz API. Flaga --host ma domyślną wartość 127.0.0.1. Zostaw ją i nigdy nie wystawiaj portu do sieci LAN.
„Model not found” przy starcie
Wagi modeli pobiera się osobno, nie są częścią repozytorium. Skrypt instalacyjny i obraz Docker pobierają je automatycznie. Przy samym sklonowanym repozytorium trzeba je umieścić w model/segmentation/ i model/similarity/, co zrobi za Ciebie scripts/build-from-source.sh --models.
Podaj grę, którą pokazujesz
Przy transmisji z jedną grą endpoint nie musi zgadywać gry przy każdym zapytaniu. Podaj ją, a wyszukiwanie zawęzi się do tej gry: szybsze odpowiedzi, mniej pomyłek co do wersji karty. Dodaj do tego --alphabet, bo po podaniu gry endpoint przestaje samodzielnie wykrywać system pisma.
$ cardstream-web --game "Pokémon" --alphabet japanese
ffmpeg, gdy jest potrzebny
Flagi --listen i --ffmpeg uruchamiają systemowy program ffmpeg. Zwykłe pobieranie streamu działa, gdy instalujesz wyłącznie przez pip. Wariant z wysyłaniem z OBS już nie.
Poza ustawienia domyślne
Podmień modele albo przeczytaj kod: całość to jeden instalowalny pakiet.
Własne wagi
Detekcja i bramka tożsamości same dobierają backend: rodzina modelu wyznacza klasę, a rozszerzenie pliku środowisko uruchomieniowe. RF-DETR albo RT-DETRv2, plik .onnx albo katalog transformers.
Backendy modeli →Katalog modeli
Wszystkie wagi, które cardstream potrafi wczytać, wytrenowane przez Ximilar i publikowane na licencji Apache-2.0 razem z wydaniami: co robi każdy model, jak szybko działa i na jakiej jest licencji.
Katalog modeli →Krótkie pytania, krótkie odpowiedzi
Ile to kosztuje, co opuszcza komputer, jakie karty rozpoznaje i dwa polecenia, które to wszystko usuwają.
Przeczytaj FAQ →README i zgłoszenia
README opisuje każdą flagę, a zgłoszenia (issues) to miejsce na błędy i pytania.
Przeczytaj README →Wydania i pliki
Wheele, sumy kontrolne i skrypt instalacyjny, jeden komplet na wydanie, a do tego Docker i budowanie ze źródeł.
Strona pobierania →