Intinya: bertanya satu kali per kartu, bukan satu kali per frame
Pengenalan kartu sudah bekerja dengan baik. Arahkan model yang bagus ke sebuah kartu koleksi, dan nama, set, serta nomornya kembali dalam kira-kira setengah detik. Menjalankannya pada video-lah yang membuat semuanya berantakan. Bukan soal teknis, melainkan soal jumlah.
Video sebagian besar adalah pengulangan. Kartu yang diangkat selama empat detik pada lima belas frame per detik berarti enam puluh gambar dari satu kartu, dan bertanya ke endpoint identifikasi enam puluh kali memberimu jawaban yang sama enam puluh kali. Setiap pipeline streaming yang naif melakukan persis itu, dan itulah sebabnya analisis siaran dianggap hanya sanggup dijalankan platform bermodal besar.
cardstream ada untuk membuang pengulangan itu. Ia adalah state machine kecil di antara videomu dan panggilan pengenalan, yang dibangun hampir seluruhnya dari sinyal yang dihitungnya sendiri: apakah adegannya sudah diam, apakah ini kartu yang sama dengan sesaat lalu, apakah memang ada kartu di frame. Panggilan keluar ketika kartu yang benar-benar baru sudah diam, dan selain itu tidak. Sisanya berjalan di perangkat yang sudah kamu miliki.
Satu panggilan per kartu, bukan per frame
Satu jam live pada lima belas frame per detik, yaitu batas atas laju yang dipakai untuk memverifikasi proyek ini, dan kira-kira seratus kartu berbeda yang ditaruh di depan lensa. Dua cara menganalisis video yang persis sama:
panggilan identifikasi: satu per frame, dan sebagian besar mengulang pertanyaan yang sudah dijawab sesaat sebelumnya.
panggilan identifikasi: satu per kartu berbeda, berapa pun frame rate-mu, selama apa pun kamu mengangkat tiap kartu.
Sekitar 540× lebih sedikit panggilan, dan selisih itu bukan permainan angka: itulah seluruh rancangannya. Pegang kartu diam, dan hitungannya tidak bergerak. Jalankan kamera lebih cepat, dan hitungannya tidak bergerak. Jumlah panggilan mengikuti kartu yang kamu tunjukkan, bukan lamanya kamu siaran.
Siapa yang menjaganya tetap berjalan
Dibuat oleh orang-orang yang menggarap pengenalan
cardstream berasal dari tim di balik pengenalan barang koleksi Ximilar. Endpoint identifikasi yang dipanggilnya adalah endpoint yang kami jalankan di produksi, jadi klien dan layanannya dirawat oleh orang yang sama.
Pekerjaannya terbuka
Paket lengkapnya ada di GitHub: state machine-nya, kedua bentuk deployment, dan antarmuka browsernya. Tidak ada bagian logika keputusan yang disembunyikan di balik layanan yang tidak bisa kamu periksa.
Diuji tanpa jaringan
Seluruh rangkaian pengujian berjalan offline, dengan objek tiruan menggantikan file model dan panggilan HTTP. Fork reponya di laptop tanpa kunci API, dan kamu tetap bisa tahu apakah ada yang kamu rusak.
Hal yang tidak boleh dilupakan kodenya
-
Satu panggilan per kartu, bukan per frame
Setiap keputusan desain berawal dari sini. Kalau sebuah sinyal bisa dihitung secara lokal, ia berjalan sebelum satu-satunya panggilan yang keluar dari komputer.
-
Satu salinan logika keputusan
Kapan harus memanggil ditentukan di tepat satu modul. Tidak tersebar di driver, transport, dan UI tempat tiga orang bisa mengubahnya dengan tiga cara. Satu file, yang bisa dibaca habis sekali duduk.
-
Driver tetap tipis
Penjadwalan, logging, dan I/O adalah urusan driver; apa yang terhitung sebagai kartu baru adalah urusan mesin. Mengganti cara frame datang tidak pernah diam-diam mengubah kapan sebuah panggilan keluar.
-
Tidak ada yang memblokir loop frame
Decode, deteksi, HTTP, dan disk semuanya berjalan di luar loop. Identifikasi yang lambat membuang satu frame, dan tidak pernah mengubah siaranmu menjadi lag yang terus menumpuk.
-
Tanpa lock-in penyedia, termasuk kami
Panggilan identifikasi adalah satu langkah yang bisa ditukar di balik antarmuka kecil. Setiap gerbang, pembatas, dan cache tetap bekerja kalau kamu mengarahkannya ke tempat lain sama sekali.
-
Di-host sendiri sebagai bawaan
Perangkatmu, kuncimu, videomu. Dalam mode sisi klien, satu potongan gambar per kartu berbeda adalah satu-satunya hal yang keluar dari komputer, kecuali kamu memilih menyimpan live-mu ke akun Ximilar-mu sendiri.
Hal-hal yang diajarkan kartu kepada kami
Sebagian dari ini cukup berlawanan dengan intuisi, sehingga kami menuliskannya di tempat orang berikutnya akan menemukannya: di repo, di samping kode yang dibatasinya.
Petunjuk yang membantu bisa mengorbankan akurasi
Memberi tahu endpoint dari game mana sebuah kartu berasal mematikan pengklasifikasi sistem tulisan miliknya, yang lalu kembali ke latin. Akibatnya, kartu berbahasa Jepang diam-diam dicocokkan dengan cetakan bahasa Inggrisnya. Ini hasil pengukuran, bukan tebakan, dan karena itulah menyetel game tanpa sistem tulisan diperlakukan sebagai kesalahan.
Potongan gambar yang sedikit longgar lebih mudah cocok
Potongan yang rapat di sekeliling kartu tampak benar, tetapi hasilnya lebih buruk. Potongan gambar yang dikirim sengaja diberi margin, karena sedikit konteks lebih berguna daripada tepi yang bersih.
Pulih lebih baik daripada berpura-pura
Ketika sebuah panggilan menggantung melewati timeout-nya, pipeline melepaskan diri dan melanjutkan, alih-alih menunggu hasil yang mungkin tidak pernah datang. Keterbatasan itu dituliskan di repo, bukan ditutup-tutupi.
Baca, jalankan, kirim patch
Repositorinya publik: satu paket Python yang bisa diinstal, dengan extras yang independen dan antarmuka browser. Bobot pencari kartu dan embedding adalah milik kami, dilatih dan diterbitkan di bawah Apache-2.0 bersama tiap rilis. Issue dan pull request kami sambut, terutama laporan dari live sungguhan, yang memunculkan hal-hal yang tidak akan ditemukan perangkat uji mana pun.
Pengenalannya sendiri adalah endpoint Ximilar dan akan selalu begitu, karena di situlah basis data kartunya berada. Semua yang ada di sekelilingnya bebas kamu ubah.
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.