cardstream
קוד פתוח מבוסס על Ximilar גרסת בטא

זיהוי הקלפים הטוב ביותר לשידורים חיים. בנוי לברייקים, לפתיחות חבילות ולשידורי מכירה.

cardstream צופה בברייק, בפתיחת החבילות או בשידור שלכם ומזהה כל קלף אספנות ברגע שהוא נכנס לפריים: שם, סט ורמת ביטחון, בזמן אמת. מעקב אחרי הקלפים מאפשר לנתח את שידורי המכירה שלכם. לסטרימרים שרוצים לדעת יותר.

מה הוא מזהה

מ-Pokémon ועד Magic: The Gathering

בוחרים קטגוריה לכל שידור, וכל המנוע עובר איתה: איתור הקלף, המסננים וקריאת הזיהוי פונים כולם לנקודת הקצה הנכונה. כל התאמה חוזרת עם שם, סט, קוד סט, מספר קלף, סדרה ושנה.

🃏

משחקי קלפי אספנות (TCG)

collectibles/v2/tcg_id
Ximilar זמין

קלפים בודדים של 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
למה cardstream.ai?

קריאה אחת לכל קלף, לא לכל פריים

המטרה היא שניתוח השידור יסתכם רק בקריאות שבאמת מספרות משהו חדש. זו החלופה בקוד פתוח לשירותי SaaS סגורים לזיהוי קלפים: בלי פלטפורמה באמצע, בלי רישיון לכל משתמש. החומרה שלכם, מפתח ה-API שלכם, ומכונת מצבים ששולחת קריאה רק כשהקלף שבפריים באמת חדש.

54,000 ← כ-100
קריאות API בשעה

צינור עיבוד נאיבי שעובד על כל פריים ב-15 פריימים לשנייה שולח 54,000 קריאות זיהוי בשעה. cardstream שולח אחת לכל קלף שונה שמוצג, כלומר בערך מאה באותה שעה.

פי 540
פחות קריאות זיהוי

אותה שעה, אותו וידאו, אותם קלפים: 54,000 קריאות מול בערך 100. מסנני התנועה והזהות רצים מקומית על החומרה שלכם, וקריאה יוצאת רק כשקלף חדש באמת מתייצב בפריים.

$0
דמי פלטפורמה

בלי מנוי SaaS, בלי תמחור לפי משתמש, בלי נעילה אצל ספק. אפשר לארח את כל המערכת בעצמכם יחד עם הזיהוי, או להתחבר ל-API של Ximilar.

תכונות

כל מה ששידור קלפים חי צריך

שותף לשידור שלא מפספס אף קלף: למוכרים בשידור חי בפלטפורמות בסגנון Whatnot ו-Fanatics Live, לברייקים של בוקסים, לשידורים מחנויות קלפים ולקטלוג אוספים. בכל מקום שיש בו מצלמה וקלפים.

⚡

מזוהה ברגע שהוא נכנס לפריים

בלי כפתור סריקה. בלי המתנה. פשוט מציגים את הקלף: השם, הסט ורמת הביטחון מופיעים תוך חצי שנייה בערך, בשידור חי.

🎯

קריאה אחת לכל קלף

מסנן תנועה ומסנן זהות מבוסס הטמעה (embedding) רצים מקומית על המעבד שלכם. מחזיקים קלף בלי לזוז: אפס קריאות חוזרות. מחליפים קלף: קריאה חדשה אחת בדיוק.

📡

כל מקור וידאו

מצלמת רשת, קובצי וידאו, RTSP, RTMP ו-SRT: במשיכה, או בדחיפה ישירה מ-OBS עם --listen. זרמי JPEG דרך WebSocket למערכות בבנייה עצמית.

🔌

כל מערכת זיהוי

Ximilar collectibles/v2 כברירת מחדל, או שמכוונים את אותו מנוע אל מזהה קלפים קנייני או אל מזהה שאימנתם ואתם מארחים בעצמכם.

🧠

מודלים משלכם

המשקלים של מודל האיתור הם שלנו: מודל סגמנטציה RF-DETR מכוונן, ברישיון Apache-2.0, שסקריפט ההתקנה מוריד. יש תמיכה גם בגלאים של תיבות תוחמות (RF-DETR, RT-DETRv2), אם מעדיפים להביא ייצוא משלכם.

🔓

קוד פתוח, באירוח עצמי

חבילת Python אחת ברישיון מתירני. אפשר לקרוא אותה, לעשות לה fork ולהריץ אותה על החומרה שלכם. המפתח שלכם, הנתונים שלכם, התשתית שלכם.

איך זה עובד

חכם מספיק כדי לדעת מתי לא לקרוא ל-API

