Projet personnel · Edge AI

Assistant de décision au poker par vision embarquée

Une caméra filme la table, un modèle YOLOv8 Nano reconnaît chaque carte, et un moteur en Python calcule les chances de gagner pour conseiller le joueur : se coucher, suivre ou relancer. Le tout tourne sur une carte BeagleBone, sans ordinateur.

  • Vision par ordinateur
  • Edge AI
  • Python
Une caméra reconnaît les cartes, une carte embarquée calcule et propose la meilleure décision

En bref

  • 52cartes à reconnaître, une classe par valeur et couleur
  • ~3 Mde paramètres pour YOLOv8 Nano, la plus petite version du modèle
  • 7cartes à combiner par joueur au Texas Hold'em : 2 en main, 5 sur la table
  • 100 %embarqué : aucun calcul envoyé à un ordinateur ou au cloud

Contexte

L'idée

Au poker, la bonne décision se calcule : elle dépend des chances de gagner avec les cartes visibles et de ce qu'il faut miser pour rester dans le coup. Un calcul difficile à faire de tête en quelques secondes. L'objectif : un boîtier qui regarde la table et indique au joueur la décision mathématiquement la plus juste.

Le cadre

Projet personnel mené en 2025, dans le prolongement des cours de vision par ordinateur et d'informatique embarquée de l'ISEN (BeagleBone, FPGA).

Les contraintes

  • tout tourne sur la carte embarquée, sans ordinateur ni connexion ;
  • un processeur ARM modeste, sans carte graphique ;
  • une caméra simple, un éclairage de table ordinaire et des cartes qui se chevauchent ;
  • un conseil qui suit le jeu en direct, à chaque carte posée.

Le principe

De la carte posée sur la table au conseil donné au joueur, en quatre temps.

  1. Filmer

    Une caméra USB placée au-dessus de la table filme les cartes ; OpenCV lit les images directement sur la BeagleBone.

  2. Reconnaître

    YOLOv8 Nano repère chaque carte dans l'image et donne sa valeur et sa couleur.

  3. Lire la table

    Les cartes sont réparties entre la main du joueur et le tableau commun selon leur position dans l'image ; leur nombre donne l'étape du coup : pré-flop, flop, turn ou river.

  4. Conseiller

    Le moteur de décision en Python évalue la main, estime la probabilité de gagner et affiche le conseil : se coucher, suivre ou relancer.

Le modèle de reconnaissance

Les données

Des photos de cartes, annotées avec Roboflow. Chaque boîte entoure un coin de carte, là où sont imprimées la valeur et la couleur : une carte reste reconnaissable même à moitié cachée sous une autre ou tenue en éventail.

L'augmentation

Roboflow génère plusieurs variantes de chaque image (rotations, flou, luminosité, contraste) pour que le modèle résiste aux reflets et aux éclairages de table.

L'entraînement

YOLOv8 Nano est affiné sur Google Colab, sur GPU, à partir de poids pré-entraînés sur le jeu COCO : le transfer learning permet d'apprendre les 52 classes avec un jeu de données de taille modeste.

Le choix de Nano

Avec environ 3 millions de paramètres, c'est la plus petite version de YOLOv8 : un peu moins précise que les grandes, mais la seule assez légère pour un processeur embarqué.

L'évaluation

La mAP sur un jeu de validation séparé mesure la qualité des détections, et la matrice de confusion montre quelles cartes le modèle confond encore.

Le moteur de décision

Les règles

Le programme suit le Texas Hold'em, la variante la plus répandue : chaque joueur combine ses deux cartes avec les cinq cartes communes, et la meilleure combinaison de cinq cartes l'emporte. Toutes les combinaisons sont classées, de la carte haute à la quinte flush royale.

Les chances de gagner

Les cartes encore inconnues, celles des adversaires et celles à venir, sont tirées au hasard des milliers de fois : la part des parties gagnées donne l'équité de la main. C'est une simulation de Monte-Carlo, assez rapide pour tourner sur la carte.

La décision

L'équité est comparée à la cote du pot, c'est-à-dire la part du pot final qu'il faut miser pour suivre. Si la probabilité de gagner dépasse ce prix, suivre rapporte en moyenne sur le long terme (espérance positive) ; si elle le dépasse largement, relancer devient intéressant ; sinon, mieux vaut se coucher.

Le joueur indique la mise à suivre et la taille du pot ; tout le reste vient de la caméra.

L'intégration sur BeagleBone

Faire tenir un détecteur moderne et un moteur de calcul sur une carte de quelques watts.

Export ONNX

Le modèle entraîné est exporté au format ONNX et exécuté avec ONNX Runtime sur le processeur de la carte.

Une image plus petite

La résolution d'entrée est réduite pour garder un temps de calcul compatible avec un conseil en direct.

Un conseil stable

Une carte n'est validée qu'après avoir été vue sur plusieurs images de suite, et le calcul n'est relancé que lorsque la table change : un reflet passager ne modifie pas le conseil.

Tout en local

Caméra, modèle et moteur de décision tournent sur la carte, sans ordinateur ni connexion réseau.

Bilan

Limites

  • Les reflets sur les cartes plastifiées et les cartes très superposées restent les cas les plus difficiles.
  • Le processeur embarqué limite la cadence : le conseil suit le jeu, sans viser la fluidité d'une vidéo.
  • Le conseil repose sur les probabilités seules : il ne tient compte ni du style des adversaires ni du bluff.

Pistes d'amélioration

  • Quantifier le modèle en INT8 pour accélérer l'inférence.
  • Passer sur une carte dotée d'un accélérateur d'IA, comme la BeagleBone AI-64.
  • Lire aussi les jetons par vision, pour calculer la cote du pot sans saisie.
  • Estimer l'éventail de mains des adversaires à partir de leurs mises.

Outils

YOLOv8 Nano (Ultralytics)

Détection des cartes, affinée à partir des poids pré-entraînés sur COCO.

Roboflow

Annotation des images, augmentation et export du jeu de données au format YOLO.

Google Colab

Entraînement du modèle sur GPU.

OpenCV

Capture du flux de la caméra et affichage du conseil.

ONNX Runtime

Inférence du modèle sur le processeur de la carte.

Python · NumPy

Moteur de règles, évaluation des mains et simulation de Monte-Carlo.

BeagleBone

La carte embarquée qui réunit la caméra, le modèle et le programme.