Forum Linux.débutant Commande scanimage

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
17
nov.
2016

Bonjour à tous,

En ce moment je développe un logiciel pour scanner des feuilles avec une imprimante Epson sous QtCreator.

Pour lister les scanners, je tape la commande "scanimage -L".
Je ne sais pas dans quell fichier s'écrit la liste des scanners par contre!

La commande suivante lance depuis un terminal fonctionne :

scanimage --device=epson2:net:192.168.1.90 --format=tiff >~/doc.tiff --color=gray

L'inconvéniant est que lorsque j'essaie de lancer cette ligne de code dans un QProcess, rien ne se passe.
Je pense que le QProcess ne voit pas le lien vers l'imprimante, si vous avez une idée !?

J'aimerais également savoir si il est possible de surveiller l'état d'avancement du process ou j'ai lance un scan d'une feuille.

Merci d'avance et bonne journée.

  • # Sortie standard et redirection

    Posté par  . Évalué à 2.

    Pour lister les scanners, je tape la commande "scanimage -L".
    Je ne sais pas dans quell fichier s'écrit la liste des scanners par contre!

    Ben dans la sortie standard.

    Si tu veux écrire dans un fichier, tu fais une redirection, comme tu as fait dans l'autre commande, avec l'opérateur ">" :

    scanimage -L > ~/monfichier
    Mais dans ton cas il vaudrait mieux rattraper la sortie directement dans ton logiciel.

    • [^] # Re: Sortie standard et redirection

      Posté par  . Évalué à 1.

      Oui c'est une bonne manière aussi.

      Je récupère sur la sortie standard déjà oui mais on m'a suggéré ceci :

      /bin/bash /chemindescanimage/scanimage --device=epson2:net:192.168.1.90 --format=tiff >~/doc.tiff --color=gray

      Je ne sais plus ce que fais /bin/bash par contre !

      • [^] # Re: Sortie standard et redirection

        Posté par  . Évalué à 2.

        /bin/bash, c'est l'interpréteur de script.

        scanimage doit être un script. En général, tu l'utilises directement :

        /chemin/vers/mon_script --options > fichier_resultat
        Pour que ça marche, il faut que le fichier scanimage soit exécutable et qu'il commence par une ligne indiquant l'interpréteur (qui peut être bash, sh, voire python).

        A défaut, et pour pas se compliquer, tu peux appeler bash explicitement comme dans ton exemple et tu es sûr que ça marche, même si c'est redondant.

        Tu as peut-être copié cette ligne sur une page d'aide ou de tuto qui utilise la méthode explicite pour être sûr que ça fonctionne sans devoir ajouter les droits en exécution (chmod +x).

  • # Utilise libsane

    Posté par  . Évalué à 4.

    Dans la mesure où tu écris un programme en Qt et non juste un petit script shell, à mon avis tu ferais mieux d'utiliser directement l'API de SANE plutôt que lancer des processus externes et traiter leur sortie.

    • [^] # Re: Utilise libsane

      Posté par  . Évalué à 1.

      On peut utiliser l'API de SANE dans un programme Qt?

      Je me suis un peu planté avec mon scanimage alors.

      • [^] # Re: Utilise libsane

        Posté par  . Évalué à 2. Dernière modification le 17/11/16 à 12:46.

        C'est possible et il se peut même que ça existe déjà : https://sourceforge.net/projects/quiteinsane/

        Je partage le commentaire de Bernez. Avant de lancer des commandes et de parser les sorties, c'est toujours bien de chercher s'il y a pas une API, une bibliothèque qui propose les fonctionnalités directement dans le langage qu'on utilise.

        J'utilise plutôt Python, donc je connais pas l'écosystème C++, c'est pour ça que je ne suis pas entré là-dedans dans ma réponse, mais mon premier réflexe serait de chercher une bibliothèque en C++ (ou avec des bindings en C++) qui englobe scanimage ou propose quelque chose d'équivalent.

        L'API SANE est une bonne piste.

        Et quiteinsane est peut-être exactement ce que tu veux réaliser, ou au moins un exemple dont t'inspirer.

        • [^] # Re: Utilise libsane

          Posté par  . Évalué à 1.

          Merci pour vos réponses.

          J'essaie d'installer quiteinsane mais j'ai toujours cette erreur au moment du configure :

          checking for Qt... configure: error: Qt (>= Qt 2.2.2) (headers and libraries) not found. Please check your installation!
          

          J'ai pourtant mis un export QTDIR=/opt/Qt5.7.0/5.7/gcc_64/lib
          Je ne sais pas si c'est le bon chemin mais la, … je suis bloqué.

          • [^] # Re: Utilise libsane

            Posté par  . Évalué à 2.

            j'ai pas souvenir qu'on fasse un export d'une variable pour qu'il trouve un chemin contenant les libs,

            de memoire il faut :

            • soit aller specifiquement dans le code (les .h pour dire quel chemin prendre pour ces libs)
            • soit explictement declarer les dossiers contenant les libs dans un fichier de configuration et faire un ldconfig pour que les dossiers soient reactualisés

            en ca c'etait à l'epoque ou j'aimais recompilé moi meme mes programmes,
            depuis j'ai arreté

          • [^] # Re: Utilise libsane

            Posté par  . Évalué à 1.

            Installer QuiteInsane ne sert à rien. C'était juste un exemple de logiciel prouvant qu'il est possible d'interfacer Qt avec SANE. Mais ce logiciel est n'est visiblement plus maintenu et n'est pas utile en soi (même en tant qu'exemple, puisqu'il est obsolète).

            Ce qu'il faut faire, c'est installer le paquet de ta distribution qui contient les fichiers de développement de libsane (un truc genre "libsane-dev"). L'API native de SANE est en C, qui ne devrait poser aucune difficulté à être utilisée dans un programme C++ Qt.

            • [^] # Re: Utilise libsane

              Posté par  . Évalué à 1. Dernière modification le 17/11/16 à 21:14.

              Okey, j'ai réussi à l'intégrer dans mon programme mais l'API SANE, il y a juste cette page?

              http://sane.alioth.debian.org/html/

              Je ne sais pas ce que vaut ce projet mais il n'est pas officiel :

              https://fossies.org/dox/sane-backends-1.0.25/index.html

              • [^] # Re: Utilise libsane

                Posté par  . Évalué à 2.

                http://sane.alioth.debian.org/html/doc009.html

                ben en meme temps une API qui ne change pas tous les 6 mois, c'est plutot bien pour developper des programmes.
                à toi ensuite de faire le reste

                • [^] # Re: Utilise libsane

                  Posté par  . Évalué à 1.

                  Oui c'est vrai aussi, il n'y a plus qu'à faire le reste oui.

                  Et après, comment sont faite les API pour celle-ci par exemple?

                  On peut aller plus loin, est-ce qu'il existe une API particulière pour EPSON ou autre marque sous Linux.
                  SANE si je ne me trompe pas c'est un driver generic.

                  Mon but est de faire tourner aussi le programme Qt sous windows et de pourquoi pas ajouter des fonctionnalitées comme celle qui existent déjà sous le logiciel Epson ayant pour cible windows.

                  • [^] # Re: Utilise libsane

                    Posté par  . Évalué à 2.

                    est-ce qu'il existe une API particulière pour EPSON ou autre marque sous Linux.

                    oui, surement, enfin si le constructeur le veut bien.

                    sinon il me semble que le but d'un projet comme SANE c'est justement de s'affranchir des problemes de marques.
                    => ton programme parle avec SANE qui, lui, parle à 'imprimante/scanner

                  • [^] # Re: Utilise libsane

                    Posté par  . Évalué à 1.

                    Et après, comment sont faite les API pour celle-ci par exemple?

                    As-tu regardé le lien que j'ai dans mon tout premier message ? À ta place je lirais les chapitres 1 à 3, puis le 4.4, puis commencerais à expérimenter en lisant le 4.3.

                    On peut aller plus loin, est-ce qu'il existe une API particulière pour EPSON ou autre marque sous Linux.
                    SANE si je ne me trompe pas c'est un driver generic.

                    Non. SANE est une ensemble de drivers pour tout un tas de marques de scanners (dont Epson), et surtout une interface permettant à des logiciels de communiquer de façon transparente et uniforme avec tout type de scanner.

                    Mon but est de faire tourner aussi le programme Qt sous windows et de pourquoi pas ajouter des fonctionnalitées comme celle qui existent déjà sous le logiciel Epson ayant pour cible windows.

                    A priori utiliser SANE sous windows est quasiment impossible. Tu ferais mieux d'utiliser TWAIN sous windows et de créer une couche d'abstraction pour interfacer ton programme avec les deux environnements (à moins qu'une telle bibliothèque de gestion multiplateforme de scanners n'existe déjà). Mais ça risque d'être un très gros boulot.

                    • [^] # Re: Utilise libsane

                      Posté par  . Évalué à 1.

                      Effectivement, j'ai trouvé xsane comme GUI, ça me sauve pas mal ouai, … !!

                      Merci pour vos réponses.

                      Bon dimanche à tous

                    • [^] # Re: Utilise libsane

                      Posté par  . Évalué à 2.

                      En fait, Twain a été porté sous linux depuis sa version 2.0 je crois.

                      Il y a 6 mois à titre professionnel j'ai du réalisé un soft (Qt) de pilotage de scanner via Twain. Mais sous windows. Ce n'est pas trivial. Voici la doc de la version 2.3 : http://www.twain.org/docs/530fe0da85f7511c510004ff/TWAIN-2.3-Spec.pdf

                      D'après tes questions tu sembles débutant. Je ne veux pas te décourager mais ça me semble assez délicat pour un débutant (pas d'offense, tout le monde est passé par là). Peut-être devrais-tu commencer par essayer de piloter ton scanner via sane + bash + zenity ?

Suivre le flux des commentaires

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