בין השידור שלכם ל-API עומדת מכונת מצבים. כל פריים עובר דרך DecisionCore, מכונת מצבים אחת שרצה מקומית, ושלושה מסננים מקומיים מחליטים מתי באמת מוצדק לבצע את השלב היחיד שפונה ל-API.

1

איתור

מקומי · בלי קריאת API

מוצא את המרובע של הקלף ומיישר ממנו תמונת חיתוך נקייה. מסנן התנועה המקומי מגביל את הקצב בשלוש רמות: תנועה, קלף שעומד במקום, משטח ריק.

2

מסנן תנועה

מקומי · בלי קריאת API

הפרש ממוצע זול בין פריימים. רק כשהתמונה יציבה במשך N פריימים כדאי להסתכל על הקלף מקרוב. עדיין זז? מחכים.

3

מסנן זהות

מקומי · בלי קריאת API

השוואת הטמעות עונה על שאלה אחת: האם זה אותו קלף כמו קודם? אותו קלף ← התוצאה השמורה נשלחת שוב.

4

זיהוי

ximilar · קריאה אחת

רק קלף חדש באמת, שהתייצב, מפעיל זיהוי ב-Ximilar: אסינכרוני, עם debounce, מחוץ ללולאת הפריימים. התוצאה נדחפת בחזרה בזמן אמת.

לסטרימרים, לברייקרים ולחנויות

משדרים לבד?

אדם אחד, מצלמה אחת, לילה ארוך של ברייקים: לא אמור להיות צורך בצוות הנדסה כדי לדעת איזה קלף מופיע על המסך. מחברים את השידור שכבר רץ אצלכם, ו-cardstream מנתח אותו בזמן אמת, בין אם אתם מוכרים בפלטפורמת מכירה ובין אם ישירות בערוץ שלכם.

  • Whatnot
  • Fanatics Live
  • eBay Live
  • TikTok Shop
  • Twitch
  • YouTube Live
  • האתר שלכם

בלי גישה לחשבון, בלי מפתחות API של פלטפורמת המכירה, בלי בוט בצ׳אט, ובלי שום קשר לאף אחת מהפלטפורמות האלה. cardstream קורא את הווידאו שלכם, ותו לא.

01

כבר משדרים מ-OBS

מוסיפים עוד פלט אחד לצד זה שמזין את השידור. הקונים רואים בדיוק מה שראו קודם: עותק של אותו וידאו מגיע ל-cardstream, וכל קלף שמונח על השולחן מזוהה בדרך. המאזין שלמטה צריך את קובץ ההפעלה ffmpeg של המערכת. אפשר גם לוותר לגמרי על הפלט השני ולתת ל-cardstream לקרוא את המצלמה הווירטואלית של OBS כמו כל מצלמת רשת.

$ cardstream-web --listen \
      --source rtmp://0.0.0.0:1935/live
# כאן מכוונים את היעד השני של OBS
02

או המצלמה שכבר על השולחן

מצלמה מלמעלה, כרטיס הקלטה, טלפון בתור מצלמת רשת: כל מצלמה שמתחתיה אתם פותחים חבילות וחושפים קלפים. הניתוח רץ על המחשב שליד המצלמה, כך שכברירת מחדל שום דבר מלבד תמונת חיתוך אחת לכל קלף לא יוצא מהחדר.

$ cardstream-web --source 0
# מצלמת רשת · ממשק דפדפן ב-localhost
03

או כל דבר עם כתובת URL

מקודדים, מיקסרים, שירותי ריסטרים, אולפן שני בצד השני של העיר. משיכה של RTSP, RTMP ו-SRT, וגם זרמי JPEG דרך WebSocket כשהמערכת שלכם בבנייה עצמית.

$ cardstream-web \
      --source rtsp://studio/stream1

שכבת-על בשידור

שם, סט ורמת ביטחון מופיעים ברגע שהקלף מתייצב: מוכנים להקראה, או לשילוב בחזרה בסצנה שלכם.

כל קלף, מתועד

היסטוריה רציפה של כל מה שהצגתם: תמונה ממוזערת של כל קלף וכמה זמן הוא היה בשידור. אפשר לשמור אותה בחשבון Ximilar שלכם ולעבור על השידור למחרת בבוקר: מה נמכר, וכמה זה היה שווה.

בגודל של אדם אחד

בלי דמי פלטפורמה, בלי רישיון לכל משתמש. שידור של שלוש שעות הוא קומץ קריאות זיהוי, לא קריאה לכל פריים.

Cardstream Cloud

השידור שלכם, שמור ומוכן לסקירה

cardstream רץ על המחשב שלכם ולא שומר כלום כברירת מחדל. מוסיפים דגל אחד, וכל קלף שאתם מציגים נשמר גם בסשן בחשבון Ximilar שלכם, עם המחיר שלו, הזמן שהיה על המסך ותמונת החיתוך שממנה זוהה. אחרי השידור פותחים את אפליקציית Ximilar ורואים כמה הוא היה שווה.

