cardstream
Open source Didukung oleh Ximilar Versi beta

Identifikasi kartu terbaik untuk live streaming. Dibuat untuk break, buka pack, dan jualan live.

cardstream menonton break, sesi buka pack, atau live-mu dan mengidentifikasi setiap kartu koleksi begitu masuk ke frame: nama, set, dan tingkat keyakinan, saat itu juga. Analisis siaran jualan live-mu dengan sistem pelacak kartu. Untuk streamer yang ingin tahu lebih banyak.

Apa yang dikenali

Dari Pokémon sampai Magic: The Gathering

Ganti kategori untuk tiap live dan seluruh mesinnya ikut menyesuaikan: deteksi, gerbang, dan panggilan identifikasi semuanya mengarah ke endpoint yang tepat. Setiap hasil cocok datang lengkap dengan nama, set, kode set, nomor kartu, seri, dan tahun.

🃏

Game kartu koleksi (TCG)

collectibles/v2/tcg_id
Ximilar Siap

Kartu single TCG modern maupun vintage, langsung dari siaran. Endpoint ini membaca ilustrasi, bingkai, dan teks kartu, jadi kartu dikenali dari gambar yang sama dengan yang dilihat penontonmu. Tidak perlu mencari-cari simbol set atau memicingkan mata membaca nomor kartu.

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

Kartu olahraga sport_id

Rookie, parallel, insert, dan auto dari semua cabang olahraga besar: bisbol, basket, American football, sepak bola, hoki, dan lainnya. Kartu yang tepat, set yang tepat, tahun yang tepat.

Segera hadir
🧊

Slab hasil grading slab_id

Membaca label pada case kartu hasil grading. Kartu di dalam slab PSA, BGS, atau CGC dikenali tanpa perlu membongkar slabnya.

Segera hadir
📚

Komik comics_id

Sampul dikenali dengan cara yang sama seperti kartu: judul, nomor edisi, dan tahun, dari satu frame yang sudah diam.

Segera hadir
Tidak terikat pada satu penyedia

Pasang layanan pengenal komersial, atau buatanmu sendiri

Semua yang menentukan perlu atau tidaknya memanggil terjadi sebelum identifikasi itu sendiri: deteksi, gerbang gerakan, dan gerbang kartu-yang-sama semuanya berjalan lokal dan tidak bergantung pada penyedia mana pun. Panggilannya sendiri hanyalah satu langkah yang bisa ditukar: Ximilar sebagai bawaan, layanan identifikasi kartu komersial, atau model yang kamu latih sendiri dan jalankan di perangkatmu sendiri.

Antarmukanya kecil saja: potongan gambar kartu masuk, hasil cocok keluar. Implementasikan IdentifyTarget, dan setiap gerbang, pembatas, dan ambang batas di depannya tetap bekerja persis seperti sebelumnya. Tetap satu potongan gambar per kartu berbeda, siapa pun yang menjawabnya.

# pengenalmu sendiri, mesin yang sama
class HouseIdentifier(IdentifyTarget):
    def identify(self, crop_bgr):
        return my_service.match(crop_bgr)

# tetap satu potongan gambar per kartu berbeda
$ cardstream-web --detector rfdetr
Kenapa cardstream.ai?

Satu panggilan per kartu, bukan per frame

Intinya: analisis siaran cukup memakai panggilan yang memang memberi tahu sesuatu yang baru. Alternatif open source untuk SaaS pengenalan kartu yang tertutup: tanpa platform di tengah, tanpa lisensi per pengguna. Perangkatmu, kunci API-mu, dan sebuah state machine yang hanya memanggil keluar ketika kartu di frame benar-benar baru.

54.000 → ~100
panggilan API per jam

Pipeline naif yang memproses tiap frame pada 15 fps menembakkan 54.000 identifikasi per jam. cardstream menembakkan satu untuk tiap kartu berbeda yang kamu tunjukkan: sekitar seratus dalam jam yang sama.

540×
lebih sedikit panggilan identifikasi

Jam yang sama, video yang sama, kartu yang sama: 54.000 panggilan berbanding kira-kira 100. Gerbang gerakan dan gerbang identitas berjalan lokal di perangkatmu sendiri. Panggilan baru keluar ketika kartu yang benar-benar baru sudah diam di frame.

$0
biaya platform

Tanpa langganan SaaS, tanpa harga per pengguna, tanpa lock-in. Host sendiri seluruh sistemnya beserta identifikasinya, atau hubungkan ke API Ximilar.

Fitur

Semua yang dibutuhkan sebuah live kartu

Rekan siaran yang tidak pernah melewatkan satu kartu pun: untuk penjual live di platform seperti Whatnot dan Fanatics Live, box break, siaran toko kartu, dan pendataan koleksi. Di mana pun ada kamera dan kartu.

⚡

Dikenali begitu masuk ke frame

Tanpa tombol pindai. Tanpa menunggu. Cukup tunjukkan kartunya: nama, set, dan tingkat keyakinan muncul dalam kira-kira setengah detik, langsung di siaran.

🎯

Satu panggilan per kartu

