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.
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.
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 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
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
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.
La caméra virtuelle d’OBS
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.
- Dans OBS, cliquez sur Démarrer la caméra virtuelle dans le panneau Commandes.
- 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.
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.
- Démarrez d’abord l’écoute ; elle attend le push et se reconnecte toute seule.
- 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, URLrtmp://127.0.0.1:1935/live, conteneurflv, puis cliquez sur Démarrer l’enregistrement. - 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
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.
- Pointez une webcam ou une carte d’acquisition sur l’endroit où vous dévoilez les cartes.
- 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.
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.
- Donnez-lui l’URL que votre encodeur publie déjà.
- 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
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.
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
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.
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 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.
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.