Journal Base de données de scanners : besoin de contributeurs

52
7
mar.
2018

Cher 'nal,

Je développe depuis quelques années une librairie Python cross-platform d'accès aux scanners (Sane sous Linux, WIA2 sous Windows). Elle inclue aussi un certain nombres de contournements pour divers pilotes de scanners plus ou moins moisis. Et croyez-moi, il y en a un paquet, aussi bien sous Linux que Windows.
Le problème, c'est que j'ai sous-estimé l'ampleur de la tâche, surtout sous Windows. Je pensais que l'API Twain était mourante et donc je n'avais pas implémenté son support (perdu). Il manque aussi plein de contournements pour le support WIA. Je compte donc réécrire complètement cette libraire, en complètement mieux. Mais avant ça, il me faut des données. Plein.

Je suis entrain de mettre au points une base de données de scanners. Cette base de données sert à collecter autant d'informations que possible sur les scanners et sur leur drivers, aussi bien sous Linux que Windows. Pour cela, j'ai écrit un petit programme de test de numérisation et d'envoi automagique de rapport. Le programme de test se sert de la librairie existante pour collecter les informations. À terme, il servira aussi à tester la nouvelle librairie.

L'objectif: Établir une liste aussi exhaustive que possible des bugs et bizarreries des scanners et leurs pilotes.

C'est là que j'ai besoin de vous, chers lecteurs. Si chaque possesseur de scanner ici présent pouvait prendre 5min pour envoyer un rapport, aussi bien sous Linux que Windows, ça ferait de moi un développeur heureux :-).
Et je serais encore plus heureux si vous me laissez votre email dans le rapport. Comme ça, une fois que le test aura lamentablement échoué, on pourra réessayer avec une version corrigé. Je ne publie pas les emails, promis.


Pour les curieux, quelques exemples de bugs et bizarreries (déjà contournés ou non):

Pour l'anecdote, Simple-scan a le même genre de contournements dans son code (Sane uniquement).

