เอกสาร
ทุกอย่างรันบนเครื่องของคุณ: ติดตั้ง หันกล้องเข้าหา แล้วปรับว่าเมื่อไหร่ที่มันได้รับอนุญาตให้เรียกออกไป จัดกลุ่มตามสิ่งที่คุณต้องการทำ
จากไม่มีอะไรเลย สู่การ์ดบนหน้าจอ
คำสั่งเดียวติดตั้งไคลเอนต์ น้ำหนักโมเดล และสคริปต์เรียกใช้ ข้อมูลรับรองเดียวในทั้งระบบคือคีย์ 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 พร้อมรีลีส: แต่ละตัวทำอะไร รันเร็วแค่ไหน และไลเซนส์อะไร
คลังโมเดล →คำตอบสั้นๆ
ราคาเท่าไหร่ อะไรออกจากเครื่อง ระบุการ์ดใบไหนได้ และสองคำสั่งที่ถอนการติดตั้ง
อ่านคำถามที่พบบ่อย →รีลีสและอาร์ทิแฟกต์
wheel, checksum และสคริปต์ติดตั้ง หนึ่งชุดต่อรีลีส รวมถึงการบิลด์ด้วย Docker และจากซอร์ส
หน้าดาวน์โหลด →