cardstream
گائیڈ

اپنی Whatnot یا Fanatics Live اسٹریم کا تجزیہ کریں

cardstream کبھی Whatnot, Fanatics Live یا کسی اور مارکیٹ پلیس میں لاگ ان نہیں ہوتا۔ یہ آپ کی اپنی مشین پر وہی ویڈیو دیکھتا ہے جو پہلے سے انہیں جا رہی ہے، اور میز پر آنے والا ہر کارڈ پہچان لیتا ہے۔ یہ رہا پورا راستہ، صفر سے لائیو اوورلے تک: تقریباً پندرہ منٹ، اور وہ بھی بس ایک بار۔

کیمرے کے قریب ایک کمپیوٹر

macOS, Linux یا Windows۔ اگر اس پر OBS پہلے سے چلتا ہے تو وہی مشین ٹھیک ہے: تجزیہ لوکل ہوتا ہے، اس لیے کسی چیز کو کہیں جانا نہیں پڑتا۔

وہ ویڈیو جو پہلے سے جا رہی ہے

OBS کا سین، ویب کیم، کیپچر کارڈ یا انکوڈر۔ cardstream وہی لیتا ہے جو آپ کے پاس ہے؛ شو نئے سرے سے سجانے کو نہیں کہتا۔

Ximilar API کلید

پورے سسٹم کی واحد کلید، اور وہ آپ کی مشین پر ہی رہتی ہے۔ نہ مارکیٹ پلیس کا اکاؤنٹ، نہ پاس ورڈ، نہ آپ کی چیٹ میں کوئی بوٹ۔

پہلے

پہلے اسے اکیلا چلا کر دیکھیں

اس سے پہلے کہ اس میں سے کچھ بھی آپ کے شو کو چھوئے، اپنے لیپ ٹاپ کے ویب کیم پر تسلی کر لیں کہ یہ چلتا ہے۔ تین کمانڈز۔

01

انسٹال کریں

اسکرپٹ ~/.cardstream میں venv بناتا ہے، ریلیز کے wheel کو اس کے چیک سمز سے جانچتا ہے، ماڈل ویٹس لے آتا ہے اور کمانڈز آپ کے PATH پر رکھ دیتا ہے۔ wheel, Docker اور سورس والے طریقے ڈاؤن لوڈ صفحے پر ہیں۔

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
02

اپنی کلید شامل کریں

پہچان طے شدہ طور پر Ximilar collectibles/v2 کے ذریعے ہوتی ہے، یا اس کی جگہ آپ کے اپنے سسٹم کے ذریعے۔ XIMILAR_API_KEY وہ واحد انوائرمنٹ ویری ایبل ہے جسے کوئی بھی چیز پڑھتی ہے؛ اسے اپنے shell پروفائل میں رکھ دیں تاکہ شو والی رات ری بوٹ کے بعد بھی موجود رہے۔

$ export XIMILAR_API_KEY=your-key
03

لیپ ٹاپ کے کیمرے کو ایک کارڈ دکھائیں

یہ آپ کے لیپ ٹاپ کے اپنے ویب کیم پر براؤزر UI کھولتا ہے۔ کارڈ کو لمحہ بھر ساکن رکھیں: اوورلے پہلے اسٹیٹ مشین کو فیصلہ کرتے دکھاتا ہے، پھر نام، سیٹ اور اعتماد کا اسکور، اور میچ کے ساتھ ہی یہ بھی کہ پہچان کی کال میں کتنا وقت لگا۔ پورا پروڈکٹ بس یہی ہے؛ اس صفحے کا باقی حصہ صرف اس بارے میں ہے کہ پکسلز کہاں سے آتے ہیں۔

$ cardstream-web
# → http://127.0.0.1:8001
پھر

اسے اپنے شو سے جوڑیں

ایک طریقہ چنیں۔ کون سا، اس کا فیصلہ ایک ہی سوال کرتا ہے: آپ کی اسٹریم ڈیسک ٹاپ سے جاتی ہے یا فون سے؟

جو نہیں ہو سکتا

cardstream کو اپنے Whatnot یا Fanatics کے پبلک پلے بیک صفحے کی طرف کرنا۔ آپ کے اپنے شو کا باہر جانے والا کوئی اسٹریم URL ہوتا ہی نہیں، اور پلیئر کو اسکریپ کرنے سے کئی سیکنڈ کی تاخیر آ جاتی، اور پلیٹ فارم کی شرائط کی خلاف ورزی الگ۔ نیچے کا ہر طریقہ آپ کی ویڈیو مارکیٹ پلیس تک پہنچنے سے پہلے لیتا ہے، اور ٹھیک اسی لیے cardstream کو ان سے نہ اکاؤنٹ چاہیے، نہ پاس ورڈ، نہ API کلید۔

A
آپ کی اسٹریم ڈیسک ٹاپ پر OBS سے جاتی ہے

OBS کا ورچوئل کیمرا

یہاں سے شروع کریں

OBS آپ کا تیار سین آپریٹنگ سسٹم کو ایک عام ویب کیم کے طور پر پیش کر سکتا ہے۔ پھر cardstream اسے بالکل کسی بھی دوسرے کیمرے کی طرح کھولتا ہے: نہ دوسری بار انکوڈنگ، نہ آپ کے انکوڈر پر اضافی بوجھ، نہ ffmpeg انسٹال کرنے کی ضرورت۔

  1. OBS کے Controls ڈاک میں Start Virtual Camera پر کلک کریں۔
  2. cardstream کو ویب کیم انڈیکس دے کر اس پر چلائیں۔ انڈیکس 0 عموماً آپ کا بلٹ ان کیمرا ہوتا ہے، اس لیے ورچوئل کیمرا اکثر 1 ہوتا ہے۔ 0، 1، 2 باری باری آزمائیں، یہاں تک کہ اپنا سین نظر آ جائے۔
$ cardstream-web --source 1

یہ شو کے دوران نہیں، شو سے پہلے ایک بار آزما لیں: macOS پر ٹرمینل کو کیمرے کی اجازت درکار ہوتی ہے، اور اگر OpenCV آپ کی مشین پر ورچوئل ڈیوائس نہ کھول سکے تو طریقہ B ہر جگہ چلتا ہے۔

B
آپ کی اسٹریم OBS سے جاتی ہے اور آپ کو بالکل وہی پکسلز چاہییں جو نشر ہوتے ہیں

OBS سے دوسرا آؤٹ پٹ

cardstream آپ کی اپنی مشین پر سنتا ہے اور OBS اسے ایک کاپی بھیجتا ہے۔ Whatnot یا Fanatics کو بالکل وہی ملتا رہتا ہے جو پہلے ملتا تھا: یہ ایک اضافی ٹارگٹ ہے، ری ڈائریکٹ کبھی نہیں۔

  1. پہلے لسنر چلائیں؛ وہ اسٹریم آنے کا انتظار کرتا ہے اور خود ہی دوبارہ جڑ جاتا ہے۔
  2. 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 دبائیں۔
  3. یہ طریقہ سسٹم کی ffmpeg بائنری چلاتا ہے: پہلے brew install ffmpeg چلائیں۔
$ cardstream-web --listen \
    --source rtmp://0.0.0.0:1935/live
C
آپ کی اسٹریم فون سے جاتی ہے، جیسا کہ زیادہ تر بیچنے والوں کی

میز پر اس کا اپنا کیمرا

جب فون سیدھا ایپ کو بھیج رہا ہو تو بیچ میں سے کاپی نکالنے کو کچھ ہوتا ہی نہیں۔ اس لیے باہر جانے والی اسٹریم کے پیچھے بھاگنا چھوڑیں اور cardstream کو اسی میز کا اپنا منظر دیں: اوپر لگا دوسرا ویب کیم، یا کیمرے کا HDMI آؤٹ کیپچر کارڈ میں۔

  1. ویب کیم یا کیپچر کارڈ کا رخ اس جگہ کی طرف کریں جہاں کارڈ دکھائے جاتے ہیں۔
  2. اسے اس کیمرے کے ساتھ والی مشین پر چلائیں۔
$ cardstream-web --source 0

ضروری نہیں کہ یہ وہی زاویہ ہو جو آپ کے خریدار دیکھتے ہیں۔ اوپر سے لیا گیا قریبی اور اچھی روشنی والا شاٹ، مارکیٹ پلیس کی کمپریسڈ فیڈ سے ہمیشہ بہتر پہچانا جاتا ہے۔

D
آپ کے پاس انکوڈر، سوئچر یا IP کیمرا ہے

کوئی بھی چیز جس کا URL ہو

