cardstream
Åpen kildekode Drevet av Ximilar Betaversjon

Den beste kortgjenkjenningen for direktesendinger. Laget for breaks, pakkeåpninger og liveshow.

cardstream følger med på breaket, pakkeåpningen eller showet ditt og identifiserer hvert samlekort i samme øyeblikk det kommer i bildet: navn, sett og konfidens, direkte. Analyser livesalget ditt med et system som holder oversikt over kortene. For strømmere som vil vite mer.

Hva den identifiserer

Fra Pokémon til Magic: The Gathering

Bytt kategori for hvert show, så følger hele motoren med: deteksjon, filtrering og identifiseringskallet peker alle mot riktig endepunkt. Hvert treff kommer tilbake med navn, sett, settkode, kortnummer, serie og år.

🃏

Samlekortspill

collectibles/v2/tcg_id
Ximilar Klar

Moderne og vintage TCG-singles, rett fra strømmen. Endepunktet leser illustrasjonen, rammen og teksten, så kortet identifiseres fra det samme bildet seerne dine ser på. Du slipper å lete etter settsymbolet eller myse etter kortnummeret.

  • 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
🏅

Sportskort sport_id

Rookies, parallels, inserts og autografer fra alle de store idrettene: baseball, basketball, amerikansk fotball, fotball, ishockey og mer. Nøyaktig riktig kort, riktig sett og riktig år.

Kommer snart
🧊

Graderte kort i slab slab_id

Leser etiketten på en gradert slab og identifiserer kortet inni en slab fra PSA, BGS eller CGC uten at du må åpne den.

Kommer snart
📚

Tegneserier comics_id

Forsider identifiseres på samme måte som kort: tittel, nummer og år, fra ett enkelt bilde der bladet ligger i ro.

Kommer snart
Ikke låst til én leverandør

Koble til en proprietær gjenkjenner, eller din egen

Alt som avgjør om det skal sendes et kall, skjer før selve identifiseringen: deteksjonen, bevegelsesfilteret og samme-kort-filteret kjører lokalt og fungerer med hvilken som helst leverandør. Selve kallet er ett utskiftbart trinn: Ximilar rett ut av esken, en proprietær tjeneste for kortidentifisering eller en modell du har trent selv og kjører på egen maskinvare.

Det er ett lite grensesnitt: et utsnitt av kortet går inn, et treff kommer ut. Implementer IdentifyTarget, så fungerer hvert filter, hver struping og hver terskel foran det akkurat som før. Det er fortsatt ett utsnitt per unikt kort, uansett hvem som svarer.

# din egen gjenkjenner, samme motor
class HouseIdentifier(IdentifyTarget):
    def identify(self, crop_bgr):
        return my_service.match(crop_bgr)

# ett utsnitt per unikt kort, uansett
$ cardstream-web --detector rfdetr
Hvorfor cardstream.ai?

Ett kall per kort, ikke per bilde

Poenget er å begrense analysen av strømmen til de kallene som faktisk forteller deg noe nytt. Alternativet med åpen kildekode til lukkede SaaS-tjenester for kortgjenkjenning: ingen plattform i midten og ingen lisens per bruker, bare din maskinvare, din API-nøkkel og en tilstandsmaskin som bare sender et kall når kortet i bildet er virkelig nytt.

54 000 → ~100
API-kall i timen

En naiv pipeline som tar bilde for bilde i 15 fps, sender 54 000 identifiseringer i timen. cardstream sender én per unikt kort du viser: rundt hundre i den samme timen.

540×
færre identifiseringskall

Samme time, samme video, samme kort: 54 000 kall mot omtrent 100. Bevegelses- og identitetsfiltrene kjører lokalt på din egen maskinvare, og et kall går bare ut når et virkelig nytt kort ligger i ro i bildet.

0 kr
i plattformavgift

Ikke noe SaaS-abonnement, ingen pris per bruker, ingen innlåsing. Driv hele løsningen selv, identifiseringen inkludert, eller koble til Ximilars API.

Funksjoner

Alt et strømmet kortshow trenger

En medprogramleder som aldri går glipp av et kort: for livesalg på plattformer som Whatnot og Fanatics Live, box breaks, strømmer fra kortbutikker og katalogisering av samlinger. Overalt der et kamera er rettet mot et kort.

⚡

Gjenkjent i det øyeblikket det kommer i bildet

Ingen skanneknapp. Ingen venting. Bare vis frem kortet: navn, sett og konfidens er klare på omtrent et halvt sekund, direkte på strømmen.

🎯

Ett kall per kort

Et bevegelsesfilter og et identitetsfilter basert på embeddings kjører lokalt på din egen CPU. Hold kortet i ro: null gjentatte kall. Bytt kort: nøyaktig ett nytt kall.

