Jeu de sans ambiguïté à la recherche des lettres & les numéros des entrées de l'utilisateur
Est-il un sous-ensemble de caractères alphanumériques qui est plus facile à lire? En particulier, est-il un sous-ensemble qui a moins de caractères qui sont visuellement ambigu, et par la suppression (ou assimilant) de certains personnages que l'on réduire l'erreur humaine?
Je sais "visuellement ambigu" est un peu waffly d'une expression, mais il est assez évident que D, O et 0 sont tous semblables, et 1 et I sont aussi similaires. Je tiens à maximiser la taille de l'ensemble de l'alpha-numériques, mais de minimiser le nombre de caractères qui sont susceptibles d'être mal interprétés.
Le seul précédent, je suis conscient du fait que pour un tel ensemble est la Canada code Postal système qui supprime les lettres D, F, I, O, Q, U, et que le sous-ensemble a été créé à l'aide du système postal du processus d'OCR.
Ma première pensée est d'utiliser uniquement des lettres majuscules et de chiffres comme suit:
Un B = 8 C = G D = 0 = O = Q E = F H I = J = L = T = 1 = 7 K = X M N P R S = 5 U = V = Y W Z = 2 3 4 6 9
Ce problème peut être difficile de séparer le type de visage. Le caractère distinctif des personnages dans le choisi de police pourraient affecter de manière significative le potentiel visuel de l'ambiguïté des deux personnages, mais je pense que dans la plupart des modernes, les types de caractères les caractères ci-dessus qui sont assimilés auront la même apparence assez pour justifier les assimilant.
Je vous serais reconnaissant de réflexions sur le ci – dessus sont les équations ci-dessus approprié, ou peut-être il y a plus de caractères qui doit être assimilé? Serait-minuscules-être plus adapté?
Voir ux.stackexchange.com/questions/21076/...
si vous faites cela dans une réponse, il sera probablement ramasser le butin. Discussion dans le UX est exactement ce que l'OP a été à la recherche pour.
Est le bounty fermé - j'ai une meilleure solution..
L'affichage sur GitHub.. ETA 6 Heures
OriginalL'auteur Brian M. Hunt | 2012-08-12
Vous devez vous connecter pour publier un commentaire.
Principalement en s'inspirant de ce ux fil, mentionné par @rwb,
avec les humains (qui est excellent pour les non-roc: vos utilisateurs sont l'homme)
Correction de l'erreur est probablement sous-estimée dans le UX. Une valeur peu ici peut être un visual distance métrique - par exemple O/D/0 sont plus proche, par exemple C/Q mais plus de par exemple, I/H/R. Comme mentionné ailleurs, si, cela peut dépend fortement de la police. Un symbole en fonction de correction d'erreur (par exemple, Reed Solomon) qui ne dépend pas de visuels peut être plus simple et plus efficace. C'est vraiment une très grande perspicacité, tucuxi, merci!
Bonne idée avec des modèles de Markov...
OriginalL'auteur tucuxi
J'avais besoin d'un remplacement pour hexadécimal (base 16) pour des raisons similaires (par exemple, pour l'encodage des clés, etc.), le meilleur que j'ai pu arriver, c'est l'ensemble suivant de 16 caractères, qui peut être utilisé comme un remplacement pour hexadécimal:
Dans le jeu de remplacement, nous considérons les éléments suivants:
Tous les caractères utilisés ont majeure caractéristiques qui ne serait omis dans un vraiment terrible police.
Les voyelles A E I O U omis pour éviter accidentellement de l'orthographe des mots.
Ensembles de caractères qui pourraient potentiellement être très similaires ou identiques dans certaines polices sont évités complètement (aucun des personnages dans n'importe quel ensemble sont utilisés à tous):
En évitant ces personnages complètement, l'espoir est que l'utilisateur d'entrer les caractères corrects, plutôt que d'essayer de corriger mis-les caractères saisis.
Pour les groupes de moins similaire, mais qui pourrait semer la confusion des personnages, on n'utilise qu'un caractère de chaque série, espérons-le, les plus distinctifs:
Ici Y est utilisé, car il a toujours le plus faible section verticale, et un empattement de polices serif
Ici C est utilisé, car il semble de moins en moins probable qu'un C serait entré comme G, que l'inverse
Ici X est utilisé, car il est plus cohérent dans la plupart des polices
Ici F est utilisé, car elle n'est pas une voyelle
Dans le cas de ces ensembles, l'entrée de n'importe quel caractère dans l'ensemble pourrait être automatiquement convertis à celle qui est réellement utilisé (le premier de la liste dans chaque set). Notez que E ne doit pas être automatiquement converties en F si l'hexadécimal d'entrée peut être utilisé (voir ci-dessous).
Remarque qu'il y a encore sonorité similaire lettres dans le jeu de remplacement, c'est à peu près inévitable. Lors de la lecture à haute voix, un alphabet phonétique doit être utilisé.
Où les personnages qui sont aussi présentes dans la norme hexadécimal sont utilisés dans le jeu de remplacement, ils sont utilisés pour les mêmes base 16 de la valeur. En théorie mixte d'entrée de l'hexadécimal et caractères de remplacement pourrait être pris en charge, à condition que E n'est pas automatiquement converties en F.
Puisque c'est juste un remplacement de caractères, il devrait être facile de convertir vers/à partir hexadécimal.
Majuscules semble le mieux pour le "canonique" pour la sortie, même si la baisse de cas semble également raisonnable, sauf pour les "h" et "n", qui devrait être encore relativement claire dans la plupart des polices:
Entrée peut bien sûr être sensible à la casse.
Il existe plusieurs systèmes similaires pour base 32, voir http://en.wikipedia.org/wiki/Base32 Cependant, ces évidemment, il faut introduire plus de caractères ayant un aspect similaire, en retour, pour un supplément de 25% plus d'informations par caractère.
Apparemment le jeu suivant a également été utilisé pour les Fenêtres de clés de produit dans la base de 24, mais encore une fois a plus de caractères ayant un aspect similaire:
Si j'ai le droit, ici, c'est trivial Python gist la mise en œuvre de cette.
OriginalL'auteur trepidacious
Ce serait un problème général dans le ROC. Donc pour la solution de bout en bout où en codage ROC est contrôlée polices spécialisées ont été développées pour résoudre le "ambiguïté visuelle" que vous mentionnez.
Voir: http://en.wikipedia.org/wiki/OCR-A_font
que des informations supplémentaires : vous voulez peut-être savoir à propos de Base32 Encodage dans lequel le symbole pour le chiffre '1' n'est pas utilisé comme il peut "confondre" les utilisateurs avec le symbole de l'alphabet 'l'.
Vous pouvez utiliser votre jeu de symboles personnalisé dans base32-encodage avec la mise en œuvre de la partie en restant le même.
OriginalL'auteur Ujjwal Singh
Ce que vous cherchez est sans ambiguïté, efficace Humain-Ordinateur code. Ce que je recommande est d'encoder l'ensemble de données avec littéral(significatif) mots, les noms en particulier.
J'ai été le développement d'un logiciel pour le faire - et le plus efficacement possible. Je l'appelle WCode.
Techniquement sa Base-1024 Encodage dans lequel vous utilisez des mots à la place des symboles.
Voici les liens:
Présentation: https://docs.google.com/presentation/d/1sYiXCWIYAWpKAahrGFZ2p5zJX8uMxPccu-oaGOajrGA/edit
Documentation: https://docs.google.com/folder/d/0B0pxLafSqCjKOWhYSFFGOHd1a2c/edit
Projet: https://github.com/San13/WCode (Veuillez patienter pendant que je me autour de téléchargement...)
Consultez le site web: WCodes.org. J'ai aussi fait une vidéo et ont affiché le projet sur le site de crowdfunding: IndieGoGo, igg.me/at/wcode/x/2245741
Très intelligent - c'est l'amour!
Merci Brian ! 🙂
OriginalL'auteur Ujjwal Singh
Cela dépend de quelle taille vous voulez que votre ensemble à être. Par exemple, l'ensemble {0, 1} fonctionnera probablement. De même, l'ensemble des chiffres. Mais probablement vous voulez un jeu qui est à peu près la moitié de la taille de l'ensemble original des personnages.
Je n'ai pas fait, mais voici une suggestion. Choisissez une police de caractères, choisir un jeu de caractères, et écrire un peu de code pour effectuer les opérations suivantes. Dessiner chaque personnage dans une n-par-n carrés de pixels blancs et noirs, pour n = 1 à (dire) 10. Découper les blancs de lignes et de colonnes à partir du bord, puisque nous sommes seulement intéressés dans la zone noire. Qui vous donne une liste de 10 codes pour chaque personnage. Mesurer la distance entre deux caractères, par la façon dont beaucoup de ces codes différents. Estimer la distance est acceptable pour votre application. Ensuite, faites une recherche par force brute pour un ensemble de caractères qui sont loin d'intervalle.
Fondamentalement, il faut utiliser un script pour simuler louchant sur les personnages et voir ceux qui vous pouvez toujours dire à part.
L
etI
partage de quelques pixels jusqu'à ce que vous placez les mouvements verticaux de sorte qu'ils se chevauchent.OriginalL'auteur Hew Wolff
Voici quelques python que j'ai écrit pour coder et décoder des nombres entiers à l'aide du système de caractères décrits ci-dessus.
OriginalL'auteur Lucas