If you need to regularly scan and archive documents and prefer CLI based workflows, then Arkivisto may be for you: https://github.com/dbrgn/arkivisto/

#scanning #archiving #scanimage #opensource

just stumbled over the #scanimage #cli tool thanks to this blog post by @b0rk (https://jvns.ca/blog/2020/07/11/scanimage--scan-from-the-command-line). I have so far struggled with GUI tools (mostly simple-scan) with very limited control over the actual scan process; scanimage is different: rather easy to use, very configurable and clear in what it actually does. Should be straightforward to write a couple of scripts for my usual use cases 👍
scanimage: scan from the command line!

scanimage: scan from the command line!

Julia Evans

Criei um Script para usar o Scanner

O Epson Scan deu pau. O Simple Scan? Também deu pau. O xSANE? Só existe no AUR (e pode dar problemas no sistema).

A solução? Usar o SANE por linha de comando. O comando é bem simples, e aqui um exemplo desse comando.

scanimage --device "pixma:04A91749_247936" --format=tiff --output-file test.tiff --progress

E esse comando tem quatro argumentos básicos:

  • -- device: Aqui é o dispositivo que será usado para fazer o escaneamento
  • -- format: Aqui é o formato do arquivo do escaneamento
  • -- output-file: Aqui vai o nome do arquivo de saída
  • -- progress: Imprime uma mensagem de progresso.

E como sou um preguiçoso, decidir pegar isso e criar um Script. E por enquanto, esse é o Script:

#! /bin/bashPasta=~/Imagens/ScanData=`date +"%Y-%m-%d_%H-%M-%S"`Resolucao=600Fabricante=EpsonselecionarScanner () {scanimage -L | grep $Fabricante | gawk -F '`' -P '{ print $2 }' | cut -d"'" -f1}echo "Detectando Scanner..."Scanner=`selecionarScanner`echo "Foi Detectado o Scanner" $Scanner"."echo "Escaneando Imagem..."scanimage --device "$Scanner" --format=jpeg --output-file $Pasta/Scan_$Data.jpg --progress --resolution $Resolucaoecho "Imagem escaneada com sucesso em" $Pasta "em" $Resolucao "DPI"

Como esse Script funciona?

A primeira parte do Script é basicamente uma “Configuração”. Como eu precisava de um Script rápido e bem específico, então acabei colocando o que queria de configuração no Código do próprio Script.

Pasta=~/Imagens/ScanData=`date +"%Y-%m-%d_%H-%M-%S"`Resolucao=600Fabricante=Epson

A primeira linha, se refere a pasta onde os Scans serão salvos. Escolhi a pasta ~/Imagens/Scan pois essa já era a pasta que eu usava.

A segunda linha se refere a data e hora em que o escaneamento está sendo feito. Eu usava isso muito no Windows, pois era o meio pelo qual o XnView MP escaneava os arquivos: Com Scan_YYYY-MM-DD_HH-MM-SS. E isso me facilitava muito em não ter que pensar em que nome eu daria para aquele arquivo.

Já a Resolução é a configuração da resolução do escaneamento em DPI. Isso irá definir o tamanho de imagem. E por fim, a última linha da Fabricante é justamente para poder procurar o Scanner em que será feito o escaneamento.

Pegando o ID do Scanner

Depois vem uma das funções mais interessantes desse Script que é a que seleciona o Scanner.

selecionarScanner () {scanimage -L | grep $Fabricante | gawk -F '`' -P '{ print $2 }' | cut -d"'" -f1}

E que tem cinco comandos para poder definir qual será o Scanner, e são eles:

  • scanimage -L
  • grep $Fabricante
  • gawk -F ‘`’ -P ‘{ print $2 }’
  • cut -d”‘” -f1
  • gawk -P ‘{ print $1 }’

Essa parte foi necessária por causa de como o comando para escanear funciona. E vamos novamente para a estrutura do comando.

scanimage --device "pixma:04A91749_247936" --format=tiff --output-file test.tiff --progress

E essa função foi necessária por causa do --device. Mas antes, vamos ao o que cada comando faz.

O primeiro comando que é o scanimage -L é o comando para poder ver a lista de Scanners disponíveis. E essa é a saída do comando:

$ > scanimage -Ldevice `v4l:/dev/video0' is a Noname Integrated Camera: Integrated C virtual devicedevice `epsonds:libusb:001:074' is a Epson L3150 Series ESC/I-2

Como podemos ver, a saída é inadequada ao que o --device pede. Só queremos o ID do dispositivo, no caso ali o epsonds:libusb:001:074.

Com isso, é preciso isolar a linha do scanner da Epson. E é nisso que vem o segundo comando, o grep $Fabricante. Como estou demonstrando como esses cinco comandos funcionam, então coloquei um grep Epson. E com esse comando, a saída fica assim:

$ > scanimage -L | grep Epsondevice `epsonds:libusb:001:074' is a Epson L3150 Series ESC/I-2

Retiramos o primeiro dispositivo para trabalharmos apenas na linha da Epson. E ainda há trabalho a ser feito aqui. Com isso, vem outro comando que é o gawk -F '`' -P '{ print $2 }'. Esse comando vai retirar a primeira parte da saída, usando o ` como um separador. E com isso, essa se torna a saída do comando:

$ > scanimage -L | grep Epson | gawk -F '`' -P '{ print $2 }'epsonds:libusb:001:074' is a Epson L3150 Series ESC/I-2

Retiramos a primeira parte. Ainda falta a segunda parte para ser retirada. Com isso, vem o cut -d"'" -f1 que retira essa parte restante da saída, assim ficando:

epsonds:libusb:001:074

O que é o necessário para se utilizar no comando que será usado para escanear o arquivo.

Finalmente, escaneando a imagem

E com isso, vem a última parte importante desse script. A parte onde o escaneamento finalmente será feito.

echo "Detectando Scanner..."Scanner=`selecionarScanner`echo "Foi Detectado o Scanner" $Scanner"."echo "Escaneando Imagem..."scanimage --device "$Scanner" --format=jpeg --output-file $Pasta/Scan_$Data.jpg --progress --resolution $Resolucaoecho "Imagem escaneada com sucesso em" $Pasta "em" $Resolucao "DPI"

E temos apenas duas linhas relevantes nessa parte, e elas são:

Scanner=`selecionarScanner`scanimage --device "$Scanner" --format=jpeg --output-file $Pasta/Scan_$Data.jpg --progress --resolution $Resolucao

A primeira linha, é onde será guardada a variável do Scanner, que é repassada pela função que detecta o Scanner que será usado. E a segunda linha, é finalmente o comando para escaneamento. Ele pega todas as variáveis que foram configuradas e finalmente escaneia o arquivo.

#SANE #scanimage #Script

Ahora uno de los ingenieros de #scanimage usa #blender 🤩