Journal Médoc, un dépôt de documents fait maison

Posté par  (site web personnel) . Licence CC By‑SA.
34
18
déc.
2011

C'est en farfouillant pour la énième fois dans une pile de papelards que je me suis dit qu'il y en avait assez d'avaler de la poussière en rêvant de Ctrl-F, et qu'il était temps d'enfin faire quelque chose d'utile avec mes compétences de pisseur de code.

Ce qui a débuté comme quelques scripts mis bout à bout est aujourd'hui une solution intégrée de numérisation, à travers un client lourd, et de classement et de consultation, à partir d'un client Web. Le tout est distribué sous licence GPL.

Les idiosyncrasies de jeunesse du projet le rendent un poil difficile à utiliser tel quel (installation d'une base de données et d'un serveur Web, numérisation absolument pas testée sur un autre scanner que le mien...). Cependant, j'ai espoir qu'il soit utile en tout ou en partie, et qu'il motive d'autres développeurs à trouver des solutions à leurs problèmes quotidiens. Cela fait maintenant 2 ans que je numérise mes documents, et c'est un bonheur de retrouver une vieille facture en quelques clics pour comparer le prix de mon PC à l'époque, on d'extraire mon identifiant(TM) que cet organisme semi-administratif m'avait octroyé via une unique lettre il y a fort longtemps, et dont ils ont un besoin urgent là tout de suite.

Accessoirement, cher lecteur, connais-tu d'autres solutions libres pour résoudre ce même problème?

Sous le capot

Les documents sont enregistrés dans une base de données Postgresql, sous forme d'images JPEG encryptées.

Le client lourd est en C++ et utilise wxWidgets pour l'interface graphique, et libsane pour la numérisation.

Le client web repose sur le serveur Web Ocsigen, écrit en OCaml.

Quelques images du client lourd

Client lourd

Et quelques images du client léger

Client Web

