cardstream
ডকস

ডকুমেন্টেশন

সবকিছু আপনার কম্পিউটারেই চলে: ইনস্টল করুন, ক্যামেরা তাক করুন, আর ঠিক করে দিন কখন এটি বাইরে কল করতে পারবে। আপনি কী করতে চাইছেন, সেই অনুযায়ী সাজানো।

ইনস্টল ও চালু করা

শূন্য থেকে স্ক্রিনে একটি কার্ড

একটি কমান্ডেই ক্লায়েন্ট, মডেল ওয়েট আর shim ইনস্টল হয়ে যায়। পুরো সিস্টেমে ক্রেডেনশিয়াল বলতে শুধু আপনার Ximilar API কী।

ইনস্টল স্ক্রিপ্ট

~/.cardstream ফোল্ডারে একটি venv তৈরি করে, রিলিজ wheel তার চেকসামের সঙ্গে মিলিয়ে দেখে, মডেল ওয়েট নামিয়ে আনে আর দুটি কমান্ডই আপনার PATH‑এ বসিয়ে দেয়। অন্য উপায়গুলো (wheel, Docker, সোর্স) ডাউনলোড পেজে আছে।

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
ইনস্টলের সব উপায় →

ম্যানুয়াল ইনস্টল

চেকআউট আর pip দিয়েও হয়। extras একে অন্যের ওপর নির্ভর করে না: [client] হলো UI আর সোর্স, [onnx] বা [torch] দেয় ডিটেক্টর ও এমবেডারের ব্যাকএন্ড।

$ git clone https://github.com/Ximilar-com/cardstream && cd cardstream
$ pip install -e '.[client,onnx]'

আপনার Ximilar API কী

শনাক্তকরণ চলে Ximilar collectibles/v2 দিয়ে। পুরো সিস্টেম একটিমাত্র এনভায়রনমেন্ট ভেরিয়েবল পড়ে, XIMILAR_API_KEY; বাকি সবই ফ্ল্যাগ।

$ export XIMILAR_API_KEY=your-key

প্রথমবার চালানো

আপনার ওয়েবক্যামে ব্রাউজার UI খোলে। একটি কার্ড তুলে ধরুন; ওভারলেতে দেখবেন স্টেট মেশিন কীভাবে ভাবছে, আর ম্যাচ এলে সেটিও।

$ cardstream-web
# → http://127.0.0.1:8001

কী ইনস্টল হলো, যাচাই করুন

দুটি কমান্ডই নিজের ভার্সন দেখিয়ে বেরিয়ে যায়। মডেল ফাইল লাগে না, তাই ইনস্টল শেষ হওয়ামাত্র কাজ করে।

$ cardstream-web --version
cardstream 0.5.0

হেডলেস, নিজের সেটআপের জন্য

একই পাইপলাইন, ব্রাউজার ছাড়া: ফল দেখা যায় টার্মিনালে। ফ্ল্যাগগুলো cardstream-web কমান্ডের মতোই, ক্যামেরার পাশে একটিমাত্র প্রসেস।

$ cardstream-client --source 0
ব্যবহার

নিজের শো এতে পাঠান

সোর্স বদলে নেওয়া যায়, আর যেটিই বেছে নিন, বিশ্লেষণ হুবহু একই। সবকিছুই ফ্ল্যাগ; জরুরিগুলো সেটিংস ডায়ালগ থেকে লাইভেই নতুন করে ঠিক করা যায়।

ওয়েবক্যাম ও ফাইল

cardstream-web কমান্ডের ডিফল্ট হলো ব্রাউজারের ওয়েবক্যাম; ক্যামেরার ইনডেক্স, ভিডিও ফাইল বা স্থির ছবি দুটি কমান্ডেই চলে। শোয়ের আগে পরীক্ষা করে নেওয়ার জন্য ভালো।

$ cardstream-web # ব্রাউজারের ওয়েবক্যাম
$ cardstream-client --source clip.mp4

স্ট্রিম পুল করুন

IP ক্যামেরা, এনকোডার বা রিস্ট্রিমারের ঠিকানা দিন: rtsp://, rtmp://, srt:// আর ws:// JPEG ফিড চলে, সংযোগ কেটে গেলে সীমিত ব্যাকঅফ রেখে আবার যুক্ত হয়।

$ cardstream-web --source rtsp://cam/stream1

OBS‑কে পুশ করতে দিন

একে লিসেনার হিসেবে চালান আর OBS‑এ বাড়তি একটি RTMP বা SRT আউটপুট যোগ করুন। সিস্টেমের ffmpeg বাইনারি লাগে (brew install ffmpeg)।

$ cardstream-web --source rtmp://0.0.0.0:1935/live --listen

প্রিফিল খোঁজার পরিসর ছোট করে

গেম, সেট কোড ও লিপি পাঠানোর আগে লোকালভাবে যাচাই হয়। --game দিলে সব সময় সঙ্গে --alphabet দিন; গেম প্রিফিল করলে এন্ডপয়েন্ট নিজে আর লিপি শনাক্ত করে না।

