cardstream
Panduan

Analisis siaran Whatnot atau Fanatics Live-mu

cardstream tidak pernah login ke Whatnot, Fanatics Live, atau marketplace lain mana pun. Ia menonton video yang sama dengan yang sudah kamu kirim ke sana, di komputermu sendiri, dan menyebut nama setiap kartu yang mendarat di meja. Inilah seluruh jalannya, dari nol sampai overlay live: sekitar lima belas menit, cukup sekali.

Komputer di dekat kamera

macOS, Linux, atau Windows. Kalau OBS sudah berjalan di sana, itulah komputer yang tepat: analisis berlangsung lokal, jadi tidak ada yang perlu dikirim ke mana-mana.

Video yang sudah kamu kirim

Adegan OBS, webcam, capture card, atau encoder. cardstream menyadap apa yang sudah ada dan tidak memintamu menata ulang live-mu.

Kunci API Ximilar

Satu-satunya kredensial di seluruh sistem, dan ia tetap berada di komputermu. Tanpa akun marketplace, tanpa kata sandi, tanpa bot di chat-mu.

Pertama

Jalankan dulu secara terpisah

Sebelum satu pun dari ini menyentuh live-mu, buktikan dulu bahwa ia bekerja dengan webcam laptopmu. Tiga perintah.

01

Instal

Skripnya membuat venv di ~/.cardstream, memverifikasi wheel rilis dengan checksum-nya, mengunduh bobot model, dan menaruh perintah-perintahnya di PATH-mu. Instalasi lewat wheel, Docker, dan kode sumber ada di halaman unduh.

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
02

Tambahkan kuncimu

Identifikasi secara bawaan berjalan lewat Ximilar collectibles/v2, atau lewat sistemmu sendiri sebagai penggantinya. XIMILAR_API_KEY adalah satu-satunya variabel lingkungan yang dibaca. Taruh di profil shell-mu supaya tidak hilang kalau komputer di-reboot pada malam live.

$ export XIMILAR_API_KEY=your-key
03

Angkat sebuah kartu ke depan laptopmu

Perintah ini membuka antarmuka browser dengan webcam bawaan laptopmu. Pegang kartu diam sejenak: overlay memperlihatkan state machine mengambil keputusan, lalu nama, set, dan tingkat keyakinan, dengan lama panggilan identifikasi tertera di samping hasil cocoknya. Itulah seluruh produknya. Sisa halaman ini hanya soal dari mana pikselnya berasal.

$ cardstream-web
# → http://127.0.0.1:8001
Lalu

Arahkan ke live-mu

Pilih satu baris. Yang mana, tergantung satu pertanyaan saja: kamu siaran dari komputer atau dari ponsel?

Yang tidak bisa kamu lakukan

Mengarahkan cardstream ke halaman pemutaran publik Whatnot atau Fanatics-mu. Tidak ada URL siaran keluar untuk live-mu sendiri, dan mengambil video dari pemutarnya akan menambah latensi beberapa detik, belum lagi berbenturan dengan ketentuan platform. Setiap rute di bawah menyadap videomu sebelum sampai ke marketplace, dan justru karena itu cardstream tidak butuh akun, kata sandi, maupun kunci API dari mereka.

A
Kamu siaran dari OBS di komputer

Kamera virtual OBS

Mulai dari sini

OBS bisa menyajikan adegan yang sudah kamu susun ke sistem operasi sebagai webcam biasa. cardstream lalu membukanya persis seperti kamera lain: tanpa encode kedua, tanpa beban tambahan pada encoder-mu, dan tanpa perlu menginstal ffmpeg.

  1. Di OBS, klik Mulai Kamera Virtual di dok Kontrol.
  2. Jalankan cardstream dengan kamera itu sebagai indeks webcam. Indeks 0 biasanya kamera bawaanmu, jadi kamera virtual umumnya 1. Coba 0, 1, 2 sampai adeganmu terlihat.
$ cardstream-web --source 1

Coba ini sekali sebelum live, jangan saat live berlangsung: di macOS terminal memerlukan izin kamera, dan kalau OpenCV tidak bisa membuka perangkat virtual itu di komputermu, rute B bekerja di mana saja.

