Détecter la zone de texte dans une image à l'aide de python et opencv
Je veux détecter la zone de texte des images à l'aide de python 2.7 et opencv 2.4.9
et tracez un rectangle de la zone autour d'elle. Comme le montre l'exemple de l'image ci-dessous.
Je suis nouveau sur le traitement d'image donc, aucune idée de comment le faire, ce sera apprécié.
Si possible, utiliser OpenCV 3.1 et utiliser le scène du texte de détection fonctionnalité.
Je ne peux pas le mettre à niveau car il y a d'autres composantes du projet.
À vous de trouver la couleur dans l'image. Mais il avoir la même couleur dans votre image, donc c'est peut-être difficile. Si vous cherchez seulement pour le texte à l'intérieur qu'il y a une bibliothèque appelée "tesseract'
Vous êtes à la recherche d'un "outil" comme solution? (Prêt à l'emploi fonction à partir d'un module ou quelque chose comme ça) ou seriez-vous d'accord avec la faire, à partir des principes? Il est relativement facile de le faire (détection de texte) dans des conditions telles que celles que vous décrivez ici. Aussi, vous avez raté le mot "LIN" dans le placard, au nord-ouest de la grande chambre. Aimeriez-vous être capable d'attraper les lettres?
De le faire, à partir des principes est de cette manière que je veux.Je veux seulement détecter les mots marqués
Je ne peux pas le mettre à niveau car il y a d'autres composantes du projet.
À vous de trouver la couleur dans l'image. Mais il avoir la même couleur dans votre image, donc c'est peut-être difficile. Si vous cherchez seulement pour le texte à l'intérieur qu'il y a une bibliothèque appelée "tesseract'
Vous êtes à la recherche d'un "outil" comme solution? (Prêt à l'emploi fonction à partir d'un module ou quelque chose comme ça) ou seriez-vous d'accord avec la faire, à partir des principes? Il est relativement facile de le faire (détection de texte) dans des conditions telles que celles que vous décrivez ici. Aussi, vous avez raté le mot "LIN" dans le placard, au nord-ouest de la grande chambre. Aimeriez-vous être capable d'attraper les lettres?
De le faire, à partir des principes est de cette manière que je veux.Je veux seulement détecter les mots marqués
OriginalL'auteur User9412 | 2016-06-12
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs façons d'aller sur la détection de texte dans une image.
Je recommande à la recherche à cette question ici, car il peut répondre à votre cas. Bien qu'il n'est pas en python, le code peut être facilement traduit à partir de c++ python (il suffit de regarder l'API et de convertir les méthodes de c++, python, pas dur. Je l'ai fait moi-même quand j'ai essayé le code pour mon propre problème). Les solutions ici peut ne pas fonctionner pour votre cas, mais je vous recommande de les essayer.
Si je devais aller sur ce que je ferais le processus suivant:
Prep votre image:
Si l'ensemble de vos images que vous souhaitez modifier sont à peu près comme celui que vous avez fourni, où le design se compose d'une gamme de couleurs grises, et le texte est toujours noir. Je voudrais tout d'abord blanc sur tout le contenu qui n'est pas noir (ou blanc). En faisant cela, seul le texte en noir à gauche.
Maintenant que tout ce que vous avez est le texte en noir le but est d'obtenir ces boîtes. Comme indiqué précédemment, il existe différentes façons de le faire.
La Largeur du trait de Transformation (SWT)
Typique de la façon de trouver des zones de texte: vous pouvez trouver des régions de texte en utilisant la largeur du trait de transformer, comme décrit dans "La détection de Texte dans des Scènes Naturelles avec la Largeur du trait de Transformation " par Boris Epshtein, Eyal Ofek, et Yonatan Wexler. Pour être honnête, si c'est aussi rapide et fiable comme je le crois, alors cette méthode est une méthode plus efficace que mon code ci-dessous. Vous pouvez toujours utiliser le code ci-dessus pour supprimer le modèle de conception de si, et c' peut aider à la performance globale de l'swt algorithme.
Ici est une bibliothèque c qui met en œuvre son algorithme, mais il est dit d'être très cru et la documentation est incomplète. De toute évidence, une enveloppe sera nécessaire pour utiliser cette bibliothèque avec python, et pour le moment je ne vois pas un officiel offert.
La bibliothèque, j'ai fait un lien est CCV. C'est une bibliothèque qui est destiné à être utilisé dans vos applications, de ne pas recréer des algorithmes. C'est donc un outil à utiliser, qui va à l'encontre des OP voulez pour en fabriquer à partir de "Premiers Principes", comme indiqué dans les commentaires. Toujours utile de savoir qu'il en existe si vous ne voulez pas le code de l'algorithme de vous-même.
La maison Brassée Non-SWT Méthode
Si vous avez des méta-données pour chaque image, par exemple dans un fichier xml, que les etats combien de chambres sont labellisées dans chaque image, vous pouvez accéder à ce fichier xml, d'obtenir les données sur le nombre d'étiquettes sont dans l'image, puis de les stocker ce nombre dans une variable dire,
num_of_labels
. Maintenant, prenez votre image et de le mettre dans une boucle while qui s'érode à un taux fixe que vous spécifiez, trouver des contours externes de l'image à chaque tour de boucle et l'arrêt de la boucle une fois que vous avez le même nombre de contours externes comme votrenum_of_labels
. Puis il suffit de trouver les uns les contours de la " zone de délimitation et vous avez terminé.La résultante des boîtes à partir de la méthode ci-dessus aura de l'espace autour de l'étiquette, et cela peut inclure une partie de la conception originale, si les cases sont appliqués à l'image d'origine. Pour éviter de ce faire des régions d'intérêt par l'intermédiaire de votre nouveau trouvé des boîtes et couper les blancs de l'espace. Enregistrez ensuite que le roi de la forme de votre nouvelle boîte.
Peut-être vous n'avez aucun moyen de savoir combien d'étiquettes sera dans l'image. Si c'est le cas, alors je vous recommande de jouer avec l'érosion des valeurs jusqu'à ce que vous trouver la meilleure solution pour l'adapter à votre cas et à obtenir le désiré des gouttes.
Ou vous pouvez essayer de trouver des contours sur le contenu restant, après la suppression de la conception, et de combiner les boîtes englobantes dans un rectangle en fonction de leur distance les uns des autres.
Après que vous avez trouvé vos boîtes, tout simplement utiliser les cases à l'égard de l'image originale et il vous sera fait.
Scène de Texte Module de Détection dans OpenCV 3
Comme mentionné dans les commentaires à votre question, il existe déjà un moyen de scène de la détection de textes (pas le texte du document de détection) dans opencv 3. Je comprends que vous n'avez pas la possibilité de changer de versions, mais pour ceux avec la même question et ne pas se limiter à une ancienne version d'opencv, j'ai décidé d'inclure à la fin. La Documentation pour la scène du texte de détection peuvent être trouvés avec une simple recherche google.
La opencv module pour la détection de textes est également livré avec la reconnaissance de texte qui implémente tessaract, qui est un libre et open-source texte du module de reconnaissance. La chute de tessaract, et, par conséquent, opencv de la scène de reconnaissance de texte module est qu'il n'est pas aussi raffiné que des applications commerciales et de beaucoup de temps pour utiliser. Ainsi, la diminution de ses performances, mais c'est gratuit d'utilisation, de sorte que ses le meilleur que nous avons eu sans avoir à payer de l'argent, si vous voulez la reconnaissance de texte.
Liens:
Honnêtement, je n'ai pas l'expérience et de l'expertise dans les deux opencv et de traitement de l'image afin de fournir de manière détaillée dans la mise en œuvre de leur texte module de détection. De même avec le SWT algorithme. Je viens de recevoir dans ce genre de choses ce depuis quelques mois, mais comme j'apprends plus je vais modifier cette réponse.
OriginalL'auteur prijatelj