3 pontos por GN⁺ 2024-03-17 | 1 comentários | Compartilhar no WhatsApp
  • O TextSnatcher é um app de OCR para copiar rapidamente texto de imagens no Linux, permitindo arrastar uma imagem para realizar o reconhecimento de caracteres e colar o resultado
  • Os recursos principais são suporte a vários idiomas, cópia de texto de imagens, arrastar sobre qualquer imagem e depois colar, além de uso rápido e fácil
  • Para reconhecimento de caracteres, usa o Tesseract OCR 4.x e também fornece links para a documentação do Tesseract e para o projeto Tesseract
  • A distribuição é feita via Flathub e AppCenter do elementary OS, e para compilar manualmente usa um processo de instalação baseado em Meson e Ninja
  • Para executar, são necessários scrot, tesseract-ocr e os dados de idioma do Tesseract; o projeto informa que voltará no próximo mês com atualizações e correções

O que o TextSnatcher faz

  • O TextSnatcher é um app para Linux que copia texto de imagens e realiza tarefas de OCR em poucos segundos
  • O usuário pode arrastar sobre a imagem para copiar o texto e colá-lo
  • Recursos oferecidos:
    • Suporte a vários idiomas

      • Copiar texto de imagens arrastando
      • Arrastar sobre qualquer imagem e depois colar
      • Uso rápido e fácil

Motor de OCR e projetos relacionados

Instalação e canais de distribuição

  • O app pode ser baixado no Flathub
  • Usuários do elementary OS podem obtê-lo pelo AppCenter

Dependências e build

  • Dependências de runtime necessárias para executar:
    • scrot
    • tesseract-ocr
    • Dados de idioma do Tesseract
      • São fornecidos links para os repositórios do Arch e do Debian
  • Dependências de build necessárias para compilar:
    • granite
    • gtk+-3.0
    • gobject-2.0
    • gdk-pixbuf-2.0
    • libhandy-1
    • libportal-0.5
  • Para compilar e executar manualmente, o fluxo é clonar o repositório, criar um diretório de build com Meson, instalar com Ninja e então executar com.github.rajsolai.textsnatcher

Estado de desenvolvimento e origem

  • O projeto inclui um selo indicando que foi feito em Vala
  • No README, está escrito que no momento estão arrecadando fundos para comprar um PC Linux e que o projeto deve voltar no próximo mês com atualizações e correções
  • As inspirações citadas são o README do Planner, a estrutura de aplicação do Develop e o app macOS TextSniper

1 comentários

 
GN⁺ 2024-03-17
Comentários do Hacker News
  • Uso um script como o do Dibby053, peguei no Stack Overflow, fiz alguns ajustes para funcionar em KDE/GNOME e Wayland/X11, e para mostrar o estado atual em uma notificação
    Ainda não testei pessoalmente a detecção de X11/Wayland, mas fiquem à vontade para usar e dizer como foi

    • Também alterei um pouco o script para que a limpeza funcione direito e para que a janela não apareça na frente depois da captura de tela, executando o spectacle em modo de segundo plano
    • O tratamento de erros é bom, mas dá para pular os arquivos temporários e passar tudo por pipes
      A ideia é encadear grim, slurp, mogrify, tesseract e wl-copy, escolhendo o idioma do OCR com fuzzel
    • Eu também usava esse mesmo script até encontrar essa abordagem no HN
      Escolhe-se o idioma com dmenu e processa-se com algo como maim -us | tesseract --dpi 145 -l eng+${lang} - - | xsel -bi
      https://news.ycombinator.com/item?id=33704483#33705272
    • Às vezes o ShellCheck dá um falso positivo em trap "cleanup '$SCR_IMG'" EXIT, mas neste caso a observação não está totalmente errada
      O comando passado para trap normalmente é avaliado, então ocorre expansão de variável, e trap 'cleanup "$SCR_IMG"' EXIT funciona de forma mais segura
      Em Bash mais recente, trap "cleanup ${SCR_IMG@Q}" EXIT também é uma opção
    • Tenho um atalho vinculado a bash -c 'flameshot gui -s -r | tesseract - - | gxmessage -title "Decoded Data" -fn "Consolas 12" -wrap -geometry 640x480 -file -'
      Aperto Super+O, arrasto a área para OCR, e o texto capturado aparece imediatamente em uma janela pop-up
  • Há algum tempo, um script que copiei de algum lugar fazia isso muito bem
    Ele capturava uma área com scrot, fazia pré-processamento com mogrify em preto e branco e ampliação, depois extraía o texto com tesseract, colocava no clipboard com xsel e ainda mostrava uma notificação

    • Só para compartilhar: prefiro maim ao scrot
      Por causa da opção --nodrag, ao selecionar uma área com trackpad basta clicar uma vez, mover o cursor e clicar de novo, o que é mais confortável
      Em maim -s --nodrag --quality=10 $IMG.png, o 10 corresponde ao 100 do scrot
    • Usei algo assim por um tempo, mas o Tesseract frequentemente ficava abaixo do esperado
      Também não senti grande diferença com o pré-processamento por ampliação, e não sei bem que tipo de pré-processamento melhoraria isso
      Fico curioso se o TextSnatcher melhora algo em relação a isso, mas a página no GitHub não é muito clara
    • Eu também tinha um script parecido em PowerShell, mas ele desapareceu no tempo junto com os pequenos scripts do meu emprego anterior
      Meus pêsames aos colegas que vivem entre Unix e Windows
    • Em trap "rm $IMG*" EXIT, vale a pena consultar https://www.shellcheck.net/wiki/SC2064
      É melhor usar mktemp -d e excluir o diretório de forma recursiva
    • Para mim, esse jeito é o ideal
      Vincular um script a um atalho de teclado é muito melhor do que ter que clicar em uma janela com botão
  • Para os colegas plebeus que usam Windows: esse recurso também existe no complemento oficial Microsoft PowerToys
    Ele também foi adicionado à ferramenta padrão de captura de tela, mas pessoalmente acho o atalho único de teclado do PowerToys mais prático
    https://github.com/microsoft/PowerToys

    • O OCR da ferramenta de captura embutida funciona em vários idiomas, como inglês, russo, chinês e japonês, sem precisar instalar pacotes separados de OCR por idioma
    • A ferramenta padrão de captura também oferece esse recurso
      Basta pressionar WIN+SHIFT+S; se o ícone “Text actions” não aparecer, atualize para a versão mais recente pela Windows Store
  • Faz tempo que me pergunto se o Tesseract é mesmo a solução mais moderna e de ponta nessa área
    Na prática ele me parece bem limitado, e já por volta de 2019 eu sentia que, com o avanço da visão computacional, reconhecimento de texto deveria ser basicamente um problema resolvido
    Parece algo que já deveria funcionar melhor que humanos, mas nem mesmo scans de recibos em baixa resolução eram convertidos com precisão, especialmente fora do inglês
    Posso simplesmente estar usando errado

    • Uso o Tesseract de forma semi-regular e raramente tive problemas de reconhecimento, inclusive com scans de recibos e fotos
      Tenho curiosidade de saber exatamente como você está usando
  • Tenho visto o Tesseract ser mencionado com cada vez mais frequência
    Quando testei em artigos científicos escaneados de 10 a 15 anos atrás, o resultado foi decepcionante, e o pós-processamento manual não era muito menos trabalhoso do que digitar tudo eu mesmo
    Por isso, Tesseract virou para mim sinônimo de “não vale a pena tentar”, mas pode ter melhorado com o tempo, então talvez valha testar de novo

    • Hoje ele é aceitável se você só fizer OCR em documentos escaneados ou puder controlar bastante o preparo da imagem
      Para reconhecimento geral, incluindo fontes estranhas e imagens de baixa qualidade, EasyOCR me deu resultados muito melhores
    • Este projeto inclui o já bem antigo Tesseract 4.1.1, com pelo menos alguns anos de idade
    • Vale a pena experimentar https://github.com/ocrmypdf/OCRmyPDF
      Ele usa o Tesseract internamente e é realmente excelente
    • Hoje está muito melhor
      Há 15 anos era preciso fazer bastante pré-processamento para obter resultados menos ruins, mas hoje tenho conseguido bons resultados mesmo sem pré-processamento
    • Quando usei pela primeira vez, há 3 ou 4 anos, achei razoável
  • Usei diretamente e funciona bem até.
    Como é um app Flatpak, para funcionar completamente ele precisa do portal do desktop, mas na configuração existente do xdg-desktop-portal-wlr funcionou bem sem ajustes extras.
    Deve funcionar sem problemas em ambientes X11 ou Wayland com uma configuração do xdg-desktop-portal que suporte a Screenshot API.
    Os resultados variam, mas não são ruins; com texto legível e limpo, há só problemas de espaço ou erros ocasionais, então pode ser útil para copiar texto de coisas como caixas de diálogo de erro.
    Dito isso, no Linux em geral o texto das caixas de diálogo de erro já costuma ser selecionável, e a MessageBox padrão do Windows responde a Ctrl+C.

  • Estou usando um app parecido, o Frog, e tem funcionado muito bem.
    https://getfrog.app

    • Não tem AppImage, nem .deb, nem brew.
  • No macOS existe um utilitário que faz mais do que abrir o documento no Preview e tentar selecionar o texto.
    https://github.com/schappim/macOCR
    Gosto do autor.

    • Aliás, sem passar pelo Preview, você pode tirar uma captura de tela com Cmd-Shift-3, clicar na miniatura e interagir com o texto no Quick Look.
      Depois é só apagar a imagem na lixeira no canto superior direito, e Cmd-A também funciona.
      Um exemplo usado neste comentário está aqui: https://imgur.com/a/q0NvcS6
  • No iOS eu uso uma solução parecida com um Atalho vinculado ao Botão de Ação.
    Em alguns apps, copiar texto não é fácil ou o texto está em outro idioma; então tiro uma captura de tela, extraio o texto, detecto automaticamente o idioma original, traduzo para o inglês e mostro o original e a tradução no Quick View para poder selecionar e copiar.
    Você pode testar um exemplo de implementação aqui: https://www.icloud.com/shortcuts/f420d24e4960415da1a43f230abfce39
    Aliás, nas versões mais recentes do iOS você também pode abrir uma foto no app Fotos e selecionar com o dedo o texto dentro da imagem para copiar.

    • Excelente atalho.
      Usei pelo botão de compartilhamento da imagem, na folha de compartilhamento, e funcionou, mas se a imagem já está sendo passada nesse momento, a etapa da captura de tela fica redundante.
  • Embora digam que é “para Linux Desktop”, isso é Flatpak, e nem toda distribuição Linux vem com Flatpak por padrão.
    Pretendo testar uma vez em uma máquina virtual com Fedora; já vi muitas ferramentas desse tipo, e a maioria usa Tesseract.
    Em imagens ásperas ou com muito ruído, ou quando as letras estão curvas ou inclinadas, ele falha bastante e não vai resolver CAPTCHA.
    https://tesseract-ocr.github.io/tessdoc/Home.html

    • Em qual distribuição o Flatpak não funciona?
    • Isso é só um monte de código em Vala.
      Mais exatamente, isso quer dizer que o autor não fez um pacote para a sua distribuição, e ninguém mais teve tempo ou vontade de empacotar.
      O mantenedor que você está procurando pode ser você mesmo.
    • Isso não é exatamente uma desvantagem.
      Se houvesse só .deb, daria para dizer que não funciona fora de Ubuntu/Debian, e isso seria uma desvantagem bem maior.