rtsp://، rtmp:// اور srt:// سیدھے کھینچے جاتے ہیں، اور سیٹ اپ اپنا بنایا ہوا ہو تو ws:// JPEG فیڈز بھی۔ دوبارہ جڑنے کے لیے بڑھتے مگر محدود وقفے استعمال ہوتے ہیں، اس لیے باکس بریک کے بیچ ٹوٹا ہوا اسٹوڈیو لنک آپ کے ہاتھ لگائے بغیر واپس آ جاتا ہے۔

  1. اسے وہی URL دیں جو آپ کا انکوڈر پہلے سے نشر کرتا ہے۔
  2. براؤزر والا صفحہ صرف دیکھنے کے لیے رہ جاتا ہے: تجزیہ براؤزر کھولے بغیر بھی چلتا ہے۔
$ cardstream-web \
    --source rtsp://studio/stream1
لائیو جانے سے پہلے

اسے اپنے شو کے مطابق سیٹ کریں

طے شدہ سیٹنگز معقول ہیں، مگر باکس بریک کوئی عام کیمرا فیڈ نہیں: کھولنے سے پہلے ہی عموماً معلوم ہوتا ہے کہ کیا کھلنے والا ہے۔

04

اسے بتائیں کہ باکس بریک کس کا ہے

گیم یا سیٹ کا پری فل تلاش کو محدود کر دیتا ہے: کالز تیز، میچز بہتر۔ ایک اصول: جب بھی --game دیں، --alphabet ضرور دیں، کیونکہ گیم کا پری فل اینڈ پوائنٹ کا رسم الخط خود پہچاننا بند کر دیتا ہے اور پھر وہ latin مان لیتا ہے، یوں جاپانی کارڈ اپنے انگریزی پرنٹ سے میچ ہو جائے گا۔

$ cardstream-web --source 1 \
    --game "Pokémon" --alphabet japanese --set-code M4
05

اسٹریم کے دوران ارادہ بدلیں

جب اگلی لاٹ کسی اور گیم کی ہو تو کچھ بھی دوبارہ نہیں چلانا پڑتا: کیٹیگری، گیم، سیٹ کوڈ، رسم الخط، اور نتیجے اور شارپنس کی حدیں، سب اسٹریم چلتے چلتے براؤزر کے سیٹنگز کے ڈائیلاگ میں بدلی جا سکتی ہیں۔ باقی سب کچھ (ڈیٹیکٹر، فلٹر، ریزولوشن) شروع میں صرف ایک بار پڑھا جاتا ہے، اس لیے وہ ابھی چن لیں۔

06

لاگ رکھیں، پورٹ بند رکھیں

--split-results دہرائے گئے کارڈز کو ملانے کے بجائے ہر بار سامنے آنے پر الگ قطار بناتا ہے: جو کچھ آپ نے دکھایا اس کی چلتی ہوئی فہرست، اسی ترتیب میں، جسے بعد میں آرڈرز سے ملایا جا سکے۔ --host کو اس کی طے شدہ قدر 127.0.0.1 پر ہی رہنے دیں: اس پروسیس کے پاس آپ کی کلید ہوتی ہے اور لوکل UI پر کوئی لاگ ان نہیں، اس لیے اس تک آپ کے LAN سے کبھی رسائی نہیں ہونی چاہیے۔

$ cardstream-web --source 1 --split-results
07

شو اگلی صبح کے لیے محفوظ کریں

--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 میں ہر فلیگ درج ہے، اور دستاویزات میں وہ اس حساب سے رکھے گئے ہیں کہ آپ کو کرنا کیا ہے۔

اوپن سورس۔ سیلف ہوسٹڈ۔ آپ کی اسٹریم، آپ کا اسٹیک۔

بیچ میں کوئی پلیٹ فارم نہیں، فی صارف لائسنس نہیں: Ximilar API یا اپنا پہچان کا سسٹم جوڑیں، اور cardstream اسے ہر فریم پر نہیں، ہر الگ کارڈ پر ایک بار کال کرتا ہے۔ چاہے Whatnot پر باکس بریک ہو، Fanatics Live جیسا شو ہو یا آپ کا اپنا لائیو کامرس سیٹ اپ، cardstream آج رات ہی اسی ہارڈ ویئر پر چلائیں جو آپ کے پاس پہلے سے ہے۔