IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

OCR arabe (Problème alignement) [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif

    Homme Profil pro
    Bricoleur ( débutant )
    Inscrit en
    Juillet 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Bricoleur ( débutant )
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 51
    Par défaut OCR arabe (Problème alignement)
    salut Tous le monde

    J'ai un petit problème pour aligner le texte capté de l'image box

    j'ajoute les module de tesseract ( arabe, français, anglais, hindi )

    j'ai trouvé le problème pour l'arabe moi même ( j'ai rien trouvé sur le net sauf le code qui j'ai réglé moi même en copiant le fichier anglais eng.tesseract_cube.nn en ara.tesseract_cube.nn et en modifiant l'option OEM_TESSERACT_ON*LY par OEM_CUBE_ONLY et ça va jouer )

    Mon problème comme j'ai mentionné en haut c'est que le text généré est aligné de gauche à droite ( mot de gauche à droite et pas le positionnement)

    Quelqu'un peut me dire ce que je doit rajouter pour résoudre ce petit problème.

    merci


    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
     
    Imports Emgu.CV 'Imports Emgu.CV.Util
    Imports Emgu.CV.OCR
    Imports Emgu.Util
    Imports Emgu.CV.Structure
     
    Public Class Form1
        Dim OCRz As Tesseract = New Tesseract("tessdata", "ara", Tesseract.OcrEngineMode.OEM_CUBE_ONLY)          'OEM_TESSERACT_ON*LY)
        'OEM_TESSERACT_ONLY,           // Run Tesseract only - fastest
        'OEM_CUBE_ONLY,                // Run Cube only - better accuracy, but slower
        'OEM_TESSERACT_CUBE_COMBINED,  // Run both and combine results - best accuracy
        'OEM_DEFAULT                   // Specify this mode when calling init_*(),
        '                              // to indicate that any of the above modes
        '                              // should be automatically inferred from the
        '                              // variables in the language-specific config,
        '                              // command-line configs, or if not specified
        '                              // in any of the above should be set to the
        '                              // default OEM_TESSERACT_ONLY.
        Dim pic As Bitmap = New Bitmap(697, 206)
        Dim gfx As Graphics = Graphics.FromImage(pic)
     
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            'If Windows XP
            gfx.CopyFromScreen(New Point(Me.Location.X + PictureBox1.Location.X + 4, Me.Location.Y + PictureBox1.Location.Y + 30), New Point(0, 0), pic.Size)
            PictureBox1.Image = pic
     
            'If Windows 7
            'gfx.CopyFromScreen(MousePositi*on, New Point(0, 0), pic.Size)
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            OCRz.Recognize(New Image(Of Bgr, Byte)(pic))
            RichTextBox1.Text = OCRz.GetText
            RichTextBox1.SelectedText = RightToLeft
            RichTextBox1.SelectionAlignment = HorizontalAlignment.Right
            RichTextBox1.Font = New Font("Traditional Arabic", 14)
            RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Bold)
        End Sub
    End Class

  2. #2
    Membre actif

    Homme Profil pro
    Bricoleur ( débutant )
    Inscrit en
    Juillet 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Bricoleur ( débutant )
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 51
    Par défaut
    Bonjours

    la phrase retournée est inversée ...

    Exemple:

    Ritchtextbox1 retournée : monde tous salut

    j'aimerai qu'elle est : salut tous le monde

    je croit que mon problème est facile mais pour la mienne j'ai trompé ??
    J'ai essayé pas mal des choses ( Split, Mid, strreverse, ...etc ) mais rien

    merci

  3. #3
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Tu peux essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           Dim chaine As String = "On sait depuis longtemps que travailler avec du texte lisible et contenant du sens est source de distractions, et empêche de se concentrer sur la mise en page elle-même. L'avantage du Lorem Ipsum sur un texte générique comme 'Du texte. Du texte. Du texte.' est qu'il possède une distribution de lettres plus ou moins normale, et en tout cas comparable avec celle du français standard. De nombreuses suites logicielles de mise en page ou éditeurs de sites Web ont fait du Lorem Ipsum leur faux texte par défaut, et une recherc"
     
     
            chaine = String.Join(" ", chaine.Split(" ").Reverse())
            'On fait un tableau de mot à partir de la chaine en utilisant le séparateur espace, puis on applique .Revers() qui inverse le tableau, et on reconcaténe le tableau en une seule phrase
            MsgBox(chaine)

  4. #4
    Membre actif

    Homme Profil pro
    Bricoleur ( débutant )
    Inscrit en
    Juillet 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Bricoleur ( débutant )
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 51
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Tu peux essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           Dim chaine As String = "On sait depuis longtemps que travailler avec du texte lisible et contenant du sens est source de distractions, et empêche de se concentrer sur la mise en page elle-même. L'avantage du Lorem Ipsum sur un texte générique comme 'Du texte. Du texte. Du texte.' est qu'il possède une distribution de lettres plus ou moins normale, et en tout cas comparable avec celle du français standard. De nombreuses suites logicielles de mise en page ou éditeurs de sites Web ont fait du Lorem Ipsum leur faux texte par défaut, et une recherc"
     
     
            chaine = String.Join(" ", chaine.Split(" ").Reverse())
            'On fait un tableau de mot à partir de la chaine en utilisant le séparateur espace, puis on applique .Revers() qui inverse le tableau, et on reconcaténe le tableau en une seule phrase
            MsgBox(chaine)
    Merci beaucoup _Ez3kiel, c'est encore vous

    Le code fonctionne très bien sauf une petit problème:

    Si le texte capturé est de plusieurs lignes donc le résultat n'est pas correcte:

    par Ex:

    texte : " ligne 1: salut
    ligne 2: blabla blibli blaaa "

    résultat:

    blaaa

    blibli blabla blabla salut

    Vous pouvez l'essayer avec des phrase multiligne pour que vous compreniez


    J'ai aussi trouvez autre solution grâce a Jordane du forum CodeSource qui ma donnez le code suivant par la méthode Split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim strNew As String = ""
    Dim str As String = OCRa.GetText().ToString
    Dim strarr() As String
    strarr = str.Split(" ")
            'strarr = str.Split(New Char() {" "c})
    For i As Integer = strarr.Length - 1 To 0 Step -1
        strNew = strNew & " " & strarr(i)
    Next
    RichTextBox1.Text = strNew
    Il m a conseillé d'utiliser la méthode Replace ce que je suis entraine de faire une recherche et d'essayer quelque codes, On sais jamais, peut être je peut faire une effort pour bricoler un peu sur le code

    merci _Ez3kiel, vous êtes le N°

  5. #5
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par karirovax Voir le message
    Merci beaucoup _Ez3kiel, c'est encore vous

    Le code fonctionne très bien sauf une petit problème:

    Si le texte capturé est de plusieurs lignes donc le résultat n'est pas correcte:

    par Ex:

    texte : " ligne 1: salut
    ligne 2: blabla blibli blaaa "

    résultat:

    blaaa

    blibli blabla blabla salut

    Vous pouvez l'essayer avec des phrase multiligne pour que vous compreniez


    J'ai aussi trouvez autre solution grâce a Jordane du forum CodeSource qui ma donnez le code suivant par la méthode Split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim strNew As String = ""
    Dim str As String = OCRa.GetText().ToString
    Dim strarr() As String
    strarr = str.Split(" ")
            'strarr = str.Split(New Char() {" "c})
    For i As Integer = strarr.Length - 1 To 0 Step -1
        strNew = strNew & " " & strarr(i)
    Next
    RichTextBox1.Text = strNew
    Il m a conseillé d'utiliser la méthode Replace ce que je suis entraine de faire une recherche et d'essayer quelque codes, On sais jamais, peut être je peut faire une effort pour bricoler un peu sur le code

    merci _Ez3kiel, vous êtes le N°

    Tu changeras jamais toi et tes flatteries injustifiées ...


    Tu peux boucler sur les lignes de ta RichTextBox pour l'appliquer sur chacune des lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                For Each ligne In RichTextBox1.Lines
     
                    ligne = String.Join(" ", ligne.Split(" ").Reverse())
     
                    MsgBox(ligne)
     
                Next

  6. #6
    Membre actif

    Homme Profil pro
    Bricoleur ( débutant )
    Inscrit en
    Juillet 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Bricoleur ( débutant )
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 51
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Tu changeras jamais toi et tes flatteries injustifiées ...


    Tu peux boucler sur les lignes de ta RichTextBox pour l'appliquer sur chacune des lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                For Each ligne In RichTextBox1.Lines
     
                    ligne = String.Join(" ", ligne.Split(" ").Reverse())
     
                    MsgBox(ligne)
     
                Next
    Mille merci pour vous _Ez3kiel

    Code fonctionne comme je veux sauf que je connais pas comment récupérer le resultat du MSGBOX vers le RitchTextBox

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème alignement dans cellule sous IE
    Par mauriceuh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/02/2007, 13h08
  2. problème alignement de colonnes d'un tableau
    Par freija dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/08/2006, 15h34
  3. [CSS] problème alignement DIV
    Par luta dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 12/06/2006, 17h22
  4. Problème alignement image par rapport au texte
    Par finalfx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/05/2006, 08h12
  5. Problème alignement avec trois div
    Par finalfx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/05/2006, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo