cardstream
Guide

Analysez votre live Whatnot ou Fanatics Live

cardstream ne se connecte jamais à Whatnot, à Fanatics Live ni à aucune autre marketplace. Il regarde, sur votre propre machine, la vidéo que vous leur envoyez déjà, et nomme chaque carte qui arrive sur la table. Voici tout le chemin, de rien du tout à un overlay en direct : un quart d’heure environ, une fois pour toutes.

Un ordinateur près de la caméra

macOS, Linux ou Windows. Si OBS tourne déjà dessus, c’est la bonne machine : l’analyse se fait en local, rien n’a donc besoin de voyager.

La vidéo que vous envoyez déjà

Une scène OBS, une webcam, une carte d’acquisition ou un encodeur. cardstream se branche sur ce que vous avez ; il ne vous demande pas de remonter tout votre show.

Une clé API Ximilar

Le seul identifiant de tout le système, et il reste sur votre machine. Pas de compte de marketplace, pas de mot de passe, pas de bot dans votre chat.

D’abord

Faites-le tourner tout seul

Avant que tout cela ne touche à votre show, prouvez que ça marche avec la webcam de votre portable. Trois commandes.

01

Installez-le

Le script crée un venv dans ~/.cardstream, vérifie le wheel de la release avec ses sommes de contrôle, télécharge les poids des modèles et place les commandes dans votre PATH. Les installations par wheel, par Docker et depuis les sources sont sur la page de téléchargement.

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

Ajoutez votre clé

L’identification passe par défaut par Ximilar collectibles/v2, ou par votre propre système à sa place. XIMILAR_API_KEY est la seule variable d’environnement lue : mettez-la dans le profil de votre shell pour qu’elle survive à un redémarrage le soir du show.

$ export XIMILAR_API_KEY=your-key
03

Montrez une carte à votre portable

Cette commande ouvre l’interface navigateur sur votre webcam intégrée. Tenez une carte immobile un instant : l’overlay montre la machine à états en train de décider, puis le nom, l’extension et la confiance, avec à côté de la correspondance la durée de l’appel d’identification. Voilà tout le produit ; le reste de cette page ne parle que de la provenance des pixels.

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

Pointez-le sur votre show

Choisissez une ligne. Laquelle ? Tout dépend d’une seule question : streamez-vous depuis un ordinateur ou depuis un téléphone ?

Ce qui n’est pas possible

Pointer cardstream sur la page de lecture publique de votre live Whatnot ou Fanatics. Il n’existe pas d’URL de flux sortant pour votre propre show, et extraire la vidéo du lecteur ajouterait des secondes de latence, en plus d’enfreindre les conditions de la plateforme. Toutes les méthodes ci-dessous captent votre vidéo en amont de la marketplace, et c’est exactement pour cela que cardstream n’a besoin d’aucun compte, d’aucun mot de passe et d’aucune clé API de leur part.

A
Vous streamez depuis OBS sur un ordinateur

La caméra virtuelle d’OBS

Commencez ici

OBS peut présenter votre scène composée au système d’exploitation comme une webcam ordinaire. cardstream l’ouvre alors comme n’importe quelle autre caméra : pas de second encodage, pas de charge supplémentaire sur votre encodeur et pas de ffmpeg à installer.

  1. Dans OBS, cliquez sur Démarrer la caméra virtuelle dans le panneau Commandes.
  2. Lancez cardstream dessus en lui donnant un index de webcam. L’index 0 est en général votre caméra intégrée, la caméra virtuelle est donc le plus souvent la 1 : essayez 0, 1, 2 jusqu’à voir votre scène.
$ cardstream-web --source 1

Faites l’essai une fois avant un show plutôt que pendant : sous macOS, le terminal a besoin de l’autorisation d’accès à la caméra, et si OpenCV n’arrive pas à ouvrir le périphérique virtuel sur votre machine, la méthode B fonctionne partout.

