cardstream
เอกสาร

เอกสาร

ทุกอย่างรันบนเครื่องของคุณ: ติดตั้ง หันกล้องเข้าหา แล้วปรับว่าเมื่อไหร่ที่มันได้รับอนุญาตให้เรียกออกไป จัดกลุ่มตามสิ่งที่คุณต้องการทำ

ติดตั้งและรัน

จากไม่มีอะไรเลย สู่การ์ดบนหน้าจอ

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

สคริปต์ติดตั้ง

สร้าง venv ใน ~/.cardstream ตรวจสอบ wheel ของรีลีสกับ checksum ดาวน์โหลดน้ำหนักโมเดล และวางคำสั่งทั้งสองบน PATH ของคุณ วิธีอื่นๆ ทั้ง wheel, Docker และซอร์ส อยู่ในหน้าดาวน์โหลด

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
วิธีติดตั้งทั้งหมด →

ติดตั้งด้วยตนเอง

เช็กเอาต์แล้ว pip ก็ใช้ได้ extras แยกจากกัน: [client] คือ UI และแหล่งสัญญาณ ส่วน [onnx] หรือ [torch] ให้แบ็กเอนด์ของตัวตรวจจับและตัวสร้างเอ็มเบดดิง

$ git clone https://github.com/Ximilar-com/cardstream && cd cardstream
$ pip install -e '.[client,onnx]'

คีย์ Ximilar ของคุณ

การระบุการ์ดขับเคลื่อนโดย Ximilar collectibles/v2 XIMILAR_API_KEY คือตัวแปรสภาพแวดล้อมตัวเดียวที่ระบบอ่าน ที่เหลือทั้งหมดเป็นแฟล็ก

$ export XIMILAR_API_KEY=your-key

รันครั้งแรก

เปิด UI ในเบราว์เซอร์ด้วยเว็บแคมของคุณ ยกการ์ดขึ้นมา โอเวอร์เลย์จะแสดงสเตตแมชชีนขณะกำลังคิด และแสดงผลลัพธ์เมื่อได้คำตอบ

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

ตรวจสอบสิ่งที่คุณมี

คำสั่งทั้งสองพิมพ์เวอร์ชันแล้วออก ไม่ต้องมีไฟล์โมเดล จึงใช้ได้ทันทีที่ติดตั้งเสร็จ

$ cardstream-web --version
cardstream 0.5.0

แบบไม่มีหน้าจอ สำหรับอุปกรณ์ประจำที่

ไปป์ไลน์เดียวกันแต่ไม่มีเบราว์เซอร์: ผลลัพธ์พิมพ์ออกเทอร์มินัล ใช้แฟล็กเดียวกับ cardstream-web รันโปรเซสเดียวข้างกล้อง

$ cardstream-client --source 0
ใช้งาน

ป้อนรายการของคุณเข้าไป

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

เว็บแคมและไฟล์

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

$ cardstream-web # เว็บแคมของเบราว์เซอร์
$ cardstream-client --source clip.mp4

ดึงสตรีมเข้ามา

ชี้ไปที่กล้อง IP เอนโค้ดเดอร์ หรือตัวรีสตรีม รองรับ rtsp://, rtmp://, srt:// และฟีด JPEG ผ่าน ws:// พร้อมเชื่อมต่อใหม่อัตโนมัติแบบหน่วงเวลาที่มีเพดาน

$ cardstream-web --source rtsp://cam/stream1

ให้ OBS พุชเข้ามา

รันในโหมดรอรับสัญญาณ แล้วเพิ่มเอาต์พุต RTMP หรือ SRT อีกตัวใน OBS ต้องมี ffmpeg ในระบบ (brew install ffmpeg)

$ cardstream-web --source rtmp://0.0.0.0:1935/live --listen

ค่าตั้งล่วงหน้าช่วยจำกัดขอบเขตการค้นหา