$ cardstream-web --game "Pokémon" --alphabet japanese --set-code M4

সেটিংস ডায়ালগ

ক্যাটাগরি, গেম, সেট কোড, লিপি ও থ্রেশহোল্ড স্ট্রিমের মাঝখানেই ব্রাউজার থেকে বদলানো যায়। রিস্টার্ট লাগে না, আর কন্ট্রোলগুলোতে প্রসেসের মতো একই যাচাই চলে।

রেজোলিউশনের তিনটি সেটিং

ক্যামেরা কত বড় ছবি তোলে, কতটা পাঠানো হয় আর কতটা বিশ্লেষণ হয়, তিনটি আলাদা সংখ্যা। বিশ্লেষণ চলে ছোট ছবিতে; শনাক্তকরণের ক্রপ কাটা হয় পুরো ফ্রেম থেকে নতুন করে।

$ cardstream-web --camera-width 3840 --width 1280
শো পর্যালোচনা

শো সেভ করুন, পরে পর্যালোচনা করুন

ডিফল্টভাবে বন্ধ। একটি ফ্ল্যাগ দিলেই পেজে তৈরি হতে থাকা ইতিহাস, অর্থাৎ আপনার দেখানো প্রতিটি কার্ড আর তার ক্রপ, আপনার নিজের Ximilar অ্যাকাউন্টের একটি সেশনে সেভ হয়; পরদিন সকালেও শো সেখানেই থাকে।

ইতিহাস, থাম্বনেইলসহ

ব্রাউজার UI আপনার দেখানো প্রতিটি কার্ডের তালিকা রাখে, নতুনটি সবার ওপরে: শনাক্ত হওয়া ক্রপের থাম্বনেইল, --price-stats দিলে দাম, আর কার্ডটি কতক্ষণ স্ট্রিমে ছিল। তালিকাটি থাকে আপনার কম্পিউটারেই।

শো সেভ করা

--ximilar-stream NEW একটি সেশন শুরু করে তার id দেখিয়ে দেয়। এরপর শো চলতে চলতেই ইতিহাসের প্রতিটি সারি সেভ হয়: আপলোড চলে ব্যাকগ্রাউন্ডে, ব্যাচ ধরে; নেটওয়ার্কের ত্রুটি হলে আবার চেষ্টা করে, আর এর জন্য শো কখনো আটকে থাকে না। ঠিকঠাক বন্ধ করলে বাকিটুকু আপলোড হয়ে সেশন বন্ধ হয়।

$ cardstream-web --game "Pokémon" --alphabet latin \
    --price-stats --ximilar-stream NEW
শো সেভ করার পুরো বিবরণ →

কী কী আপলোড হয়

সারিগুলো যায় টেক্সট হিসেবে: কার্ড, সেট, দাম, স্ট্রিমে থাকার সময় আর এর পেছনের পেইড কল। সঙ্গে যায় প্রতিটি সারির ক্রপ, সর্বোচ্চ 1024 px; শনাক্তকরণ কল আগেই যে ছবিটি পেয়েছে, এটি সেটিই। --no-ximilar-stream-images দিলে শুধু টেক্সট যায়। আপনার Ximilar অ্যাকাউন্টে Cardstream সার্ভিস থাকতে হবে।

$ cardstream-web --ximilar-stream NEW --no-ximilar-stream-images

Ximilar অ্যাপে পর্যালোচনা

প্রতিটি সেশন Ximilar অ্যাপের Cardstream অংশে জমা হয়: কী দেখিয়েছেন আর কখন, শোয়ের মোট মূল্য, সবচেয়ে দামি পণ্য ও শীর্ষ সেট, আর ক্রপসহ প্রতিটি কার্ড। কী বিক্রি হলো চিহ্নিত করুন, ভুল ম্যাচ ঠিক করুন, নোট যোগ করুন।

Ximilar অ্যাপ খুলুন →

রিস্টার্টের পর আবার চালু

NEW‑এর জায়গায় সেশন id দিন, শো একই সেশনে চলতে থাকবে; ঠিকঠাক বন্ধ করায় সেশন বন্ধ হয়ে গিয়ে থাকলেও সেটি আবার খুলে যায়। বিল হয় শুধু সেশন শুরুর জন্য, তাই আবার চালু করতে কিছু লাগে না।

$ cardstream-web --ximilar-stream <session-id>

টিমের ওয়ার্কস্পেস

সেশন সেভ হয় আপনার API কী-এর ডিফল্ট ওয়ার্কস্পেসে। --ximilar-workspace দিয়ে অন্য ওয়ার্কস্পেস বেছে নিন, আর সেখানে সেভ করা সেশন আবার চালু করার সময় একই id দিন।

$ cardstream-web --ximilar-stream NEW \
    --ximilar-workspace <workspace-id>
নিশ্চিন্তে চালান

