IoT et IA

Inspection visuelle par IA dans l'industrie : de la caméra au verdict conforme/non conforme via MQTT

Comment fonctionne la détection de défauts par caméra sur une ligne de production, comment concevoir le poste d'inspection et comment publier les verdicts via MQTT pour que les automates, les tableaux de bord et les systèmes de traçabilité obtiennent tous la même réponse.

Poste d'inspection visuelle par IA avec une caméra industrielle au-dessus d'un convoyeur, un défaut mis en évidence sur une pièce et des verdicts conforme ou non conforme envoyés via MQTT
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

L'inspection visuelle par IA utilise des caméras et des modèles entraînés pour décider si une pièce est bonne ou défectueuse, à la cadence de la ligne et sans fatigue de l'opérateur. Cet article explique comment se construit un poste d'inspection, quels défauts l'IA traite mieux que la vision industrielle à base de règles, et comment publier chaque verdict conforme/non conforme via MQTT pour que le pilotage de ligne, les tableaux de bord et les enregistrements de traçabilité restent synchronisés.

Ce que fait l'inspection visuelle par IA

La vision industrielle traditionnelle repose sur des règles réglées à la main : mesurer un bord, compter les pixels au-dessus d'un seuil, comparer à un modèle de référence. Cela fonctionne bien pour les contrôles dimensionnels sur des pièces homogènes. Cela devient difficile quand les défauts varient en forme et en aspect, comme les rayures, les bosses, la porosité, la contamination, les étiquettes froissées ou les soudures irrégulières, ou quand l'éclairage et la finition des pièces changent au cours d'un poste.

L'inspection visuelle par IA remplace ou complète ces règles par un modèle appris. Selon le problème, le modèle relève de l'une de ces trois catégories :

  1. Classification : l'image entière est étiquetée ok ou ng (non conforme), ou se voit attribuer une classe de défaut.
  2. Détection d'objets ou segmentation : le modèle trace des boîtes ou des masques autour des défauts, ce qui indique leur emplacement et leur taille.
  3. Détection d'anomalies : le modèle est entraîné principalement sur des pièces conformes et signale tout ce qui paraît inhabituel. C'est précieux lorsque les échantillons défectueux sont rares, ce qui est courant sur une ligne mature.

Le résultat qui compte pour l'usine est simple : un verdict, une confiance, le type de défaut et un identifiant qui rattache le résultat à une pièce précise.

Anatomie d'un poste d'inspection

Un poste opérationnel est bien plus qu'un modèle. Les éléments qui déterminent sa réussite sont généralement physiques.

Composant Ce qu'il faut décider Piège courant
Caméra Matricielle ou linéaire, résolution, monochrome ou couleur Choisir la résolution avant de connaître la taille du plus petit défaut
Optique Focale de l'objectif, distance de travail, profondeur de champ Pièces à différentes hauteurs qui sortent de la zone de netteté
Éclairage Annulaire, dôme, rétroéclairage, champ sombre rasant Lumière ambiante des fenêtres qui modifie les résultats au fil de la journée
Déclenchement Cellule photoélectrique ou signal codeur de l'automate Capture temporisée par logiciel qui dérive avec la vitesse du convoyeur
Calcul PC industriel avec GPU, Jetson ou caméra intelligente Exécuter l'inférence sur un PC de bureau partagé
Éjection Soufflage, aiguillage, prélèvement par robot Aucune confirmation que l'éjection a réellement eu lieu
Chemin des données MQTT vers le pilotage de ligne, le MES et les tableaux de bord Résultats stockés uniquement sur le PC d'inspection

L'éclairage mérite le plus d'attention. Un bon éclairage rend les défauts évidents pour un humain qui regarde l'image brute ; si vous ne voyez pas la rayure, il est peu probable que le modèle apprenne à la reconnaître de façon fiable.

Construire le modèle de défauts

