Analyseer je stream op Whatnot of Fanatics Live
cardstream logt nooit in bij Whatnot, Fanatics Live of welke marktplaats dan ook. Het kijkt op je eigen machine naar dezelfde video die je ze toch al stuurt, en benoemt elke kaart die op tafel komt. Dit is de hele weg, van niets tot een live overlay: ongeveer een kwartier, eenmalig.
Een computer bij de camera
macOS, Linux of Windows. Draai je er al OBS op, dan is dat de juiste machine: de analyse gebeurt lokaal, dus er hoeft niets over het netwerk.
De video die je al verstuurt
Een OBS-scène, een webcam, een capture card of een encoder. cardstream tapt af wat je hebt; je hoeft je show er niet voor om te bouwen.
Een Ximilar-API-sleutel
Het enige inloggegeven in het hele systeem, en het blijft op je eigen machine. Geen account bij een marktplaats, geen wachtwoord, geen bot in je chat.
Krijg het los van je show aan de praat
Voordat dit ook maar iets met je show te maken krijgt: bewijs dat het werkt met de webcam van je laptop. Drie commando’s.
Installeer het
Het script bouwt een venv in ~/.cardstream, controleert de release-wheel aan de hand van de checksums, haalt de modelgewichten op en zet de commando’s in je PATH. Installeren via wheel, Docker of broncode staat op de downloadpagina.
$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh Voeg je sleutel toe
De identificatie loopt standaard via Ximilar collectibles/v2, of via je eigen systeem in de plaats daarvan. XIMILAR_API_KEY is de enige omgevingsvariabele die ergens wordt uitgelezen. Zet hem in je shellprofiel, zodat hij op de avond van je show een herstart overleeft.
$ export XIMILAR_API_KEY=your-key
Houd een kaart voor je laptop
Dit opent de browser-UI met je ingebouwde webcam. Houd een kaart even stil: de overlay laat de toestandsmachine zien terwijl ze beslist, en daarna de naam, de set en de betrouwbaarheid, met naast de match hoe lang de identificatie-aanroep duurde. Dat is het hele product. De rest van deze pagina gaat alleen over waar de pixels vandaan komen.
$ cardstream-web # → http://127.0.0.1:8001
Richt het op je show
Kies één rij. Welke, dat hangt van één vraag af: stream je vanaf een desktop of vanaf een telefoon?
Wat niet kan
cardstream richten op de openbare afspeelpagina van je show op Whatnot of Fanatics. Er bestaat geen uitgaande stream-URL voor je eigen show, en de speler uitlezen zou seconden vertraging opleveren, nog los van de voorwaarden van het platform. Elke route hieronder tapt je video af vóór de marktplaats. Precies daarom heeft cardstream van hen geen account, geen wachtwoord en geen API-sleutel nodig.
De virtuele camera van OBS
OBS kan je samengestelde scène aan het besturingssysteem aanbieden als een gewone webcam. cardstream opent die dan net als elke andere camera: geen tweede encodering, geen extra belasting voor je encoder en geen ffmpeg om te installeren.
- Klik in OBS in het dock Bedieningselementen op Virtuele camera starten.
- Start cardstream met die camera als webcamindex. Index 0 is meestal je ingebouwde camera, dus de virtuele is doorgaans 1. Probeer 0, 1, 2 tot je je scène ziet.
$ cardstream-web --source 1 Probeer dit één keer vóór een show uit, niet tijdens: op macOS heeft de terminal toestemming voor de camera nodig, en als OpenCV het virtuele apparaat op jouw machine niet kan openen, werkt route B overal.
Een tweede uitvoer vanuit OBS
cardstream luistert op je eigen machine en OBS pusht er een kopie naartoe. Whatnot of Fanatics blijven precies ontvangen wat ze altijd al kregen: dit is een extra doel, nooit een omleiding.
- Start eerst de listener; die wacht op de push en verbindt vanzelf opnieuw.
- OBS heeft maar één Stream-uitvoer, dus stuur de kopie via een tweede: ofwel met de plug-in
obs-multi-rtmp, ofwel via Instellingen → Uitvoer → Opnemen → Aangepaste Uitvoer (FFmpeg), type Uitvoer naar URL, URLrtmp://127.0.0.1:1935/live, containerflv. Klik daarna op Opname starten. - Deze route roept de ffmpeg-binary van je systeem aan: voer eerst
brew install ffmpeguit.
$ cardstream-web --listen \ --source rtmp://0.0.0.0:1935/live
Een eigen camera op tafel
Een telefoon die rechtstreeks naar de app pusht, geeft je niets om af te takken. Jaag dus niet langer op de uitgaande stream en geef cardstream zijn eigen blik op dezelfde tafel: een tweede webcam erboven, of de HDMI-uitgang van de camera naar een capture card.
- Richt een webcam of capture card op de plek waar je de kaarten laat zien.
- Draai het op de machine naast die camera.
$ cardstream-web --source 0 Het hoeft niet de hoek te zijn die je kopers zien. Een strak, goed belicht shot van bovenaf identificeert beter dan een gecomprimeerde feed van een marktplaats ooit zal doen.
Alles met een URL
rtsp://, rtmp:// en srt:// worden rechtstreeks opgehaald, plus ws://-JPEG-feeds als je opstelling zelfgebouwd is. Opnieuw verbinden gebeurt met een begrensde backoff, dus een studioverbinding die midden in een break wegvalt, komt terug zonder dat je er iets voor doet.
- Geef het de URL die je encoder al publiceert.
- De browserpagina wordt een passieve kijker: de analyse loopt ook als er geen browser openstaat.
$ cardstream-web \ --source rtsp://studio/stream1
Stel het af op de show die je draait
De standaardinstellingen zijn eerlijk, maar een break is geen willekeurig camerabeeld: meestal weet je wat je gaat openen voordat je het opent.
Vertel het wat je gaat breaken
Vul je het spel of de set vooraf in, dan wordt de zoekruimte kleiner: snellere aanroepen, betere matches. Eén regel: geef altijd --alphabet mee als je --game meegeeft. Is het spel vooraf ingevuld, dan schakelt het endpoint zijn eigen alfabetdetectie uit en gaat het uit van latin, waardoor een Japanse kaart met zijn Engelse druk zou matchen.
$ cardstream-web --source 1 \ --game "Pokémon" --alphabet japanese --set-code M4
Verander midden in de stream van gedachten
Is het volgende kavel een ander spel, dan hoef je niets opnieuw te starten: categorie, spel, setcode, alfabet en de drempels voor resultaat en scherpte pas je allemaal aan in het instellingenvenster in de browser terwijl de stream loopt. Al het andere (detector, filter, resolutie) wordt één keer bij het opstarten uitgelezen, dus kies dat nu.
Houd het logboek bij, houd de poort dicht
--split-results geeft elke verschijning een eigen rij in plaats van herhalingen samen te voegen: een doorlopende lijst van wat je hebt laten zien, in de volgorde waarin je het liet zien, klaar om achteraf naast je bestellingen te leggen. Laat --host op de standaardwaarde 127.0.0.1 staan: dat proces bevat je sleutel en de lokale UI heeft geen authenticatie, dus ze mag nooit vanaf je LAN bereikbaar zijn.
$ cardstream-web --source 1 --split-results Sla de show op voor de ochtend erna
Voeg --ximilar-stream NEW toe en elke rij van die geschiedenis (de kaart, de prijs, hoe lang hij op stream was en de uitsnede waarop hij is geïdentificeerd) wordt tijdens het streamen opgeslagen in een sessie in je Ximilar-account. Daarna toont het onderdeel Cardstream van de Ximilar-app de hele show: de waarde, de waardevolste kaarten en elke kaart met zijn afbeelding. Daar markeer je ook wat verkocht is en herstel je een verkeerde match. Start de client midden in de show opnieuw op, start hem dan weer met de getoonde sessie-id in plaats van NEW en dezelfde show loopt door. Opslaan in een teamworkspace doe je met --ximilar-workspace.
$ cardstream-web --source 1 --price-stats --ximilar-stream NEW # na een herstart: $ cardstream-web --source 1 --price-stats --ximilar-stream <session-id>
En dan: doe je show. De detectie, het bewegingsfilter en het identiteitsfilter draaien allemaal lokaal op je machine; de identificatie-aanroep gaat één keer uit per kaart die je op tafel legt. Dat zijn er ongeveer honderd in een uur, tegenover de 54.000 frames die dat uur telt. De rekensom staat hier.
De zes dingen die echt misgaan
De virtuele camera staat niet in de lijst
Loop --source 0, 1, 2 een voor een af: de indexen zijn wat het besturingssysteem uitdeelt. Geef je terminal op macOS toegang tot de camera via Systeeminstellingen → Privacy en beveiliging. Krijgt OpenCV hem dan nog niet open, stap dan over op route B.
“ffmpeg not found”
Alleen --listen en --ffmpeg roepen de binary van je systeem aan. Installeer hem (brew install ffmpeg) en start opnieuw; de routes met de virtuele camera, een webcam of gewoon ophalen hebben niets extra’s nodig.
OBS laat me geen tweede stream toevoegen
Dat is een beperking van OBS, niet van cardstream: het heeft maar één Stream-uitvoer. De plug-in obs-multi-rtmp voegt echte extra doelen toe; de opnameroute via Aangepaste Uitvoer (FFmpeg) uit route B werkt met een standaard-OBS.
Kaarten worden gevonden maar nooit gematcht
Bijna altijd ligt het aan de resolutie of aan beweging. Het kaartnummer moet leesbaar zijn in het frame dat je verstuurt: houd OBS op 1080p, houd de kaart even stil als je hem laat zien, en maak pas daarna --result-threshold ruimer (standaard 0.9; hoger laat zwakkere matches door, 1.0 laat alles door).
Dezelfde kaart wordt twee keer geïdentificeerd
Het identiteitsfilter gaf de twee beelden een score onder --similarity-threshold (standaard 0.85) en zag er een nieuwe kaart in. Zet hem iets lager. Leg je een kaart neer en pak je hem weer op, verhoog dan --forget-after: na 2 seconden afwezigheid wordt een kaart bewust als nieuw behandeld.
Er wordt helemaal niets gedetecteerd
Start met --show-detection om de bounding box te tekenen: de detectie draait altijd, ze wordt standaard alleen niet getekend. Geen bounding box betekent dat de kaart te klein is of te snel door het beeld gaat; een bounding box zonder match brengt je bij de rij hierboven.
Kom je er nog niet uit? De README beschrijft elke flag, en het docs-overzicht groepeert ze naar wat je wilt bereiken.