เกม รหัสชุด และระบบตัวเขียนถูกตรวจสอบในเครื่องก่อนส่ง ส่ง --alphabet ทุกครั้งที่ส่ง --game เพราะการตั้งเกมล่วงหน้าจะทำให้ endpoint เลิกตรวจจับตัวอักษรด้วยตัวเอง

$ cardstream-web --game "Pokémon" --alphabet japanese --set-code M4

ไดอะล็อกตั้งค่า

หมวดหมู่ เกม รหัสชุด ตัวอักษร และค่าเกณฑ์ ปรับได้จากเบราว์เซอร์กลางไลฟ์ ไม่ต้องรีสตาร์ต และตัวควบคุมใช้การตรวจสอบเดียวกับโปรเซส

ค่าความละเอียดสามตัว

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

$ cardstream-web --camera-width 3840 --width 1280
ย้อนดูรายการ

บันทึกรายการไว้ แล้วกลับมาดูทีหลัง

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

ประวัติ พร้อมภาพย่อ

UI ในเบราว์เซอร์แสดงการ์ดทุกใบที่คุณโชว์ ใบใหม่สุดอยู่บนสุด: ภาพย่อของภาพตัดที่ถูกระบุ ราคาเมื่อใช้ --price-stats และระยะเวลาที่การ์ดอยู่บนสตรีม รายการนั้นอยู่บนเครื่องของคุณ

บันทึกรายการ

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

$ cardstream-web --game "Pokémon" --alphabet latin \
    --price-stats --ximilar-stream NEW
การบันทึกรายการแบบละเอียด →

อะไรถูกอัปโหลดบ้าง

แถวต่างๆ ในรูปข้อความ ได้แก่ การ์ด ชุด ราคา เวลาบนสตรีม และการเรียกแบบเสียเงินที่อยู่เบื้องหลัง พร้อมภาพตัดที่ใช้ระบุแต่ละแถว ขนาดไม่เกิน 1024 px ซึ่งก็คือภาพเดียวกับที่การเรียกระบุการ์ดได้รับไปแล้ว --no-ximilar-stream-images จะจำกัดไว้แค่ข้อความ บัญชี Ximilar ของคุณต้องมีบริการ Cardstream

$ cardstream-web --ximilar-stream NEW --no-ximilar-stream-images

ย้อนดูในแอป Ximilar

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

เปิดแอป Ximilar →

ทำต่อหลังรีสตาร์ต

ส่ง id ของเซสชันแทน NEW แล้วรายการจะดำเนินต่อในเซสชันเดิม แม้เซสชันจะถูกปิดไปแล้วจากการออกตามปกติ มันก็แค่เปิดขึ้นใหม่ มีแค่การเริ่มเซสชันเท่านั้นที่ถูกคิดเงิน การทำต่อจึงไม่มีค่าใช้จ่าย

$ cardstream-web --ximilar-stream <session-id>

เวิร์กสเปซของทีม

เซสชันถูกบันทึกในเวิร์กสเปซเริ่มต้นของคีย์ API ของคุณ ระบุเวิร์กสเปซอื่นได้ด้วย --ximilar-workspace และส่ง id เวิร์กสเปซเดียวกันเมื่อทำต่อเซสชันที่บันทึกไว้ในนั้น

$ cardstream-web --ximilar-stream NEW \
    --ximilar-workspace <workspace-id>
ใช้งานอย่างมั่นใจ

เรียกระบุการ์ดครั้งเดียวต่อการ์ดที่ต่างกันแต่ละใบ

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

ค่าเกณฑ์

ค่าเกณฑ์ผลลัพธ์กันผลที่จับคู่ได้อ่อนไม่ให้ขึ้นโอเวอร์เลย์ ค่าเกณฑ์ความคล้ายตัดสินว่าใบเดิมหรือใบใหม่ ส่วน forget-after ล้างความจำเมื่อการ์ดหายไปนานพอ

$ cardstream-web --result-threshold 0.35

การตั้งค่าที่แนะนำ

