Recréer des fichiers à partir de listings papier ?

Couvre tous les domaines de l'émulation ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

gotcha
Messages : 1940
Inscription : 30 mars 2017 11:39
Localisation : Isère

Recréer des fichiers à partir de listings papier ?

Message par gotcha »

Hello,

J'ai des listings d'anciens projets informatique que je n'ai pas gardé sur disquettes et je souhaiterais me recréer les fichiers source pour les reutiliser aujourd'hui.

Je n'ai pas envie de les récrire à la main et pour être productif, il faut combiner scanner et OCR. Le problème d'après ce que je comprends, c'est que les soft OCR cherchent des phrases dans une langue alors que dans mon cas, c'est du code.

J’imagine que ce genre de choses a déjà été fait pour les magazines d'ordinateurs anciens qui avaient des listings (style CPC). Si vous avez cette expérience de recréation de code à partir de magazine, vers quel logiciel d'OCR devrais-je me tourner (free ou payware) ?
Amstrad CPC addict :mrgreen:
Avatar de l’utilisateur
init_hello
Messages : 145
Inscription : 13 mars 2022 12:03
Localisation : Paris

Re: Recréer des fichiers à partir de listings papier ?

Message par init_hello »

C'est intéressant et original comme sujet. Dans le même ordre d'idée, pourrait-on récupérer des rubans perforés à partir de photos ?
Eric
Avatar de l’utilisateur
ZamZam
Messages : 150
Inscription : 09 nov. 2020 16:10
Localisation : TOUL (54200) Meurthe & Moselle

Re: Recréer des fichiers à partir de listings papier ?

Message par ZamZam »

Il y avait eu une discussion sur les logiciels d'OCR pour le scan de livre

viewtopic.php?f=7&t=4658&p=194806&hilit=ocr#p194806

et pour les rubans, il faudrait une photo pour se faire une idée
Jean-Luc
Avatar de l’utilisateur
init_hello
Messages : 145
Inscription : 13 mars 2022 12:03
Localisation : Paris

Re: Recréer des fichiers à partir de listings papier ?

Message par init_hello »

