Retours d'Expérience en Vision Industrielle avec Halcon

Pourquoi opter pour Halcon ?

Trois avantages majeurs motivent le choix de ce logiciel pour la vision industrielle :

  • Bibliothèque d'algorithmes étendue : Plus de 1500 opérateurs dédiés au positionnement, à la métrologie, à la reconnaissance et au contrôle de défauts.
  • Précision industrielle : Traitement au niveau sous-pixel garantissant une stabilité et une reproductibilité élevées.
  • Flexibilité d'intégration : Compatible avec les langages C++, C# et Python, permettant des déploiements autonomes.

Ses domaines d'application typiques comprennent la mesure de dimensions, le contrôle de surface, la lecture de codes-barres ou de caractères, et le guidage robotique.

Modules Principaux

Acquisition d'Images

open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'cam0', 0, -1, HandleAcq)
grab_image_async (ImgAcq, HandleAcq, -1)

L'étape préliminaire consiste à configurer les paramètres de la caméra (temps d'exposition, gain) pour éviter des initialisations répétitives lors des acquisitions suivantes.

Prétraitement de l'Image

rgb3_to_gray (ImgAcq, ImgGrise)
mean_image (ImgGrise, ImgFloue, 5, 5)
binary_threshold (ImgFloue, SeuilAuto, 'max_separability', 'light', ValSeuil)
threshold (ImgFloue, RegSeuil, 0, ValSeuil)

Parmi les opérateurs couramment utilisés pour cette étape, on trouve :

  • emphasize pour rehausser le contraste.
  • median_image pour le filtrage du bruit.
  • dyn_threshold pour gérer les variations d'éclairage.

Extraction de Caractéristiques et Positionnement

find_scaled_shape_model (ImgAcq, IDModele, -pi/10, pi/10, 0.8, 1.1, 0.7, 1, 0.5, 'least_squares', 0, 0.8, LigneRef, ColRef, AngleRef, EchelleRef, ScoreRef)
hom_mat2d_identity (MatHom)
hom_mat2d_translate (MatHom, LigneRef, ColRef, MatHomDepl)
hom_mat2d_rotate (MatHomDepl, AngleRef, LigneRef, ColRef, MatHomFinal)

La stratégie clé est d'utiliser l'appariement de modèle pour localiser un objet de référence, puis de baser toutes les inspections suivantes sur cette position pour éviter une recherche coûteuse sur l'image entière.

Métrologie

creer_modele_metrologie (ModeleMet)
ajouter_objet_metrologie_cercle (ModeleMet, 'begin_line', LigneDebut, ColDebut, 'end_line', LigneFin, ColFin, 'mesure', 5, 2, 1, 'all', ParamMesure, IDObjet)
ajuster_modele_metrologie (ModeleMet)
obtenir_resultat_metrologie (ModeleMet, IDObjet, 'all', 'result_type', 'parametre', ParamCercle)

Ce module est idéal pour mesurer des diamètres, calculer des distances ou des angles avec une grande précision.

Reconnaissance de Caractères (OCR)

creer_classificateur_ocr_mlp ('Helvetica', 'upper', [], [], HandleClassif)
entrainer_classificateur_ocr_mlp (HandleClassif, 100, 1, 0.01)
appliquer_ocr_classificateur_mlp (ImgAcq, RegCaractere, HandleClassif, TexteReconnu, Confiance)

Il est crucial que les données d'entraînement représentent fidèlement les variations de police, d'éclairage et d'orientation rencontrées en conditions réelles.

Cas Pratique : Contrôle de Défauts sur une Vis

Problématique

Détecter les rayures, éclats et contaminations sur la tête d'une vis.

Processus

Acquisition d'image → Localisation de la vis → Extraction de la zone d'intérêt (ROI) → Analyse des défauts → Décision et communication du résultat.

Extrait de Code

% Localisation de la vis par appariement de forme
find_shape_model (ImgAcq, IDModeleVis, -pi/6, pi/6, 0.7, 1, 0.6, 'least_squares', 4, 0.9, PosL, PosC, PosA, ScoreVis)

% Définition de la ROI autour de la tête de vis
gen_circle (CercleTete, PosL, PosC, 20)
intersection (CercleTete, DomaineImg, ZoneTete)
reduce_domain (ImgAcq, ZoneTete, ImgTete)