B
Kamu siaran dari OBS dan ingin piksel yang persis sama dengan siaranmu

Output kedua dari OBS

cardstream mendengarkan di komputermu sendiri dan OBS mengirim salinannya ke sana. Whatnot atau Fanatics tetap menerima persis apa yang mereka terima sebelumnya. Ini target tambahan, bukan pengalihan.

  1. Jalankan listener lebih dulu. Ia menunggu kiriman dan menyambung ulang sendiri.
  2. OBS hanya punya satu output Streaming, jadi kirim salinannya dari output kedua: bisa dengan plugin obs-multi-rtmp, atau lewat Pengaturan → Output → Rekaman → Modifikasi Output (FFmpeg), jenis Output ke URL, URL rtmp://127.0.0.1:1935/live, format kontainer flv. Lalu tekan Mulai Merekam.
  3. Rute ini memanggil binary ffmpeg sistem: jalankan brew install ffmpeg lebih dulu.
$ cardstream-web --listen \
    --source rtmp://0.0.0.0:1935/live
C
Kamu live dari ponsel, seperti kebanyakan penjual

Kamera tersendiri di meja

Ponsel yang mengirim langsung ke aplikasi tidak menyisakan apa pun untuk dicabangkan. Jadi berhentilah mengejar siaran keluarnya dan beri cardstream sudut pandangnya sendiri ke meja yang sama: webcam kedua dari atas, atau keluaran HDMI kamera yang masuk ke capture card.

  1. Arahkan webcam atau capture card ke titik tempat kamu menunjukkan kartu.
  2. Jalankan di komputer di sebelah kamera itu.
$ cardstream-web --source 0

Sudutnya tidak harus sama dengan yang dilihat pembelimu. Gambar dari atas yang rapat dan terang jauh lebih mudah dikenali daripada feed marketplace yang sudah dikompresi.

D
Kamu memakai encoder, switcher, atau kamera IP

Apa pun yang punya URL

rtsp://, rtmp://, dan srt:// ditarik langsung, plus feed JPEG ws:// kalau perangkatmu rakitan sendiri. Sambungan ulang memakai backoff yang dibatasi, jadi koneksi studio yang putus di tengah break kembali sendiri tanpa perlu kamu sentuh.

  1. Berikan URL yang memang sudah dipublikasikan encoder-mu.
  2. Halaman browser menjadi penampil pasif. Analisis tetap berjalan walau tidak ada browser yang terbuka.
$ cardstream-web \
    --source rtsp://studio/stream1
Sebelum mulai live

Sesuaikan dengan live yang kamu jalankan

Pengaturan bawaannya jujur, tetapi break bukanlah feed kamera biasa: kamu biasanya sudah tahu apa yang akan kamu buka sebelum membukanya.

04

Beri tahu apa yang sedang kamu break

Isian awal game atau set mempersempit pencarian: panggilan lebih cepat, hasil cocok lebih baik. Satu aturan: selalu berikan --alphabet ketika kamu memberikan --game, karena isian awal game mematikan deteksi alfabet milik endpoint, yang kemudian mengasumsikan latin, sehingga kartu berbahasa Jepang akan dicocokkan dengan cetakan bahasa Inggrisnya.

$ cardstream-web --source 1 \
    --game "Pokémon" --alphabet japanese --set-code M4
05

Berubah pikiran di tengah siaran

Kalau lot berikutnya dari game lain, kamu tidak perlu me-restart apa pun: kategori, game, kode set, alfabet, serta ambang batas hasil dan ketajaman semuanya bisa diubah di dialog pengaturan browser selagi siaran berjalan. Sisanya, yaitu detektor, gerbang, dan resolusi, dibaca satu kali saat startup, jadi pilih sekarang.

06

Simpan log-nya, tutup rapat port-nya

--split-results memberi setiap kemunculan barisnya sendiri alih-alih menggabungkan yang berulang: daftar berjalan dari apa yang kamu tunjukkan, sesuai urutan kamu menunjukkannya, siap dicocokkan dengan pesanan setelahnya. Biarkan --host di nilai bawaannya, 127.0.0.1: proses itu memegang kuncimu dan antarmuka lokalnya tanpa autentikasi, jadi jangan sampai bisa dijangkau dari LAN-mu.

