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

Traitement d'images Discussion :

Récupérer les coordonnées des bulles de texte dans une image


Sujet :

Traitement d'images

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Récupérer les coordonnées des bulles de texte dans une image
    Bonjour à tous,
    Je cherche à obtenir les coordonnées de certaines formes dans une image. Je m'explique, ces formes sont des "bulles" de texte: soit circulaires soit rectangulaires. L'image est un scan d'un manga .
    Le déroulement auquel je pense est celui-ci : d'abord détecter les différentes formes du scan puis ensuite en extraire les coordonnées, est-ce la bonne méthode a suivre ?
    Le problème avec cette méthode c'est que je me retrouve avec des milliers de formes alors que je veux seulement les "bulles" de texte. Comment faire pour bien détecter ces bulles et ensuite en extraire les coordonnées?

    Nom : scan01.png
Affichages : 490
Taille : 250,5 Ko

    Code Python : 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
    import numpy as np
    import cv2
     
    def coordonnees():
     
        image = cv2.imread('/home/jooker/Bureau/Appli/images/scan01.png')
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        ret,thresh = cv2.threshold(gray,250,255,cv2.THRESH_TRUNC)
        contours,h =cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)
     
        for cnt in contours:
            perimetre=cv2.arcLength(cnt,True)
            approx = cv2.approxPolyDP(cnt,0.01*perimetre,True)
     
            M = cv2.moments(cnt)
            cX = int(M["m10"] / M["m00"])
            cY = int(M["m01"] / M["m00"])
            cv2.drawContours(image,[cnt],-1,(255,200,0),2)
            if len(approx)==3:
                shape = "triangle"
            elif len(approx)==4:
                (x, y, w, h) = cv2.boundingRect(approx)
                ratio = w / float(h)
                if  not(0.95 <= ratio <= 1.05):
                    shape = "rectangle"
                else:
                	shape = ""
            else:
                shape= "circle"
            cv2.putText(image, shape, (cX, cY), cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 0, 0), 2)
     
        cv2.imshow('image',image)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
     
     
    coordonnees()

    Nom : Capture du 2019-12-16 02-34-51.png
Affichages : 474
Taille : 223,0 Ko

    Ce code fonctionne mais comme vous le voyez, beaucoup de formes sont repérés et inutiles, de plus les bulles rectangulaires sont mal repérés.. (je n'extrais pas encore les coordonnées)

  2. #2
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Balayer ton image ligne à ligne, de haut en bas jusqu'à trouver un pixel "noir".
    Il est sur un contour : suivre le contour jusqu'à revenir au pt de départ.
    Recopier cette zone qqpart ou tu pourras l'analyser.
    La gommer de l'image de travail
    recommencer jusqu'au bas de la page
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    D'accord merci, je vais essayer !
    Cependant, la première étape qui consiste à trouver un pixel noir : n'est ce pas trop vague ? Je veux dire, il y a d'autres pixels noirs que ceux qui constituent les bulles (ex : les yeux, les ombres, ect)

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Salut, quelque soit le langage que tu utilises pour développer, il existe des libraries de type "character recognition".
    Utilise une de ses librairies, tu auras l'emplacement de tout les textes et même l'identification de chaque caractère.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Récupérer les coordonnées des bulles de texte dans une image Répondre à la discussion
    Bonjour,

    Citation Envoyé par Jooker188 Voir le message
    ... Cependant, la première étape qui consiste à trouver un pixel noir : n'est ce pas trop vague ? ...
    Tu peux effectivement rechercher des rectangles noirs, ce qui est en soi beaucoup plus sélectif, et se prête par ailleurs à une restriction raisonnable dans la mesure où tu peux encadrer approximativement les positions de l'un des coins, ainsi que les dimensions.
    En introduisant par exemple:
    a) les bornes (Xmin, Xmax, Ymin, Ymax) encadrant les coordonnées du coin inférieur gauche (le choix dépend du sens de parcours de l'image défini par ton logiciel),
    b) les bornes (Lmin, Lmax, Hmin, Hmax) encadrant les dimensions des phylactères,
    tu pourras envisager un balayage de l'image à l'aide de boucles multiples imbriquées:
    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
    FOR Xim:= Xmin TO Xmax DO
      FOR Yim:= Ymin TO Ymax DO
        FOR La;= Lmin TO Lmax DO
          FOR Ha:= Hmin TO Hmax DO
            BEGIN
              Np:= 0; Np0:= 0; // Initialisation des nombres de pixels et de pixels noirs)
              FOR x:= Xim TO (Xim + La) DO
                BEGIN
                  Inc(Np, 2); IF (Pixel(x, Yim)=(Pnoir)) THEN Inc(Np0);
                  IF (Pixel(x, Yim + Ha)=(Pnoir)) THEN Inc(Np0);  
                END;
              FOR y:= (Yim + 1) TO (Yim + Ha - 1) DO
                BEGIN
                  Inc(Np, 2); IF (Pixel(Xim, y)=(Pnoir)) THEN Inc(Np0);
                  IF (Pixel(Xim + La, y)=(Pnoir)) THEN Inc(Np0);  
                END;
              IF (Np=Npn) THEN <Mémoriser l'image de diagonale (Xim, Yim, Xim+La, Yim+Ha)  
            END;
    Les conditions de non-débordement de l'image permettent encore de restreindre le balayage précédent.

    Algorithme à vérifier.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  6. #6
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Citation Envoyé par Jooker188 Voir le message
    D'accord merci, je vais essayer !
    Cependant, la première étape qui consiste à trouver un pixel noir : n'est ce pas trop vague ? Je veux dire, il y a d'autres pixels noirs que ceux qui constituent les bulles (ex : les yeux, les ombres, ect)
    En balayant, le premier pixel noir est un coin d'une bulle carrée ou le sommet d'une ronde.
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  7. #7
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    il y a quelques années je travaillais sur des images de scène pour lesquelles je devais détecter du texte. La méthode que j'ai préférée étais la détection des caractères à travers un indicateur d'image qu'on appelle le H.O.G. Cet indicateur de forme s'est montré très performant pour la détection des caractères dans une image de scène qui correspond exactement à ton type d'image, mais avec des caractères européens.
    À l'heure actuelle le Deep Learning, si tu as une base de données de caractère de la langue que tu veux évaluer, peux se montrer extrêmement efficace et bien plus efficace que n'importe quelle autre méthode. La complexité se pose dans la constitution un jeu de données d'entraînement. Pour cela si tu as par exemple l'ensemble des caractères à identifier et un jeu d'image de scène de type BD, tu peux tout à fait te constituer un jeu d'entraînement. Les réseaux de convolutions régionaux, disponible sur Internet te permettront de résoudre ce problème.

    Cordialement,

Discussions similaires

  1. Récupérer les descriptions des issues de GitLab dans un fichier Excel
    Par rayen karoui dans le forum Général Python
    Réponses: 0
    Dernier message: 27/11/2019, 15h52
  2. lister les noms et les contenu des plusieurs fichier texte dans meme repertoire
    Par annonceurs83 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/03/2012, 00h01
  3. Réponses: 3
    Dernier message: 21/06/2007, 01h10
  4. Réponses: 6
    Dernier message: 30/05/2006, 11h41
  5. Réponses: 4
    Dernier message: 05/01/2006, 20h29

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