Linux의 PDF에서 OCR로 텍스트를 추출하는 방법은 무엇입니까?


답변:


25

Cuneiform OCR 시스템 의 BSD 라이센스 Linux 포트로 성공했습니다 .

바이너리 패키지를 사용할 수없는 것 같으므로 소스에서 빌드해야합니다. 본질적으로 모든 입력 이미지 형식을 지원하도록 ImageMagick C ++ 라이브러리를 설치해야합니다 (그렇지 않으면 BMP 만 허용 함).

간단한 README 파일과 별도로 문서화되지 않은 것으로 보이지만 OCR 결과는 상당히 좋습니다. 이것의 좋은 점은 OCR 텍스트의 위치 정보를 hOCR 형식으로 출력 하여 PDF 파일의 숨겨진 레이어에서 텍스트를 올바른 위치에 다시 넣을 수 있다는 것입니다. 이렇게하면 텍스트를 복사 할 수있는 "검색 가능한"PDF를 만들 수 있습니다.

hocr2pdf 를 사용 하여 원본 이미지 전용 PDF 및 OCR 결과에서 PDF를 다시 작성했습니다. 안타깝게도이 프로그램은 여러 페이지 PDF 작성을 지원하지 않는 것으로 보이므로이를 처리 할 스크립트를 작성해야 할 수도 있습니다.

#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    cuneiform -f hocr -o "$base.html" "$page"
    hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done

# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf

rm -rf -- "$tmpdir"

위의 스크립트는 매우 기초적인 것입니다. 예를 들어 PDF 메타 데이터가 유지되지 않습니다.


인식 단계에서 오류를 수정하기 위해 철자 검사 단계를 추가하기 위해이 스크립트를 개선 할 아이디어가 있습니까?
Gökhan Sever

@ Gökhan Sever, 철자가 틀리거나 알 수없는 단어를 교체하라는 메시지가 표시되는 곳에 대화식 맞춤법 검사를 추가한다는 의미입니까? aspell check --mode=html "$base.html"설형 문자를 실행 한 직후 스크립트 와 같은 것을 추가하면 그렇게 할 수 있다고 생각합니다 .
Jukka Matilainen 2016 년

이것은 하나의 솔루션입니다. 그러나 텍스트의 전체 컨텍스트를 보지 않으면 수정하기가 어렵습니다. ocrfeeder 내에 내장 된 인터페이스를 보는 것이 더 좋을 것입니다.
Gökhan Sever

1
그건 그렇고, 나는 문자 인식을 위해 tesseract를 사용합니다 : 설형 문자 줄을 다음과 같이 바꾸십시오 : tesseract "$ page" "$ base"hocr
Gökhan Sever

1
작은 수정 : 최소한 영어 이외의 다른 언어에 대한 tesseract 행은 다음과 같습니다. 예를 들어 독일어 (= deu)는 다음과 같습니다.`tesseract "$ page" "$ base"-l deu hocr`(물론``를 제거해야합니다) .
Keks 복용량

13

pdftotext 가 효과가 있는지 확인하십시오 . 컴퓨터에 없으면 poppler-utils 패키지를 설치해야합니다.

sudo apt-get install poppler-utils 

pdf 툴킷 을 찾을 수도 있습니다.

PDF 소프트웨어의 전체 목록은 여기에 위키 피 디아에.

편집 : OCR 기능 이 필요 하므로 다른 방법을 시도해야한다고 생각합니다. (즉, OCR을 수행하는 Linux pdf2text 변환기를 찾을 수 없습니다).

  • pdf를 이미지로 변환
  • OCR 도구를 사용하여 이미지를 텍스트로 스캔

PDF를 이미지로 변환

  • gs : 아래 명령 은 여러 페이지 pdf를 개별 tiff 파일로 변환해야합니다.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letter -sOutputFile = filename_ % 04d.tif -dNOPAUSE -dBATCH-파일 이름

  • ImageMagik 유틸리티 : SuperUser 사이트에는 ImageMagik 사용에 관한 다른 질문이 있습니다.

    foo.pdf 변환 foo.png

OCR을 사용하여 이미지를 텍스트로 변환

Wikipedia의 OCR 소프트웨어 목록에서 가져옴


2
이 프로그램은 필기 텍스트 문서에도 적용됩니까?
Ivo Flipse

1
아니요, OCR 기능이 없다고 생각합니다. pdf에 포함 된 텍스트를 추출 할 수 있습니다. 매뉴얼 페이지 : linux.die.net/man/1/pdftotext
nagul

예, 텍스트가 이미 포함 된 pdf 문서에서 작동합니다. 내 경우는 그렇지 않은 경우입니다.
hsribei

1
@ obvio171 귀하의 경우 OCR을 작동시키는 데 가장 적합한 옵션을 추가했습니다.
nagul

12

Google 문서이제 OCR을 사용하여 업로드 한 이미지 / pdf 문서를 텍스트로 변환합니다. 나는 그것에 성공했다.

그들은 거대한 Google 도서 프로젝트에 사용되는 OCR 시스템을 사용하고 있습니다.

그러나 2MB 크기의 PDF 만 처리 할 수 ​​있습니다.