Le flux de travail du modèle suit un chemin prévisible :

  1. Collectez des images sur le poste réel, avec la caméra, l'objectif et l'éclairage définitifs. Les images prises au téléphone sur l'établi ne sont pas transposables.
  2. Étiquetez de manière cohérente. Rédigez un court catalogue de défauts avec des exemples de chaque classe et la limite entre acceptable et rebut. Les désaccords entre annotateurs deviennent du bruit pour le modèle.
  3. Entraînez et validez sur des images que le modèle n'a jamais vues, y compris des pièces de lots et de postes différents.
  4. Choisissez le seuil avec les ingénieurs qualité. Laisser passer un défaut (fuite) et rejeter une pièce conforme (faux rebut) ont des coûts très différents : le seuil de confiance est donc une décision métier.
  5. Commencez en mode fantôme : le modèle publie ses verdicts sans déclencher d'éjection, et vous les comparez à l'inspection manuelle.
  6. Déployez en périphérie, généralement sous forme de modèle optimisé sur un GPU ou un accélérateur à côté de la caméra. Consultez le déploiement de modèles ML sur des appareils edge pour les stratégies de packaging et de mise à jour.

L'inférence a sa place en périphérie, car la décision d'éjection doit intervenir avant que la pièce ne quitte la fenêtre d'éjection. Envoyer des images complètes vers le cloud ajoute de la latence et de la bande passante sans aucun bénéfice. Ce qui transite sur le réseau, c'est le résultat. La comparaison edge AI vs IA cloud détaille ce compromis.

Pourquoi MQTT pour les résultats de l'inspection visuelle par IA

Un verdict d'inspection a plusieurs consommateurs : l'automate ou le contrôleur de ligne qui déclenche l'éjection, le MES ou la base de traçabilité qui enregistre le résultat avec un numéro de série, un tableau andon, un tableau de bord qualité et éventuellement l'ordinateur portable d'un ingénieur pendant la mise en service. Relier chacun d'eux en point à point est fragile. Avec le publish/subscribe, le poste publie une seule fois et chaque consommateur s'abonne à ce dont il a besoin.

MQTT convient bien car il est léger, prend en charge la QoS 1 pour une livraison au moins une fois, et permet de publier un statut de poste en retained message, de sorte qu'un tableau de bord démarré plus tard sait immédiatement si le poste est en ligne. Des hiérarchies de topics suivant les niveaux ISA-95 donnent à chaque résultat une adresse claire, par exemple :

connectmq/plant1/assembly/line2/inspect1/result
connectmq/plant1/assembly/line2/inspect1/status
connectmq/plant1/assembly/line2/inspect1/stats
connectmq/plant1/assembly/line2/inspect1/cmd/threshold

ConnectMQ détecte les topics de style ISA-95 et Unified Namespace et présente les appareils par entreprise, site, zone, ligne et cellule dans sa vue des appareils, ce qui facilite la navigation dans un parc croissant de postes d'inspection. Si vous utilisez déjà Sparkplug B sur la ligne, le guide Sparkplug B et Unified Namespace explique comment les deux styles de topics coexistent.

Conception du payload de résultat

Conservez un message par pièce inspectée, compact et autodescriptif :

{
  "partId": "SN-24-104877",
  "ts": "2026-10-16T09:41:07.312Z",
  "verdict": "ng",
  "defect": "scratch",
  "confidence": 0.93,
  "bbox": [412, 188, 470, 214],
  "model": "housing-defects-v7",
  "threshold": 0.80,
  "inferenceMs": 18,
  "imageRef": "inspect1/2026-10-16/SN-24-104877.jpg"
}

Les champs model et threshold rendent les résultats traçables des mois plus tard : lorsqu'une réclamation client arrive, vous pouvez montrer quelle version du modèle a jugé la pièce et avec quel réglage. L'image elle-même reste sur un stockage local ou part vers un stockage d'images ; le message MQTT transporte une référence, pas les pixels.