% Détection des rayures (structures linéaires sombres)
lines_gauss (ImgTete, LignesDetectees, 2, 'dark', 'false', 'bar-shaped', 'false')
select_shape (LignesDetectees, Rayures, 'area', 'and', 8, 400)

% Vérification de la circularité (pour détecter les éclats)
fit_circle_contour_xld (ContourTete, 'ahuber', -1, 0, 0, 3, 2, CercL, CercC, CercR, PhiDeb, PhiFin, OrdrePoints)
distance_ps (CercL, CercC, ContourTete, DistanceMax)

% Émission du verdict
if (|Rayures| > 0 or DistanceMax > 0.5)
    afficher_message (Fenetre, 'PIECE NON CONFORME', 'window', 10, 10, 'red', 'true')
else
    afficher_message (Fenetre, 'PIECE CONFORME', 'window', 10, 10, 'green', 'true')
endif

Optimisation des Performances

Restreindre la Zone de Traitement

% À éviter : traitement sur l'image entière
analyser_zones_suspectes (ImgAcq, ...)

% À privilégier : localisation préalable pour réduire la ROI
reduce_domain (ImgAcq, ZoneRecherche, ImgReduite)
analyser_zones_suspectes (ImgReduite, ...)

Utilisation de Pyramides d'Images

% Le paramètre 'num_levels' et le seuil 'min_score' permettent d'équilibrer vitesse et précision.
find_shape_model (ImgAcq, IDModele, ..., 'num_levels', 4, 'min_score', 0.6, ...)

Réutilisation des Objets

% Mauvaise pratique : création dans la boucle
pour i := 1 à 1000 pas 1
    creer_modele_forme (...)
fin_pour

% Bonne pratique : création unique avant la boucle
creer_modele_forme (IDModele, ...)
pour i := 1 à 1000 pas 1
    find_shape_model (Img, IDModele, ...)
fin_pour

Difficultés Courantes et Solutions

Problème Cause Probable Solution
Positionnement instable Modèle basé sur trop peu de caractéritsiques Enrichir le jeu d'entraînement avec des images sous différents angles et éclairages.
Vitesse de traitement lente Recherche sur l'image complète Utiliser une localisation grossière pour limiter la zone d'analyse.
Nombre élevé de fausses détections Seuillage fixe inadapté Adopter un seuillage dynamique ou envisager le deep learning.
Contours imprécis Extraction sous-pixel désactivée Activer l'opérateur edges_sub_pix.
Latence de communication Création de connexions à chaque cycle Réutiliser les descripteurs de caméra et de fenêtre.

Comparaison Halcon vs. OpenCV

Critère Halcon OpenCV
Précision Niveau sous-pixel, adaptée à l'industrie Niveau pixel, souvent suffisante
Stabilité Support commercial, maintainance à long terme Maintenu par la communauté, versions fréquentes
Efficacité de développement Opérateurs haut niveau, courbe d'apprentissage rapide Implémentation d'algorithmes souvent nécessaire
Coût Licence commerciale (élevé) Open source (gratuit)
Domaines privilégiés Contrôle industriel, métrologie de précision Recherche, prototypage, applications non critiques

Conseil : Privilégier Halcon pour les projets industriels exigeants. OpenCV convient aux budgets limités ou aux travaux de recherche.

Parcours d'Apprentissage Suggéré

  • Semaine 1 : Notions de base d'HDevelop et acquisition d'images.
  • Semaine 2 : Prétraitement, seuillage et morphologie mathématique.
  • Semaine 3 : Appariement de formes et positionnement.
  • Semaine 4 : Métrologie, OCR et détection de défauts.
  • Semaine 5 : Intégration avec C# ou C++.
  • Semaine 6 : Projet pratique complet et optimisation.

Les ressources les plus utiles incluent les exemples officiels intégrés au logiciel, le forum de la communauté Halcon pour le dépannage, et des ouvrages de référence sur les principes algorithmiques.

La force de Halcon réside moins dans le nombre de ses opérateurs que dans la robustesse industrielle et la reproductibilité de ses résultats. Trois principes guident l'usage efficace : privilégier une détection ciblée après localisation, affiner les paramètres au-delà des valeurs par défaut, et tester systématiquement les vraiations d'éclairage, d'angle et de production.

Étiquettes: Halcon vision industrielle opérateurs traitement d'images métrologie

Publié le 17 juin à 20h50