B
Vous streamez depuis OBS et voulez exactement les pixels diffusés

Une seconde sortie depuis OBS

cardstream écoute sur votre propre machine et OBS lui pousse une copie. Whatnot ou Fanatics continuent de recevoir précisément ce qu’ils recevaient avant : c’est une cible en plus, jamais une redirection.

  1. Démarrez d’abord l’écoute ; elle attend le push et se reconnecte toute seule.
  2. OBS n’a qu’une seule sortie Stream : envoyez donc la copie depuis une seconde, soit avec le plugin obs-multi-rtmp, soit par Paramètres → Sortie → Enregistrement → Sortie Personnalisée (FFmpeg), type Sortie vers une URL, URL rtmp://127.0.0.1:1935/live, conteneur flv, puis cliquez sur Démarrer l’enregistrement.
  3. Cette méthode fait appel au binaire ffmpeg du système : commencez par brew install ffmpeg.
$ cardstream-web --listen \
    --source rtmp://0.0.0.0:1935/live
C
Vous passez en live depuis un téléphone, comme la plupart des vendeurs

Sa propre caméra sur la table

Un téléphone qui pousse directement vers l’application ne vous laisse aucun flux à dédoubler. Cessez donc de courir après le flux sortant et donnez à cardstream sa propre vue sur la même table : une seconde webcam en plongée, ou la sortie HDMI de la caméra dans une carte d’acquisition.

  1. Pointez une webcam ou une carte d’acquisition sur l’endroit où vous dévoilez les cartes.
  2. Lancez-le sur la machine à côté de cette caméra.
$ cardstream-web --source 0

Ce n’est pas forcément l’angle que voient vos acheteurs. Un plan serré et bien éclairé, en plongée, s’identifie mieux que ne le fera jamais un flux compressé de marketplace.

D
Vous utilisez un encodeur, un mélangeur ou une caméra IP

Tout ce qui a une URL

Les flux rtsp://, rtmp:// et srt:// sont récupérés directement, ainsi que les flux JPEG ws:// quand votre installation est faite maison. Les reconnexions se font à intervalles croissants, mais plafonnés : une liaison studio qui tombe en plein break revient sans que vous ayez à y toucher.

  1. Donnez-lui l’URL que votre encodeur publie déjà.
  2. La page du navigateur devient un simple écran de contrôle : l’analyse tourne même sans navigateur ouvert.
$ cardstream-web \
    --source rtsp://studio/stream1
Avant de passer en live

Réglez-le pour le show que vous animez

Les réglages par défaut sont honnêtes, mais un break n’est pas un flux de caméra quelconque : vous savez en général ce que vous ouvrez avant de l’ouvrir.

04

Dites-lui ce que vous ouvrez

Un préréglage de jeu ou d’extension resserre la recherche : des appels plus rapides, de meilleures correspondances. Une seule règle : passez toujours --alphabet quand vous passez --game, car un préréglage de jeu désactive la détection d’alphabet de l’endpoint, qui suppose alors l’alphabet latin ; une carte japonaise serait associée à sa version anglaise.

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

Changez d’avis en plein stream

Quand le lot suivant est un autre jeu, vous ne redémarrez rien : la catégorie, le jeu, le code d’extension, l’alphabet et les seuils de résultat et de netteté se modifient tous dans la fenêtre de réglages du navigateur pendant que le stream tourne. Tout le reste (détecteur, filtre, résolution) est lu une seule fois au démarrage : choisissez-le maintenant.

06

Gardez le journal, gardez le port fermé

--split-results donne sa propre ligne à chaque apparition au lieu de fusionner les répétitions : la liste de ce que vous avez montré, dans l’ordre où vous l’avez montré, prête à être rapprochée des commandes après coup. Laissez --host à sa valeur par défaut, 127.0.0.1 : ce processus détient votre clé et l’interface locale n’a pas d’authentification, elle ne doit donc jamais être joignable depuis votre réseau local.

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