Gerbang gerakan dan gerbang identitas berbasis embedding berjalan lokal di CPU-mu sendiri. Kartu dipegang diam: nol panggilan ulang. Kartu diganti: tepat satu panggilan baru.

📡

Sumber siaran apa pun

Webcam, file video, RTSP, RTMP, dan SRT, baik ditarik maupun dikirim langsung dari OBS dengan --listen. Feed JPEG lewat WebSocket untuk perangkat rakitan sendiri.

🔌

Backend identifikasi apa pun

Ximilar collectibles/v2 sebagai bawaan. Atau arahkan mesin yang sama ke layanan pengenal kartu komersial, atau ke model yang kamu latih dan jalankan sendiri.

🧠

Bawa modelmu sendiri

Bobot model pencari kartu berasal dari kami: model segmentasi RF-DETR hasil finetune, berlisensi Apache-2.0, diunduh oleh installer. Detektor kotak pembatas (RF-DETR, RT-DETRv2) juga didukung kalau kamu lebih suka membawa hasil ekspormu sendiri.

🔓

Open source, di-host sendiri

Satu paket Python dengan lisensi permisif. Baca, fork, jalankan di perangkatmu sendiri. Kuncimu, datamu, infrastrukturmu.

Cara kerja

Cukup pintar untuk tahu kapan tidak perlu memanggil API

Sebuah state machine berdiri di antara siaranmu dan API. Setiap frame melewati DecisionCore, satu state machine yang berjalan lokal, dan tiga gerbang lokal memutuskan kapan satu-satunya langkah API itu memang diperlukan.

1

Deteksi

lokal · tanpa API

Menemukan segi empat kartu dan meluruskannya menjadi potongan gambar yang bersih. Frekuensinya dibatasi dalam tiga tingkat oleh gerbang gerakan lokal: bergerak, diam dengan kartu, kosong.

2

Gerbang gerakan

lokal · tanpa API

Selisih rata-rata antar-frame yang murah dihitung. Baru setelah adegan diam selama N frame, kartunya layak diperiksa lebih dekat. Masih bergerak? Tunggu.

3

Gerbang identitas

lokal · tanpa API

Perbandingan embedding menjawab satu pertanyaan: apakah ini kartu yang sama dengan sebelumnya? Kartu yang sama → hasil dari cache ditampilkan lagi.

4

Identifikasi

ximilar · 1 panggilan

Hanya kartu yang benar-benar baru dan sudah diam yang memicu identifikasi Ximilar: asinkron, dengan debounce, di luar loop frame. Hasilnya langsung dikirim balik.

Untuk streamer, breaker, dan toko

Kamu streamer perorangan?

Satu orang, satu kamera, satu malam panjang penuh break: kamu seharusnya tidak butuh tim engineer hanya untuk tahu kartu apa yang ada di layar. Hubungkan siaran yang sudah kamu jalankan dan biarkan cardstream menganalisisnya saat itu juga, entah kamu berjualan di marketplace atau langsung dari kanalmu sendiri.

  • Whatnot
  • Fanatics Live
  • eBay Live
  • TikTok Shop
  • Twitch
  • YouTube Live
  • situsmu sendiri

Tanpa akses ke akun, tanpa kunci API marketplace, tanpa bot di chat-mu, dan tanpa afiliasi dengan platform mana pun di atas. cardstream membaca video-mu, tidak lebih.

01

Kamu sudah siaran dari OBS

Tambahkan satu output lagi di samping output yang mengisi live-mu. Pembelimu melihat persis apa yang mereka lihat sebelumnya. Salinan dari feed yang sama masuk ke cardstream, dan setiap kartu yang mendarat di meja dikenali sambil lewat. Listener di bawah ini membutuhkan binary ffmpeg sistem. Atau lewati saja output kedua itu dan biarkan cardstream membaca kamera virtual OBS sebagai webcam biasa.

$ cardstream-web --listen \
      --source rtmp://0.0.0.0:1935/live
# arahkan target kedua OBS ke sini
02

Atau kamera yang sudah ada di meja

Kamera dari atas, capture card, ponsel sebagai webcam: apa pun yang kamu pakai untuk buka pack dan menunjukkan kartu. Analisis berjalan di komputer di sebelah kamera, jadi secara bawaan tidak ada yang keluar dari ruangan selain satu potongan gambar per kartu.

$ cardstream-web --source 0
# webcam · antarmuka browser di localhost
03

Atau apa pun yang punya URL

Encoder, switcher, restreamer, studio kedua di seberang kota. Tarikan RTSP, RTMP, dan SRT, plus feed JPEG lewat WebSocket kalau perangkatmu rakitan sendiri.

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

Overlay live

Nama, set, dan tingkat keyakinan muncul begitu kartu diam: siap dibacakan, atau digabungkan kembali ke adeganmu.

Setiap kartu, tercatat

Riwayat berjalan dari semua yang kamu tunjukkan: thumbnail tiap kartu dan berapa lama kartu itu tampil di siaran. Simpan ke akun Ximilar-mu dan tinjau live-nya esok pagi: apa yang terjual, berapa nilainya.

Pas untuk satu orang