আলাদা প্রতিটি কার্ডে একটি শনাক্তকরণ কল

লোকাল সংকেত, অর্থাৎ নড়াচড়া, ডিটেকশন আর পরিচয় ফিল্টার, ঠিক করে শনাক্তকরণ কল আদৌ দরকার কি না। এই সেটিংগুলোই হিসাবটা ঠিক রাখে।

থ্রেশহোল্ড

ফলের থ্রেশহোল্ড দুর্বল ম্যাচকে ওভারলেতে উঠতে দেয় না; সাদৃশ্যের থ্রেশহোল্ড ঠিক করে কার্ডটি আগেরটিই, নাকি নতুন; আর কার্ড যথেষ্ট সময় চোখের আড়ালে থাকলে forget-after স্মৃতি মুছে দেয়।

$ cardstream-web --result-threshold 0.35

সুপারিশ করা সেটআপ

RF-DETR সেগমেন্টেশন, সঙ্গে ONNX এমবেডিং ফিল্টার: এগুলোই সঙ্গে আসা ডিফল্ট। ওয়েট জায়গামতো থাকলে শুধু cardstream-web লিখলেই ঠিক এটি চলে; সব খুলে লিখলেও পাইপলাইন একই।

$ cardstream-web \
    --segmentor-model model/segmentation/onnx/model.onnx \
    --embed-model model/similarity/onnx/model.onnx

localhost‑এই রাখুন

লোকাল অ্যাপে কোনো লগইন নেই, আর এতে আপনার API কী থাকে। --host ফ্ল্যাগের ডিফল্ট 127.0.0.1; ওটাই থাকতে দিন, পোর্টটি কখনো LAN‑এ খুলে দেবেন না।

চালু করার সময় “Model not found”

মডেল ওয়েট আলাদা করে ডাউনলোড করতে হয়, রিপোতে থাকে না। ইনস্টল স্ক্রিপ্ট আর Docker ইমেজ নিজেই নামিয়ে নেয়; শুধু চেকআউট করে থাকলে ওয়েটগুলো model/segmentation/ ও model/similarity/ ফোল্ডারে রাখতে হবে, scripts/build-from-source.sh --models কাজটি করে দেয়।

কোন গেম দেখাচ্ছেন, বলে দিন

এক গেমের শোয়ে প্রতি কলে এন্ডপয়েন্টের গেম আন্দাজ করার দরকার নেই। নাম বলে দিলে খোঁজা সেই গেমেই সীমিত থাকে: উত্তর আসে দ্রুত, ভুল সংস্করণ কম মেলে। সঙ্গে --alphabet দিন, কারণ গেম প্রিফিল করলে এন্ডপয়েন্ট নিজে আর লিপি শনাক্ত করে না।

$ cardstream-web --game "Pokémon" --alphabet japanese

ffmpeg, যখন লাগে

--listen আর --ffmpeg সিস্টেমের ffmpeg বাইনারি চালায়। সাধারণ পুল শুধু pip দিয়ে করা ইনস্টলেই চলে; OBS থেকে পুশ নেওয়ার সেটআপ চলে না।

আরও গভীরে

ডিফল্টের বাইরে

মডেল বদলে নিন বা কোড পড়ুন: পুরো পাইপলাইনটি ইনস্টল করার মতো একটিই প্যাকেজ।

নিজের ওয়েট আনুন

ডিটেকশন আর পরিচয় ফিল্টারের ব্যাকএন্ড বেছে নেওয়া যায়: মডেলের পরিবার দেখে ঠিক হয় ক্লাস, ফাইল এক্সটেনশন দেখে রানটাইম। RF-DETR বা RT-DETRv2, .onnx বা একটি transformers ডিরেক্টরি।

মডেল ব্যাকএন্ড →

মডেল ক্যাটালগ

cardstream যত ওয়েট লোড করতে পারে, সব: Ximilar‑এর ট্রেন করা, রিলিজের সঙ্গে Apache-2.0 লাইসেন্সে প্রকাশিত। কোনটি কী করে, কত দ্রুত চলে আর কোন লাইসেন্সে আছে।

মডেল ক্যাটালগ →

ছোট প্রশ্ন, ছোট উত্তর

খরচ কত, কম্পিউটার ছেড়ে কী বাইরে যায়, কোন কোন কার্ড চেনে, আর কোন দুটি কমান্ডে এটি আবার মুছে ফেলা যায়।

FAQ পড়ুন →

README ও ইস্যু

README‑তে প্রতিটি ফ্ল্যাগের বিবরণ আছে; বাগ আর প্রশ্নের জায়গা হলো ইস্যু।

README পড়ুন →

রিলিজ ও আর্টিফ্যাক্ট

wheel, চেকসাম আর ইনস্টল স্ক্রিপ্ট, প্রতি রিলিজে এক সেট করে; সঙ্গে Docker ও সোর্স থেকে বিল্ড।

ডাউনলোড পেজ →