اپنی 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 وہ واحد انوائرمنٹ ویری ایبل ہے جسے کوئی بھی چیز پڑھتی ہے؛ اسے اپنے shell پروفائل میں رکھ دیں تاکہ شو والی رات ری بوٹ کے بعد بھی موجود رہے۔
$ 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 کا صرف ایک Stream آؤٹ پٹ ہوتا ہے، اس لیے کاپی دوسرے آؤٹ پٹ سے بھیجیں: یا تو
obs-multi-rtmpپلگ ان سے، یا Settings → Output → Recording → Custom Output (FFmpeg) میں جا کر ٹائپ میں Output to URL چنیں، URL میںrtmp://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 کی نہیں: اس کا ایک ہی Stream آؤٹ پٹ ہوتا ہے۔ obs-multi-rtmp پلگ ان اصل اضافی ٹارگٹس شامل کر دیتا ہے؛ اور طریقہ B والا Custom Output (FFmpeg) ریکارڈنگ کا راستہ سادہ OBS کے ساتھ بھی چلتا ہے۔
کارڈز مل جاتے ہیں مگر میچ کبھی نہیں ہوتے
تقریباً ہمیشہ مسئلہ ریزولوشن یا حرکت کا ہوتا ہے۔ بھیجے جانے والے فریم میں کارڈ نمبر پڑھا جانا چاہیے: OBS کو 1080p پر رکھیں، کارڈ دکھاتے وقت اسے لمحہ بھر ساکن رکھیں، اور اس کے بعد ہی --result-threshold ڈھیلا کریں (طے شدہ 0.9؛ زیادہ قدر کمزور میچز بھی رکھتی ہے، 1.0 سب کچھ رکھتی ہے)۔
ایک ہی کارڈ دو بار پہچانا جاتا ہے
شناخت کے فلٹر نے دونوں تصویروں کو --similarity-threshold (طے شدہ 0.85) سے کم اسکور دیا اور اسے نیا کارڈ مان لیا۔ اسے تھوڑا کم کر دیں۔ اگر کارڈ رکھ کر دوبارہ اٹھایا جاتا ہو تو اس کے بجائے --forget-after بڑھائیں: 2 سیکنڈ غائب رہنے کے بعد کارڈ جان بوجھ کر نیا مانا جاتا ہے۔
کچھ بھی ڈیٹیکٹ نہیں ہوتا
باؤنڈنگ باکس دکھانے کے لیے --show-detection کے ساتھ چلائیں: ڈیٹیکشن ہمیشہ چلتی ہے، بس طے شدہ طور پر باکس دکھایا نہیں جاتا۔ باکس نہ ہو تو مطلب کارڈ فریم میں بہت چھوٹا ہے یا بہت تیز؛ باکس ہو مگر میچ نہ ہو تو اوپر والی قطار دیکھیں۔
ابھی بھی مسئلہ حل نہیں ہوا؟ README میں ہر فلیگ درج ہے، اور دستاویزات میں وہ اس حساب سے رکھے گئے ہیں کہ آپ کو کرنا کیا ہے۔