10
votes

Besoin de bons OCR pour une liste de code source imprimée, des idées?

À mon travail, je dois parfois prendre du code source imprimé et saisir manuellement le code source dans un éditeur de texte. Ne demandez pas pourquoi.

Il est évident que le taper prend beaucoup de temps et toujours du temps supplémentaire pour déboguer des erreurs de frappe (Oops a raté un signe "$" là-bas).

J'ai décidé d'essayer certaines solutions OCR comme:

  • Microsoft Document Imager - a construit en OCR
    • Résultat: manqué toute la principale espace blanche, a manqué tous les traits de soulignement, interprété de nombreux personnages de ponctuation incorrectement.
    • Conclusion: plus lente que la frappe manuelle en code.
    • diverses applications OCR en ligne
      • Résultat: similaire ou pire que Microsoft Document Imaging
      • Conclusion: plus lente que la frappe manuelle en code.

        Je me sens comme le code source serait très facile à OCR, étant donné que la police est Sans Serif et Monospace.

        Avez-vous trouvé une bonne solution OCR qui fonctionne bien sur le code source?

        Peut-être que j'ai juste besoin d'une meilleure solution OCR (pas nécessairement du code source spécifique)?

ocr

0 commentaires

7 Réponses :


1
votes

Le texte imprimé vs manuscrit est généralement plus facile pour OCR, mais tout dépend de votre image source, je trouve généralement que la capture au format PNG, avec des couleurs réduites (niveaux de gris est préférable) avec un certain nettoyage manuel. (Supprimer tout bruit d'image due à la numérisation, etc.) fonctionne mieux.

La plupart des OCR sont similaires dans la performance et la précision. OCRS avec la capacité de s'entraîner / corriger serait mieux.


0 commentaires

1
votes

En général, j'ai trouvé que FineReader donne de très bons résultats. Normalement, tous les produits ont un essai disponible. Essayez autant que vous pouvez.

Maintenant, le code source du programme peut être délicat:

  • Espace de premier plan: peut-être un code postal Joli processus d'imprimante peut aider
  • soulignement et ponctuation: peut-être un Un bon produit peut être formé pour cela

0 commentaires

6
votes

avec OCR, il y a actuellement trois options:

  • abbee FineReader et ominpage . Les deux sont des produits commerciaux qui sont sur le pair lorsqu'il s'agit de fonctionnalités et de résultats OCR. Je ne peux pas dire grand chose à propos de l'omnipage, mais la FineReader est fournie avec la prise en charge du code source de lecture (par exemple, il dispose d'une bibliothèque de langue Java).
  • Le meilleur moteur OSS OCR est Tesseract . Il est beaucoup plus difficile à utiliser, vous aurez probablement besoin de le former pour votre langue.

    Je fais rarement OCR mais j'ai découvert que les dépenses de 150 $ sur le logiciel commercial pondent de loin le temps perdu.


5 commentaires

J'ai essayé Tesseract. Cela a échoué quand je l'ai téléchargé. Le fichier README en ligne précise qu'il ne vient pas avec des données de formation. J'ai téléchargé les données de formation anglaise du site Web et non endommagées dans le sous-diviseur de Tessdata. Mais ensuite, il s'est encore plaint de "ne pouvait pas trouver eng.unicharset". Comment suis-je en train de jouer ça?


Tu vois ce que je veux dire? Tesseract n'est que libre si votre temps ne coûte rien. Mais vous pouvez poster des questions dans le groupe d'utilisateurs Tesseract. Ils sont sympathiques là-bas et votre contribution aidera à faciliter la tâche de la prochaine personne de définir cette bête.


@Aaron digulla, monsieur peut-on partager certaines bibliothèques OCR qui atteignent 150 $ à 500 $,


@Sajjad je ne sais rien.


J'aimerais souligner que sans formation, Tesseract ne fait rien de différent d'un OCR régulier, qui ignorera toute la principale espace blanche, manquée tous les traits de soulignement. Cependant, il est également difficile de le former , car vous devez passer du temps pour obtenir l'étiquette de chaque échantillon.



1
votes

Ocropus est également une bonne option open source. Mais comme Tesséract, il y a une courbe d'apprentissage plutôt escarpée pour l'utiliser et l'intégrer efficacement.


0 commentaires

2
votes

Essayez http://www.free-oc.com/ . Je l'ai utilisé pour récupérer le code source à partir d'une prise d'écran lorsque mon IDE se bloque dans une session de rédaction sans avertissement. Cela dépend évidemment de la police que vous utilisez dans l'éditeur (j'utilise Courier New 10pt à Delphi). J'ai essayé d'utiliser Google Docs, qui ira une image lorsque vous le téléchargez - tandis que Google Docs est plutôt bon sur des documents numérisés, il échoue de manière misérablement sur la source Pascal pour une raison quelconque.

Un exemple de freeoc au travail: image d'entrée:

image téléchargée

a donné ceci: < PRE> XXX

Donc, le remplacement de l'indentation est la majeure partie du travail, puis la modification de tous les 5 S sur majuscule s . Il a également été confondu par la ligne verticale à la note de la colonne 80. Heureusement, la plupart des erreurs seront ramassées par le compilateur (à l'exception des erreurs à l'intérieur des chaînes citées).

C'est une honteuse Freenoc ne possède pas d'option "code source", où l'espace blanc est traité comme significatif .

Un astuce: Si votre source inclut la mise en surbrillance de la syntaxe, assurez-vous de sauvegarder l'image comme en niveaux de gris avant de télécharger.


0 commentaires

5
votes

Deux nouvelles options existe aujourd'hui (années après a posé la question):..

1) strong> p>

de Windows 10 est livré avec un moteur OCR de Microsoft p >

Il est dans l'espace: p>

Windows.Media.Ocr.OcrEngine


0 commentaires

1
votes

Google Drive OCR intégré d'OCR est très bien fonctionné pour moi. Il suffit de convertir des analyses en PDF, téléchargez sur Google Drive et choisissez «Ouvrir avec ... Google Docs». Il y a des choses étranges avec la taille de la couleur et du texte, mais cela inclut toujours des points-virgules et tels.

la capture d'écran originale: Capture d'écran originale Le Google Docs OCR: Google Docs OCR P>

Version en plainte: P>

#include <stdio.h> int main(void) { 
char word[51]; int contains = -1; int i = 0; int length = 0; scanf("%s", word); while (word[length] != "\0") i ++; while ((contains == 1 || contains == 2) && word[i] != "\0") { 
if (word[i] == "t" || word[i] == "T") { 
if (i <= length / 2) { 
contains = 1; } else contains = 2; 
return 0; 


0 commentaires