$ cardstream-web --source 1 --split-results
07

Simpan live-nya untuk esok pagi

Tambahkan --ximilar-stream NEW, dan setiap baris riwayat itu tersimpan ke sebuah sesi di akun Ximilar-mu selagi kamu siaran: kartunya, harganya, lamanya tampil di siaran, dan potongan gambar yang dipakai untuk mengidentifikasinya. Setelah itu bagian Cardstream di aplikasi Ximilar memperlihatkan seluruh live-nya: nilainya, kartu paling bernilai, dan setiap kartu dengan gambarnya. Di sanalah kamu menandai yang terjual dan memperbaiki hasil cocok yang keliru. Kalau klien restart di tengah live, jalankan lagi dengan id sesi yang tadi dicetak sebagai pengganti NEW dan live yang sama berlanjut. Menyimpan ke workspace tim memakai --ximilar-workspace.

$ cardstream-web --source 1 --price-stats --ximilar-stream NEW
# setelah restart:
$ cardstream-web --source 1 --price-stats --ximilar-stream <session-id>

Lalu jalankan live-mu. Deteksi, gerakan, dan gerbang identitas semuanya berjalan lokal di komputermu. Panggilan identifikasi keluar satu kali untuk tiap kartu yang kamu taruh di meja: kira-kira seratus dalam satu jam, berbanding 54.000 frame yang ada dalam jam itu. Hitungannya ada di sini.

Kalau ada yang tidak beres

Enam hal yang memang sering bermasalah

Kamera virtual tidak ada di daftar

Coba --source 0, 1, 2 satu per satu. Indeksnya tergantung pada apa yang dibagikan sistem operasi. Di macOS, beri terminalmu akses kamera di Pengaturan Sistem → Privasi & Keamanan. Kalau OpenCV tetap tidak mau membukanya, pindah ke rute B.

“ffmpeg not found”

Hanya --listen dan --ffmpeg yang memanggil binary sistem. Instal dulu (brew install ffmpeg) lalu jalankan lagi. Rute kamera virtual, webcam, dan tarikan biasa tidak butuh tambahan apa pun.

OBS tidak mengizinkanku menambah siaran kedua

Itu batasan OBS, bukan cardstream: OBS hanya punya satu output Streaming. Plugin obs-multi-rtmp menambahkan target tambahan yang sesungguhnya. Jalur perekaman lewat Modifikasi Output (FFmpeg) di rute B bekerja dengan OBS standar.

Kartu terdeteksi tetapi tidak pernah cocok

Hampir selalu soal resolusi atau gerakan. Nomor kartu harus terbaca di frame yang kamu kirim: pertahankan OBS di 1080p, pegang kartunya diam sejenak saat menunjukkannya, dan baru setelah itu longgarkan --result-threshold (bawaan 0.9; makin tinggi, makin banyak hasil cocok lemah yang dipertahankan, dan 1.0 mempertahankan semuanya).

Kartu yang sama diidentifikasi dua kali

Gerbang identitas menilai kedua tampilan itu di bawah --similarity-threshold (bawaan 0.85) dan menganggapnya kartu baru. Turunkan sedikit. Kalau kamu meletakkan kartu lalu mengambilnya lagi, naikkan --forget-after saja: setelah 2 detik menghilang, kartu memang sengaja diperlakukan sebagai kartu baru.

Tidak ada yang terdeteksi sama sekali

Jalankan dengan --show-detection untuk menggambar kotak pembatasnya: deteksi selalu berjalan, hanya saja secara bawaan tidak digambar. Tidak ada kotak berarti kartunya terlalu kecil atau terlalu cepat di frame. Ada kotak tetapi tidak ada hasil cocok berarti lihat baris di atas.

Masih buntu? README mendokumentasikan setiap flag, dan dokumentasi mengelompokkannya berdasarkan apa yang ingin kamu lakukan.

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.