Bonjour à tous.
Je travaille actuellement sur un sujet portant sur la reconnaissance des caractères brailles. Le projet consiste d'abord à reconnaître les caractères au sein d'un document écrit en braille. Je compte ensuite transcrire les caractères brailles reconnus en alphabet latin, de manière à reconstituer un texte qui puisse être lu par les personnes ne sachant pas lire le braille.
Je suis novice sur le plan du traitement d'images. Donc je rencontre pas mal de difficultés pour réaliser ce travail. Je me suis dans un premier temps renseigné sur les méthodes de reconnaissance optique de caractères. Pour commencer, j'ai choisi d'utiliser la librairie OpenCV pour réaliser ce travail. J'ai pris une image d'un document braille :
Ensuite je me suis renseigné sur les étapes importantes à réaliser pour le traitement d'images dans le cas d'une reconnaissance optique de caractères, à savoir :
- Convertir l'image originale en niveaux de gris
- Améliorer la qualité de l'image (réduction du bruit, amélioration du contraste au niveau des contours ...)
- Réaliser la binarisation de l'image
J'ai tenté de réaliser ce traitement sous Java en utilisant OpenCV et en m'inspirant de ce que l'on trouve sur Internet :
Pour ce premier test, mon résultat est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class TestTraitement { static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); } public static void main(String args[]) { Mat imgGrayscale = new Mat(); Mat imgBlurred = new Mat(); Mat imgCanny = new Mat(); Mat image = Imgcodecs.imread("C:/Users/BrailleTest.jpg", 1); int imageWidth = image.width(); int imageHeight = image.height(); Imgproc.cvtColor(image, imgGrayscale, Imgproc.COLOR_BGR2GRAY); Imgproc.GaussianBlur(imgGrayscale, imgGrayscale, new Size(3, 3), 0); Imgproc.adaptiveThreshold(imgGrayscale, imgGrayscale, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 5, 4); Imgproc.medianBlur(imgGrayscale, imgGrayscale, 3); Imgproc.threshold(imgGrayscale, imgGrayscale, 0, 255, Imgproc.THRESH_OTSU); Imgproc.GaussianBlur(imgGrayscale, imgGrayscale, new Size(3, 3), 0); Imgproc.threshold(imgGrayscale, imgGrayscale, 0, 255, Imgproc.THRESH_OTSU); Imgcodecs.imwrite( "C:/Users/resultat.jpg", imgGrayscale ); } }
Je souhaiterais avoir des avis sur l'image obtenue et sur les possibilités d'amélioration. Je pense que l'on peut jouer sur certains paramètres ou peut-être réaliser d'autres traitements pour améliorer ce premier résultat.
J'aimerais avoir des conseil pour passer à l'étape suivante et savoir s'il y aura des solutions possibles pour ensuite réaliser la détection des points à partir de cette image ?
Merci pour vos réponses.
Partager