เซกเมนเตชัน RF-DETR กับเกตเอ็มเบดดิง ONNX คือค่าเริ่มต้นที่มาพร้อมแพ็กเกจ cardstream-web เปล่าๆ จะรันแบบนี้เป๊ะเมื่อน้ำหนักโมเดลอยู่ครบ เขียนออกมาเต็มๆ ก็คือไปป์ไลน์เดียวกัน

$ cardstream-web \
    --segmentor-model model/segmentation/onnx/model.onnx \
    --embed-model model/similarity/onnx/model.onnx

ให้อยู่บน localhost เท่านั้น

แอปในเครื่องไม่มีการยืนยันตัวตนและถือคีย์ API ของคุณอยู่ --host มีค่าเริ่มต้นเป็น 127.0.0.1 ปล่อยไว้แบบนั้น และอย่าเปิดพอร์ตออกสู่ LAN เด็ดขาด

"Model not found" ตอนเริ่มทำงาน

น้ำหนักโมเดลเป็นการดาวน์โหลดแยก ไม่ได้อยู่ในรีโป สคริปต์ติดตั้งและอิมเมจ Docker ดึงมาให้ ส่วนการเช็กเอาต์เปล่าๆ ต้องวางไฟล์ไว้ใน model/segmentation/ และ model/similarity/ ซึ่ง scripts/build-from-source.sh --models จัดการให้ได้

ระบุเกมที่คุณกำลังโชว์

รายการที่มีเกมเดียวไม่จำเป็นต้องให้ endpoint เดาเกมทุกครั้งที่เรียก บอกชื่อไป แล้วการค้นหาจะแคบลงเหลือเกมนั้น ตอบเร็วขึ้น ผิดเวอร์ชันน้อยลง ส่ง --alphabet ไปด้วย เพราะการตั้งเกมล่วงหน้าทำให้ endpoint เลิกตรวจจับระบบตัวเขียนเอง

$ cardstream-web --game "Pokémon" --alphabet japanese

ffmpeg เมื่อคุณต้องใช้

--listen และ --ffmpeg เรียกใช้ไบนารี ffmpeg ของระบบ การดึงสตรีมธรรมดาใช้ได้กับการติดตั้งผ่าน pip อย่างเดียว แต่การรับพุชจาก OBS ต้องมี ffmpeg

ลงลึกกว่านั้น

เหนือกว่าค่าเริ่มต้น

สลับโมเดลหรืออ่านโค้ดก็ได้ ทั้งไปป์ไลน์คือแพ็กเกจที่ติดตั้งได้แพ็กเกจเดียว

ใช้น้ำหนักโมเดลของคุณเอง

การตรวจจับและเกตระบุตัวตนเลือกแบ็กเอนด์ตามเส้นทาง: ตระกูลโมเดลกำหนดคลาส ส่วนนามสกุลไฟล์กำหนดรันไทม์ RF-DETR หรือ RT-DETRv2, .onnx หรือไดเรกทอรี transformers

แบ็กเอนด์โมเดล →

คลังโมเดล

น้ำหนักโมเดลทุกตัวที่ cardstream โหลดได้ เทรนโดย Ximilar และเผยแพร่ภายใต้ Apache-2.0 พร้อมรีลีส: แต่ละตัวทำอะไร รันเร็วแค่ไหน และไลเซนส์อะไร

คลังโมเดล →

คำตอบสั้นๆ

ราคาเท่าไหร่ อะไรออกจากเครื่อง ระบุการ์ดใบไหนได้ และสองคำสั่งที่ถอนการติดตั้ง

อ่านคำถามที่พบบ่อย →

README และ issues

README ครอบคลุมทุกแฟล็ก ส่วน issues คือที่สำหรับบั๊กและคำถาม

อ่าน README →

รีลีสและอาร์ทิแฟกต์

wheel, checksum และสคริปต์ติดตั้ง หนึ่งชุดต่อรีลีส รวมถึงการบิลด์ด้วย Docker และจากซอร์ส

หน้าดาวน์โหลด →