업데이트
1. 사용해 보려면 웹 브라우저에서 <2MB pdf를 Google 문서에 업로드하십시오.
2. 업로드 한 문서를 마우스 오른쪽 버튼으로 클릭하고 "Google 문서로 열기"를 클릭하십시오.
... Google 문서 도구는 텍스트로 변환하고 이름은 같지만 Google 문서 도구는 같은 폴더에있는 새 파일로 출력합니다.


대답은 실제로 우분투에만 국한된 것이 아니라 정말 감사합니다 : BRILLIANT solution! :)
Pitto

이것은 정말 도움이되었습니다 :) 어제 50MB 파일을 업로드했는데 효과가있었습니다. 크기 한도를 늘린 것 같습니다.
Gaurav

2

Geza Kovacs는 기본적 hocr2pdf으로 Jukka가 제안한대로 사용하는 스크립트 인 Ubuntu 패키지를 만들었지 만 설정 속도가 약간 빨라졌습니다.

패키지에 대한 자세한 내용은 Geza의 Ubuntu 포럼 게시물 에서 ...

저장소 추가 및 우분투 설치

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

파일에서 ocr 실행

pdfocr -i input.pdf -o output.pdf

코드 https://github.com/gkovacs/pdfocr/에 대한 GitHub 리포지토리


2

사용 pypdfocr하는 것이 가장 쉽고 쉬운 방법 은 pdf를 변경하지 않습니다.

pypdfocr your_document.pdf

마지막에는 your_document_ocr.pdf검색 가능한 텍스트로 원하는 방식으로 다른 것을 얻을 수 있습니다. 앱은 이미지 품질을 변경하지 않습니다. 오버레이 텍스트를 추가하여 파일 크기를 약간 늘립니다.

2018 년 11 월 3 일 업데이트 :

pypdfocr는 2016 년부터 더 이상 지원되지 않으며 유지되지 않아서 일부 문제를 발견했습니다. ocrmypdf( module )은 비슷한 작업을 수행하며 다음과 같이 사용할 수 있습니다.

ocrmypdf in.pdf out.pdf

설치하기 위해서:

pip install ocrmypdf

또는

apt install ocrmypdf

1

PDFBeads 가 잘 작동합니다. 이 " 스캔 이미지를 단일 PDF 파일로 변환 "스레드 가 시작되었습니다. 흑백 책 스캔의 경우 다음을 수행해야합니다.

  1. PDF의 모든 페이지에 대한 이미지를 작성하십시오. 위의 예제 중 하나가 작동해야합니다.
  2. 각 페이지에 대한 hOCR 출력을 생성하십시오. 나는 tesseract를 사용했습니다 (그러나 Cuneiform이 더 잘 작동하는 것 같습니다).
  3. 이미지와 hOCR 파일을 새 폴더로 이동하십시오. 파일 이름이 일치해야하므로 file001.tif에는 file001.html, file002.tif file002.html 등이 필요합니다.
  4. 새 폴더에서

    pdfbeads * > ../Output.pdf
    

그러면 조합 된 OCR PDF를 상위 디렉토리에 넣습니다.


1

tesseract를 사용하는 다른 스크립트 :

#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    tesseract "$base.tiff" $base
done

# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output

rm -rf -- "$tmpdir"

1

Asprise OCR 라이브러리 는 대부분의 Linux 버전에서 작동합니다. PDF 입력 및 출력을 검색 PDF로 사용할 수 있습니다.

상용 패키지입니다. Linux 용 Asprise OCR SDK 무료 사본을 여기에서 다운로드하여 다음 과 같이 실행하십시오.

aocr.sh input.pdf pdf

참고 : 독립형 'pdf'는 출력 형식을 지정합니다.

면책 조항 : 나는 위의 제품을 생산하는 회사의 직원입니다.


이 게시물은 제품이이를 수행 할 수 있음을 나타내며, 이는 의견으로 게시되어야하는 유용한 힌트입니다. 실제로 문제를 해결하는 방법을 설명하지는 않습니다. 이것이 바로 답변입니다. 다른 사람이 솔루션을 수행하는 방법을 볼 수 있도록 답변을 확장 할 수 있습니까?
fixer1234 5

감사합니다 @ fixer1234, 명령을 포함하도록 편집했습니다.
Asprise Support

0

PDF 파일에서 텍스트 내용을 추출하려면 Apache PDFBox 를 사용해보십시오 . PDF 파일에 이미지가 포함 된 경우 Linux 용 ABBYY FineReader Engine CLI를 사용 하여 텍스트를 추출하십시오.


나는 ABBYY OCR이 내가 시도한 것 중 가장 능력이 적은 프로그램 중 하나라고 생각했습니다. 혼합 글꼴, 혼합 크기, 복잡한 레이아웃, 그래픽, 선 등이없는 일반적인 본문 텍스트 크기의 표준 글꼴 텍스트의 깨끗한 이미지로
충분할 수 있습니다

나중에 시도했지만 잘 작동합니다. 의심이 좀 생길 수 있습니까?
Praveen Kumar KR

필요한 답변이 다른 답변에 포함되어 있지 않은 경우 가장 좋은 방법은 자신의 질문을하는 것입니다. 그것은 많은 눈에 노출 될 것입니다.
fixer1234
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.