Aller au contenu

Alimenter les habillages avec Scoreboard OCR

Scoreboard OCR reconnaît les chiffres d’un tableau de score et les transmet à AppSport. Vous pouvez utiliser ces lectures pour les scores, la période, l’horloge principale ou l’horloge de possession de vos habillages OGraf, vMix GT et CasparCG. Companion reste utilisable en parallèle pour commander les boutons et les événements.

Prérequis : AppSport avec cette entrée OCR, les assets web à jour, un match chargé dans la fenêtre principale, les droits de modification et le mode génération activé pour les sorties. Configurez les sorties et cartes Live Output avant les essais.

Connecter Scoreboard OCR

  1. Ouvrez Table de marque → Parametres table de marque…, ou le bouton Table de marque · Scoreboard OCR dans AppSport settings → Local API.
  2. Dans Source de table de marque, choisissez Scoreboard OCR. Seuls ses paramètres s'affichent. Bodet Scorepad affiche ses réglages TCP ; Aucune source externe utilise les valeurs habituelles du match. Stramatel reste indisponible.
  3. Cochez Activer l'API locale · Companion et OCR. Le port par défaut est 18800. Ces réglages sont partagés avec Local API ; il n'y a pas de case d'activation OCR supplémentaire.
  4. Si Scoreboard OCR se trouve sur un autre PC, cochez Autoriser les connexions réseau. Choisissez si une clé API est exigée.
  5. Vérifiez les associations de champs ci-dessous, puis cliquez sur Enregistrer. La source, ses paramètres et les réglages API sont sauvegardés dans le .appsport ouvert. Sans projet ouvert, un dialogue propose de créer le fichier ; l'annulation conserve les réglages actifs.
  6. Sélectionnez l'adresse réseau du PC AppSport ; sur le même PC, utilisez 127.0.0.1. Cliquez sur Copier l'URL OCR.
  7. Dans Scoreboard OCR, ajoutez les zones de reconnaissance et choisissez la sortie Web Socket. Collez l'adresse copiée dans sa connexion WebSocket.
  8. Ouvrez le match modifiable dans AppSport, hors mode édition. Vérifiez OCR connecté et les valeurs reçues dans Table de marque.

Table de marque avec la source Scoreboard OCR : API locale activée sur le port 18800, accès réseau autorisé, URL protégée et associations des scores, du chrono et des fautes.

À repérer : sélectionnez Scoreboard OCR, enregistrez les réglages API et copiez l’URL du PC AppSport. Les noms à gauche des associations doivent correspondre aux zones reçues. Capture du renderer actuel avec des données fictives ; la clé d’exemple est masquée.

Cette intégration utilise le protocole Web Socket de Scoreboard OCR : Scoreboard OCR joue le rôle de client et AppSport celui de serveur. L’entrée fournie utilise ws://. Le protocole wss:// de Scoreboard OCR nécessite une terminaison TLS externe, qui n’est pas configurée par ces réglages.

L’URL OCR est distincte de WebSocket · live state, utilisé par Companion. Avec Require API key coché, l'adresse est ws://IP:PORT/api/v1/ocr/CLE_ENTREE_OCR : la clé privée incluse dans l'URL autorise uniquement les relevés, sans accès aux commandes. Avec cette option décochée et appliquée, l'adresse ne contient aucune clé, par exemple ws://192.168.0.40:18800/api/v1/ocr/. Les appareils capables de joindre cette API sans protection peuvent envoyer des relevés.

Associer les champs

Dans Table de marque → Scoreboard OCR → Champ OCR = variable d'habillage, écrivez une association par ligne. La colonne de gauche doit correspondre exactement au nom de la zone définie dans Scoreboard OCR. La colonne de droite désigne une variable d’export AppSport, sans .Text.

Champ OCR par défaut Variable d’habillage Utilisation
time CLOCK_MLS Horloge principale.
score_a T1_SCORE Score domicile.
score_b T2_SCORE Score extérieur.
period SET_MLS Numéro de période.
shot_clock SHOT_CLOCK_MLS Horloge de possession.

Exemple avec vos propres noms :

clock=CLOCK_MLS
home_score=T1_SCORE
away_score=T2_SCORE
quarter=SET_MLS
shot_clock=SHOT_CLOCK_MLS

