cardstream
เกี่ยวกับ

หัวใจคือถามครั้งเดียวต่อการ์ดหนึ่งใบ ไม่ใช่ทุกเฟรม

การรู้จำการ์ดใช้งานได้จริงแล้ว หันโมเดลดีๆ ไปที่การ์ดสะสมสักใบ ชื่อ ชุด และหมายเลขจะกลับมาภายในราวครึ่งวินาที จุดที่มันพังคือตอนเอาไปรันกับวิดีโอ ไม่ใช่พังเชิงเทคนิค แต่พังด้วยปริมาณล้วนๆ

วิดีโอส่วนใหญ่คือการซ้ำ การ์ดใบเดียวที่ถือไว้สี่วินาทีที่สิบห้าเฟรมต่อวินาทีคือรูปการ์ดใบเดิมหกสิบรูป และการถาม endpoint หกสิบครั้งก็ได้คำตอบเดิมหกสิบครั้ง ไปป์ไลน์สตรีมมิงแบบตรงไปตรงมาทุกตัวทำแบบนั้นเป๊ะ นั่นคือเหตุผลที่การวิเคราะห์ไลฟ์ถูกมองว่าเป็นของที่มีแต่แพลตฟอร์มทุนหนาเท่านั้นที่ทำได้

cardstream มีอยู่เพื่อลบการซ้ำนั้นทิ้ง มันคือสเตตแมชชีนเล็กๆ ที่คั่นระหว่างวิดีโอของคุณกับการเรียกรู้จำ สร้างขึ้นเกือบทั้งหมดจากสัญญาณที่มันคำนวณเองได้: ภาพนิ่งแล้วหรือยัง นี่คือการ์ดใบเดิมเมื่อครู่หรือเปล่า มีการ์ดอยู่ในเฟรมจริงไหม การเรียกจะยิงออกไปเมื่อการ์ดใบใหม่จริงๆ นิ่งแล้ว และไม่ยิงในกรณีอื่น ที่เหลือทั้งหมดรันบนฮาร์ดแวร์ที่คุณมีอยู่แล้ว

คิดเลขดู

เรียกครั้งเดียวต่อการ์ดหนึ่งใบ ไม่ใช่ทุกเฟรม

รายการหนึ่งชั่วโมงที่สิบห้าเฟรมต่อวินาที (เพดานอัตราเฟรมที่โปรเจกต์นี้ทดสอบยืนยัน) กับการ์ดที่ต่างกันราวหนึ่งร้อยใบผ่านหน้าเลนส์ วิเคราะห์วิดีโอเดียวกันเป๊ะได้สองแบบ:

ทีละเฟรม 54,000

ครั้งของการเรียกระบุการ์ด หนึ่งครั้งต่อเฟรม ส่วนใหญ่คือการถามซ้ำคำถามที่เพิ่งมีคำตอบไปเมื่อครู่

ด้วย cardstream ~100

ครั้งของการเรียกระบุการ์ด หนึ่งครั้งต่อการ์ดที่ต่างกันแต่ละใบ ไม่ว่าอัตราเฟรมจะเท่าไหร่ หรือจะถือการ์ดแต่ละใบนานแค่ไหน

การเรียกน้อยลงราว 540 เท่า และช่องว่างนี้ไม่ใช่กลเม็ดของตัวเลข แต่คือทั้งดีไซน์ ถือการ์ดนิ่งๆ ตัวนับก็ไม่ขยับ เร่งกล้องให้เร็วขึ้น ตัวนับก็ไม่ขยับ จำนวนการเรียกตามจำนวนการ์ดที่คุณโชว์ ไม่ใช่จำนวนชั่วโมงที่คุณไลฟ์

ผู้ดูแล

ใครทำให้มันทำงานต่อไป

สร้างโดยทีมที่ให้บริการรู้จำจริงๆ

cardstream มาจากทีมเบื้องหลังระบบรู้จำของสะสมของ Ximilar endpoint ระบุการ์ดที่มันเรียกคือตัวเดียวกับที่เรารันในโปรดักชัน ดังนั้นไคลเอนต์และเซอร์วิสจึงถูกดูแลโดยคนกลุ่มเดียวกัน

ทำงานอย่างเปิดเผย

แพ็กเกจทั้งหมดอยู่บน GitHub ทั้งสเตตแมชชีน รูปแบบการติดตั้งใช้งานทั้งสองแบบ และ UI ในเบราว์เซอร์ ไม่มีส่วนใดของตรรกะการตัดสินใจซ่อนอยู่หลังบริการที่คุณตรวจสอบไม่ได้

ทดสอบได้โดยไม่ต้องมีเครือข่าย

ชุดทดสอบทั้งหมดรันแบบออฟไลน์ โดยใช้ตัวปลอมแทนไฟล์โมเดลและการเรียก HTTP ฟอร์กรีโปบนแล็ปท็อปที่ไม่มีคีย์ API ก็ยังบอกได้ว่าคุณทำอะไรพังหรือเปล่า

หลักการ