Client Web

  • # projet interessant, mais j'ai une question

    Posté par  . Évalué à 10.

    Les documents sont enregistrés dans une base de données Postgresql, sous forme d'images JPEG encryptées.

    pourquoi ce format ?
    c'est un format image, là ou un format PDF avec une passe en OCR pourrait permettre d'indexer un peu plus que sur les mots clefs.

    • [^] # Re: projet interessant, mais j'ai une question

      Posté par  . Évalué à 10.

      Et/ou du PNG pour conserver la qualité originelle, et éviter d'imprimer des documents baveux.

      THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.

      • [^] # Re: projet interessant, mais j'ai une question

        Posté par  (site web personnel) . Évalué à 10.

        J'ai généralement trouvé assez difficile de travailler avec du PDF. Le résultat de la numérisation étant une image, il est ardu de le réintégrer sous forme de texte dans un PDF sans dénaturer le document. Initialement, je passais tous mes documents via un OCR, pour en indexer le contenu dans la base, mais n'ayant pas trouvé de bonne bibliothèque C++, et utilisant au final surtout les tags, je n'ai pas intégré la fonctionnalité dans le client lourd.

        Vis-à-vis du PNG, une fois de plus, c'est la numérisation qui cause souci: les blancs ne sont pas si blancs, beaucoup de documents ont des fonds bariolés, et au final un PNG prenait une place folle. En comparaison, un JPG suffisamment grand (150 dpi) reste lisible, et prend bien moins de place. Mon backup distant prend déjà suffisamment de temps comme ça :)

        J'imagine que l'import pourrait être plus intelligent, et choisir le format le plus adapté pour chaque page.

        • [^] # Re: projet interessant, mais j'ai une question

          Posté par  . Évalué à 4.

          Vis-à-vis du PNG, une fois de plus, c'est la numérisation qui cause souci: les blancs ne sont pas si blancs, beaucoup de documents ont des fonds bariolés, et au final un PNG prenait une place folle.

          Je ne l'ai jamais essayé, mais j'étais tombé par hasard sur le projet unpaper qui m'avait semblé intéressant.

        • [^] # Re: projet interessant, mais j'ai une question

          Posté par  . Évalué à 6.

          il est ardu de le réintégrer sous forme de texte dans un PDF sans dénaturer le document

          Tu veux dire dénaturer visuellement ? Parce que justement en PDF il est possible d'avoir une couche "texte" invisible par dessous le jpeg, comme ça tu as le meilleur des deux mondes (il est même possible de faire correspondre les deux couches pour pouvoir sélectionner/copier le "texte" de l'image).

          Ce qui est bien avec cette technique, c'est que tu obtiens une image dont le "texte" est indexable, et surtout ça n'est pas très grave si l'OCR se plante sur quelques mots/lettres vu que le visuel est l'original.

    • [^] # Re: projet interessant, mais j'ai une question

      Posté par  . Évalué à 5.

      Ou encore DjVu.

    • [^] # Re: projet interessant, mais j'ai une question

      Posté par  . Évalué à 5.

      En plus, la gestion des pdfs permettrait d'ajouter dans la base de données des factures ou autres documents que l'on reçoit désormais par mail et ainsi tout centraliser.

  • # Le roi est mort, vive le roi !

    Posté par  . Évalué à 10.

    sous forme d'images JPEG encryptées

    Encrypté: n.m vieilli Du verbe encrypter. Qui est enterré sous le chœur d'une église.

  • # Autres alternatives

    Posté par  (site web personnel) . Évalué à 10.

    Hello,

    J'avais eu à peu près le même problème il y a quelques mois (scanner mes cours), et le forum m'avait sorti 2 logiciels assez proches:

    Si jamais ça peut servir à quelqu'un...

    Je vais tester le tien aussi !

    • [^] # Re: Autres alternatives

      Posté par  . Évalué à 2.

      J'ai trouvé aussi Pap'Rass qui fait la même chose.

      Je vais sans doute tester aussi. Cela me semble plus efficace que la gestion "manuelle".

      A +

  • # fiche de paie

    Posté par  . Évalué à 10.

    Je cherche ma fiche de paie d'avril 2010, tu l'aurais pas numérisé ?

  • # Matériel

    Posté par  . Évalué à 2.

    Logiciel semble-t-il prometteur. Merci de le partager.
    La numérisation de la paperasse est un point qui me travaille de plus en plus.

    J'en profite pour poser une question matériel aux utilisateurs de ce genre de solutions.

    Avec quoi numérisez vous vos documents ?
    Un scanner à plat tout bête, une imprimante multifonction, autre chose ?

    J'aimerais bien m'équiper mais la dernière fois que j'ai cherché (pas récemment), les scanners sous Linux, c'était pas trop ça...

    Avez vous des modèles (récents) fonctionnant bien sous Linux à recommander ?

    Ps : les screenshoots sont un peu petits pour bien se rendre compte de l'interface, un lien une version de plus grande résolution aurait été intéressant.

    • [^] # Re: Matériel

      Posté par  . Évalué à 2.

      J'ai une HP Deskjet 6500. C'est un combiné imprimante jet d'encre et scanner du bas de la gamme professionnelle. Le tout est reconnu directement par la Debian stable, comme souvent avec HP. Je lui donne des cartouches de grande capacité pour un coût à la page très raisonnable, elle imprime en recto-verso, et elle a aussi quelques gadgets que je n'ai pas testés mais qui pourraient servir à d'autres (réseau, lecteur de cartes mémoire). En prime, par rapport aux modèles d'entrée de gamme grand public, j'ai vraiment l'impression d'avoir une imprimante sur mon bureau, pas une soucoupe volante pour enfant en bas âge.

      • [^] # Re: Matériel

        Posté par  . Évalué à 1.

        Pou ma part, j'ai une soucoupe volante de la marque HP, et ça fonctionne très bien en natif sous Ubuntu, et ce depuis... toujours en fait (sous ubuntu depuis 3 ans).
        La qualité est suffisante pour numériser des documents. Bon, je ne sais pas ce qu'il en est pour d'autres modèles, mais ça prend un temps fou.

    • [^] # Re: Matériel

      Posté par  . Évalué à 2.

      J'ai une Brother MFC 490 CW, une imprimante jet d'encre multi-fonction, WiFi.

      Fonctionne sous Linux, avec les pilotes fournis. L'installation est un peu tordue je trouve. Je sais que HP est en général mieux intégré sous Linux, mais sur cette Brother, j'avais la certitude d'après la doc (ce que n'était pas évident chez HP) de pouvoir photocopier PC éteint, et aussi scanner sur clef usb PC éteint.

      Et au final c'est ce que je fais : je scanne tout directement en PDF sur une clef USB. Je trouve que c'est plus facile que via XSane, qui est compliqué.

      • [^] # Re: Matériel

        Posté par  (Mastodon) . Évalué à 3.

        Et au final c'est ce que je fais : je scanne tout directement en PDF sur une clef USB. Je trouve que c'est plus facile que via XSane, qui est compliqué.

        En même temps si ton pc est allumé, sane c'est pas très compliqué avec la commande scanimage toute bête. Si tu comptes garder les réglages par défaut de ton scanner (ce que tu fais probablement avec le bouton de ta browser), tu n'as même aucun paramètre à donner à part éventuellement le nom du fichier.

        Bref c'est un bête scanimage >/chemin/scan_date'+%Y%m%d-%H%M%S'.pnm (tu peux aussi piper vers pnmto[jpeg|png|cquetuveux] pour l'avoir dans le format de ton choix) que tu mets en raccourci sur ton bureau.

        C'est ce que j'ai fais pour scanner à la chaine des documents. J'avais hésité à investir dans un truc multifonction qui t'envoies un scan par email mais je me suis dit qu'il n'y avait aucune raison de jeter mon vieux scanner qui fonctionne bien. Ça part direct sur le dossier qui va bien sur mon nas (enfin mon fileserver), c'est donc bien plus pratique que d'utiliser une clé usb ou de recevoir par email le fichier qui m'imposerait un traitement supplémentaire.

        Tu peux faire un deuxième bouton et piper vers lp pour avoir un mode "photocopie".

        Et puis maintenant il y'a des applis comme simplescan qui sont très pratiques pour les cas où tu veux rogner ou faire d'autres petites corrections sans sortir la grosse berta.

        • [^] # Re: Matériel

          Posté par  . Évalué à 2.

          Ca dépend de la distance PC <-> scanner

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

          • [^] # Re: Matériel

            Posté par  (Mastodon) . Évalué à 2. Dernière modification le 19 décembre 2011 à 22:34.

            Dans le cas d'un pc fixe, qui serait assez con pour ne pas mettre le (ou en tout cas un) pc et le scanner dans la même pièce. Ne sont-ils pas tout deux des outils de bureau avant tout ?

            Dans le cas d'un laptop, ben euh...faut déjà se déplacer pour aller mettre la feufeuille dans le scanner, alors c'est pas les 3 secondes de branchement d'un port usb qui vont changer quoique ce soit.

        • [^] # Re: Matériel

          Posté par  . Évalué à 1.

          Pour information, avec certaines HP officejet pro, il y a maintenant une fonction d'archivage numérique.
          A l'aide d'un navigateur, tu te connectes au serveur web de l'imprimante. Tu y prédéfinis des profils d'archivage : nom de fichier (avec compteur après le nom), type de fichier (pdf, jpeg), la résolution, la couleur ou pas et surtout l'emplacement d'enregistrement qui est un répertoire partagé samba. Donc cela peut enregistrer directement sur un NAS.
          Ensuite, il suffit de mettre son document dans l'imprimante et de juste sélectionner le profil voulu. Si l'imprimante a un chargeur de document recto-verso, c'est vraiment agréable pour archiver des documents sans allumer l'ordinateur.
          Le seul point noir, est qu'il n'y a pas d'OCR. Si on utilise le logiciel HP sous windows (d'une lourdeur sans nom), il arrive à produire le pdf qui reste une image scannée, mais avec en plus, une "couche" contenant le texte reconnu par OCR. Pour faire des recherches par la suite, c'est un vrai plus.

    • [^] # Re: Matériel

      Posté par  . Évalué à 1. Dernière modification le 19 décembre 2011 à 11:47.

      J'utilise les scanner à plat canon Lide 30 et N1240U (assez ancien), il sont très bien supporté sous Linux, même mieux qui sous Windows Vista/Seven.

      côté soft, xsane marche bien, contrairement au logiciel original du constructeur (sous windows), il faut malheureusement optimiser à main les paramètres quand on scanne des documents type fiche de paye ou facture (maximiser le contraste mais pas trop et ajuster la luminosité), une fois les bons paramètres trouvés (niveau de gris, luminosité à 120% et contraste à 140% dans mon cas), il suffit de sauvegarder le modèle.

      Après pour le matos récent, la liste des modèles supportés par sane est accessible sur leur site

      Les vrais naviguent en -42

    • [^] # Re: Matériel

      Posté par  . Évalué à 2.

      Brother. L'installation est en peut particulière, mais après tout marche (même le scan+envoi du fichier depuis le scanner vers le PC).

      Si tu as beaucoup de chose à scanner, j'ai vu que pour 100€, ils proposent une multi-fonctions qui peut scanner un document de 15 pages en une seule fois. Il y a par exemple ce modèle.

  • # Merci beaucoup

    Posté par  . Évalué à 5.

    Merci beaucoup de partager ton travail,

    Il semble que ton système soit déjà assez mature pour un logiciel à usage perso.

    J'avoue ne mettre jamais penché là dessus bien que je me suis plus d'une fois dis que faire de la « GED » personnelle serait une bonne idée. Ta dépêche me donne l'occasion de me pencher un peu plus sur la question.

    J'espère que tu aura des remontées, je te ferrais par par des voies plus directe de ce que je pense de ta solution quand je l'aurait testé d'ici la fin de semaine, mais déjà je trouve pertinent d'utiliser des mot-clefs pour décrire un document ça me semble à la fois très souple et suffisant (du moins pour mon usage), le fait d'avoir une interface web peut être très intéressante pour récupérer des document depuis n'importe où (« Mince, je dois passer fournir tel document après le boulot »).

    Ce que je trouve dommage par contre c'est de stocker les fichiers dans la base de données. Pour moi la performance éventuelle gagner à stocker les fichiers dans une base de données est moins importante que le fait de pouvoir uploader mes fichier avec le client que je veux (oui je sais il faut pouvoir enregistrer les fichiers ensuite dans la base de données).

    J'apprécie tes choix technique C++/Ocsigen/PostgreSQL qui sont différents des classiques PHP/MySQL, Python/MySQL que l'on trouve partout et ce même si Ocaml est pour moi encore un langage abscons (mais je me soigne).

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Merci beaucoup

      Posté par  (site web personnel) . Évalué à 2.

      Merci de tes encouragements. Les commentaires du journal m'ont ouvert les yeux sur tout un tas d'améliorations possibles, et, comme dirait Léonard, "mon cerveau fourmille tellement d'idées que si un tamanoir passait dans le coin, il me courrait derrière !" :)

      Intéressante remarque sur le stockage des fichiers dans la base de données. Énormément de ressources sur le Web critiquent cette approche, qui tend à faire des bases énormes et peu flexibles. Mon choix reposait sur ma préférence d'avoir tous mes documents centralisés au même endroit, facilitant ainsi la sauvegarde sur mon serveur distant. Mais je conviens que c'est une approche qui ne va pas monter en charge indéfiniment. Peut-être pourrais-je implémenter une approche combinée.

      Et OCaml, c'est bon, mangez-en!

      • [^] # Re: Merci beaucoup

        Posté par  . Évalué à 3.

        Mais je conviens que c'est une approche qui ne va pas monter en charge indéfiniment.

        C'est un choix. piwigo fait ça aussi. Je crois que postgre peut avoir des tables de 32 Tio :
        https://linuxfr.org/news/postgresql-90-est-sorti#comment-1164424

        Tu as encore de la marge :)

        Comment gère-tu les document à page multiples avec des images ?

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

        • [^] # Re: Merci beaucoup

          Posté par  (site web personnel) . Évalué à 1.

          Comment gère-tu les document à page multiples avec des images ?

          Chaque image est une page, et un document peut donc être composé de plusieurs images. Ça rend le code plutôt propre, mais cela n'est pas particulièrement pratique, par exemple, pour consulter ou imprimer un gros document, puisqu'il faut cliquer sur chaque vignette séparément pour afficher l'image en grand.

          Je vais m'intéresser à DjVu, mentionné dans un commentaire un peu plus haut, et qui devrait m'aider à avoir une approche plus orientée document que page.

  • # Fort heureusement...

    Posté par  . Évalué à 3.

    Il n'y a pas besoin de wine pour s'en servir !

    Sur ce, je vais me faire une p'tite boutanche de Haut-Marbuzet en lançant mon scanner.

    cd /pub && more beer

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.