cardstream
Hakkında

Amaç her kare için değil, her kart için bir kez sormak

Kart tanıma zaten çalışıyor. İyi bir modeli bir koleksiyon kartına çevir; ad, set ve numara yaklaşık yarım saniyede gelir. İşin dağıldığı yer bunu video üzerinde çalıştırmak: teknik açıdan değil, sırf hacim yüzünden.

Video büyük ölçüde tekrardan ibarettir. Saniyede on beş kareyle dört saniye havada tutulan bir kart, tek kartın altmış fotoğrafıdır; bir tanıma uç noktasına altmış kez sormak da sana aynı yanıtı altmış kez verir. Her basit yayın işlem hattı tam olarak bunu yapar; yayın analizinin “bunu ancak yatırım almış bir platform çalıştırabilir” diye ün salması da bundandır.

cardstream bu tekrarı silmek için var. Videonla tanıma çağrısı arasında duran küçük bir durum makinesidir ve neredeyse tamamen kendi hesapladığı sinyallere dayanır: sahne sabitlendi mi, bu az önceki kartla aynı mı, karede kart var mı. Çağrı, gerçekten yeni bir kart sabitlendiğinde yapılır, başka zaman yapılmaz. Geri kalan her şey zaten sahip olduğun donanımda çalışır.

Hesap

Kare başına değil, kart başına tek çağrı

Saniyede on beş kareyle (projenin doğrulandığı hızın üst sınırı) bir saatlik yayın ve merceğin önüne konan yaklaşık yüz farklı kart. Tam olarak aynı videoyu analiz etmenin iki yolu:

Kare kare 54.000

tanıma çağrısı: kare başına bir tane; çoğu, az önce yanıtlanmış bir soruyu yeniden soruyor.

cardstream ile ~100

tanıma çağrısı: farklı kart başına bir tane; kare hızın ne olursa olsun, her kartı ne kadar tutarsan tut.

Yaklaşık 540 kat daha az çağrı; aradaki fark bir rakam oyunu da değil, tasarımın ta kendisi. Kartı sabit tut, sayı değişmez. Kamerayı daha hızlı çalıştır, sayı değişmez. Çağrı sayısı yayın yaptığın saatlere değil, gösterdiğin kartlara bağlıdır.

Bakım

Kim ayakta tutuyor

Tanıma işini üretimde yapanlar geliştirdi

cardstream, Ximilar’ın koleksiyon ürünleri tanıma servisinin arkasındaki ekipten çıkıyor. Çağırdığı tanıma uç noktaları, bizim üretimde çalıştırdıklarımızın aynısı; yani istemciyi de servisi de aynı kişiler sürdürüyor.

İş açıkta yapılıyor

Paketin tamamı GitHub’da: durum makinesi, iki dağıtım biçimi ve tarayıcı arayüzü. Karar mantığının hiçbir parçası inceleyemeyeceğin bir servisin arkasına gizlenmiş değil.

Ağ olmadan test edilir

Bütün test paketi çevrimdışı çalışır; model dosyalarının ve HTTP çağrılarının yerini sahteleri tutar. Depoyu API anahtarı olmayan bir dizüstünde çatalla, bir şeyi bozup bozmadığını yine anlarsın.

İlkeler

Kodun unutmasına izin verilmeyenler

  1. Kare başına değil, kart başına tek çağrı

    Her tasarım kararı buradan başlar. Bir sinyal yerel olarak hesaplanabiliyorsa, makineden çıkan o tek çağrıdan önce çalışır.

  2. Karar mantığının tek kopyası

    Ne zaman çağrı yapılacağı tam olarak tek bir modülde durur. Üç kişinin üç ayrı biçimde değiştirebileceği bir sürücüye, bir aktarım katmanına ve bir arayüze dağılmış değil: tek dosya, bir oturuşta okunur.

  3. Sürücüler ince kalır

    Zamanlama, günlük kaydı ve giriş/çıkış sürücünün işidir; neyin yeni kart sayılacağı ise motorun. Karelerin nasıl geldiğini değiştirmek, çağrının ne zaman gideceğini asla sessizce değiştirmez.

  4. Hiçbir şey kare döngüsünü tıkamaz

    Kod çözme, algılama, HTTP ve disk, hepsi döngünün dışında çalışır. Yavaş bir tanıma bir kare düşürür; yayınını asla giderek büyüyen bir gecikmeye çevirmez.

  5. Sağlayıcıya bağımlılık yok, bize bile

    Tanıma çağrısı, küçük bir arayüzün arkasındaki değiştirilebilir tek bir adımdır. Onu bambaşka bir yere yönlendirsen de bütün filtreler, seyreltmeler ve önbellekler çalışmaya devam eder.

  6. Varsayılan olarak kendi makinende

    Donanım senin, anahtar senin, video senin. İstemci tarafı modda makineden çıkan tek şey, her farklı kart için tek bir kırpmadır; yayını kendi Ximilar hesabına kaydetmeyi seçmediğin sürece.

Saha notları

Kartların bize öğrettikleri

Bunların bir kısmı sezgiye o kadar aykırı ki, bir sonraki kişinin bulacağı yere yazıyoruz: depoya, kısıtladığı kodun hemen yanına.

Yardımcı bir ipucu doğruluğa mal olabilir

Uç noktaya bir kartın hangi oyundan olduğunu söylemek, kendi yazı sistemi sınıflandırıcısını kapatır; o da latin’e düşer. Böylece Japonca bir kart sessizce İngilizce baskısıyla eşleşir. Tahmin değil, ölçüm; yazı sistemi vermeden oyun vermenin hata sayılması da bundan.

Biraz bol kırpma daha iyi eşleşir

Kartın çevresinden sıkı kesilmiş bir görsel doğru görünür ama daha kötü sonuç verir. Giden kırpmada bilerek bir pay bırakılır, çünkü biraz bağlam temiz bir kenardan iyidir.

Toparlanmak, yokmuş gibi davranmaktan iyidir

Bir çağrı zaman aşımını geçip asılı kaldığında işlem hattı, belki hiç gelmeyecek bir sonucu beklemek yerine kendini kurtarır ve devam eder. Bu sınır da üstü örtülmek yerine depoda yazılıdır.

Kaynak kod ve katkılar

Oku, çalıştır, yama gönder

Depo herkese açık: bağımsız ek paketleri ve tarayıcı arayüzü olan, kurulabilir tek bir Python paketi. Konumlayıcı ve embedding ağırlıkları bizim; biz eğittik ve sürümlerle birlikte Apache-2.0 lisansıyla yayımladık. Sorun kayıtları ve pull request’ler memnuniyetle karşılanır; özellikle de gerçek yayınlardan gelen raporlar, çünkü onlar hiçbir test düzeneğinin gösteremediğini ortaya çıkarır.

Tanımanın kendisi Ximilar uç noktasıdır ve hep öyle kalacak; arkasında kart veritabanı olan parça o. Çevresindeki her şeyi dilediğin gibi değiştirebilirsin.

Açık kaynak. Kendi makinende. Yayın da senin, altyapı da.

Arada platform yok, kullanıcı başı lisans yok: Ximilar API’yi ya da kendi tanıma sistemini bağla; cardstream onu her kare için değil, her farklı kart için bir kez çağırsın. İster Whatnot’ta kutu aç, ister Fanatics Live tarzı bir yayın yap, ister kendi canlı ticaret düzeninden yayınla; cardstream’i bu akşam, elindeki donanımda çalıştır.