Tanpa biaya platform, tanpa lisensi per pengguna. Live tiga jam hanya segelintir panggilan identifikasi, bukan satu per frame.

Cardstream Cloud

Live-mu, tersimpan dan siap ditinjau

cardstream berjalan di komputermu dan secara bawaan tidak menyimpan apa pun. Tambahkan satu flag, dan setiap kartu yang kamu tunjukkan juga tersimpan ke sebuah sesi di akun Ximilar-mu, lengkap dengan harganya, lamanya tampil di layar, dan potongan gambar yang dipakai untuk mengidentifikasinya. Buka aplikasi Ximilar setelah live selesai dan lihat berapa nilainya.

$ cardstream-web --price-stats \
    --ximilar-stream NEW
# mencetak id sesi, menyimpan selama live berjalan
Sesi tersimpan di aplikasi Ximilar: produk yang ditunjukkan, panggilan API berbayar, nilai pasar, rata-rata waktu tampil di layar, produk paling bernilai, dan set yang paling sering muncul.

Live-mu dalam angka

Produk yang ditunjukkan, panggilan API berbayar, nilai pasar, dan rata-rata waktu tampil di layar untuk setiap sesi, berdampingan dengan produk paling bernilai dan set yang paling sering muncul.

Setiap kartu, dengan gambarnya

Tiap baris menyimpan kartu, set, nomor, harga, dan potongan gambar yang dipakai untuk mengidentifikasinya. Cari di daftar berdasarkan produk atau set, dan saring sesimu berdasarkan status, platform, dan tanggal.

Jadikan catatanmu sendiri

Tandai yang terjual, tambahkan catatan, perbaiki hasil cocok yang keliru atau harganya, hapus yang salah deteksi. Beri nama sesinya dan lampirkan metadatamu sendiri: nomor lot, biaya, pembeli.

Lanjutkan dari titik terakhir

Harus restart di tengah live? Berikan id sesi sebagai pengganti NEW dan live berlanjut di sesi yang sama, bahkan setelah sesinya ditutup. --ximilar-workspace menyimpannya ke workspace tim.

Nonaktif secara bawaan: tanpa --ximilar-stream, panggilan identifikasi adalah satu-satunya hal yang keluar dari komputermu. Penyimpanan memerlukan layanan Cardstream di akun Ximilar-mu. Yang ditagih hanya saat memulai sesi, dan dengan --no-ximilar-stream-images yang disimpan cukup teksnya saja.

Mulai cepat

Dari nol sampai identifikasi live dalam 3 langkah

1

Instal

Sebuah virtualenv, wheel rilis (checksum-nya diverifikasi), bobot model, dan kedua perintah di PATH-mu. Pakai skripnya, instal wheel yang sama dari PyPI dengan pip (bobotnya diunduh terpisah), atau clone reponya dan build sendiri. Docker dan Windows ada di halaman unduh.

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
# cara instalasi lain → cardstream.ai/download
$ pip install 'cardstream[client,onnx]'   # atau: uv tool install 'cardstream[client,onnx]'
# wheel ini tidak berisi bobot: ekstrak dua tarball dari cardstream.ai/models
# lalu arahkan flag-nya ke sana:
$ 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

Hubungkan sistem identifikasi

Ximilar collectibles/v2 sebagai bawaan: kunci dari ximilar.com adalah satu-satunya kredensial yang dibutuhkan seluruh sistem. Atau arahkan langkah yang sama ke pengenalmu sendiri.

$ export XIMILAR_API_KEY=your-key
3

Arahkan kamera ke kartu

Buka antarmuka browser dengan webcam-mu, atau beri ia siaran live-mu: tarik lewat RTSP, atau biarkan OBS mengirim RTMP langsung ke sana. Break satu set semalaman? Isi lebih dulu dan endpoint berhenti menebak: Pokémon berbahasa Inggris dari CRI berarti tiga hal lebih sedikit yang bisa keliru. Setel --alphabet setiap kali kamu menyetel --game, karena mengisi game lebih dulu mematikan deteksi sistem tulisan milik endpoint. Tambahkan --price-stats dan setiap hasil cocok juga membawa harga pasar dalam USD: median, rentang, dan penjualan terakhir, di kartu dan di riwayat. Tambahkan --ximilar-stream NEW untuk menyimpan live-mu ke akun Ximilar dan meninjaunya nanti.

$ cardstream-web
# → http://127.0.0.1:8001 — angkat sebuah kartu

# kartu Pokémon berbahasa Inggris, satu set (CRI - Chaos Rising), dengan harga pasar USD:
$ cardstream-web --game Pokemon --set-code CRI --alphabet latin --price-stats

Open source. Di-host sendiri. Siaranmu, perangkatmu.

Tanpa platform di tengah, tanpa lisensi per pengguna: hubungkan API Ximilar atau sistem identifikasimu sendiri, dan cardstream memanggilnya satu kali per kartu berbeda, bukan satu kali per frame. Entah kamu melakukan break di Whatnot, mengadakan live ala Fanatics Live, atau menyiarkan jualan live dengan caramu sendiri, jalankan cardstream malam ini di perangkat yang sudah kamu punya.