Vous me direz, pourquoi demander de l'aide sur LinuxFr pour un problème essentiellement de scanners Windows ? Parce-qu'il s'agit de faire une librairie cross-platform. J'ai l'espoir (surement un peu naïf) que ça pourra aussi donner un coup de pouce à l'univers GNU/Linux et aux logiciels libres.

  • # Python vers C?

    Posté par . Évalué à 3.

    J'ai cru lire dans un des liens que tu comptes réécrire cet lib en C from scratch. Une raison en particulier? Performance? Portabilité?

    • [^] # Re: Python vers C?

      Posté par (page perso) . Évalué à 9. Dernière modification le 07/03/18 à 14:52.

      1) Personnel: Le C fait partie des quelques langages que je maitrise bien.

      2) Technique: Portabilité, mais au sens large. J'aimerais faire une librairie qui puisse servir à autant de monde que possible. Donc je vais la faire cross-platform*, mais aussi cross-langages. Le plan, c'est d'utiliser la GLib et l'introspection GObject pour pouvoir générer des bindings pour un peu tout les langages facilement. On va voir ce que ça donne.

      L'aspect performance sera juste la cerise sur le gâteau :-)

      [*] Sauf les Mac, parce-que je suis trop pauvre.

      • [^] # Re: Python vers C?

        Posté par (page perso) . Évalué à 3.

        Donc je vais la faire cross-platform*, mais aussi cross-langages. Le plan, c'est d'utiliser la GLib et l'introspection GObject pour pouvoir générer des bindings pour un peu tout les langages facilement.

        Utiliser GLib directement dans la lib bas niveau rend la lib dépendante de la GLib, ce qui peut être un soucis pour l'utiliser avec Qt. (Question de guerre de clocher.)

        Pourquoi ne pas avoir une lib en C avec une API en C et fait des appels C depuis Python avec cffi ?

        Je suppose qu'idéalement ta lib serait réutilisée par Gnome Simple Scan et autres outils similaires.

        • [^] # Re: Python vers C?

          Posté par (page perso) . Évalué à 4.

          Utiliser GLib directement dans la lib bas niveau rend la lib dépendante de la GLib, ce qui peut être un soucis pour l'utiliser avec Qt.

          Le plan est de faire la librairie en C pur, et de lui rajouter un chapeau GObject (dans le même style que Poppler).
          Pour Qt: https://wiki.gnome.org/Projects/GObjectIntrospection/GObjectConsume .

          Python avec cffi ?

          Parce-qu'il n'y a pas que Python. Avec l'introspection GObject, la librairie pourrait bénéficier aussi aux programmes C++, C#, Java, etc. C'est là tout son intérêt.

          Je suppose qu'idéalement ta lib serait réutilisée par Gnome Simple Scan et autres outils similaires.

          Il y a quelques mois, j'avais eut une première discussion avec des devs Gnome pour l'inclusion de Paperwork sur gnome.org. C'est là qu'il m'avait été suggéré de refaire Pyinsane et Pyocr en C+GObject, justement pour que ça puisse être réutilisé dans les autres projets Gnome. Je trouve que c'est une très bonne idée pour Pyinsane. (pour Pyocr, mouais bof, c'est une librairie qui passe bien en Python, mais elle risque d'être très lourde à refaire en C).

  • # ironscanner ne marche pas chez moi

    Posté par . Évalué à 4.

    Salut,

    $ ./ironscanner répond :
    ImportError: Typelib file for namespace 'xlib', version '2.0' not found

    J'installe python-xlib :
    # urpmi python-xlib
    $MIRRORLIST: media/core/release/python-xlib-0.15-12.mga6.noarch.rpm
    installation de python-xlib-0.15-12.mga6.noarch.rpm depuis /var/cache/urpmi/rpms

    Préparation… ###############################################################################
    1/1: python-xlib

    Mais j'ai toujours la même erreur…

    • [^] # Re: ironscanner ne marche pas chez moi

      Posté par . Évalué à 2.

      Pareil

      Traceback (most recent call last):
        File "gi/importer.py", line 138, in load_module
        File "gi/module.py", line 275, in get_introspection_module
        File "gi/module.py", line 122, in __init__
      gi.RepositoryError: Typelib file for namespace 'xlib', version '2.0' not found
      
      During handling of the above exception, another exception occurred:
      
      Traceback (most recent call last):
        File "launcher.py", line 6, in <module>
        File "/var/lib/buildbot/slaves/openpaperwork-pyinstaller/build_linux_exe/build/venv/lib/python3.5/site-packages/PyInstaller/loader/pyimod03_importers.py", line 631, in exec_module
        File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/main.py", line 26, in <module>
        File "gi/importer.py", line 140, in load_module
      ImportError: Typelib file for namespace 'xlib', version '2.0' not found
      
      • [^] # Re: ironscanner ne marche pas chez moi

        Posté par (page perso) . Évalué à 4.

        https://madb.mageia.org/package/show/application/0/name/libxlib-gir2.0

        ^ Je pense que c'est ce paquet qu'il vous manque à tout les deux. Ceci dit, Pyinstaller aurait dû l'inclure dans l’exécutable :/. Il faudra que je regarde.

        • [^] # Re: ironscanner ne marche pas chez moi

          Posté par . Évalué à 5.

          Yes, c'est mieux mais… je vais continuer le rapport de bug ici :)

          J'ai bien une fenêtre qui s'ouvre sans décoration et j'ai un warning canberra-gtk-module.
          Pourtant, il devrait y avoir ce qu'il faut (à moins que cela cherche les libs 32bits)

          [root@hyperion ~]# rpm -qa | grep canberra-gtk
          lib64canberra-gtk3_0-0.30-11.mga6
          lib64canberra-gtk0-0.30-11.mga6
          canberra-gtk-0.30-11.mga6
          

          Je clique sur le premier bouton suivant et ça freeze.
          Pas moyen de saisir quelque chose.
          Bonne nouvelle, la trace (cf ci dessous) montre que mon scanner a été trouvé (plus celui de mon ancienne multifonction). Je vais devrait pouvoir faire un rapport si ça marche.

          Je finis par tuer le process.

          Ma distrib est une Mageia Cauldron à jour et j'utilise l'exécutable linux que tu fournis.
          Le python doit avoir des partie installées via package et doit par pip3.

          Gtk-Message: Failed to load module "canberra-gtk-module"
          INFO   2018-03-07 22:59:06,548 ironscanner.main Pyinsane2 daemon: ['/tmp/ironscanner', '-m', 'pyinsane2.sane.daemon', '/tmp/pyinsane_fqv9_o31', '/tmp/pyinsane_fqv9_o31/pipe_c2s', '/tmp/pyinsane_fqv9_o31/pipe_s2c']
          INFO   2018-03-07 22:59:06,548 Pyinsane_daemon Ready
          INFO   2018-03-07 22:59:06,548 pyinsane2.sane.abstract_proc Connected to Pyinsane subprocess
          INFO   2018-03-07 22:59:06,549 ironscanner.main Pyinsane2 ready
          /tmp/_MEIpLHIVy/ironscanner/util.py:75: Warning: g_value_type_transformable: assertion 'G_TYPE_IS_VALUE (src_type)' failed
          
          (ironscanner:5261): Gtk-WARNING **: /build/gtk+3.0-NmdvYo/gtk+3.0-3.22.11/./gtk/gtkliststore.c:836: Unable to convert from (null) to gchararray
          
          (ironscanner:5261): Gtk-CRITICAL **: gtk_assistant_set_page_has_padding: assertion 'child != NULL' failed
          INFO   2018-03-07 22:59:12,323 ironscanner.main Looking for scanners ...
          INFO   2018-03-07 22:59:13,300 ironscanner.main 2 scanners found
          INFO   2018-03-07 22:59:13,301 ironscanner.main brother4:net1;dev1 -> Brother *ADS-1110W (brother4:net1;dev1)
          INFO   2018-03-07 22:59:13,301 ironscanner.main brother4:net1;dev0 -> Brother *DCP-J725DW (brother4:net1;dev0)
          INFO   2018-03-07 22:59:13,303 ironscanner.main Selected scanner: brother4:net1;dev1
          WARNING 2018-03-07 23:00:11,684 Pyinsane_daemon Exception
          Traceback (most recent call last):
            File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/daemon.py", line 136, in main_loop
            File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/daemon.py", line 37, in get_options
            File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract.py", line 442, in _get_options
            File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract.py", line 413, in __load_options
            File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract.py", line 398, in _open
            File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/rawapi.py", line 591, in sane_open
          pyinsane2.sane.rawapi.SaneException: <class 'pyinsane2.sane.rawapi.SaneStatus'> : Data is invalid (4)
          ERROR  2018-03-07 23:00:11,684 ironscanner.log === UNCATCHED EXCEPTION ===
          Traceback (most recent call last):
            File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/main.py", line 325, in _on_scanner_selected
            File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 259, in _get_options
            File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 74, in remote_do
          pyinsane2.sane.rawapi.SaneException: <class 'pyinsane2.sane.rawapi.SaneStatus'> : Data is invalid (4)
          ERROR  2018-03-07 23:00:11,685 ironscanner.log ===========================
          
          
          
          • [^] # Re: ironscanner ne marche pas chez moi

            Posté par (page perso) . Évalué à 2.

            pyinsane2.sane.rawapi.SaneException: : Data is invalid (4)

            Ah oui, cette erreur, je la vois parfois avec les scanners Brother (et quelques autres). Je ne sais pas quoi en penser pour le moment :/

            • [^] # Re: ironscanner ne marche pas chez moi

              Posté par . Évalué à 2.

              Ok, on en reste là pour l'instant alors…

            • [^] # Re: ironscanner ne marche pas chez moi

              Posté par . Évalué à 4.

              En fait, mon scanner était éteint !
              J'ai aussi viré l'entrée de l'ancien qui n'existe plus.
              ça fonctionne mieux d'un point de vue de ironscanner :)

              Le scanner a bien effectué le scan (il a fait passer la page mais erreur quand même à l'étape "let's scan"). Il a affiché une croix rouge d'erreur mais je n'ai pas plus de détail.

              La trace étant dans le rapport envoyé, je ne la recopie pas ici.

              Mon scanner est configuré pour que lorsque je scan depuis l'appareil en appuyant sur une touche, le pdf généré est transféré par ftp dans un dossier sur mon serveur (pas de nouveau fichier créer dedans par contre). Cela a-t-il pu interférer avec ironscanner qui n'a pu récupérer le scan ?

              J'ai fait 2 tests, mêmes erreurs, le 2nd rapport étant correctement complété coté détails du scanner.

              A ton service pour faire d'autres tests si nécessaires.

              • [^] # Re: ironscanner ne marche pas chez moi

                Posté par (page perso) . Évalué à 2.

                Mon scanner est configuré pour que lorsque je scan depuis l'appareil en appuyant sur une touche, le pdf généré est transféré par ftp dans un dossier sur mon serveur (pas de nouveau fichier créer dedans par contre). Cela a-t-il pu interférer avec ironscanner qui n'a pu récupérer le scan ?

                Aucune idée. C'est typiquement le genre de choses qui dépend entièrement du scanner et de son pilote .. :/
                Si tu trouves la réponse un jour, je suis intéressé.

                • [^] # Re: ironscanner ne marche pas chez moi

                  Posté par . Évalué à 3.

                  Comme je suis têtu et en vacances avec un temps pourri…
                  J'ai tout réinstallé (pilote un peu plus à jour et config)
                  Et c'est ok (image dans le rapport en NB car impression en NB)

        • [^] # Re: ironscanner ne marche pas chez moi

          Posté par (page perso) . Évalué à 2.

          je suis surpris de devoir installer cette lib 32 bits (avec juste la 64 bits lib64xlib-gir2.0 cela ne fonctionne pas) alors que ironscanner est un exécutable 64 bits…
          (test de mon scanner envoyé !)

      • [^] # Re: ironscanner ne marche pas chez moi

        Posté par . Évalué à 2. Dernière modification le 11/03/18 à 15:43.

        Pareil sur Fedora 27, j'ai essayé d'installer tous les paquets xlib que j'ai trouvé, mais le message d'erreur persiste.

  • # Fait

    Posté par . Évalué à 5.

    Pour le scanner HP photosmart 5525

  • # Samsung SCX-4705ND

    Posté par . Évalué à 5.

    Fait (sur Windows 10).

  • # Photo du scanner

    Posté par . Évalué à 2.

    Sous Windows 10, la fenêtre de sélection d'un fichier pour la photo du scanner ne montre que les dossiers. Un drag&drop du fichier dans l'interface fonctionne bien néanmoins.

    • [^] # Re: Photo du scanner

      Posté par (page perso) . Évalué à 2.

      Arf oui, merci pour le retour :-)

      Je suis un peu court niveau temps libre, donc j'ai fait simple:
      Je suppose que Pyinstaller a dû zapper de mettre certains fichiers en rapport avec les types mimes dans le paquet. --> Pas le temps ni l'envie de chercher --> En grosse feignasse, j'ai juste désactivé le filtrage pour le moment. Le sélecteur laisse maintenant choisir n'importe-quel fichier.

  • # petite erreur

    Posté par . Évalué à 5.

    ~/tmp$ ./ironscanner
    bash: ./ironscanner: cannot execute binary file: Erreur de format pour exec()

    visiblement ca marche uniquement pour amd64, mais je me trompe peut etre, ouais je sais de nos jour tous le monde est en 64b :

    Linux debian 3.16.0-4-686-pae #1 SMP Debian 3.16.51-3 (2017-12-13) i686 GNU/Linux

  • # Erreur sur OKI MC363

    Posté par . Évalué à 5. Dernière modification le 07/03/18 à 22:10.

    Dommage, ça partait très bien !

    Erreur dans la partie "Let's scan" :

    ERROR  Unexpected exception while calling <bound method Scanner.scan of <pyinsane2.sane.abstract_proc.Scanner object at 0x7fd4498cb8d0>>
      Traceback (most recent call last):
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 35, in run
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 267, in scan
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 208, in __init__
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 74, in remote_do
    pyinsane2.sane.rawapi.SaneException: <class 'pyinsane2.sane.rawapi.SaneStatus'> : Error during device I/O (9)
    INFO   ### SCAN TEST FAILED ###
    Traceback (most recent call last):
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/main.py", line 712, in run
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 77, in trace
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 35, in run
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 267, in scan
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 208, in __init__
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 74, in remote_do
    pyinsane2.sane.rawapi.SaneException: <class 'pyinsane2.sane.rawapi.SaneStatus'> : Error during device I/O (9)
    All done !
    

    Au passage, j'ai pas compris la pop-up "résolution". Le mien est censé être 1200 dpi ou qqchose dans ce style, et je vois des chiffres comme 3267800 dans la sélection.

    • [^] # Re: Erreur sur OKI MC363

      Posté par (page perso) . Évalué à 6.

      Normalement, même si le test échoue, il y a moyen de d'envoyer le rapport complet automatiquement à OpenPaper.work. Dans ton commentaire Linuxfr, il manque plein d'informations, et ça sera trop facile pour moi d'oublier que ce problème existe.

      Pourrais-tu refaire le test et envoyer le rapport cette fois-ci s'il-te-plaît ?

      Au passage, j'ai pas compris la pop-up "résolution". Le mien est censé être 1200 dpi ou qqchose dans ce style, et je vois des chiffres comme 3267800 dans la sélection.

      J'ai un problème similaire avec le backend de test de Sane. Je ne sais encore trop d'où il vient :/

      • [^] # Re: Erreur sur OKI MC363

        Posté par . Évalué à 8.

        En effet, j'ai pu envoyer le rapport. J'en ai même envoyé un 2nd pour mettre mon nom et email. N'hésite pas à revenir vers moi :)

  • # Merci

    Posté par (page perso) . Évalué à 10.

    Merci à tout ceux qui ont déjà soumis un rapport. Comme beaucoup d'entre vous ont du le voir, mon travail est loin d'être fini.

    Dans les semaines ou mois à venir, si vous recevez un mail écrit dans un anglais approximatif et venant d'un certain "Jérôme Flesch", ne le mettez pas tout de suite dans votre dossier "Spam" s'il-vous-plaît ;-)

  • # et les mopieurs ?

    Posté par (page perso) . Évalué à 4.

    pour un problème essentiellement de scanners Windows ?

    Comment cela « scanners Windows », c'est du matériel, non  ? Au fablab, j'ai plein de mopieurs qui font scanner et fonctionnent sous Linux même si l'imprimante afférente est défaillante (bon, pour une Canon : il me demande de remplacer une cartouche d'encre défaillante…).

    Tes rapports proposés sont relativement complets (du point de vue de ce que remonte le pilote), mais je suis très étonné de ne pas retrouver des informations techniques qui pourraient facilement être collectées au passage :

    • capacités du scanner (est-ce un mopieur en plus, permettant d'imprimer par exemple)
    • le résultat d'un lsusb (quand connecté en USB)
    • les interfaces de connexion : wifi, ethernet, usb ou autre (bluetooth ?)
    • les formats pris en compte (PCL, PDF, autre…)
    • les fonctions avancées : envoi par mail, dépose de fichier sur répertoire partagé
    • les interfaces physiques : clé usb, sdcard…
    • autant capter des informations complémentaires lorsque c'est possible ?

    tu peux aussi regarder http://openprinting.org qui a une base pour les imprimantes (j'aime bien leur système de notation :D)

    • [^] # Re: et les mopieurs ?

      Posté par (page perso) . Évalué à 4. Dernière modification le 08/03/18 à 13:20.

      Comment cela « scanners Windows », c'est du matériel, non  ?

      Tu oublies les pilotes et les APIs elles-mêmes:

      • Sane a une API bien faite et simple à utiliser. Il est difficile de se planter en implémentant un pilote ou un client .. bien que visiblement certains y arrivent.
      • WIA2 est un gros tas de boue beaucoup trop complexe, avec une forte probabilité d'erreur dans les implémentations et d'énormes risques de différences de comportements entre les pilotes. Microsoft propose un système pour tester les pilotes. Mais il ne teste visiblement pas tout et ne corrige en rien les idioties de WIA2. C'est d'autant plus vrai si, comme moi, on passe par l'API WIA2 "bas-niveau" plutôt que l'API d'automatisation WIA2 (qui est plus limitée).

      À l'heure actuelle, à vérifier, mais il me semble que Pyinsane supporte facilement > 90% des scanners sous Linux avec Sane. Mais il supporte peut-être tout juste ~25% des scanners sous Windows avec WIA.

      capacités du scanner (est-ce un mopieur en plus, permettant d'imprimer par exemple)

      C'est dans les options du scanner, dans chaque rapport ("réglages disponibles").

      le résultat d'un lsusb (quand connecté en USB)

      Sûrement une bonne idée de le rajouter, mais problématique à faire de façon portable (à moins que j'ai manqué une librairie qui le fasse ?). Personnellement, n'ayant pas l'intention d'écrire de pilote, ce n'est pas une information pertinente pour moi. À voir pour le rajouter plus tard.

      les interfaces de connexion : wifi, ethernet, usb ou autre (bluetooth ?)

      Sauf erreur de ma part, ni WIA ni Sane ne propose d'API pour déterminer ça. Ça peut se deviner aux IDs, tout au plus.

      les formats pris en compte (PCL, PDF, autre…)

      Valable uniquement dans le cas de WIA2 (option "format" et "preferred_format"). Sane C'est d'ailleurs une des principales idioties de cette API. Et c'est déjà dans les rapports (toujours dans "réglages disponibles").

      les fonctions avancées : envoi par mail, dépose de fichier sur répertoire partagé

      Non-couvert par Sane à ma connaissance. Partiellement couvert par WIA. L'information n'est pas formatée dans le rapport, mais elle peut se retrouver dans les traces. Personnellement, ce n'est pas une information qui m'intéresse pour mon développement. Peut-être à rajouter plus tard si j'ai le temps.

      les interfaces physiques : clé usb, sdcard…

      Non-couvert par Sane à ma connaissance. Probablement juste partiellement couvert par WIA, peut-être même pas du tout.

      • [^] # Re: et les mopieurs ?

        Posté par (page perso) . Évalué à 3. Dernière modification le 08/03/18 à 13:26.

        Je n'y connais rien du tout mais si l'API de Sane est si bien, ce ne serait pas possible de faire un wrapper de ton API pourrie Windows vers Sane, plutôt que de faire une surcouche aux deux ?

        • [^] # Re: et les mopieurs ?

          Posté par (page perso) . Évalué à 2. Dernière modification le 08/03/18 à 13:38.

          https://github.com/mback2k/wiasane
          Comme ça on pourra cumuler les problèmes des deux APIs ;)

          Plus sérieusement, j'y ai songé. Mais ce que j'ai constaté, c'est que ça a peu de chance de bien marcher. Pyinsane a une API similaire à Sane (historique). C'est un de mes plus gros problèmes de conception: l'API WIA rentre mal dedans. Je l'ai faite rentrer au chausse-pieds.

          Le problème de base est le suivant:

          • Pour un scanner, Sane propose une séries d'options (+ valeurs + contraintes + etc)
          • Pour un scanner, WIA propose un arbre de périphérique: Le scanner a ses propres options, mais chaque source du scanner (Lit, bac d'alimentation, vaisseau spatial, etc) a les siennes aussi. Et elles ne correspondent pas forcément d'une source à l'autre sur un même scanner. Par exemple, tu peux avoir deux options "resolution" avec des contraintes différentes sur différentes sources du scanner.

          Dans le cas spécifique de wiasane, j'ai cru voir qu'il passe par l'API d'automatisation WIA plutôt que l'API "bas-niveau". Elle marche généralement mieux, mais elle a une limitation qui m'embête beaucoup: Il est impossible de recevoir l'image numérisation au fur et à mesure de la numérisation (sauf erreur de ma part, comme toujours).

  • # GNOME Scan

    Posté par . Évalué à 5.

    Salut,

    Lorsque je travaillais sur GNOME Scan, je m'étais aussi cassé les dents sur les variations d'un pilote à l'autre. L'API de libsane est hyper souple et quasiment faite pour ça. Les wellknown options sont juste à titre indicatif et correspondent à l'utilisation de XSane. D'ailleurs XSane se contente d'exposer les options brutes à l'utilisateur. Les specs d'options sont presque des spec de widget basique. C'est pas du tout adapté pour créer de nouvelles ergonomies.

    J'avais isolé ce bordel dans un backend pour ne pas trop me prendre la tête avec : exemple pour les sources : https://git.gnome.org/browse/gnome-scan/tree/modules/gsane/gsane-option-source.c#n61 . Mon but était de savoir si le scanner allait automatiquement numériser la page suivante ou s'il fallait que je propose une interface change la feuille et tape Entrée.

    Autre exemple le type de scanner (juste pour avoir une icône pertinente). https://git.gnome.org/browse/gnome-scan/tree/modules/gsane/gsane-scanner.c#n76

    Dans gsane, il y a un gestionnaire d'options qui avale les options SANE brute et instancie un gestionnaire pour gérer une ou plusieurs options : https://git.gnome.org/browse/gnome-scan/tree/modules/gsane/gsane-module.c#n66 .

    Donc note bien : les valeurs aussi ne sont pas cohérentes d'un pilote à l'autre. Pas seulement le nom des options.

    Et je ne parle pas de la gestion du hotplug.

    Ceci dit, TWAIN est assez souple lui aussi. Le monde des scanners est très varié (plus que les imprimantes ou les appareils photos). Tu ne pourrais jamais mettre tout le monde sur la table et fixer une fois pour toute ce truc, même pour les options de bases. Certains pilotes veulent implémenter des fonctionnalités de haut-niveau : est-ce une photo 10x15?, d'autres restent basique : coordonnées de la ROI.

    Il y a un intérêt à normaliser les pilotes au dessus d'une API unifiée.

    Bref bon courage.

    Tant qu'on imprimera et qu'il restera du papier, on numérisera.

    • [^] # Re: GNOME Scan

      Posté par (page perso) . Évalué à 4. Dernière modification le 08/03/18 à 13:29.

      C'est pas du tout adapté pour créer de nouvelles ergonomies.
      (…)
      Donc note bien : les valeurs aussi ne sont pas cohérentes d'un pilote à l'autre

      Ah ça j'ai vu. Pire que ça, certains pilotes traduisent les noms des options et les valeurs … ça promet des workarounds intéressants.
      Simple-scan contient aussi un joli lot de workarounds. Je me rend compte que tout les logiciels de scan sous Linux (et je suppose Windows) ont eut affaire aux même problèmes. Du coup, une des idées en refaissant ma librairie est d'essayer de proposer une base commune saine pour tout les workarounds.

      Tu ne pourrais jamais mettre tout le monde sur la table et fixer une fois pour toute ce truc, même pour les options de bases.

      Ça ne va pas m'empêcher d'essayer ;-)
      Plus sérieusement, mon objectif est de pouvoir de faire de simples numérisations (lit ou bac d'alimentation) avec au moins 90% des scanners sous Linux et Windows. Sous Linux, l'objectif semble atteint. Sous Windows, je suis parti pour en baver.

      Je ne cherche pas à supporter les options coincoin (preview, photo, stockage de fichiers, etc). Si quelqu'un d'autre veut s'y casser les dents, il pourra, je n'ai aucun problème à accepter les patchs dans ce sens.

      Bref bon courage.

      Merci, je sens que je vais en avoir besoin :-)

    • [^] # Re: GNOME Scan

      Posté par (page perso) . Évalué à 2.

      Au fait, question bête: y a-t-il une mailing-list dédiée à Gnome-scan ?

  • # Et un autre Canon LiDE 220

    Posté par (page perso) . Évalué à 4.

    Sous Linux, ça roule : https://openpaper.work/fr/scanner_db/report/62/

    La connaissance libre : https://zestedesavoir.com

  • # Et hop !

    Posté par (page perso) . Évalué à 3.

    J'ai scanné les premiers trucs qui me sont tombés sous la main, j'espère que ça ira quand même (je n'ai plus assez d'encre pour imprimer la page de test redhat).

    J'ai dû lancer le testeur deux fois : la première fois, peut-être parce que je suis sur une machine avec peu de RAM, le scanner réseau n'a pas été vu, et à ma grande surprise, après avoir basculé de KDE à xfce4, pif paf, je l'ai vu !

    • [^] # Re: Et hop !

      Posté par (page perso) . Évalué à 3. Dernière modification le 08/03/18 à 19:28.

      j'espère que ça ira quand même

      C'est parfait.

      Si je stocke les scans, c'est pour répondre à quelques questions que je me posais:

      • Est-ce que tout les scanners ont un ratio x/y correct ? ;
      • Est-ce que tout les scanners renvoient bien des images de même taille pour les mêmes réglages (même résolution + page A4, etc) ;
      • Si la page et/ou la zone de scan est plus petite que ce que le scanner prétend pouvoir scanner au maximum, est-ce qu'il rempli avec du blanc ou du noir ?

      Ce que tu as scanné permet de répondre grosso-modo à ces questions pour ton scanner.

  • # Brother en réseau

    Posté par (page perso) . Évalué à 4.

    J'ai un Brother MFC-L2700DW en réseau et l'application de rapport ne le trouve pas:

    ERROR  2018-03-08 20:15:54,522 ironscanner.trace Unexpected exception while calling <function get_devices at 0x7fe7798c1840>
    Traceback (most recent call last):
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 35, in run
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 275, in get_devices
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 70, in remote_do
    AssertionError
    Exception in thread ScannerFinder:
    Traceback (most recent call last):
      File "threading.py", line 914, in _bootstrap_inner
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/main.py", line 137, in run
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 77, in trace
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 35, in run
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 275, in get_devices
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 70, in remote_do
    AssertionError
    
    ERROR  2018-03-08 20:15:59,576 ironscanner.trace Unexpected exception while calling <function get_devices at 0x7fe7798c1840>
    Traceback (most recent call last):
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 35, in run
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 275, in get_devices
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 70, in remote_do
    AssertionError
    Exception in thread ScannerFinder:
    Traceback (most recent call last):
      File "threading.py", line 914, in _bootstrap_inner
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/main.py", line 137, in run
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 77, in trace
      File "site-packages/ironscanner-1.1.0-py3.5.egg/ironscanner/trace.py", line 35, in run
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 275, in get_devices
      File "site-packages/pyinsane2-2.0.12-py3.5.egg/pyinsane2/sane/abstract_proc.py", line 70, in remote_do
    AssertionError
    

    « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

    • [^] # Re: Brother en réseau

      Posté par (page perso) . Évalué à 3.

      Pyinsane lance un processus en arrière-plan pour faire effectivement toutes les manipulations. Le but est de faire en sorte que si le driver Sane crash, l'application ne crash pas. De même, si le driver Sane corrompt la mémoire, il ne va pas corrompre celle de l'application. Ici, on dirait que ce processus de Pyinsane a crashé. Mais il me faudrait les autres traces pour voir si je peux deviner ce qui s'est passé.

      Est-ce que tu pourrais quand même envoyer le rapport s'il-te-plaît ? Il te faudra juste préciser manuellement le nom du fabriquant et le modèle.

      • [^] # Re: Brother en réseau

        Posté par (page perso) . Évalué à 4. Dernière modification le 10/03/18 à 10:45.

        Est-ce que tu pourrais quand même envoyer le rapport s'il-te-plaît ?

        Je n'arrive à envoyer le rapport, je ne peux pas cliquer sur Suivant ou Sending results. Je ne peux pas non plus remplir manuellement le champ Scanner informations, il est grisé. S'il y a moyen de t'envoyer plus d'information, n'hésite pas à me le dire.

        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

        • [^] # Re: Brother en réseau

          Posté par . Évalué à 4.

          Que dit la commande scanimage fournie par sane

          # scanimage -L
          device `brother4:net1;dev0' is a Brother ADS-1100W ADS-1100W
          

          Si elle ne trouve pas ton scanner, je doute que ironscanner puisse le trouver s'il se base, si j'ai bien compris, sur les libs sane.

          • [^] # Re: Brother en réseau

            Posté par (page perso) . Évalué à 4.

            device `brother4:net1;dev0' is a Brother MFC-L2700DW MFC-L2700DW
            

            « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

            • [^] # Re: Brother en réseau

              Posté par (page perso) . Évalué à 4.

              Pour info, j'ai pu lancé le scan après avoir scanné un document avec une autre application (mais j'ai oublié de le mettre en commentaire lors de l'envoi).

              « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # Fait pour HP Deskjet 3057A

    Posté par (page perso) . Évalué à 3. Dernière modification le 08/03/18 à 21:56.

    (Hewlett-Packard Deskjet_3050A_J611_series)
    uniquement sous Linux, je n'utilise pas Windows :-)
    (fonctionne super sous Linux)

  • # erreur 50x lors de l'envoi du rapport

    Posté par (page perso) . Évalué à 2.

    Salut

    Pour information impossible d'envoyer le rapport, je tombe sur une erreur 50x (500 et 502) lors de la soumission du scan.

    Pour mon dernier essai :
    INFO 2018-03-13 10:24:03,426 ironscanner.main Report ready: 19744 Kbytes to send
    INFO 2018-03-13 10:24:03,426 ironscanner.main Connecting to openpaper.work
    INFO 2018-03-13 10:24:03,429 ironscanner.main Posting report…
    INFO 2018-03-13 10:24:03,429 ironscanner.main Please wait, this may take a while…
    ERROR 2018-03-13 10:27:00,277 ironscanner.main Error from server: 500 - Internal Server Error

    • [^] # Re: erreur 50x lors de l'envoi du rapport

      Posté par (page perso) . Évalué à 2. Dernière modification le 13/03/18 à 22:43.

      Si tu es celui qui a essayé d'envoyer un rapport récemment, il manque (pour une raison que j'ignore) le nom de ton OS dans le rapport --> exception Python à la reception --> 500. C'est corrigé coté serveur. Je verrais à partir des traces pourquoi il manque l'OS.
      Pour l'erreur 502, c'est un rapport trop volumineux (la limite de 20Mo est sensée être large déjà pourtant :/). En scannant en plus basse résolution, il y aura peut-être moins de traces.

Suivre le flux des commentaires

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