Vous pouvez ajouter une variable telle que possession=POSSESSION. Chaque destination doit être unique. Les associations sont facultatives : les champs reçus sont aussi disponibles directement sous leur nom d'origine. Une valeur vide est ignorée pour conserver la dernière lecture correcte.

Exploiter directement une zone OCR

Vous pouvez laisser le bloc d'associations vide, enregistrer puis reconnecter l'OCR. Les relevés appliqués deviennent disponibles pour les sorties ; un relevé refusé en mode édition reste seulement dans le diagnostic.

Dans la carte OGraf → Données du modèle, choisissez une source ocr.… pour le champ souhaité :

Élément transmis Source OGraf directe
1_SCORE ocr.1_SCORE
2_SCORE.Text ocr.2_SCORE.Text
1FAUTE ocr.1FAUTE
FAUTE_T1_1.Source ocr.FAUTE_T1_1.Source
CLOCK ocr.CLOCK
export.CLOCK ocr.export.CLOCK

Tout ce qui suit le premier ocr. est le nom exact de la zone. Les points et suffixes font partie de ce nom ; ocr.export.CLOCK lit la zone OCR nommée export.CLOCK. Les deux horloges peuvent alimenter deux champs différents du modèle. Les associations OGraf sont conservées dans la configuration des cartes.

Pour vMix, un champ portant le même nom reçoit directement la valeur : 1_SCORE.Text peut recevoir 1_SCORE, 2_SCORE.Text reçoit 2_SCORE.Text, et l'objet image FAUTE_T1_1.Source reçoit le chemin du même élément OCR. AppSport utilise SetText ou SetImage selon le type du champ, avec une sortie connectée et la mise à jour API activée. Les chemins d'image doivent être accessibles sur le poste.

Pour CasparCG, ajoutez le nom brut aux champs de données de la carte, par exemple 2_SCORE.Text ; le modèle le lit comme une clé littérale (data['2_SCORE.Text'] dans du JavaScript).

Les noms bruts alimentent aussi les exports des six sports et les règles des clés personnalisées. Les associations explicites restent prioritaires en cas de collision avec une destination. Pour les variables communes du score, de la période et du chrono AppSport, vous pouvez conserver les associations vers T1_SCORE, T2_SCORE, SET_MLS et CLOCK_MLS. Une zone déjà nommée CLOCK_MLS alimente directement ce chrono ; une zone nommée CLOCK alimente seulement les champs qui utilisent ce nom, tant qu'elle n'est pas associée à CLOCK_MLS.

Exemple futsal avec les noms réellement transmis

Si le diagnostic affiche 1_SCORE, 2_SCORE.Text, 1FAUTE, 2FAUTE et CLOCK, utilisez :

CLOCK=CLOCK_MLS
1_SCORE=T1_SCORE
2_SCORE.Text=T2_SCORE
1FAUTE=T1_FOULS
2FAUTE=T2_FOULS

Le nom reçu 2_SCORE.Text est conservé exactement à gauche. À droite, utilisez les variables AppSport, par exemple T2_SCORE, sans suffixe ni point et avec une lettre initiale. Une association home_score=T1_SCORE n'a aucun effet si la source envoie seulement 1_SCORE.

Si la source envoie aussi export.CLOCK, choisissez une seule zone pour CLOCK_MLS. Ne conservez pas simultanément CLOCK=CLOCK_MLS et export.CLOCK=CLOCK_MLS : deux sources pour la même destination sont refusées. L'accès direct permet d'utiliser les deux zones séparément dans le modèle. L'horodatage d'application ne garantit pas que le modèle possède un champ utilisant chaque donnée reçue.

Pour une image reçue sous FAUTE_T1_1.Source, vous pouvez utiliser directement ocr.FAUTE_T1_1.Source dans OGraf ou le champ homonyme dans vMix. L'association facultative FAUTE_T1_1.Source=FAUTE_T1_1 fournit également la variable commune export.FAUTE_T1_1. Les chemins doivent être accessibles depuis le poste et autorisés par sa configuration de médias. Le nombre T1_FOULS ne crée pas automatiquement ces éléments d'images.