Exemple : publier les résultats d'inspection en Python

Cet exemple simule la boucle du poste avec paho-mqtt 2.x. Remplacez run_model() par votre véritable appel d'inférence. Il publie les résultats en QoS 1, un statut online/offline en retained avec un Last Will, ainsi que des statistiques de rendement périodiques.

import json
import random
import time
import uuid
from datetime import datetime, timezone

import paho.mqtt.client as mqtt

HOST, PORT = "broker.connectmq.com", 1883
RUN_ID = uuid.uuid4().hex[:8]
BASE = f"connectmq/demo/{RUN_ID}/plant1/assembly/line2/inspect1"
MODEL = "housing-defects-v7"
threshold = 0.80


def run_model(image=None):
    """Stand-in for real inference: returns (label, confidence, bbox)."""
    if random.random() < 0.08:
        return random.choice(["scratch", "dent", "missing_screw"]), random.uniform(0.6, 0.99), [412, 188, 470, 214]
    return "ok", random.uniform(0.85, 0.99), None


def on_connect(client, userdata, flags, reason_code, properties):
    print("connected:", reason_code)
    client.publish(f"{BASE}/status", "online", qos=1, retain=True)
    client.subscribe(f"{BASE}/cmd/threshold", qos=1)


def on_message(client, userdata, msg):
    global threshold
    try:
        value = float(msg.payload)
        if 0.5 <= value <= 0.99:
            threshold = value
            print("threshold set to", threshold)
    except ValueError:
        print("ignored invalid threshold", msg.payload)


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"inspect1-{RUN_ID}")
client.will_set(f"{BASE}/status", "offline", qos=1, retain=True)
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT, keepalive=30)
client.loop_start()

ok = ng = 0
try:
    for n in range(1, 10_000):
        start = time.perf_counter()
        label, conf, bbox = run_model()
        inference_ms = round((time.perf_counter() - start) * 1000, 1)
        verdict = "ng" if label != "ok" and conf >= threshold else "ok"
        ok, ng = (ok + 1, ng) if verdict == "ok" else (ok, ng + 1)
        part_id = f"SN-{RUN_ID}-{n:06d}"
        result = {
            "partId": part_id,
            "ts": datetime.now(timezone.utc).isoformat(timespec="milliseconds"),
            "verdict": verdict,
            "defect": None if label == "ok" else label,
            "confidence": round(conf, 3),
            "bbox": bbox,
            "model": MODEL,
            "threshold": threshold,
            "inferenceMs": inference_ms,
        }
        client.publish(f"{BASE}/result", json.dumps(result), qos=1)
        if n % 20 == 0:
            stats = {"ok": ok, "ng": ng, "yield": round(ok / (ok + ng), 4)}
            client.publish(f"{BASE}/stats", json.dumps(stats), qos=1, retain=True)
        time.sleep(0.5)   # stays well under the public broker's 10 msg/s per client
finally:
    client.publish(f"{BASE}/status", "offline", qos=1, retain=True)
    client.loop_stop()
    client.disconnect()

Suivez les résultats depuis un autre terminal, en remplaçant l'ID par celui du topic :

mosquitto_sub -h broker.connectmq.com -p 1883 -i qa-viewer-91c2 \
  -t 'connectmq/demo/<run-id>/plant1/assembly/line2/inspect1/#' -v

Le serveur MQTT public gratuit convient pour essayer la conception du payload et des topics, mais il est ouvert à tous et réservé aux tests. Les données d'inspection de production ont leur place sur un broker privé en TLS sur le port 8883, avec les identifiants et le client ID attribués au poste.

Boucler avec le pilotage de ligne

L'actionneur d'éjection ne doit pas dépendre d'un aller-retour vers le cloud. Dans la plupart des usines, le poste signale l'éjection directement à l'automate via des E/S ou un bus de terrain, et MQTT transporte le même verdict pour tout le reste : comptage, traçabilité, tableaux de bord et alarmes. Lorsqu'un automate ou un contrôleur edge s'abonne bien au topic de résultat, gardez le broker près de la ligne ou assurez-vous que la logique d'éjection se met en sécurité si la connexion tombe.