📡

Hvilken som helst videokilde

Webkamera, videofiler, RTSP, RTMP og SRT, hentet inn eller sendt rett fra OBS med --listen. WebSocket-strømmer med JPEG for egne oppsett.

🔌

Hvilken som helst identifiseringstjeneste

Ximilar collectibles/v2 rett ut av esken, eller la den samme motoren bruke en proprietær kortgjenkjenner eller en du har trent og kjører selv.

🧠

Bruk dine egne modeller

Modellvektene til lokaliseringen er våre: en finjustert segmenteringsmodell av typen RF-DETR, under Apache-2.0, som installasjonsprogrammet laster ned. Boksdetektorer (RF-DETR, RT-DETRv2) støttes også hvis du heller vil bruke din egen eksport.

🔓

Åpen kildekode, på egen maskin

Én Python-pakke med en tillatende lisens. Les koden, lag en fork og kjør den på din egen maskinvare. Din nøkkel, dine data, din infrastruktur.

Slik fungerer det

Smart nok til å vite når API-et ikke skal kalles

Mellom strømmen din og API-et står en tilstandsmaskin. Hvert bilde går gjennom DecisionCore, én tilstandsmaskin som kjører lokalt, og tre lokale filtre avgjør når det ene API-trinnet faktisk er nødvendig.

1

Deteksjon

lokalt · uten API-kall

Finn kortets firkant, og rett den opp til et rent utsnitt. Det lokale bevegelsesfilteret struper deteksjonen i tre nivåer: bevegelse, kort i ro, tomt bilde.

2

Bevegelsesfilter

lokalt · uten API-kall

En billig gjennomsnittlig forskjell mellom bilder. Først når scenen har vært i ro i N bilder, er kortet verdt en nærmere titt. Beveger det seg fortsatt? Vent.

3

Identitetsfilter

lokalt · uten API-kall

En sammenligning av embeddings svarer på ett spørsmål: er dette det samme kortet som sist? Samme kort → det lagrede resultatet sendes ut på nytt.

4

Identifisering

ximilar · 1 kall

Bare et kort som er virkelig nytt og ligger i ro, utløser en identifisering hos Ximilar: asynkront, med debounce og utenfor bildeløkken. Resultatet sendes tilbake direkte.

For strømmere, breakere og butikker

Strømmer du på egen hånd?

Én person, ett kamera og en lang kveld med breaks: du skal ikke trenge et helt utviklerteam for å vite hvilket kort som er på skjermen. Koble til strømmen du allerede kjører, og la cardstream analysere den direkte, enten du selger på en markedsplass eller rett fra din egen kanal.

  • Whatnot
  • Fanatics Live
  • eBay Live
  • TikTok Shop
  • Twitch
  • YouTube Live
  • ditt eget nettsted

Ingen tilgang til kontoen din, ingen API-nøkler til markedsplassen, ingen bot i chatten og ingen tilknytning til noen av disse plattformene. cardstream leser videoen din, ingenting annet.

01

Du strømmer allerede fra OBS

Legg til én utgang til ved siden av den som sender showet ditt. Kjøperne ser nøyaktig det samme som før: en kopi av det samme signalet havner i cardstream, og hvert kort som legges på bordet, blir identifisert underveis. Lytteren nedenfor trenger systemets ffmpeg-program. Du kan også droppe den ekstra utgangen helt og la cardstream lese det virtuelle kameraet i OBS som et vanlig webkamera.

$ cardstream-web --listen \
      --source rtmp://0.0.0.0:1935/live
# pek det andre målet i OBS hit
02

Eller kameraet som allerede står ved bordet

Et kamera ovenfra, et opptakskort, mobilen som webkamera: det du åpner pakker og viser frem kort under. Analysen kjører på maskinen ved siden av kameraet, så som standard forlater ingenting annet enn ett utsnitt per kort rommet.

$ cardstream-web --source 0
# webkamera · brukergrensesnitt i nettleseren på localhost
03

Eller alt som har en URL

Kodere, videomiksere, restreaming-tjenester, et annet studio på den andre siden av byen. cardstream henter RTSP, RTMP og SRT, og tar imot WebSocket-strømmer med JPEG når oppsettet er hjemmesnekret.

$ cardstream-web \
      --source rtsp://studio/stream1

Direkte overlegg

Navn, sett og konfidens dukker opp i det øyeblikket kortet ligger i ro: klart til å leses høyt eller legges tilbake inn i scenen din.

Hvert kort blir loggført

En løpende historikk over alt du har vist: et miniatyrbilde av hvert kort og hvor lenge det var på strømmen. Lagre den på Ximilar-kontoen din, og gå gjennom showet morgenen etter: hva som ble solgt, og hva det var verdt.

