- Com o app Shortcuts do macOS, é possível criar um atalho de OCR local e executar a extração de texto de imagens no terminal/CLI/Python sem usar serviços pagos adicionais
- A configuração principal consiste em conectar Shortcut Input à ação Extract Text from Image e copiar o resultado para a área de transferência
- É melhor usar um nome de atalho simples, em minúsculas e sem espaços, como
ocr-text ou extract-text, para facilitar a chamada via CLI, e é preciso pressionar Enter depois de digitar o nome para salvá-lo
- No terminal, execute com
shortcuts run ocr-text -i , e o resultado extraído será copiado para a área de transferência para ser conferido com Command-V
- Em Python, é possível reutilizar o mesmo atalho de OCR chamando o mesmo comando
shortcuts run com subprocess.check_output()
Criando um atalho de OCR no Shortcuts
- Abra o app Shortcuts no macOS e crie um novo atalho com o botão
+
- Na barra lateral direita, pesquise por
extract text e arraste a ação Extract Text from Image para a área de trabalho à esquerda
- Clique na entrada azul Image da ação
Extract text from ... e selecione Shortcut Input
- A ação Receive aparecerá na parte superior; pode deixá-la como está
- Na barra lateral direita, pesquise por
copy e coloque a ação Copy to Clipboard abaixo de Extract Text from Image
- Na ação final, confirme se após
Copy aparece Text from Image
- Arrastar a ação
Copy to Clipboard para baixo pode ser um pouco incômodo
- Um nome simples, em minúsculas e sem espaços, como
extract-text ou ocr-text, é o mais adequado para o atalho
- Depois de digitar o nome, pressione Enter para que ele seja salvo
Executando via CLI e Python
- O comando para executar o atalho no terminal é o seguinte
shortcuts run ocr-text -i
- Se, depois da execução, você colar com Command-V e o texto extraído aparecer, a configuração foi feita corretamente
- Em Python, é possível executar o mesmo comando com
subprocess.check_output()
import subprocess
file_path = '... some file path ...'
ocr_out = subprocess.check_output(
f'shortcuts run ocr-text -i "{file_path}"', shell=True
)
print(ocr_out)
- O compartilhamento do Shortcuts pode se comportar de forma estranha, então pode ser necessária uma configuração manual, mas na maioria dos casos todo o processo só precisa ser feito uma vez
1 comentários
Opiniões no Hacker News
Gostei do post do OP. O framework Vision da Apple é bem impressionante, e usei em um projeto pessoal para ler via OCR dezenas de milhares de capturas de tela de planilhas e colocá-las em um banco de dados PostgreSQL
Como macOS e Nvidia ainda não se dão muito bem, também tentei OCR baseado em CPU, como o Tesseract, mas os resultados erravam com frequência demais. O framework Vision teve a melhor qualidade de saída que já vi e também usou a menor quantidade de computação
Era bem instável, mas é possível que fosse erro da minha implementação. Na implementação real usei o vision.py do RHetTbull https://gist.github.com/RhetTbull/1c34fc07c95733642cffcd1ac5..., e nos experimentos usei também o ocrmac https://github.com/straussmaximilian/ocrmac; o desempenho foi surpreendentemente bom até em um Hackintosh com i7 6700k
Não me chamo de programador, mas, com tempo suficiente, em geral consegui resolver os problemas; em compensação, levou bastante tempo
Basta olhar para frameworks de RAG: muitos usam ou oferecem suporte a várias implementações, e o Tesseract quase sempre é suportado, mas geralmente não é a escolha ideal. Projetos como Unstructured https://github.com/Unstructured-IO/unstructured-inference ou DocTR https://github.com/mindee/doctr tendem a ser preferidos
Em geral, eles aproveitam modelos de visão de ponta https://github.com/mindee/doctr#models-architectures https://github.com/Unstructured-IO/unstructured-inference#mo... e superam o Tesseract com folga
Não comparei diretamente com o framework Apple Vision, mas com certeza são melhores que o Tesseract e potencialmente podem ser melhores até que o Apple Vision. Também existe a abordagem de combinar vários métodos, mas isso fica bem complexo
O AWS Textract fornece código de exemplo em Python para extrair tabelas como CSV, e isso funciona bem
Ao tentar fazer algo parecido no Windows, descobri que o PowerToys, um projeto da Microsoft que eu já tinha instalado, inclui uma ferramenta de OCR bem boa
Ao pressionar Win+Shift+T e selecionar a área a ser escaneada, o texto é copiado para a área de transferência
https://learn.microsoft.com/en-us/windows/powertoys/
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
Criei uma ferramenta open source que oferece tanto CLI quanto uma UI decente, e ela é gratuita
https://trex.ameba.co
Descobri que muitos apps do Mac, incluindo Safari, Preview e Notes, fazem OCR automaticamente em imagens. Dá para selecionar facilmente o texto dentro da imagem e copiar/colar em outro lugar, o que é muito bom
Se for texto de URL ou domínio, ou um QR code, dá para manter pressionado ou clicar e segurar mesmo em uma foto de pôster ou dentro de um vídeo para abrir o link diretamente a partir da imagem
Você pode selecionar e copiar na foto e, via Handoff, colar no celular ou no Mac
Gosto muito de uma pequena ferramenta de OCR que instalo no MacBook via brew: https://github.com/schappim/macOCR
No Windows, recomendo o Text Extractor do PowerToys
https://learn.microsoft.com/en-us/windows/powertoys/text-ext...
Se eu for acrescentar a minha solução, é esta aqui: https://skaplanofficial.github.io/PyXA/tutorial/images.html#...
O PyXA usa o framework Vision para extrair texto de uma ou mais imagens. Como é uma pequena parte do pacote, pode ser exagero para uma tarefa pontual, mas é uma opção
O ImageAnalyzer é mais novo e muito melhor. O shortcut do OP também parece muito provavelmente usar a API antiga por baixo
Nas versões a partir do macOS Ventura, um recurso de OCR nativo está de fato integrado à interface do Image Capture
Ao escanear um PDF com um scanner compatível com AirPrint, aparece uma caixa de seleção “OCR” no painel à direita
Para colocar o conteúdo em um arquivo, dá para fazer assim. Não estou dizendo que é o mais eficiente, mas funciona
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste > ${OCRTHISFILE}.txt
Ou, para ver a saída e também gravá-la em um arquivo:
OCRTHISFILE="ocr-test.jpg"
shortcuts run ocr-text -i "${OCRTHISFILE}"
pbpaste | tee ${OCRTHISFILE}.txt
Fico curioso se existe alguma técnica parecida para o recurso Copy Subject do Apple Vision. Passei a depender bastante desse recurso, mas a forma de acesso parece limitada demais
Parece que basta trocar a ação “Extract text” por “Remove background”. Ao executar o shortcut, especifique o nome do arquivo de imagem de saída com “-o”
shortcuts run remove-background -i ~/Downloads/portrait-beard.avif -o beard.jpg