Quelques règles garantissent la fiabilité du système :

  1. Publiez une confirmation d'éjection depuis le capteur de l'aiguillage, afin de rapprocher les verdicts ng des éjections réelles.
  2. Indiquez la version du modèle dans chaque message et conservez en retained un topic status décrivant le modèle actif.
  3. Limitez qui peut publier sur les topics cmd/, et validez chaque valeur de commande sur le poste, comme le fait l'exemple pour le seuil.
  4. Alertez sur la dérive du rendement. Une chute soudaine du rendement est souvent due à l'éclairage ou à la caméra plutôt qu'à un vrai problème de qualité.

Les règles d'alerte à seuil de ConnectMQ peuvent surveiller des valeurs numériques comme le rendement dans un message de statistiques et enregistrer les alertes dans le journal des alertes, ce qui permet de repérer rapidement une dérive sans construire un service de supervision séparé.

Problèmes courants en production

Symptôme Cause probable Ce qu'il faut vérifier
Précision en baisse après un arrêt de maintenance Caméra ou éclairage déplacé Comparer une image de référence avec la capture du jour
Plus de faux rebuts l'après-midi Lumière ambiante Capot ou carénage autour de la zone d'inspection
Résultats manquants dans la base de traçabilité Abonné hors ligne, QoS 0 QoS 1 et session persistante pour le processus d'écriture en base
Enregistrements en double Relivraison QoS 1 Utiliser partId comme clé idempotente à l'insertion
Nouveau type de défaut non détecté Le modèle ne l'a jamais vu Réinjecter les fuites dans l'étiquetage et réentraîner

Pour des projets de vision connexes, consultez la détection d'objets YOLO via MQTT, le guide Jetson Nano MQTT et le guide de référence IA et IoT.

Connectez vos postes d'inspection à ConnectMQ

Chaque poste, tableau de bord et processus d'écriture de traçabilité a besoin d'un point de rencontre fiable. ConnectMQ vous fournit un broker MQTT managé avec TLS, MQTT 5, une vue des appareils ISA-95 et des alertes à seuil, sans exploiter d'infrastructure de broker sur le réseau de l'usine. Créez un broker avec l'offre gratuite Serverless sur app.connectmq.com, sans carte bancaire, puis passez à un déploiement Dedicated ou BYOC lorsque la ligne entre en production. Si vous êtes encore en phase d'évaluation, le serveur MQTT public gratuit est idéal pour prototyper le payload.

Questions fréquentes

Combien d'images faut-il pour entraîner un modèle d'inspection visuelle par IA ?

Cela dépend de la variabilité des pièces et des défauts. Commencez avec des images du poste réel, couvrez chaque classe de défaut et les variations normales, et ajoutez des exemples chaque fois que le modèle manque quelque chose en mode fantôme.

Faut-il envoyer les images via MQTT ?

En général, non. Envoyez le verdict, la confiance et une référence d'image via MQTT, et stockez les images en local ou dans un stockage objet, car les gros messages binaires atteignent les limites de taille du broker et ralentissent chaque abonné.

L'inspection visuelle par IA peut-elle remplacer la vision industrielle à base de règles ?

Pas toujours. La mesure dimensionnelle précise reste mieux assurée par des règles, tandis que l'IA gère les défauts d'aspect variables. De nombreux postes combinent les deux et publient un verdict unique.

Quelle QoS utiliser pour les résultats d'inspection ?

La QoS 1 est le choix habituel, car chaque résultat doit arriver pour la traçabilité. Rendez l'insertion en base idempotente sur l'identifiant de pièce afin que d'éventuels doublons soient sans conséquence.

Articles liés

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.