Enregistrez le show pour le lendemain matin

Ajoutez --ximilar-stream NEW et chaque ligne de cet historique (la carte, son prix, son temps sur le stream et le recadrage qui a servi à l’identifier) est enregistrée dans une session de votre compte Ximilar pendant que vous streamez. Ensuite, la section Cardstream de l’application Ximilar présente tout le show (sa valeur, ses cartes les plus chères et chaque carte avec son image), et c’est là que vous marquez ce qui s’est vendu et corrigez une mauvaise correspondance. Si le client redémarre en plein show, relancez-le avec l’id de session affiché à la place de NEW et le même show continue. Pour enregistrer dans un espace de travail d’équipe, ajoutez --ximilar-workspace.

$ cardstream-web --source 1 --price-stats --ximilar-stream NEW
# après un redémarrage :
$ cardstream-web --source 1 --price-stats --ximilar-stream <session-id>

Puis animez votre show. La détection, le mouvement et le filtre d’identité tournent tous en local sur votre machine ; l’appel d’identification part une fois par carte posée sur la table, soit une centaine par heure, contre les 54 000 images que contient cette heure. Le calcul est ici.

Si quelque chose cloche

Les six choses qui tournent vraiment mal

La caméra virtuelle n’est pas dans la liste

Essayez --source 0, 1, 2 l’un après l’autre : les index sont ceux que le système attribue. Sous macOS, donnez l’accès à la caméra à votre terminal dans Réglages Système → Confidentialité et sécurité. Si OpenCV refuse toujours de l’ouvrir, passez à la méthode B.

« ffmpeg not found »

Seules --listen et --ffmpeg font appel au binaire du système. Installez-le (brew install ffmpeg) et relancez ; les méthodes par caméra virtuelle, par webcam et par simple pull n’ont besoin de rien de plus.

OBS ne me laisse pas ajouter un second stream

C’est une limite d’OBS, pas de cardstream : il n’a qu’une seule sortie Stream. Le plugin obs-multi-rtmp ajoute de vraies cibles supplémentaires ; l’enregistrement en Sortie Personnalisée (FFmpeg) de la méthode B fonctionne avec un OBS standard.

Les cartes sont détectées mais jamais reconnues

Presque toujours une question de résolution ou de mouvement. Le numéro de carte doit être lisible dans l’image que vous envoyez : gardez OBS en 1080p, tenez la carte immobile un instant quand vous la dévoilez, et seulement ensuite assouplissez --result-threshold (0.9 par défaut ; plus haut, il garde des correspondances plus faibles, et 1.0 garde tout).

La même carte est identifiée deux fois

Le filtre d’identité a noté les deux vues en dessous de --similarity-threshold (0.85 par défaut) et a conclu à une nouvelle carte. Baissez-le un peu. Si vous posez une carte puis la reprenez, augmentez plutôt --forget-after : après 2 secondes d’absence, une carte est volontairement traitée comme nouvelle.

Rien n’est détecté du tout

Lancez avec --show-detection pour dessiner la boîte : la détection tourne toujours, elle n’est simplement pas dessinée par défaut. Pas de boîte, c’est que la carte est trop petite ou trop rapide dans le champ ; une boîte sans correspondance vous renvoie à la ligne précédente.

Ça bloque toujours ? Le README documente toutes les options, et la documentation les regroupe selon ce que vous cherchez à faire.

Open source. Auto-hébergé. Votre stream, votre stack.

Pas de plateforme intermédiaire, pas de licence par poste : connectez l’API Ximilar ou votre propre système d’identification, et cardstream l’appelle une fois par carte distincte plutôt qu’une fois par image. Que vous fassiez des breaks sur Whatnot, animiez un show façon Fanatics Live ou streamiez votre propre live shopping, lancez cardstream dès ce soir sur le matériel que vous avez déjà.