লাইভ স্ট্রিমে কার্ড শনাক্ত করার সেরা উপায়। বক্স ব্রেক, প্যাক খোলা আর লাইভ শোয়ের জন্য তৈরি।
cardstream আপনার বক্স ব্রেক, প্যাক খোলা বা লাইভ শো দেখতে থাকে, আর ফ্রেমে ঢোকামাত্র প্রতিটি ট্রেডিং কার্ড শনাক্ত করে: নাম, সেট ও কনফিডেন্স, সরাসরি লাইভে। কার্ড ট্র্যাকিং সিস্টেম দিয়ে নিজের লাইভ শপিং স্ট্রিম বিশ্লেষণ করুন। যে স্ট্রিমাররা নিজের শো সম্পর্কে আরও জানতে চান, তাঁদের জন্য।
Pokémon থেকে Magic: The Gathering পর্যন্ত
প্রতিটি শোয়ের জন্য ক্যাটাগরি বদলে নিন, পুরো ইঞ্জিন সেই অনুযায়ী চলবে: ডিটেকশন, ফিল্টার আর শনাক্তকরণ কল, সবই সঠিক এন্ডপয়েন্টে যাবে। প্রতিটি ম্যাচের সঙ্গে আসে নাম, সেট, সেট কোড, কার্ড নম্বর, সিরিজ ও সাল।
ট্রেডিং কার্ড গেম
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 নিজে টেনে আনতে পারে, আবার --listen দিলে OBS থেকে সরাসরি পুশও নিতে পারে। নিজের বানানো সেটআপের জন্য আছে WebSocket JPEG ফিড।
যেকোনো শনাক্তকরণ ব্যাকএন্ড
শুরুতেই Ximilar collectibles/v2। চাইলে একই ইঞ্জিন কোনো বাণিজ্যিক কার্ড শনাক্তকরণ সিস্টেমের দিকে ঘুরিয়ে দিন, অথবা নিজের ট্রেন করা ও নিজে হোস্ট করা মডেলের দিকে।
নিজের মডেল আনুন
লোকেটরের ওয়েট আমাদের তৈরি: ফাইনটিউন করা একটি RF-DETR সেগমেন্টেশন মডেল, Apache-2.0 লাইসেন্সে, ইনস্টলার নিজেই নামিয়ে নেয়। নিজের এক্সপোর্ট আনতে চাইলে বক্স ডিটেক্টরও (RF-DETR, RT-DETRv2) চলে।
ওপেন সোর্স, সেলফ-হোস্টেড
একটিই Python প্যাকেজ, উদার লাইসেন্সে। পড়ুন, ফর্ক করুন, নিজের হার্ডওয়্যারে চালান। API কী আপনার, ডেটা আপনার, অবকাঠামোও আপনার।
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‑এ দুটি কমান্ড। স্ক্রিপ্টটি চালান, PyPI থেকে একই wheel 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 থেকে টারবল দুটি খুলে নিন # আর ফ্ল্যাগগুলো সেগুলোর দিকে দেখিয়ে দিন: $ 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 থেকে নেওয়া একটি API কী-ই পুরো সিস্টেমের একমাত্র ক্রেডেনশিয়াল। চাইলে একই ধাপ নিজের শনাক্তকরণ সিস্টেমের দিকে ঘুরিয়ে দিন।
$ 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 আজ রাতেই চালু করুন হাতে থাকা হার্ডওয়্যারে।