

Ce genre de nouvelles tragiques a choqué le monde et nous entendons ce genre de nouvelles depuis des siècles. Seconde doc catastrophe, En moyenne, 8 effondrements de bâtiments se produisent chaque année dans le monde, avec 343 décès par an. C’est choquant !! La raison de l’effondrement dans la plupart des cas est assez simple, Défaut de détection des fissures à un stade précoce.
Les fissures sont un aspect important dans la surveillance de la santé structurelle de la structure en béton et le diagnostic de sa détérioration. Si des fissures dans une structure en béton sont détectées plus tôt et que des mesures supplémentaires sont prises pour améliorer la santé de la structure, plusieurs vies pourraient être sauvées.
- Approche actuelle
- Aperçu de l’ensemble de données
- Solutions disponibles
- Algorithme de traitement d’image
- Conclusion
L’inspection de la structure en béton est effectuée tous les cinq à dix ans pour évaluer la rigidité et la résistance à la traction. Au cours de ce processus, des ingénieurs civils expérimentés vérifient visuellement les fissures et leurs caractéristiques telles que la longueur, la forme et la profondeur. Ensuite, ils dessinent toutes les fissures et préparent le rapport d’inspection. Ce processus prend du temps, est coûteux et sujet aux erreurs humaines. Pour résoudre ce problème, l’industrie a de plus en plus cherché à utiliser des caméras pour effectuer des inspections basées sur l’image ces dernières années. Ce processus complexe peut être facilité en utilisant différents aspects de l’intelligence artificielle. Certains ensembles de données publics contiennent des images de murs fissurés et non fissurés. Dans cet article, j’ai travaillé sur cet énoncé de problème où j’ai envisagé une approche unique pour le résoudre.
L’ensemble de données que j’ai utilisé pour l’énoncé du problème est « Ensemble de données de détection de fissures de surface« . Il est disponible sur Kaggle. Les ensembles de données contiennent des images de diverses surfaces de béton avec et sans fissures. Les données d’image sont divisées en deux en tant que négatif (sans fissure) et positif (avec fissure) dans un dossier séparé pour la classification des images. Chaque classe a 20 000 images pour un total de 40 000 images avec 227 x 227 pixels avec des canaux RVB. Le jeu de données est généré à partir de 458 images haute résolution (4032×3024 pixels) avec la méthode proposée par Zhang et al (2016). Il a été constaté que les images haute résolution présentent une grande variance en termes de finition de surface et de conditions d’éclairage. Aucune augmentation de données n’est appliquée en termes de rotation aléatoire ou de retournement ou d’inclinaison.
Normalement, lorsque ce type d’énoncé de problème est donné, la plupart des gens appliqueraient la classification des images. Mais je pense que l’utilisation de modèles d’apprentissage en profondeur pour classer les images est un exemple classique de sur-ingénierie. La plupart des ordinateurs portables disponibles pour cet ensemble de données sur Kaggle appliquent des architectures CNN personnalisées ou affinent des architectures pré-formées. Le traitement d’image est un aspect très sous-estimé dans notre domaine. Une compréhension approfondie du traitement d’image peut aider à résoudre plusieurs problèmes à la fois.
Pour résoudre le problème de classification d’images, j’ai développé un algorithme de traitement d’images à l’aide d’OpenCV. Avec seulement quelques lignes de code, j’ai atteint une précision de près de 96 %. Pour ceux qui ne connaissent pas OpenCV, il s’agit d’une bibliothèque Python qui fournit des fonctionnalités pour optimiser l’image et effectuer diverses opérations mathématiques dessus.
Cette section du blog décrira une présentation du code d’algorithme de bout en bout qui fournira une compréhension de la solution que j’ai développée. Comme mentionné précédemment dans la description des données, les deux classes sont équilibrées. Confirmer,
Total number of positive images are 20000
Total number of negative images are 20000
Des techniques d’augmentation de données telles que le retournement, la rotation, l’augmentation des couleurs peuvent être mises en œuvre pour augmenter la quantité de données, mais dans le cas du traitement d’image, cela semble inutile. Tout d’abord, nous allons examiner quelques échantillons des deux classes.
Dans l’étape suivante, j’ai créé un algorithme de traitement d’image à l’aide d’OpenCV. J’ai divisé le processus en quatre étapes simples.
- Netteté : chaque image passée par l’algorithme sera mise au point en premier. La raison d’être de la netteté est de s’assurer que chaque bord de l’image est clairement visible.
- Flou : Nous ne souhaitons capturer que les grandes arêtes car elles représentent les fissures. Si nous nous contentons de la première passe, cela capturera tous les bords, même les plus petits. J’ai donc flouté l’image dans la deuxième étape pour me débarrasser des petits bords. L’intensité de la netteté doit être supérieure au flou pour s’assurer que les grands bords ne sont pas flous à cette étape.
- Seuil : l’image est ensuite convertie en une image en niveaux de gris (canal unique), suivie de la conversion de l’image en niveaux de gris en une image binaire. J’ai utilisé une technique de seuil simple avec un seuil de base de 230.
- Détection des contours : les contours sont détectés à partir de l’image binaire obtenue lors de la troisième passe. Pour chaque image, j’ai extrait le contour avec un maximum de points de pixels. Fondamentalement,
- Le plus grand contour des images positives doit avoir plus de N pixels.
- Le plus grand contour de l’image négative doit être inférieur à N pixels.
L’algorithme fonctionne bien si le score de la classe positive est proche de zéro et le score de la classe négative est proche de 20000. Dans ce cas, nous avons pris N comme 100. Il peut être encore optimisé pour de meilleurs résultats. La méthode définie ci-dessus est mise en œuvre sur toutes les images du jeu de données.
{'Positive': 1582, 'Negative': 19962}
D’après le résultat ci-dessus, il est clair que:
- 1582 images positives sont mal classées
- 19962 images négatives sont correctement classées
J’ai également calculé la précision de l’algorithme.
Accuracy is 95.95%
Après la procédure pas à pas du code, vous pourriez penser, « C’est facile. J’aurais pu le faire aussi. » C’est vrai. Plus que de détecter les fissures, Je suis beaucoup plus intéressé par la sensibilisation à la puissance du traitement d’image. L’apprentissage en profondeur n’est pas la réponse à tous les problèmes. Plusieurs cas d’utilisation peuvent être résolus avec lui, comme trouver une place de parking, évaluer l’examen QCM, et bien plus encore. Suite, exécution rapide Et moins de consommation de RAM sont des avantages qui découlent du choix du traitement d’image par rapport à l’apprentissage en profondeur. Outre OpenCV, Scikit-image est également une bibliothèque populaire pour effectuer des opérations sur les images.
C’est tous les gens. Bon apprentissage.