Le message Chaque champ OCR doit cibler un champ d'export distinct, sans suffixe .Text indique une association refusée, notamment une destination dupliquée, contenant un suffixe .Text/.Source, un point ou commençant par un chiffre. Corrigez le bloc puis cliquez sur Enregistrer : un échec de sauvegarde laisse les anciennes associations actives.

Comme pour les données externes de table de marque, seules les lectures reçues alimentent les sorties. Sans relevé OCR, les valeurs habituelles restent utilisées. La source enregistrée est exclusive : choisir OCR arrête l'écoute TCP Bodet ; choisir Bodet ou aucune source ferme la connexion OCR et efface ses lectures. Les paramètres de l'autre source restent conservés dans le projet. Seuls les champs effectivement reçus prennent la priorité. Un relevé qui ne contient que l’horloge conserve les scores précédents. Les associations s’appliquent aux exports des six sports et au calcul des clés personnalisées. Pour le tennis, adaptez les destinations aux variables de votre modèle de score.

OCR connecté, mais graphique inchangé

Dans Table de marque, comparez Dernier relevé reçu et Dernière application au match. La réception peut fonctionner alors que le match refuse l'application des valeurs.

  1. Ouvrez la page de la rencontre dans la fenêtre principale, avec les droits de modification, et quittez le mode édition. Le relevé suivant pourra être appliqué ; les données refusées ne sont pas rejouées automatiquement.
  2. Vérifiez les noms reçus dans le diagnostic. (accès direct) indique la source ocr.… utilisable sans association intermédiaire. À gauche de =, utilisez le nom exact de la zone OCR pour alimenter une variable commune ; export.CLOCK_MLS est un chemin de données OGraf. La destination OCR correspondante est CLOCK_MLS.
  3. Si le diagnostic demande une mise à jour des assets web, mettez à jour les pages du site chargé par le projet, puis rechargez la rencontre.
  4. Vérifiez le mode génération, la carte Live Output, la mise à jour des données et la connexion de chaque sortie. Une sortie OGraf connectée n'établit pas la connexion vMix.
  5. Comparez l'export CLOCK_MLS ou les scores dans le diagnostic appliqué et dans le modèle. Effacer les données OCR rétablit les valeurs habituelles et efface aussi les relevés reçus mais refusés.

Utiliser les valeurs dans les sorties

OGraf

Dans la carte OGraf, associez les champs du modèle à export.T1_SCORE, export.T2_SCORE, export.CLOCK_MLS ou export.SHOT_CLOCK_MLS. L’association automatique fonctionne aussi lorsque le nom du champ du modèle correspond à celui de la variable. Pour une horloge, timer.display fournit également le texte OCR ; utilisez export.CLOCK_MLS pour conserver exactement le format transmis, y compris les dixièmes.

vMix GT

Configurez une sortie vMix et activez la mise à jour des données API vMix du match. Dans le Title Designer, nommez les champs T1_SCORE.Text, T2_SCORE.Text et CLOCK_MLS.Text. AppSport reconnaît les variables correspondantes et transmet les valeurs avec SetText, via le transport vMix configuré. Pour conserver vos propres noms de champs, créez une clé personnalisée vMix.

Le principe d’une écriture native de l’horloge est :

Function=SetText&Input=IDENTIFIANT_DU_TITRE&SelectedName=CLOCK_MLS.Text&Value=3%3A12

Le suffixe .Text et SelectedName sont ceux de l’API officielle vMix. AppSport envoie ces commandes depuis sa sortie ; vous n’avez pas à créer une requête manuelle pour chaque relevé.

CasparCG

Configurez la carte CasparCG et les champs de données du modèle, notamment T1_SCORE, T2_SCORE, CLOCK_MLS et, si nécessaire, SHOT_CLOCK_MLS. Activez la mise à jour des données du match. AppSport passe les valeurs par son contrôleur AMCP ; le modèle HTML les reçoit dans sa fonction update(...). Prévoyez les noms de champs attendus par votre modèle dans les associations OCR.

Récupérer une valeur utilisée par OGraf dans vMix

Deux usages sont possibles :

  • Afficher l’habillage OGraf dans vMix : ajoutez l’URL de sortie OGraf à une entrée Web Browser vMix. Les scores et l’horloge sont alors rendus par OGraf dans cette entrée.
  • Alimenter un titre GT vMix : utilisez la même source OCR et les mêmes variables d’export pour la sortie vMix. Une entrée Web Browser OGraf fournit le rendu du graphisme ; elle ne crée pas automatiquement des champs de titre GT récupérables par vMix.