$ cardstream-web --price-stats \
    --ximilar-stream NEW
# מדפיס את מזהה הסשן ושומר תוך כדי השידור
סשן שמור באפליקציית Ximilar: מוצרים שהוצגו, קריאות API בתשלום, שווי שוק, זמן ממוצע על המסך, המוצרים היקרים ביותר והסטים הנפוצים ביותר.

השידור במספרים

מוצרים שהוצגו, קריאות API בתשלום, שווי שוק וזמן ממוצע על המסך לכל סשן, ולצדם המוצרים היקרים ביותר והסטים הנפוצים ביותר.

כל קלף, עם התמונה שלו

כל שורה שומרת את הקלף, הסט, המספר, המחיר ותמונת החיתוך שממנה הוא זוהה. אפשר לחפש ברשימה לפי מוצר או סט, ולסנן את הסשנים לפי סטטוס, פלטפורמה ותאריך.

התיעוד שלכם

מסמנים מה נמכר, מוסיפים הערה, מתקנים התאמה שגויה או את המחיר שלה, מוחקים התאמה מוטעית. נותנים לסשן שם ומצרפים מטא-דאטה משלכם: מספר פריט, עלויות, קונים.

ממשיכים מאיפה שעצרתם

הפעלתם מחדש באמצע השידור? מעבירים את מזהה הסשן במקום NEW, והשידור ממשיך באותו סשן, גם אם הוא כבר נסגר. --ximilar-workspace שומר אותו בסביבת עבודה של צוות.

כבוי כברירת מחדל: בלי --ximilar-stream, קריאת הזיהוי היא הדבר היחיד שיוצא מהמחשב שלכם. השמירה דורשת את שירות Cards Cloud בחשבון Ximilar שלכם; רק פתיחת סשן מחויבת, ו---no-ximilar-stream-images שומר טקסט בלבד.

התחלה מהירה

מאפס לזיהוי בשידור חי ב-3 צעדים

1

מתקינים

סביבה וירטואלית, קובץ ה-wheel של הגרסה (עם אימות checksum), משקלי המודלים ושתי הפקודות ב-PATH. אפשר להשתמש בסקריפט, להתקין את אותו wheel מ-PyPI עם pip (המשקלים בהורדה נפרדת), או לשכפל את המאגר ולבנות בעצמכם. 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 אין משקלים: פורסים את שני קובצי ה-tar מ-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
2

מחברים מערכת זיהוי

Ximilar collectibles/v2 כברירת מחדל: מפתח מ-ximilar.com הוא פרט הגישה היחיד שכל המערכת צריכה. אפשר גם לכוון את אותו שלב אל מזהה משלכם.

$ export XIMILAR_API_KEY=your-key
3

מכוונים מצלמה אל קלף

פותחים את ממשק הדפדפן על מצלמת הרשת, או מזינים אליו את השידור: משיכת RTSP, או דחיפת RTMP ישירות מ-OBS. כל הלילה ברייק של סט אחד? ממלאים אותו מראש, ונקודת הקצה מפסיקה לנחש: Pokémon באנגלית מ-CRI זה שלושה דברים פחות לטעות בהם. בכל פעם שמגדירים --game, מגדירים גם --alphabet: מילוי מראש של המשחק מכבה את זיהוי מערכת הכתב של נקודת הקצה עצמה. מוסיפים --price-stats, וכל התאמה מביאה גם מחירי שוק בדולרים: חציון, טווח ומכירה אחרונה, על הקלף ובהיסטוריה. מוסיפים --ximilar-stream NEW כדי לשמור את השידור בחשבון Ximilar שלכם ולעבור עליו אחר כך.

$ cardstream-web
# → http://127.0.0.1:8001 (מחזיקים קלף מול המצלמה)

# קלפי Pokémon באנגלית, סט אחד (CRI - Chaos Rising), עם מחירי שוק בדולרים:
$ cardstream-web --game Pokemon --set-code CRI --alphabet latin --price-stats

קוד פתוח. אירוח עצמי. השידור שלכם, הכלים שלכם.

בלי פלטפורמה באמצע, בלי רישיון לכל משתמש: מחברים את ה-API של Ximilar או מערכת זיהוי משלכם, ו-cardstream קורא לה פעם אחת לכל קלף שונה במקום פעם אחת לכל פריים. בין אם אתם עושים ברייקים ב-Whatnot, מריצים שידור בסגנון Fanatics Live או משדרים מערך מכירות חי משלכם, אפשר להריץ את cardstream כבר הערב על החומרה שכבר יש לכם.