สิ่งที่โค้ดห้ามลืม

  1. เรียกครั้งเดียวต่อการ์ดหนึ่งใบ ไม่ใช่ทุกเฟรม

    ทุกการตัดสินใจด้านดีไซน์เริ่มจากตรงนี้ ถ้าสัญญาณใดคำนวณในเครื่องได้ มันจะรันก่อนการเรียกครั้งเดียวที่ออกจากเครื่องเสมอ

  2. ตรรกะการตัดสินใจมีสำเนาเดียว

    "เมื่อไหร่ควรเรียก" อยู่ในโมดูลเดียวเท่านั้น ไม่กระจายอยู่ในไดรเวอร์ ทรานสปอร์ต และ UI ที่คนสามคนแก้ได้สามแบบ ไฟล์เดียว อ่านจบในรวดเดียว

  3. ไดรเวอร์ต้องบาง

    การจัดตารางเวลา การเก็บล็อก และ I/O เป็นงานของไดรเวอร์ ส่วนอะไรนับว่าเป็นการ์ดใบใหม่เป็นงานของเอนจิน การเปลี่ยนวิธีที่เฟรมเข้ามาจะไม่แอบเปลี่ยนจังหวะที่การเรียกถูกส่งออกไป

  4. ไม่มีอะไรบล็อกลูปเฟรม

    การถอดรหัส การตรวจจับ HTTP และดิสก์ ล้วนรันนอกลูป การระบุการ์ดที่ช้าทำให้เฟรมหลุดไปหนึ่งเฟรม แต่ไม่มีทางทำให้ไลฟ์ของคุณกลายเป็นดีเลย์ที่พอกพูนขึ้นเรื่อยๆ

  5. ไม่ผูกมัดกับผู้ให้บริการ รวมถึงเราด้วย

    การเรียกระบุการ์ดเป็นขั้นตอนเดียวที่สลับได้ อยู่หลังอินเทอร์เฟซเล็กๆ ทุกเกต ตัวจำกัดความถี่ และแคชยังทำงานต่อได้แม้คุณจะชี้มันไปที่อื่นเลย

  6. โฮสต์เองเป็นค่าเริ่มต้น

    ฮาร์ดแวร์ของคุณ คีย์ของคุณ วิดีโอของคุณ ในโหมดไคลเอนต์ สิ่งเดียวที่ออกจากเครื่องคือภาพตัดหนึ่งภาพต่อการ์ดที่ต่างกันแต่ละใบ เว้นแต่คุณจะเลือกบันทึกรายการลงบัญชี Ximilar ของคุณเอง

บันทึกภาคสนาม

สิ่งที่การ์ดสอนเรา

บางเรื่องขัดกับสัญชาตญาณมากพอที่เราต้องจดไว้ในที่ที่คนถัดไปจะหาเจอ นั่นคือในรีโป ข้างๆ โค้ดที่มันกำกับอยู่

คำใบ้ที่หวังดีอาจทำให้ความแม่นยำลดลง

การบอก endpoint ว่าการ์ดมาจากเกมไหนจะปิดตัวจำแนกระบบตัวเขียนของมันเอง ซึ่งจะถอยกลับไปใช้อักษรละติน การ์ดภาษาญี่ปุ่นจึงไปจับคู่กับเวอร์ชันภาษาอังกฤษแบบเงียบๆ นี่คือผลจากการวัดจริง ไม่ใช่การเดา และเป็นเหตุผลที่การตั้งเกมโดยไม่ตั้งระบบตัวเขียนถูกถือว่าเป็นข้อผิดพลาด

ภาพตัดที่หลวมนิดหน่อยจับคู่ได้ดีกว่า

การตัดชิดขอบการ์ดดูเหมือนจะถูก แต่ผลกลับแย่กว่า ภาพตัดที่ส่งออกไปจึงเว้นขอบไว้โดยตั้งใจ เพราะบริบทนิดหน่อยชนะขอบที่คมกริบ

ฟื้นตัวดีกว่าทำเป็นไม่มีอะไร

เมื่อการเรียกค้างเกินเวลาที่กำหนด ไปป์ไลน์จะปลดล็อกตัวเองแล้วเดินหน้าต่อ แทนที่จะรอผลลัพธ์ที่อาจไม่มีวันมา ข้อจำกัดนี้ถูกจดไว้ในรีโป ไม่ใช่ปิดบังไว้

ซอร์สโค้ดและการมีส่วนร่วม

อ่าน รัน แล้วส่งแพตช์มา

รีโปเป็นสาธารณะ: แพ็กเกจ Python ที่ติดตั้งได้หนึ่งตัว มี extras ที่แยกจากกัน และ UI ในเบราว์เซอร์ น้ำหนักของตัวระบุตำแหน่งและโมเดลเอ็มเบดดิงเป็นของเรา เทรนและเผยแพร่ภายใต้ Apache-2.0 พร้อมกับแต่ละรีลีส ยินดีรับ issue และ pull request โดยเฉพาะรายงานจากรายการจริง ซึ่งเผยสิ่งที่ไม่มีชุดทดสอบใดหาเจอ

ตัวการรู้จำเองคือ endpoint ของ Ximilar และจะเป็นเช่นนั้นตลอดไป เพราะนั่นคือส่วนที่มีฐานข้อมูลการ์ดอยู่เบื้องหลัง ส่วนทุกอย่างรอบๆ นั้นคุณเปลี่ยนได้ตามใจ

โอเพนซอร์ส โฮสต์เอง ไลฟ์ของคุณ สแต็กของคุณ

ไม่มีแพลตฟอร์มคั่นกลาง ไม่มีค่าไลเซนส์ต่อที่นั่ง แค่เชื่อมต่อ Ximilar API หรือระบบระบุการ์ดของคุณเอง แล้ว cardstream จะเรียกใช้ครั้งเดียวต่อการ์ดที่ต่างกันแต่ละใบ ไม่ใช่ทุกเฟรม ไม่ว่าคุณจะเปิดกล่องบน Whatnot ทำรายการสไตล์ Fanatics Live หรือไลฟ์ขายของบนระบบของตัวเอง ก็รัน cardstream ได้คืนนี้เลยด้วยฮาร์ดแวร์ที่มีอยู่แล้ว