Pour un script ou un autre outil, récupérez les données via l’API locale :

$headers = @{ Authorization = 'Bearer CLE_API_LOCALE' }
$state = Invoke-RestMethod 'http://127.0.0.1:18800/api/v1/state' -Headers $headers
$state.ocr.values.time          # Champ brut, selon le nom choisi dans Scoreboard OCR.
$state.ocr.mappedValues.CLOCK_MLS
$state.texts.clock

L’en-tête Bearer est facultatif uniquement si Require API key a été désactivé et appliqué. Pour le seul texte de l’horloge, GET /api/v1/texts/clock renvoie du texte brut. Le flux /api/v1/ws publie aussi l’état courant pour les outils qui préfèrent un abonnement.

Comportement de l’horloge et des coupures

L’horloge OCR est une valeur externe. AppSport affiche le texte reçu, par exemple 03:12 ou 19.8, et ne déduit pas un démarrage, une pause ou un sens de comptage de la seule reconnaissance. L’horloge principale OCR prend la priorité sur le chrono local dans les sorties. CLOCK_ADD_MLS reste vide pendant cette prise de priorité.

Les messages rapprochés sont regroupés pour transmettre l’état récent aux sorties ; la cadence réellement visible dépend des transports et des lecteurs. Les dixièmes restent conservés dans le texte, sans garantie d’un affichage de chaque relevé intermédiaire.

À la déconnexion OCR, les dernières valeurs restent affichées, donc une horloge reste figée. Les réglages signalent la coupure. Reconnectez la source ou utilisez Effacer les données OCR pour rendre la priorité aux valeurs habituelles du match. Désactiver ou redémarrer l’API efface aussi les lectures. Un changement de match efface les données et ferme la connexion OCR : reconnectez et contrôlez la source avant la nouvelle rencontre. Recharger le même match conserve les valeurs reçues.

Ces valeurs servent aux habillages. Elles ne créent pas d’événement, ne recalculent pas le classement et ne remplacent pas les scores enregistrés dans la base. Enregistrez ou corrigez le score officiel dans le parcours habituel du match.

Distinguer un relevé reçu d’un relevé appliqué

Le diagnostic affiche Dernier relevé reçu et Dernière application au match séparément. En mode édition ou sans match modifiable prêt, une réception ne signifie pas que les sorties utilisent ces valeurs. Le message Aucun relevé appliqué au match confirme qu’elles restent dans le diagnostic ; quittez l’édition, ouvrez le bon match et attendez un nouveau relevé.

Diagnostic OCR : relevé reçu mais aucun relevé appliqué au match ; CLOCK et 2_SCORE.Text sont associés, FAUTE_T1_1 reste disponible en accès direct.

À repérer : l’heure de réception et Aucun relevé appliqué au match. Les lignes montrent les associations et les noms ocr.… disponibles en accès direct. Exemple fictif reçu pendant le mode édition.

Sauvegarder les réglages

Enregistrer dans Table de marque conserve la source choisie et les paramètres matériels dans scoreboardTable, ainsi que l'activation API, le port, l'accès réseau, la protection et les associations OCR dans localControl. Sans fichier ouvert, il propose de créer un .appsport. Les paramètres masqués sont conservés.

Dans AppSport settings, Save to .appsport conserve également ces rubriques, les identifiants API supplémentaires et les autres réglages du projet. Apply applique les réglages et les mémorise sur le poste, sans réécrire le fichier de projet. Les projets générés pour les rencontres reprennent la source et les réglages API courants.

Rouvrir un projet réapplique sa source scoreboardTable et ses réglages localControl. Les anciens projets sans localControl conservent les réglages API du poste. Si un ancien projet utilisait l'OCR sans source dédiée, sélectionnez Scoreboard OCR puis Enregistrer. Les clés privées restent dans la configuration locale du PC, et les relevés OCR restent en mémoire. Sur un autre PC, recopiez l'URL OCR avec la clé propre à ce poste si la protection est activée. Modifier les associations redémarre l'API et efface les lectures : reconnectez Scoreboard OCR ensuite.