Tilpasset én person

Ingen plattformavgift, ingen lisens per bruker. Et show på tre timer er en håndfull identifiseringskall, ikke ett per bilde.

Cardstream Cloud

Showet ditt, lagret og klart til gjennomgang

cardstream kjører på maskinen din og lagrer ingenting som standard. Legg til ett flagg, så blir hvert kort du viser, også lagret i en økt på Ximilar-kontoen din, med pris, tid på skjermen og utsnittet det ble identifisert fra. Åpne Ximilar-appen etter showet, og se hva det var verdt.

$ cardstream-web --price-stats \
    --ximilar-stream NEW
# skriver ut økt-ID-en og lagrer mens showet pågår
En lagret økt i Ximilar-appen: viste produkter, betalte API-kall, markedsverdi, gjennomsnittlig tid på skjermen, de mest verdifulle produktene og de hyppigste settene.

Showet i tall

Viste produkter, betalte API-kall, markedsverdi og gjennomsnittlig tid på skjermen for hver økt, med de mest verdifulle produktene og de hyppigste settene ved siden av.

Hvert kort, med bilde

Hver rad tar vare på kortet, settet, nummeret, prisen og utsnittet det ble identifisert fra. Søk i listen etter produkt eller sett, og filtrer øktene dine etter status, plattform og dato.

Gjør det til ditt eget arkiv

Merk det som ble solgt, legg til et notat, rett et feil treff eller prisen, slett et falskt treff. Gi økten et navn, og legg ved dine egne metadata: et varenummer, kostnader, kjøpere.

Fortsett der du slapp

Startet du på nytt midt i showet? Oppgi økt-ID-en i stedet for NEW, så fortsetter showet i den samme økten, selv om den var avsluttet. Med --ximilar-workspace lagres den i et felles arbeidsområde for teamet.

Av som standard: uten --ximilar-stream er identifiseringskallet det eneste som forlater maskinen din. Lagring krever Cards Cloud-tjenesten på Ximilar-kontoen din. Bare oppstart av en økt faktureres, og med --no-ximilar-stream-images lagres bare tekst.

Kom raskt i gang

Fra null til direkte identifisering på 3 trinn

1

Installer den

Et virtuelt miljø, wheel-filen fra utgivelsen (kontrollert mot sjekksummer), modellvektene og begge kommandoene på PATH. Bruk skriptet, installer den samme wheel-filen fra PyPI med pip (modellvektene lastes ned separat), eller klon repoet og bygg selv. Docker og Windows finner du på nedlastingssiden.

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
# andre installasjonsmåter → cardstream.ai/download
$ pip install 'cardstream[client,onnx]'   # eller: uv tool install 'cardstream[client,onnx]'
# wheel-filen har ingen modellvekter: pakk ut de to tarballene fra cardstream.ai/models
# og pek flaggene 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
2

Koble til et identifiseringssystem

Ximilar collectibles/v2 rett ut av esken: en nøkkel fra ximilar.com er den eneste påloggingsinformasjonen hele systemet trenger. Eller la det samme trinnet bruke din egen gjenkjenner.

$ export XIMILAR_API_KEY=your-key
3

Rett et kamera mot et kort

Åpne brukergrensesnittet i nettleseren med webkameraet ditt, eller send inn showet: hent det med RTSP, eller la OBS sende RTMP rett inn. Åpner du ett og samme sett hele kvelden? Fyll det ut på forhånd, så slutter endepunktet å gjette: engelske Pokémon-kort fra CRI gir tre færre ting som kan gå galt. Sett alltid --alphabet når du setter --game, for når spillet er fylt ut på forhånd, slår endepunktet av sin egen gjenkjenning av skriftsystem. Legg til --price-stats, så får hvert treff også markedspriser i USD: median, spenn og siste salg, på kortet og i historikken. Legg til --ximilar-stream NEW for å lagre showet på Ximilar-kontoen din og gå gjennom det etterpå.

$ cardstream-web
# → http://127.0.0.1:8001 — hold opp et kort

# engelske Pokémon-kort, ett sett (CRI - Chaos Rising), med markedspriser i USD:
$ cardstream-web --game Pokemon --set-code CRI --alphabet latin --price-stats

Åpen kildekode. På din egen maskin. Din strøm, ditt oppsett.

Ingen plattform i midten, ingen lisens per bruker: koble til Ximilars API eller ditt eget identifiseringssystem, så kaller cardstream det én gang per unikt kort i stedet for én gang per bilde. Enten du kjører breaks på Whatnot, holder et show i Fanatics Live-stil eller strømmer fra ditt eget oppsett for livesalg, kan du kjøre cardstream allerede i kveld på maskinvaren du har.