अपनी Whatnot या Fanatics Live स्ट्रीम का विश्लेषण करें
cardstream कभी Whatnot, Fanatics Live या किसी और मार्केटप्लेस में लॉग इन नहीं करता। यह आपकी अपनी मशीन पर वही वीडियो देखता है जो आप उन्हें पहले से भेज रहे हैं, और टेबल पर आने वाले हर कार्ड का नाम बताता है। यह रहा पूरा रास्ता, शून्य से लाइव ओवरले तक: करीब पंद्रह मिनट, और बस एक बार।
कैमरे के पास एक कंप्यूटर
macOS, Linux या Windows। अगर आप उस पर पहले से OBS चलाते हैं, तो वही मशीन सही है: विश्लेषण लोकल होता है, इसलिए कुछ भी कहीं भेजना नहीं पड़ता।
वह वीडियो जो आप पहले से भेजते हैं
OBS का सीन, वेबकैम, कैप्चर कार्ड या एन्कोडर। cardstream उसी से काम लेता है जो आपके पास है; वह आपसे शो नए सिरे से सजाने को नहीं कहता।
एक Ximilar API कुंजी
पूरे सिस्टम का अकेला क्रेडेंशियल, और वह आपकी मशीन पर ही रहता है। न मार्केटप्लेस का अकाउंट, न पासवर्ड, न आपकी चैट में कोई बॉट।
इसे अकेले चलाकर देखें
इससे पहले कि इसमें से कुछ भी आपके शो को छुए, अपने लैपटॉप के वेबकैम पर परख लें कि यह चलता है। तीन कमांड।
इंस्टॉल करें
स्क्रिप्ट ~/.cardstream में एक venv बनाती है, रिलीज़ के wheel को उसके चेकसम से जांचती है, मॉडल वेट्स डाउनलोड करती है और कमांड आपके PATH में डाल देती है। wheel, Docker और सोर्स से इंस्टॉल के तरीके डाउनलोड पेज पर हैं।
$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh अपनी कुंजी जोड़ें
पहचान डिफ़ॉल्ट रूप से Ximilar collectibles/v2 से होती है, या उसकी जगह आपके अपने सिस्टम से। XIMILAR_API_KEY ही अकेला एनवायरनमेंट वेरिएबल है जो कहीं भी पढ़ा जाता है। इसे अपनी शेल प्रोफ़ाइल में डाल दें, ताकि शो वाली रात रीबूट के बाद भी यह बना रहे।
$ export XIMILAR_API_KEY=your-key
अपने लैपटॉप के सामने एक कार्ड दिखाएं
यह आपके लैपटॉप के बिल्ट-इन वेबकैम पर ब्राउज़र UI खोलता है। कार्ड को पल भर स्थिर पकड़ें: ओवरले में पहले स्टेट मशीन फ़ैसला लेती दिखती है, फिर नाम, सेट और कॉन्फ़िडेंस, और मिलान के बगल में पहचान की कॉल में लगा समय। पूरा प्रोडक्ट यही है; इस पेज का बाकी हिस्सा बस इस बारे में है कि पिक्सल कहां से आते हैं।
$ cardstream-web # → http://127.0.0.1:8001
इसे अपने शो से जोड़ें
एक तरीका चुनें। कौन-सा, यह एक ही सवाल पर टिका है: आप डेस्कटॉप से स्ट्रीम करते हैं या फ़ोन से?
जो आप नहीं कर सकते
cardstream को अपने सार्वजनिक Whatnot या Fanatics प्लेबैक पेज पर नहीं लगाया जा सकता। आपके अपने शो का कोई आउटबाउंड स्ट्रीम URL होता ही नहीं, और प्लेयर को स्क्रैप करने पर प्लेटफ़ॉर्म की शर्तें तो टूटतीं ही, ऊपर से कई सेकंड की देरी भी जुड़ती। नीचे का हर तरीका आपका वीडियो मार्केटप्लेस तक पहुंचने से पहले लेता है, और ठीक इसीलिए cardstream को उनसे न अकाउंट चाहिए, न पासवर्ड, न API कुंजी।
OBS का वर्चुअल कैमरा
OBS आपका तैयार सीन ऑपरेटिंग सिस्टम को एक आम वेबकैम की तरह दे सकता है। फिर cardstream उसे ठीक किसी भी दूसरे कैमरे की तरह खोलता है: न दूसरी एन्कोडिंग, न आपके एन्कोडर पर अतिरिक्त बोझ, न ffmpeg इंस्टॉल करने की ज़रूरत।
- OBS में नियंत्रण (Controls) डॉक में आभासी कैमरा चलाएं (Start Virtual Camera) पर क्लिक करें।
- cardstream को इसका वेबकैम इंडेक्स देकर चलाएं। इंडेक्स 0 आम तौर पर आपका बिल्ट-इन कैमरा होता है, इसलिए वर्चुअल कैमरा अक्सर 1 होता है। जब तक आपका सीन न दिखे, 0, 1, 2 आज़माते जाएं।
$ cardstream-web --source 1 इसे शो के दौरान नहीं, शो से पहले एक बार आज़मा लें: macOS पर टर्मिनल को कैमरे की अनुमति चाहिए, और अगर आपकी मशीन पर OpenCV वर्चुअल डिवाइस नहीं खोल पाता, तो तरीका B हर जगह चलता है।
OBS से दूसरा आउटपुट
cardstream आपकी अपनी मशीन पर लिसन करता है और OBS उसे एक कॉपी पुश करता है। Whatnot या Fanatics को ठीक वही मिलता रहता है जो पहले मिलता था: यह एक अतिरिक्त टारगेट है, रीडायरेक्ट कभी नहीं।
- पहले लिसनर शुरू करें; वह पुश का इंतज़ार करता है और खुद दोबारा जुड़ जाता है।
- OBS में स्ट्रीम आउटपुट एक ही होता है, इसलिए कॉपी किसी दूसरे आउटपुट से भेजें: या तो
obs-multi-rtmpप्लगइन से, या सेटिंग्स → आउटपुट → रिकॉर्डिंग → निर्मित आउटपुट (FFmpeg) से (अंग्रेज़ी OBS में Settings → Output → Recording → Custom Output (FFmpeg)), जहां प्रकार आउटपुट URL में डालें (Output to URL), URLrtmp://127.0.0.1:1935/liveऔर कंटेनरflvहो। फिर “रिकॉर्डिंग शुरू करें” (Start Recording) दबाएं। - यह तरीका सिस्टम की ffmpeg बाइनरी चलाता है: पहले
brew install ffmpegकर लें।
$ cardstream-web --listen \ --source rtmp://0.0.0.0:1935/live
टेबल पर इसका अपना कैमरा
जो फ़ोन सीधे ऐप को पुश करता है, उसकी स्ट्रीम से कॉपी निकालने का कोई रास्ता नहीं होता। इसलिए बाहर जाती स्ट्रीम के पीछे भागना छोड़ें और cardstream को उसी टेबल का अपना नज़ारा दें: ऊपर लगा दूसरा वेबकैम, या कैमरे का HDMI आउट किसी कैप्चर कार्ड में।
- वेबकैम या कैप्चर कार्ड को उस जगह की ओर लगाएं जहां आप कार्ड दिखाते हैं।
- इसे उस कैमरे के पास वाली मशीन पर चलाएं।
$ cardstream-web --source 0 यह आपके खरीदारों वाला एंगल हो, ज़रूरी नहीं। पास से लिया गया, अच्छी रोशनी वाला ओवरहेड शॉट, मार्केटप्लेस की कंप्रेस की हुई फ़ीड से हमेशा बेहतर पहचान देता है।
कुछ भी, जिसका URL हो
rtsp://, rtmp:// और srt:// सीधे पुल होते हैं, और जब सेटअप घर का जुगाड़ हो तो ws:// JPEG फ़ीड भी। दोबारा जुड़ने में सीमित बैकऑफ़ चलता है, इसलिए बॉक्स ब्रेक के बीच में टूटा स्टूडियो लिंक आपके हाथ लगाए बिना लौट आता है।
- इसे वही URL दें जो आपका एन्कोडर पहले से पब्लिश करता है।
- ब्राउज़र का पेज सिर्फ़ देखने भर का रह जाता है: विश्लेषण तब भी चलता है जब कोई ब्राउज़र खुला न हो।
$ cardstream-web \ --source rtsp://studio/stream1
इसे अपने शो के हिसाब से ट्यून करें
डिफ़ॉल्ट अपनी जगह ठीक हैं, पर बॉक्स ब्रेक कोई आम कैमरा फ़ीड नहीं है: आम तौर पर आपको खोलने से पहले ही पता होता है कि आप क्या खोल रहे हैं।
इसे बताएं कि आप क्या खोल रहे हैं
गेम या सेट का प्रीफ़िल खोज का दायरा घटाता है: कॉल तेज़, मिलान बेहतर। एक नियम: --game दें तो --alphabet हमेशा साथ दें, क्योंकि गेम प्रीफ़िल करने पर एंडपॉइंट लिपि खुद पहचानना बंद कर देता है और latin मान लेता है, जिससे जापानी कार्ड अपने अंग्रेज़ी प्रिंट से मिला दिया जाएगा।
$ cardstream-web --source 1 \ --game "Pokémon" --alphabet japanese --set-code M4
स्ट्रीम के बीच में इरादा बदलें
जब अगला लॉट किसी दूसरे गेम का हो, तो कुछ भी रीस्टार्ट नहीं करना पड़ता: कैटेगरी, गेम, सेट कोड, लिपि, साथ ही नतीजे और शार्पनेस के थ्रेशोल्ड, सब स्ट्रीम चलते हुए ब्राउज़र के सेटिंग्स डायलॉग में बदले जा सकते हैं। बाकी सब कुछ (डिटेक्टर, गेट, रिज़ॉल्यूशन) शुरू होते समय एक बार पढ़ा जाता है, इसलिए उन्हें अभी चुन लें।
लॉग रखें, पोर्ट बंद रखें
--split-results दोहराव को एक में मिलाने की जगह कार्ड के हर बार आने पर अलग पंक्ति देता है: जो आपने दिखाया उसकी चलती हुई लिस्ट, उसी क्रम में जिसमें दिखाया, बाद में ऑर्डर से मिलाने के लिए तैयार। --host को उसके डिफ़ॉल्ट 127.0.0.1 पर ही रहने दें: उस प्रोसेस के पास आपकी कुंजी है और लोकल UI में कोई ऑथेंटिकेशन नहीं, इसलिए उस तक आपके LAN से कभी पहुंच नहीं होनी चाहिए।
$ cardstream-web --source 1 --split-results शो को अगली सुबह के लिए सेव करें
--ximilar-stream NEW जोड़ें और उस हिस्ट्री की हर पंक्ति (कार्ड, उसकी कीमत, वह कितनी देर स्ट्रीम पर रहा और वह क्रॉप जिससे वह पहचाना गया) स्ट्रीम के दौरान ही आपके Ximilar अकाउंट के एक सेशन में सेव होती जाती है। बाद में Ximilar ऐप का Cardstream सेक्शन पूरा शो दिखाता है (उसका मूल्य, उसके सबसे कीमती कार्ड और हर कार्ड अपनी तस्वीर के साथ), और वहीं आप निशान लगाते हैं कि क्या बिका और गलत मिलान ठीक करते हैं। अगर क्लाइंट शो के बीच में रीस्टार्ट हो जाए, तो उसे NEW की जगह स्क्रीन पर दिखी सेशन id के साथ दोबारा शुरू करें और वही शो चलता रहता है। टीम वर्कस्पेस में सेव करने के लिए --ximilar-workspace है।
$ cardstream-web --source 1 --price-stats --ximilar-stream NEW # रीस्टार्ट के बाद: $ cardstream-web --source 1 --price-stats --ximilar-stream <session-id>
फिर अपना शो चलाएं। डिटेक्शन, मोशन और आइडेंटिटी गेट, सब आपकी मशीन पर लोकल चलते हैं; पहचान की कॉल टेबल पर रखे हर कार्ड पर एक बार जाती है: एक घंटे में करीब सौ, जबकि उस घंटे में 54,000 फ़्रेम होते हैं। पूरा हिसाब यहां है।
वे छह चीज़ें जो सचमुच बिगड़ती हैं
वर्चुअल कैमरा लिस्ट में नहीं है
--source 0, 1, 2 बारी-बारी से आज़माएं: इंडेक्स वही होते हैं जो OS दे देता है। macOS पर सिस्टम सेटिंग्ज़ → गोपनीयता और सुरक्षा (System Settings → Privacy & Security) में अपने टर्मिनल को कैमरे की अनुमति दें। अगर OpenCV फिर भी उसे न खोले, तो तरीका B अपनाएं।
“ffmpeg not found”
सिर्फ़ --listen और --ffmpeg सिस्टम की बाइनरी चलाते हैं। उसे इंस्टॉल करें (brew install ffmpeg) और दोबारा चलाएं; वर्चुअल कैमरा, वेबकैम और सीधे पुल वाले तरीकों को और कुछ नहीं चाहिए।
OBS दूसरी स्ट्रीम जोड़ने नहीं देता
यह OBS की सीमा है, cardstream की नहीं: उसमें स्ट्रीम आउटपुट एक ही होता है। obs-multi-rtmp प्लगइन असली अतिरिक्त टारगेट जोड़ता है; तरीका B का निर्मित आउटपुट (FFmpeg) वाला रिकॉर्डिंग रास्ता बिना किसी प्लगइन के OBS में चलता है।
कार्ड मिल जाते हैं पर उनका मिलान कभी नहीं होता
लगभग हमेशा वजह रिज़ॉल्यूशन या हलचल होती है। जो फ़्रेम आप भेजते हैं उसमें कार्ड नंबर पढ़ा जा सकना चाहिए: OBS को 1080p पर रखें, कार्ड दिखाते समय उसे पल भर स्थिर पकड़ें, और उसके बाद ही --result-threshold ढीला करें (डिफ़ॉल्ट 0.9; ज़्यादा रखने पर कमज़ोर मिलान भी रह जाते हैं, 1.0 पर सब कुछ रहता है)।
एक ही कार्ड दो बार पहचाना जाता है
आइडेंटिटी गेट ने दोनों झलकों को --similarity-threshold (डिफ़ॉल्ट 0.85) से कम स्कोर दिया और उसे नया कार्ड मान लिया। इसे थोड़ा घटाएं। अगर आप कार्ड को रखकर दोबारा उठाते हैं, तो इसकी जगह --forget-after बढ़ाएं: 2 सेकंड गायब रहने के बाद कार्ड जान-बूझकर नया माना जाता है।
कुछ भी डिटेक्ट ही नहीं होता
बॉक्स दिखाने के लिए --show-detection के साथ चलाएं: डिटेक्शन हमेशा चलता है, बस डिफ़ॉल्ट रूप से दिखाया नहीं जाता। बॉक्स न दिखे तो कार्ड फ़्रेम में बहुत छोटा है या बहुत तेज़ चल रहा है; बॉक्स दिखे पर मिलान न हो, तो ऊपर वाला सवाल देखें।
अब भी अटके हैं? README में हर फ़्लैग की जानकारी है, और डॉक्स हब में वे इस हिसाब से बंटे हैं कि आप क्या करना चाहते हैं।