Je suis intéressé par la reconnaissance de lettres sur un tableau de Boggle, probablement en utilisant openCV. Les lettres ont toutes la même police mais peuvent être tournées, donc l'utilisation d'une bibliothèque standard de reconnaissance de texte est un peu problématique. De plus, le M et le W ont des traits de soulignement pour les différencier, et le Q est en fait un Qu. Je suis assez sûr de pouvoir isoler les lettres distinctes dans l'image, je me demande juste comment faire la partie reconnaissance.
Réponses
Trop de publicités?Cela dépend de la vitesse à laquelle vous devez être. Si vous pouvez isoler le carré de la lettre et le faire pivoter de façon à ce que les côtés du carré contenant la lettre soient horizontaux et verticaux, alors je vous le conseille :
- convertir les images en noir/blanc (avec la lettre d'une couleur et le reste du dé de l'autre couleur)
- créer un ensemble de données d'images de référence de toutes les lettres dans les quatre orientations possibles (c'est-à-dire à l'endroit et tournées de 90, 180 et 270 degrés).
- utiliser une fonction de correspondance de modèle telle que cvMatchTemplate pour trouver la meilleure image correspondante de votre ensemble de données pour chaque nouvelle image.
Cela prendra un peu de temps, des optimisations sont donc possibles, mais je pense que vous obtiendrez un résultat raisonnable. S'il est difficile d'obtenir une orientation correcte, vous pouvez également générer des versions pivotées de votre nouvelle entrée à la volée et les faire correspondre à votre ensemble de données de référence.
Si les lettres ont une échelle différente, il y a deux possibilités :
- Si l'orientation n'est pas un problème (c'est-à-dire que votre détection de bloc de boggle peut également placer le bloc dans l'orientation appropriée), vous pouvez utiliser la boîte de délimitation de la zone qui a la couleur de la lettre comme indicateur approximatif de l'échelle de l'image entrante, et la mettre à l'échelle pour qu'elle ait la même taille que la boîte de délimitation sur vos images de référence (cela peut être différent pour chaque image de référence).
- Si l'orientation est un problème, il suffit d'ajouter la mise à l'échelle comme paramètre de votre espace de recherche. Ainsi, vous recherchez toutes les rotations (0-360 degrés) et toutes les tailles raisonnables (vous devriez probablement être capable de deviner une gamme raisonnable à partir des images que vous avez).
Vous pouvez utiliser un simple OCR comme Tesseract . Il est simple à utiliser et assez rapide. Vous devrez cependant faire les 4 rotations (comme mentionné dans la réponse de @jilles de wit).
J'ai créé une application iOS qui fait exactement ça, basée sur OpenCV. Ca s'appelle SnapSolve . J'ai écrit un blog sur le fonctionnement de la détection. En gros, je superpose toutes les 26x4 lettres possibles + rotations sur chaque forme, et je regarde quelle lettre se superpose le plus. Une petite astuce consiste à lisser l'image superposée, pour se débarrasser des artefacts où les lettres se chevauchent presque mais pas tout à fait.