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 :
emphasizepour rehausser le contraste.median_imagepour le filtrage du bruit.dyn_thresholdpour 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.