Den bästa kortidentifieringen för livestreamar. Byggd för breaks, paketöppningar och livesändningar.
cardstream följer ditt break, din paketöppning eller din sändning och identifierar varje samlarkort i samma stund som det kommer i bild: namn, set och konfidens, live. Analysera dina liveshoppingstreamar med ett system för kortspårning. För streamare som vill veta mer.
Från Pokémon till Magic: The Gathering
Byt kategori inför varje sändning så följer hela motorn med: detekteringen, spärrarna och identifieringsanropet pekar alla mot rätt slutpunkt. Varje träff kommer tillbaka med namn, set, setkod, kortnummer, serie och år.
Samlarkortspel
collectibles/v2/tcg_id Löskort från samlarkortspel, både moderna och vintage, direkt från streamen. Slutpunkten läser av motivet, ramen och texten, så kortet identifieras utifrån samma bild som dina tittare ser. Du slipper leta efter setsymbolen och kisa på kortnumret.
- 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
Sportkort sport_id
Rookiekort, parallellkort, inserts och autografkort från alla stora sporter, bland annat baseboll, basket, amerikansk fotboll, fotboll och hockey: exakt rätt kort, rätt set och rätt år.
Graderade kort slab_id
Läser etiketten på höljet till ett graderat kort. Kortet i en slab från PSA, BGS eller CGC identifieras utan att höljet behöver brytas upp.
Serietidningar comics_id
Omslag identifieras på samma sätt som kort: titel, nummer och år, från en enda stilla bildruta.
Koppla in en proprietär igenkänningstjänst, eller din egen
Allt som avgör om ett anrop ska göras sker före själva identifieringen: detekteringen, rörelsespärren och identitetsspärren körs lokalt och är oberoende av leverantör. Själva anropet är ett enda utbytbart steg: Ximilar som standard, en proprietär tjänst för kortidentifiering eller en modell som du har tränat själv och kör på din egen hårdvara.
Gränssnittet är litet: ett utsnitt av kortet går in, en träff kommer ut. Implementera IdentifyTarget så fortsätter varje spärr, strypning och tröskel framför det att fungera precis som förut. Det blir fortfarande ett utsnitt per unikt kort, vem som än svarar.
# din egen igenkänningstjänst, samma motor class HouseIdentifier(IdentifyTarget): def identify(self, crop_bgr): return my_service.match(crop_bgr) # ett utsnitt per unikt kort, i båda fallen $ cardstream-web --detector rfdetr
Ett anrop per kort, inte per bildruta
Poängen är att begränsa streamanalysen till de anrop som faktiskt säger dig något nytt. Alternativet med öppen källkod till slutna SaaS-tjänster för kortigenkänning: ingen plattform i mitten och ingen licens per användare, utan din hårdvara, din API-nyckel och en tillståndsmaskin som bara gör ett anrop när kortet i bild verkligen är nytt.
En naiv pipeline som går bildruta för bildruta i 15 fps gör 54 000 identifieringar i timmen. cardstream gör en per unikt kort du visar: runt hundra under samma timme.
Samma timme, samma video, samma kort: 54 000 anrop mot ungefär 100. Rörelse- och identitetsspärrarna körs lokalt på din egen hårdvara, och ett anrop går bara iväg när ett verkligt nytt kort ligger still i bild.
Ingen SaaS-prenumeration, inget pris per användare, ingen inlåsning. Drifta hela stacken själv, identifieringen inräknad, eller anslut till Ximilars API.
Allt en streamad kortsändning behöver
En bisittare som aldrig missar ett kort: för liveshoppingsäljare på plattformar som Whatnot och Fanatics Live, för box breaks, kortbutikers streamar och katalogisering av samlingar. Överallt där ett kort hamnar framför en kamera.
Igenkänt i samma stund som det kommer i bild
Ingen skanningsknapp. Ingen väntan. Visa bara kortet: namn, set och konfidens går från papp till kortnamn på ungefär en halv sekund, live i streamen.
Ett anrop per kort
En rörelsespärr och en identitetsspärr som bygger på embeddingar körs lokalt på din egen CPU. Håll ett kort stilla: inga upprepade anrop. Byt kort: exakt ett nytt anrop.
Vilken streamkälla som helst
Webbkamera, videofiler, RTSP, RTMP och SRT, som cardstream hämtar själv eller som OBS skickar rakt in med --listen. JPEG-flöden över WebSocket för hemmabyggda riggar.
Valfri backend för identifiering
Ximilar collectibles/v2 som standard. Eller rikta samma motor mot en proprietär igenkänningstjänst för kort, eller mot en som du har tränat och driftar själv.
Ta med dina egna modeller
Lokaliserarens vikter är våra egna: en finjusterad RF-DETR-modell för segmentering, Apache-2.0, som installationsskriptet hämtar. Detektorer som ger avgränsningsrutor (RF-DETR, RT-DETRv2) stöds också, om du hellre tar med en egen export.
Öppen källkod, egen drift
Ett enda Python-paket med tillåtande licens. Läs det, forka det, kör det på din egen hårdvara. Din nyckel, dina data, din infrastruktur.
Smart nog att veta när API:et inte ska anropas
Mellan din stream och API:et står en tillståndsmaskin. Varje bildruta passerar DecisionCore, en enda tillståndsmaskin som körs lokalt, och tre lokala spärrar avgör när det enda API-steget faktiskt är motiverat.
Detektera
lokalt · inget anropHittar kortets fyrhörning och rätar upp den till ett rent utsnitt. Den lokala rörelsespärren stryper detekteringen i tre nivåer: rörelse, stilla kort, tom bild.
Rörelsespärr
lokalt · inget anropEn billig genomsnittlig skillnad mellan bildrutor. Först när scenen har varit stilla i N bildrutor är kortet värt en närmare titt. Rör det sig fortfarande? Vänta.
Identitetsspärr
lokalt · inget anropEn embeddingjämförelse besvarar en enda fråga: är det här samma kort som nyss? Samma kort → det cachade resultatet skickas ut igen.
Identifiera
ximilar · 1 anropBara ett verkligt nytt kort som ligger still utlöser en identifiering hos Ximilar: asynkront, avstudsat och utanför bildloopen. Resultatet skickas tillbaka live.
Streamar du på egen hand?
En person, en kamera och en lång kväll med breaks: du ska inte behöva ett utvecklarteam för att veta vilket kort som är i bild. Anslut den stream du redan kör och låt cardstream analysera den live, oavsett om du säljer på en marknadsplats eller direkt från din egen kanal.
- Whatnot
- Fanatics Live
- eBay Live
- TikTok Shop
- Twitch
- YouTube Live
- din egen sajt
Ingen åtkomst till ditt konto, inga API-nycklar från marknadsplatser, ingen bot i din chatt och ingen koppling till någon av de här plattformarna. cardstream läser din video, inget annat.
Du streamar redan från OBS
Lägg till en utgång till, bredvid den som matar din sändning. Dina köpare ser exakt samma sak som förut: en kopia av samma flöde landar i cardstream, och varje kort som hamnar på bordet identifieras på vägen förbi. Lyssnaren nedan behöver systemets ffmpeg-binär. Du kan också hoppa över den andra utgången helt och låta cardstream läsa den virtuella kameran i OBS som en vanlig webbkamera.
$ cardstream-web --listen \ --source rtmp://0.0.0.0:1935/live # peka den andra utgången i OBS hit
Eller kameran som redan står vid bordet
En kamera ovanför bordet, ett inspelningskort, mobilen som webbkamera: vad du än har riktat mot bordet när du öppnar paket och visar upp kort. Analysen körs på datorn bredvid kameran, och som standard lämnar inget annat än ett utsnitt per kort rummet.
$ cardstream-web --source 0 # webbkamera · webbgränssnitt på localhost
Eller vad som helst med en URL
Kodare, bildmixrar, restreamingtjänster, en studio till på andra sidan stan. cardstream hämtar RTSP, RTMP och SRT, och tar emot JPEG-flöden över WebSocket när riggen är ett hemmabygge.
$ cardstream-web \
--source rtsp://studio/stream1 Overlay i realtid
Namn, set och konfidens visas i samma stund som ett kort ligger still, klara att läsa upp eller lägga in i din scen.
Varje kort, loggat
En löpande historik över allt du har visat: en miniatyr av varje kort och hur länge det var med i streamen. Spara den på ditt Ximilar-konto och gå igenom sändningen morgonen efter: vad som såldes och vad det var värt.
Rimligt för en ensam streamare
Ingen plattformsavgift, ingen licens per användare. En sändning på tre timmar blir en handfull identifieringsanrop, inte ett per bildruta.
Steg för steg: anslut en sändning på Whatnot eller Fanatics Live →
Din sändning, sparad och klar att gå igenom
cardstream körs på din dator och sparar ingenting som standard. Lägg till en flagga så sparas varje kort du visar också i en session på ditt Ximilar-konto, med pris, tid i bild och det utsnitt som kortet identifierades från. Öppna Ximilar-appen efter sändningen och se vad den var värd.
$ cardstream-web --price-stats \ --ximilar-stream NEW # skriver ut sessionens id och sparar medan sändningen pågår
Sändningen i siffror
Visade produkter, betalda API-anrop, marknadsvärde och genomsnittlig tid i bild för varje session, med de mest värdefulla produkterna och de vanligaste seten bredvid.
Varje kort, med bild
Varje rad behåller kort, set, nummer, pris och det utsnitt som kortet identifierades från. Sök i listan efter produkt eller set, och filtrera dina sessioner efter status, plattform och datum.
Gör den till ditt eget underlag
Markera vad som såldes, lägg till en anteckning, rätta en felaktig träff eller dess pris, ta bort en falsk. Ge sessionen ett namn och lägg till egna metadata: ett utropsnummer, kostnader, köpare.
Fortsätt där du slutade
Omstart mitt i sändningen? Ange sessionens id i stället för NEW så fortsätter sändningen i samma session, även om den hade stängts. Med --ximilar-workspace sparas den i en arbetsyta för teamet.
Avstängt som standard: utan --ximilar-stream är identifieringsanropet det enda som lämnar din dator. För att spara krävs tjänsten Cardstream på ditt Ximilar-konto. Bara starten av en session debiteras, och med --no-ximilar-stream-images sparas enbart text.
Från noll till liveidentifiering i 3 steg
Installera
En virtualenv, releasens wheel (verifierad mot kontrollsumman), modellvikterna och båda kommandona i din PATH. Ta skriptet, kör pip install på samma wheel från PyPI (vikterna laddas ner separat) eller klona repot och bygg själv. Docker och Windows finns på nedladdningssidan.
$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh # fler installationssätt → cardstream.ai/download
$ pip install 'cardstream[client,onnx]' # eller: uv tool install 'cardstream[client,onnx]' # wheel-filen innehåller inga vikter: packa upp de två tar-arkiven från cardstream.ai/models # och peka flaggorna mot dem: $ 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
Anslut ett identifieringssystem
Ximilar collectibles/v2 som standard: en nyckel från ximilar.com är den enda inloggningsuppgift hela systemet behöver. Eller rikta samma steg mot din egen igenkänningstjänst.
$ export XIMILAR_API_KEY=your-key
Rikta en kamera mot ett kort
Öppna webbgränssnittet med din webbkamera, eller mata det med din sändning: hämta den via RTSP eller låt OBS skicka RTMP rakt in. Kör du breaks på ett och samma set hela kvällen? Ange det i förväg så slutar slutpunkten att gissa: engelska Pokémonkort ur CRI betyder tre saker färre som kan bli fel. Ange --alphabet varje gång du anger --game, eftersom ett förvalt spel stänger av slutpunktens egen avkänning av skriftsystem. Lägg till --price-stats så får varje träff också marknadspriser i USD: median, prisspann och senaste försäljning, på kortet och i historiken. Lägg till --ximilar-stream NEW för att spara sändningen på ditt Ximilar-konto och gå igenom den efteråt.
$ cardstream-web # → http://127.0.0.1:8001 (håll upp ett kort) # Engelska Pokémonkort, ett set (CRI - Chaos Rising), med marknadspriser i USD: $ cardstream-web --game Pokemon --set-code CRI --alphabet latin --price-stats
Öppen källkod. Egen drift. Din stream, din stack.
Ingen plattform i mitten och ingen licens per användare: anslut Ximilars API eller ditt eget identifieringssystem, så anropar cardstream det en gång per unikt kort i stället för en gång per bildruta. Oavsett om du kör breaks på Whatnot, sänder i Fanatics Live-stil eller streamar från din egen liveshoppinglösning kan du köra cardstream redan i kväll, på den hårdvara du redan har.