Tujuannya: tanya sekali bagi setiap kad, bukan sekali bagi setiap bingkai
Pengecaman kad sudah pun berfungsi. Halakan model yang baik ke sekeping kad dagangan dan nama, set serta nombornya dikembalikan dalam kira-kira setengah saat. Masalahnya timbul apabila ia dijalankan pada video. Bukan dari segi teknikal, tetapi kerana jumlahnya yang terlalu besar.
Video kebanyakannya ialah pengulangan. Sekeping kad yang ditunjukkan selama empat saat pada lima belas bingkai sesaat bermaksud enam puluh gambar bagi kad yang sama, dan bertanya kepada endpoint pengecaman sebanyak enam puluh kali akan memberi anda jawapan yang sama enam puluh kali. Setiap saluran pemprosesan strim yang naif melakukan perkara itu, dan sebab itulah analisis strim dianggap sesuatu yang hanya mampu dijalankan oleh platform yang mempunyai dana besar.
cardstream wujud untuk menghapuskan pengulangan itu. Ia ialah sebuah mesin keadaan kecil di antara video anda dan panggilan pengecaman, yang dibina hampir sepenuhnya daripada isyarat yang dikiranya sendiri: adakah adegan sudah pegun, adakah ini kad yang sama seperti sebentar tadi, adakah memang ada kad dalam bingkai. Panggilan dibuat apabila kad yang benar-benar baharu sudah pegun, dan tidak pada masa lain. Selebihnya berjalan pada perkakasan yang sudah anda miliki.
Satu panggilan bagi setiap kad, bukan bagi setiap bingkai
Satu jam sesi live pada lima belas bingkai sesaat, iaitu kadar tertinggi yang telah disahkan untuk projek ini, dengan kira-kira seratus kad berbeza diletakkan di hadapan lensa. Dua cara untuk menganalisis video yang sama:
panggilan pengecaman, satu bagi setiap bingkai, kebanyakannya bertanya semula soalan yang baru sahaja dijawab.
panggilan pengecaman, satu bagi setiap kad yang berbeza, tidak kira kadar bingkai anda atau berapa lama anda menunjukkan setiap kad.
Kira-kira 540× kurang panggilan, dan jurang itu bukan helah angka: itulah keseluruhan reka bentuknya. Pegang kad tanpa bergerak dan kiraannya tidak berubah. Jalankan kamera lebih laju dan kiraannya tetap tidak berubah. Jumlah panggilan mengikut kad yang anda tunjukkan, bukan berapa jam anda strim.
Siapa yang memastikan ia terus berjalan
Dibina oleh orang yang menghasilkan sistem pengecaman
cardstream datang daripada pasukan di sebalik pengecaman barang koleksi Ximilar. Endpoint pengecaman yang dipanggilnya ialah endpoint yang kami jalankan dalam pengeluaran, jadi klien dan perkhidmatan itu diselenggara oleh orang yang sama.
Kerjanya dibuat secara terbuka
Pakej penuhnya ada di GitHub: mesin keadaan, kedua-dua bentuk penggunaan dan UI pelayar. Tiada apa-apa tentang logik keputusan yang disembunyikan di sebalik perkhidmatan yang tidak dapat anda periksa.
Diuji tanpa rangkaian
Seluruh suite ujian berjalan di luar talian, dengan tiruan yang menggantikan fail model dan panggilan HTTP. Fork repositori pada komputer riba tanpa kunci API dan anda masih boleh tahu sama ada anda telah merosakkan sesuatu.
Perkara yang tidak boleh dilupakan oleh kod
-
Satu panggilan bagi setiap kad, bukan bagi setiap bingkai
Setiap keputusan reka bentuk bermula di sini. Jika sesuatu isyarat boleh dikira secara setempat, ia dijalankan sebelum satu-satunya panggilan yang keluar dari mesin.
-
Satu salinan logik keputusan
Bila panggilan dibuat ditentukan dalam satu modul sahaja. Tidak berselerak di antara pemacu, lapisan pengangkutan dan UI sehingga tiga orang boleh mengubahnya dengan tiga cara: satu fail, yang boleh dibaca dalam satu duduk.
-
Pemacu kekal nipis
Penjadualan, pengelogan dan I/O ialah tugas pemacu; apa yang dikira sebagai kad baharu ialah tugas enjin. Menukar cara bingkai tiba tidak akan mengubah secara senyap bila panggilan dibuat.
-
Tiada apa yang menyekat gelung bingkai
Penyahkodan, pengesanan, HTTP dan cakera semuanya berjalan di luar gelung. Pengecaman yang perlahan menggugurkan satu bingkai; ia tidak akan menjadikan strim anda semakin ketinggalan.
-
Tiada keterikatan pada pembekal, termasuk kami
Panggilan pengecaman ialah satu langkah yang boleh ditukar ganti di sebalik satu antara muka kecil. Setiap penapis, pendikit dan cache terus berfungsi jika anda menghalakannya ke tempat lain sepenuhnya.
-
Dihoskan sendiri secara lalai
Perkakasan anda, kunci anda, video anda. Dalam mod sisi klien, satu keratan bagi setiap kad yang berbeza ialah satu-satunya perkara yang keluar dari mesin, kecuali jika anda memilih untuk menyimpan sesi live ke akaun Ximilar anda sendiri.
Apa yang kad-kad ini ajar kami
Sebahagian daripadanya cukup berlawanan dengan gerak hati sehingga kami menulisnya di tempat orang seterusnya akan menjumpainya: dalam repositori, di sebelah kod yang dihadkannya.
Petunjuk yang membantu boleh menjejaskan ketepatan
Memberitahu endpoint kad itu daripada permainan mana akan mematikan pengelas sistem tulisannya sendiri, yang kemudian kembali kepada latin. Akibatnya kad Jepun dipadankan secara senyap dengan cetakan bahasa Inggerisnya. Ini diukur, bukan diteka, dan sebab itulah menetapkan permainan tanpa sistem tulisan dianggap satu kesilapan.
Keratan yang sedikit longgar memberi padanan yang lebih baik
Potongan yang ketat di sekeliling kad nampak betul tetapi prestasinya lebih teruk. Keratan yang dihantar sengaja diberi sedikit ruang tepi, kerana sedikit konteks lebih baik daripada tepi yang bersih.
Pulih lebih baik daripada berpura-pura
Apabila panggilan tergantung melebihi had masanya, saluran pemprosesan melepaskan dirinya sendiri dan meneruskan kerja daripada menunggu hasil yang mungkin tidak akan tiba. Had ini ditulis dalam repositori, bukan disorokkan.
Baca, jalankan, hantar tampalan
Repositori ini terbuka kepada umum: satu pakej Python yang boleh dipasang, dengan tambahan yang bebas antara satu sama lain dan UI pelayar. Pemberat pencari kad dan embedding ialah milik kami, dilatih dan diterbitkan di bawah Apache-2.0 bersama setiap keluaran. Isu dan pull request dialu-alukan, terutamanya laporan daripada sesi live sebenar, yang mendedahkan perkara yang tidak dapat ditunjukkan oleh mana-mana set-up ujian.
Pengecaman itu sendiri ialah endpoint Ximilar dan akan sentiasa begitu; itulah bahagian yang mempunyai pangkalan data kad di belakangnya. Selebihnya bebas untuk anda ubah.
Sumber terbuka. Dihoskan sendiri. Strim anda, sistem anda.
Tiada platform di tengah, tiada lesen bagi setiap pengguna: sambungkan API Ximilar atau sistem pengecaman anda sendiri, dan cardstream memanggilnya sekali bagi setiap kad yang berbeza, bukan sekali bagi setiap bingkai. Sama ada anda buat break di Whatnot, menjalankan sesi live gaya Fanatics Live atau strim jualan live dengan sistem anda sendiri, jalankan cardstream malam ini pada perkakasan yang sudah anda miliki.