लाइव स्ट्रीम में कार्ड पहचानने का सबसे बढ़िया तरीका। बॉक्स ब्रेक, पैक ओपनिंग और लाइव शो के लिए बना।
cardstream आपके बॉक्स ब्रेक, पैक ओपनिंग या शो पर नज़र रखता है और हर ट्रेडिंग कार्ड को फ़्रेम में आते ही पहचान लेता है: नाम, सेट और कॉन्फ़िडेंस, सब लाइव। कार्ड ट्रैकिंग सिस्टम से अपनी लाइव शॉपिंग स्ट्रीम का विश्लेषण करें। उन स्ट्रीमरों के लिए, जो अपने शो के बारे में और जानना चाहते हैं।
Pokémon से Magic: The Gathering तक
हर शो के लिए कैटेगरी बदलें और पूरा इंजन उसी के साथ बदल जाता है: डिटेक्शन, गेट और पहचान की कॉल, सब सही एंडपॉइंट की ओर मुड़ जाते हैं। हर मिलान के साथ नाम, सेट, सेट कोड, कार्ड नंबर, सीरीज़ और साल आते हैं।
ट्रेडिंग कार्ड गेम (TCG)
collectibles/v2/tcg_id नए और विंटेज TCG सिंगल कार्ड, सीधे स्ट्रीम से। एंडपॉइंट कार्ड का आर्ट, बॉर्डर और टेक्स्ट पढ़ता है, इसलिए कार्ड उसी तस्वीर से पहचाना जाता है जो आपके दर्शक देख रहे हैं। न सेट का निशान ढूंढना पड़ता है, न आंखें गड़ाकर कार्ड नंबर पढ़ना।
- Pokémon
- Magic: The Gathering
- Yu-Gi-Oh!
- One Piece
- Lorcana
- Digimon
- Dragon Ball Super
- Flesh and Blood
- Star Wars Unlimited
- Star Wars Destiny
- MetaZoo
- Riftbound
- Weiss Schwarz
- Union Arena
- Force of Will
- Grand Archive
- Vanguard
- Marvel Champions
- Sorcery
- Final Fantasy
- Gundam
- Duel Masters
- Naruto Mythos
- Hololive
- Garbage Pail Kids
स्पोर्ट्स कार्ड sport_id
हर बड़े खेल के रूकी, पैरेलल, इन्सर्ट और ऑटोग्राफ़ कार्ड: बेसबॉल, बास्केटबॉल, अमेरिकन फ़ुटबॉल, फ़ुटबॉल, आइस हॉकी और बाकी खेल। ठीक वही कार्ड, वही सेट, वही साल।
ग्रेडेड स्लैब slab_id
ग्रेडेड केस पर लगा लेबल पढ़ता है: PSA, BGS या CGC स्लैब के भीतर का कार्ड, केस तोड़े बिना पहचाना जाता है।
कॉमिक्स comics_id
कवर भी कार्ड की तरह ही पहचाने जाते हैं: टाइटल, अंक और साल, बस एक स्थिर फ़्रेम से।
कोई प्रोप्राइटरी पहचान सेवा जोड़ें, या अपनी खुद की
कॉल करनी है या नहीं, यह तय करने वाली हर चीज़ पहचान से पहले ही हो जाती है: डिटेक्शन, मोशन गेट और वही-कार्ड गेट, सब लोकल हैं और किसी प्रोवाइडर पर निर्भर नहीं। कॉल अपने-आप में बस एक ऐसा स्टेप है जिसे बदला जा सकता है: पहले से तैयार Ximilar, कोई प्रोप्राइटरी कार्ड पहचान सेवा, या आपका खुद ट्रेन किया हुआ मॉडल जो आपके अपने हार्डवेयर पर चलता हो।
इंटरफ़ेस छोटा-सा है: कार्ड का क्रॉप अंदर जाता है, मिलान बाहर आता है। IdentifyTarget इम्प्लीमेंट करें और उससे पहले लगा हर गेट, थ्रॉटल और थ्रेशोल्ड पहले की तरह ही काम करता रहेगा। जवाब चाहे कोई भी दे, हर अलग कार्ड पर क्रॉप एक ही जाएगा।
# आपकी अपनी पहचान सेवा, वही इंजन class HouseIdentifier(IdentifyTarget): def identify(self, crop_bgr): return my_service.match(crop_bgr) # दोनों सूरतों में हर अलग कार्ड पर एक ही क्रॉप $ cardstream-web --detector rfdetr
हर कार्ड पर एक कॉल, हर फ़्रेम पर नहीं
मकसद यह है कि स्ट्रीम के विश्लेषण में सिर्फ़ वही कॉल जाएं जो सचमुच कुछ नया बताती हैं। बंद कार्ड-पहचान SaaS का ओपन सोर्स विकल्प: बीच में कोई प्लेटफ़ॉर्म नहीं, प्रति-यूज़र लाइसेंस नहीं। हार्डवेयर आपका, API कुंजी आपकी, और एक स्टेट मशीन जो तभी कॉल भेजती है जब फ़्रेम में आया कार्ड सचमुच नया हो।
15 fps पर हर फ़्रेम को भेजने वाली सीधी-सादी पाइपलाइन एक घंटे में 54,000 बार पहचान की कॉल भेजती है। cardstream आपके दिखाए हर अलग कार्ड पर बस एक कॉल भेजता है, यानी उसी घंटे में करीब सौ।
वही घंटा, वही वीडियो, वही कार्ड: 54,000 कॉल के मुकाबले करीब 100। मोशन गेट और आइडेंटिटी गेट आपके अपने हार्डवेयर पर लोकल चलते हैं। कॉल तभी जाती है जब कोई सचमुच नया कार्ड फ़्रेम में स्थिर हो जाए।
न SaaS सब्सक्रिप्शन, न प्रति-यूज़र कीमत, न लॉक-इन। पहचान समेत पूरा स्टैक खुद होस्ट करें, या Ximilar API से जुड़ें।
लाइव कार्ड शो के लिए ज़रूरी हर चीज़
एक ऐसा को-होस्ट जिससे एक भी कार्ड नहीं छूटता: Whatnot और Fanatics Live जैसे प्लेटफ़ॉर्म के लाइव कॉमर्स सेलरों के लिए, बॉक्स ब्रेक के लिए, कार्ड शॉप की स्ट्रीम के लिए और कलेक्शन की कैटलॉगिंग के लिए। जहां भी कैमरे के सामने कार्ड आए।
फ़्रेम में आते ही पहचान
न स्कैन बटन, न इंतज़ार। बस कार्ड दिखाएं: करीब आधे सेकंड में कार्ड का नाम, सेट और कॉन्फ़िडेंस सामने होता है, स्ट्रीम पर लाइव।
हर कार्ड पर एक कॉल
मोशन गेट और एम्बेडिंग पर चलने वाला आइडेंटिटी गेट, दोनों आपके अपने CPU पर लोकल चलते हैं। कार्ड स्थिर पकड़े रखें: दोबारा कोई कॉल नहीं। कार्ड बदलें: ठीक एक नई कॉल।
कोई भी स्ट्रीम सोर्स
वेबकैम, वीडियो फ़ाइलें, RTSP, RTMP और SRT: cardstream खुद पुल करे, या OBS --listen के साथ सीधे पुश करे। अपने बनाए सेटअप के लिए WebSocket JPEG फ़ीड।
कोई भी पहचान बैकएंड
Ximilar collectibles/v2 पहले से तैयार मिलता है। या उसी इंजन को किसी प्रोप्राइटरी कार्ड पहचान सेवा की ओर मोड़ दें, या उस मॉडल की ओर जिसे आपने खुद ट्रेन किया है और खुद होस्ट करते हैं।
अपने मॉडल लाएं
लोकेटर के वेट्स हमारे हैं: फ़ाइनट्यून किया हुआ RF-DETR सेगमेंटेशन मॉडल, Apache-2.0 लाइसेंस, जिसे इंस्टॉलर खुद डाउनलोड कर लेता है। अपना एक्सपोर्ट लाना चाहें तो बॉक्स डिटेक्टर (RF-DETR, RT-DETRv2) भी चलते हैं।
ओपन सोर्स, सेल्फ़-होस्टेड
उदार लाइसेंस वाला एक Python पैकेज। इसे पढ़ें, फ़ोर्क करें, अपने हार्डवेयर पर चलाएं। कुंजी आपकी, डेटा आपका, इंफ़्रास्ट्रक्चर आपका।
इतना समझदार कि जानता है, API को कब कॉल नहीं करना है
आपकी स्ट्रीम और API के बीच एक स्टेट मशीन खड़ी है। हर फ़्रेम DecisionCore से होकर गुज़रता है, जो आपकी मशीन पर चलने वाली अकेली स्टेट मशीन है, और तीन लोकल गेट तय करते हैं कि API वाला इकलौता स्टेप सचमुच कब ज़रूरी है।
डिटेक्शन
लोकल · API कॉल नहींकार्ड के चारों कोने ढूंढता है और उसे सीधा करके साफ़ क्रॉप निकालता है। लोकल मोशन गेट इसकी रफ़्तार तीन स्तरों में बांधता है: हलचल, कार्ड के साथ स्थिर, खाली।
मोशन गेट
लोकल · API कॉल नहींफ़्रेमों के औसत अंतर की सस्ती-सी जांच। सीन N फ़्रेम तक स्थिर रहे, तभी कार्ड पर गौर करना बनता है। अभी भी हिल रहा है? तो इंतज़ार।
आइडेंटिटी गेट
लोकल · API कॉल नहींएम्बेडिंग की तुलना बस एक सवाल का जवाब देती है: क्या यह वही कार्ड है जो पहले था? वही कार्ड हो तो कैश में रखा नतीजा दोबारा भेज दिया जाता है।
पहचान
ximilar · 1 कॉलXimilar की पहचान कॉल सिर्फ़ उस कार्ड पर जाती है जो सचमुच नया हो और स्थिर हो चुका हो: एसिंक, डिबाउंस के साथ और फ़्रेम लूप से बाहर। नतीजा लाइव वापस भेज दिया जाता है।
क्या आप अकेले स्ट्रीम करते हैं?
एक इंसान, एक कैमरा और बॉक्स ब्रेक की एक लंबी रात: स्क्रीन पर कौन-सा कार्ड है, यह जानने के लिए आपको इंजीनियरों की टीम नहीं चाहिए। जो स्ट्रीम आप पहले से चला रहे हैं, उसे जोड़ दें और cardstream को उसका लाइव विश्लेषण करने दें, चाहे आप किसी मार्केटप्लेस पर बेचते हों या सीधे अपने चैनल से।
- Whatnot
- Fanatics Live
- eBay Live
- TikTok Shop
- Twitch
- YouTube Live
- आपकी अपनी साइट
न आपके अकाउंट का एक्सेस, न मार्केटप्लेस की API कुंजियां, न आपकी चैट में कोई बॉट, और इनमें से किसी भी प्लेटफ़ॉर्म से कोई संबंध नहीं। cardstream आपका वीडियो पढ़ता है, और कुछ नहीं।
आप पहले से OBS से स्ट्रीम करते हैं
जो आउटपुट आपके शो को जा रहा है, उसके साथ एक और आउटपुट जोड़ दें। आपके खरीदार ठीक वही देखते हैं जो पहले देखते थे। उसी फ़ीड की एक कॉपी cardstream में पहुंचती है, और टेबल पर आने वाला हर कार्ड गुज़रते-गुज़रते पहचान लिया जाता है। नीचे वाले लिसनर को सिस्टम की ffmpeg बाइनरी चाहिए। या दूसरा आउटपुट छोड़ ही दें और cardstream को OBS का वर्चुअल कैमरा किसी आम वेबकैम की तरह पढ़ने दें।
$ cardstream-web --listen \ --source rtmp://0.0.0.0:1935/live # OBS का दूसरा टारगेट यहां लगाएं
या वह कैमरा जो पहले से टेबल पर लगा है
ओवरहेड कैमरा, कैप्चर कार्ड, वेबकैम बना फ़ोन: जिसके भी नीचे आप पैक खोलते और कार्ड दिखाते हैं। विश्लेषण कैमरे के पास वाली मशीन पर चलता है, इसलिए डिफ़ॉल्ट रूप से हर कार्ड के एक क्रॉप के सिवा कुछ भी कमरे से बाहर नहीं जाता।
$ cardstream-web --source 0 # वेबकैम · localhost पर ब्राउज़र UI
या कुछ भी, जिसका URL हो
एन्कोडर, स्विचर, रीस्ट्रीमर, शहर के दूसरे छोर का दूसरा स्टूडियो। RTSP, RTMP और SRT पुल, और जब सेटअप घर का जुगाड़ हो तो WebSocket JPEG फ़ीड।
$ cardstream-web \
--source rtsp://studio/stream1 लाइव ओवरले
कार्ड के स्थिर होते ही नाम, सेट और कॉन्फ़िडेंस सामने आ जाते हैं: पढ़कर सुनाने के लिए तैयार, या वापस अपने सीन में जोड़ने के लिए।
हर कार्ड का हिसाब
आपने जो भी दिखाया, उसकी चलती हुई हिस्ट्री: हर कार्ड का थंबनेल और वह कितनी देर स्ट्रीम पर रहा। इसे अपने Ximilar अकाउंट में सेव करें और अगली सुबह शो को दोबारा देखें: क्या बिका, उसकी कीमत क्या थी।
अकेले स्ट्रीमर के बस की बात
न प्लेटफ़ॉर्म फ़ीस, न प्रति-यूज़र लाइसेंस। तीन घंटे के शो में पहचान की गिनी-चुनी कॉल जाती हैं, हर फ़्रेम पर एक नहीं।
आपका शो, सेव और बाद में देखने के लिए तैयार
cardstream आपकी मशीन पर चलता है और डिफ़ॉल्ट रूप से कुछ भी नहीं रखता। एक फ़्लैग जोड़ें और आपका दिखाया हर कार्ड आपके Ximilar अकाउंट के एक सेशन में भी सेव हो जाता है: अपनी कीमत, स्क्रीन पर रहने के समय और उस क्रॉप के साथ जिससे वह पहचाना गया। शो के बाद Ximilar ऐप खोलें और देखें कि शो कितने का रहा।
$ cardstream-web --price-stats \ --ximilar-stream NEW # सेशन id दिखाता है और शो चलते-चलते सेव करता जाता है
शो, आंकड़ों में
हर सेशन के लिए दिखाए गए प्रोडक्ट, पेड API कॉल, बाज़ार मूल्य और स्क्रीन पर औसत समय, और साथ में सबसे कीमती प्रोडक्ट और सबसे ज़्यादा बार आए सेट।
हर कार्ड, अपनी तस्वीर के साथ
हर पंक्ति में कार्ड, सेट, नंबर, कीमत और वह क्रॉप रहता है जिससे उसकी पहचान हुई। लिस्ट में प्रोडक्ट या सेट से खोजें, और अपने सेशन स्टेटस, प्लेटफ़ॉर्म और तारीख से फ़िल्टर करें।
इसे अपना रिकॉर्ड बनाएं
जो बिका उस पर निशान लगाएं, नोट जोड़ें, गलत मिलान या उसकी कीमत ठीक करें, झूठा मिलान हटा दें। सेशन को नाम दें और अपना मेटाडेटा जोड़ें: लॉट नंबर, लागत, खरीदार।
जहां छोड़ा था, वहीं से आगे बढ़ें
शो के बीच में रीस्टार्ट करना पड़ा? NEW की जगह सेशन id दें और शो उसी सेशन में चलता रहेगा, भले ही वह बंद हो चुका हो। --ximilar-workspace इसे टीम वर्कस्पेस में सेव करता है।
डिफ़ॉल्ट रूप से बंद: --ximilar-stream के बिना पहचान की कॉल ही अकेली चीज़ है जो आपकी मशीन से बाहर जाती है। सेव करने के लिए आपके Ximilar अकाउंट पर Cardstream सेवा चाहिए। बिल सिर्फ़ सेशन शुरू करने का बनता है, और --no-ximilar-stream-images लगाने पर सिर्फ़ टेक्स्ट सेव होता है।
शून्य से लाइव पहचान तक, 3 स्टेप में
इंस्टॉल करें
एक virtualenv, रिलीज़ का wheel (चेकसम से जांचा हुआ), मॉडल वेट्स और आपके PATH में दोनों कमांड। स्क्रिप्ट लें, वही wheel PyPI से pip install करें (वेट्स अलग से डाउनलोड होते हैं), या रेपो क्लोन करके खुद बिल्ड करें। Docker और Windows के तरीके डाउनलोड पेज पर हैं।
$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh # इंस्टॉल के बाकी तरीके → cardstream.ai/download
$ pip install 'cardstream[client,onnx]' # या: uv tool install 'cardstream[client,onnx]' # wheel में वेट्स नहीं होते: cardstream.ai/models से दोनों tarball खोलें # और फ़्लैग में उनका पाथ दें: $ cardstream-web --segmentor-model segmentation_model/onnx/model.onnx \ --embed-model similarity_model/onnx/model.onnx
$ git clone https://github.com/Ximilar-com/cardstream && cd cardstream $ ./scripts/build-from-source.sh --models $ source .venv/bin/activate
पहचान सिस्टम जोड़ें
Ximilar collectibles/v2 पहले से तैयार मिलता है, और ximilar.com से मिली एक कुंजी ही वह अकेला क्रेडेंशियल है जो पूरे सिस्टम को चाहिए। या इसी स्टेप को अपनी पहचान सेवा की ओर मोड़ दें।
$ export XIMILAR_API_KEY=your-key
कैमरा किसी कार्ड की ओर घुमाएं
अपने वेबकैम पर ब्राउज़र UI खोलें, या इसे अपना शो दें: RTSP पुल, या OBS को RTMP सीधे इसमें पुश करने दें। पूरी रात एक ही सेट के बॉक्स ब्रेक कर रहे हैं? उसे प्रीफ़िल कर दें और एंडपॉइंट अटकल लगाना बंद कर देता है: CRI का अंग्रेज़ी Pokémon यानी गलती की तीन गुंजाइशें कम। जब भी --game सेट करें, --alphabet भी सेट करें: गेम प्रीफ़िल करने पर एंडपॉइंट लिपि खुद पहचानना बंद कर देता है। --price-stats जोड़ें और हर मिलान के साथ USD में बाज़ार भाव भी आते हैं: मीडियन, रेंज और सबसे हाल की बिक्री, कार्ड पर भी और हिस्ट्री में भी। शो को अपने Ximilar अकाउंट में सेव करके बाद में देखने के लिए --ximilar-stream NEW जोड़ें।
$ cardstream-web # → http://127.0.0.1:8001 (कोई कार्ड दिखाएं) # अंग्रेज़ी Pokémon कार्ड, एक सेट (CRI - Chaos Rising), USD बाज़ार भाव के साथ: $ cardstream-web --game Pokemon --set-code CRI --alphabet latin --price-stats
ओपन सोर्स। सेल्फ़-होस्टेड। स्ट्रीम आपकी, स्टैक आपका।
बीच में कोई प्लेटफ़ॉर्म नहीं, प्रति-यूज़र लाइसेंस नहीं: Ximilar API या अपना पहचान सिस्टम जोड़ें, और cardstream उसे हर फ़्रेम पर नहीं, हर अलग कार्ड पर एक बार कॉल करता है। आप Whatnot पर बॉक्स ब्रेक करते हों, Fanatics Live जैसा शो चलाते हों या अपने लाइव कॉमर्स सेटअप से स्ट्रीम करते हों, cardstream को आज रात ही उसी हार्डवेयर पर चलाएं जो आपके पास पहले से है।