Les rubans que je possédais ont fâcheusement disparu (avec des disquettes 8" et des listings, lors d'un déménagement peut-être ?). Mais ce sujet m'aurait intéressé : scan, arduino (lecture optique) ou autre ?
Eric
gotcha
Messages : 1940
Inscription : 30 mars 2017 11:39
Localisation : Isère

Re: Recréer des fichiers à partir de listings papier ?

Message par gotcha »

En fait, le scan de programme est un problème différent du scan d'un magazine car l'ordre des mots reconnus est importants pour le code, alors que pour le magazine l'ordre est moins important car on fait généralement une recherche sur un seul mot clé, et pas dans les listings.

Les 2 logiciels que j'ai qui font de l'OCR ne mettent pas le code scanné dans le bon ordre. Le problème principal, c'est que dès qu'il y a de l'alignement dans le code (ce qui est généralement le cas), ils cherchent à faire des tableaux car ils cherchent à reconstruire l'aspect spatial du document et non simplement le contenu textuel.

Et comme le copier-coller d'un tableau copie se fait par colonne et non par lignes, le code est mélangé dans le fichier que j'essaie de recréer

Juste un petit exemple. Le code scanné suivant

Code : Tout sélectionner

#define a 1
#define b 2
#define c 3
va me donner quand je fais un copier-coller

Code : Tout sélectionner

#define
#define
#define
a
b
c
1
2
3
Au final, j'ai l'impression que les softs d'OCR sont trop 'modernes' et qu'il faudrait quelque chose de plus simple qui ne cherche pas à interpréter l'aspect spatial du document scanné.
Amstrad CPC addict :mrgreen:
gotcha
Messages : 1940
Inscription : 30 mars 2017 11:39
Localisation : Isère

Re: Recréer des fichiers à partir de listings papier ?

Message par gotcha »

En fait, ce que j'ai dit précédemment (copie par colonne), c'est quand on fait le 'copier' depuis le lecteur PDF. Si je demande à mon OCR de créer un fichier Excel et que je fais la copie depuis Excel, elle se fait ligne par ligne et non colonne par colonne.

Donc finalement, j'ai l'impression qu'il va falloir jongler entre le fichier PDF OCRisé et le fichier Excel crée par l'OCR.
Amstrad CPC addict :mrgreen:
Bernouilli92
Messages : 526
Inscription : 24 déc. 2021 09:46
Localisation : Région parisienne

Re: Recréer des fichiers à partir de listings papier ?

Message par Bernouilli92 »

oui, l'histoire des colonnes, c'est plus un problème de pdf que de logiciel OCR.
Daniel
Messages : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Recréer des fichiers à partir de listings papier ?

Message par Daniel »

Dans tous les bons logiciels d'OCR on peut paramétrer la reconnaissance du texte par ligne ou par colonne. Et on doit pouvoir sortir le résultat dans un fichier .txt. Il n'y a pas d'intérêt à créer un fichier Excel ou PDF. Il n'est pas nécessaire de compliquer quand on peut faire simple.

Un scan monochrome dans un fichier sans perte (tiff CCITT G4 ou png) suivi d'OCR par ligne dans un fichier .txt donne le meilleur résultat.

Mais attention, le meilleur résultat possible est toujours insuffisant pour générer un programme source sans faute. Il faut ensuite corriger à la main, et c'est quelquefois plus long que de tout taper (quand on connait bien le langage utilisé).
Daniel
L'obstacle augmente mon ardeur.
gotcha
Messages : 1940
Inscription : 30 mars 2017 11:39
Localisation : Isère

Re: Recréer des fichiers à partir de listings papier ?

Message par gotcha »

@Daniel as-tu des logiciels d'OCR en tête ?

Le mien (Power PDF, qui utilise l'OCR d'OmniPage) ne me permet pas de créer un fichier texte, juste des fichiers Word ou Excel. Les fichiers Word sont plus problématiques que l'Excel car ils combinent du graphique, du texte standard et des tableaux. Au final, c'est le fichier Excel qui est le plus proche d'un fichier en texte brut.
Amstrad CPC addict :mrgreen:
Daniel
Messages : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Recréer des fichiers à partir de listings papier ?

Message par Daniel »

J'ai utilisé dans le passé (il y a plus de 10 ans) plusieurs logiciels gratuits d'OCR, trouvés sur internet. Je n'ai aucune expérience des logiciels actuels, car je trouve plus rapide de tout retaper à la main, il y a beaucoup moins d'erreurs.

Le spécialiste de la reproduction de listings de revues a quitté le forum, mais tu dois pouvoir le retrouver ici : http://www.hebdogiciel.free.fr/
Daniel
L'obstacle augmente mon ardeur.
Zebulon
Messages : 1905
Inscription : 02 nov. 2020 14:03

Re: Recréer des fichiers à partir de listings papier ?

Message par Zebulon »

Tu ne nous as pas dit (sans trahir de secret industriel) ces listings, ils sont imprimés sur une imprimante matricielle ? Ils sont bien contrastés ? Les zéros sont barrés ?

J'avais testé un peu d'OCR avec le logiciel fourni avec mon imprimante/scanner sur du listing et il y a effectivement beaucoup d'écueils avec des confusions de caractères (0 et O, : et ; mais aussi des I ou 1 etc) des espaces en trop ou manquant, etc.

Pour moi ça avait été une boucherie...
gotcha
Messages : 1940
Inscription : 30 mars 2017 11:39
Localisation : Isère

Re: Recréer des fichiers à partir de listings papier ?

Message par gotcha »

Mes listings ont été imprimés à l'époque depuis Unix sur une imprimante laser (on était déjà dans les années 90), donc c'est assez propre. Et ils ont été imprimés grâce à un utilitaire (je ne me souviens plus du nom - EDIT, j'ai retrouvé https://doc.ubuntu-fr.org/a2ps ) en 'double page'. Ce dernier point complique les choses car on a du contenu de 2 pages sur une même ligne et les caractères sont petits.

Globalement, en scannant en 1200dpi noir&blanc et en OCRisant en ficher Excel, je ne m'en sors pas trop mal (les 2 parties sont bien séparées dans le fichier excel). C'est du langage C en majorité et le plus problématique, ce sont les commentaires /* */ et les accolade {}

Donc ça demande du travail manuel pour l'instant, mais ça reste raisonnable. L’avantage, c'est qu'il existe de nos jours des formateur de code (clang-format dans mon cas) qui permettent de remettre en place le code proprement ensuite (indentation etc..).

J'avais eu des problèmes entre 0 et O et entre l et 1 initialement (en 600dpi), mais depuis que j'ai augmenté le contraste du scan et que je suis passé en 1200dpi, je n'ai plus trop vu ce problème. Ensuite, le fait de lui demander du Excel fait peut-être que l'OCR va utiliser un chiffre plus facilement quand il y a un doute.

Exemple trouvé sur le web :
Image
Pièces jointes
a2ps exemple
a2ps exemple
a2ps_lycid_00.png (122.57 Kio) Consulté 3161 fois
Amstrad CPC addict :mrgreen:
Daniel
Messages : 15449
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Recréer des fichiers à partir de listings papier ?

Message par Daniel »

Dans le forum nous avons plus l'habitude des listings d'Hebdogiciel imprimés sur papier journal avec une mauvaise imprimante matricielle.
Ici c'est beaucoup plus propre, il n'y a pas de caractère accentué, c'est certainement récupérable sans beaucoup d'erreurs.

Je commencerais par faire deux images pour chaque page en supprimant les cadres. Ensuite il y aura moins de difficultés. Même les logiciels d'OCR en ligne peuvent faire le travail. Je vais essayer et je donnerai le résultat ici.

[Edit] Voilà. C'est loin d'être parfait, mais je pense assez facile à corriger. J'ai utilisé https://www.onlineocr.net/fr/

Code : Tout sélectionner

/*
I Handle the options that a2ps understands (not liba2ps) Return 1
 for success                                                 */

static int
handle_a2ps_option (int option, char *optional_arg) 

 switch (option)
    (
    case 'E':                 /* --pretty-print select language */
      xstrcpy (style_request, optional_arg);
      break;

    case 'g':                 /* Symbol translation */
      highlight_level = 2;
      break;

    case 154:                 /* Symbol translation */
      highlight_level =
        a2ps_get_bool ("--graphic-symbols", optional_arg); 
      break;

    case 173:                 /* Level of high lighting */ 
      highlight_level = 
        get_highlight_level("-highlight-level", opt lona l_arg) ;
      break; 

    case 'h':                 /* --help */
      behavior = b_help;
      break;

    case 'V':                 /* version and configuration info */
      behavior = b_version;
      break;

    case 'Z':                 /* --delegate */
      delegate_p = true;
      break;

    case 138:
      behavior = b_guess;
      break;

    case 137:
      behavior = b_which;
      break;

    case 150:
      behavior = b_glob;
      break;

    case 139:
      behavior = b_list_options; 
      break;

    case 145:
      ARGMATCH_ASSERT (behavior_args, behavior_types); 
      behavior = XARGCASEMATCH ("-list", optional_arg,
                              behavior_args, behavior_types) ;
      break;
          case 148:                                                             /* --strip-level */
               strip_level =
                    get_integer_in_range ("--strip-level", optional_arg,
                                                                           0, 3, range min_max);
               break;

          case 160:                                                             /* --delegate=BOOL */
               delegate_p = a2ps_get_bool ("—delegate", optional_arg); 
               break;

          case 161:                                                             /* --list-media */
               behavior = b_list_media;
               break;

          case 162:                                                             /* --list-style-sheets
               behavior = b_list_style_sheets;
               break;
          case 167:                                                             /* --toc (=toc format)                                                          *it
               /* If no argument is given, use ntoci. */
               xurtrcpy (toc, optional_arg ? optional_arg : "Ctocl") ; 
               break;

          case 169:                                                             /* --end-of-line=TYPE                                                           */
               end_of_line = option_string_to_eol ("--end-of-line", optional_arg); 
               break;

          default: 
               return 0;

      return 1;
}
/************************************************************************/
/*                                                          Main routine for this program.                                                                                         *
/************************************************************************/
int
main (int argc, char *argv[])
(
      int argn;

      /* Architecture specific initialization. */ 
#ifdef _EMX_
      /* Wildcard expansion for OS/2 */
#endlf_wildcard (&argc, &argv);

      /* Name under which this program was called. */ 
      program_name = base_name (argv[0]);
      program_invocation_name = xstrdup (program_name); 
      version_etc_copyright = N_("\
Copyright (c) 1988-1993 Miguel SantanaVA
Copyright (c) 1995-2000 Akim Demaille, Miguel Santana1M
Copyright (c) 2007— Akim Demaille, Miguel Santana and Masayuki Hatta" ) ;

      /* Set the NLS on */
      setlocale (LC_TIME, ""); 
#ifdef HAVE_LC_MESSAGES
      setlocale (LC_MESSAGES, ""); 
#endlf
      setlocale (LC_CTYPE, "");
 
Daniel
L'obstacle augmente mon ardeur.
gotcha
Messages : 1940
Inscription : 30 mars 2017 11:39
Localisation : Isère

Re: Recréer des fichiers à partir de listings papier ?

Message par gotcha »

C'est assez propre. Je remarque qu'il a parfois du mal à terminer les commentaires, comme dans mon cas.

J'avais aussi commencé à diviser les pages en deux, mais finalement, j'ai remarqué que mon OCR arrive bien à séparer les 2 parties automatiquement. Il les mets dans l’ordre inverse dans le fichier Excel, mais ça reste propre.

Concernant les OCR en ligne, je m'interdis d'utiliser les outils en ligne qui sont à mon avis un moyen détourné pour récupérer des données. Je trouve qu'on en donne déjà assez (trop) à Google et compagnie et je préfère payer des outils hors-ligne :D
Amstrad CPC addict :mrgreen:
gotcha
Messages : 1940
Inscription : 30 mars 2017 11:39
Localisation : Isère

Re: Recréer des fichiers à partir de listings papier ?

Message par gotcha »

Bon, j'avance dans la recréation des listings. J'ai déjà fait 50 pages et globalement, ça ne se passe pas trop mal, même si cela demande quand même du travail manuel. En tout cas, ça demande bien moins de travail que de tout retaper à la main.

Étonnement, je n'ai pas trop de problèmes entre 0 et O.

Mes problèmes principaux (avec du C), ce sont:
- les {} qui souvent disparaissent
- 1 et l confondus
- " parfois vu comme '
- ! parfois mal reconnu
- || systématiquement mal reconnu
- fin des commentaires manquant */ surtout quand il y a beaucoup d'espaces devant
- parfois des parenthèses inversées: ( à la place de )
Amstrad CPC addict :mrgreen:
Répondre