Я работаю над проектом, который включает в себя OCRing огромное количество PDF-файлов. Каждый PDF - это изображение обычного документа офисного типа. Каждая страница PDF хранится в отдельном файле. Есть ли способ сделать это быстрее (т. Е. С более низким временем вычисления), чем мой текущий подход?Эффективный OCR finetuning
С проектом такого размера любое небольшое улучшение производительности даст значительное сокращение вычислительной стоимости/времени. В настоящее время призыв к Tesseract занимает примерно 2-3 порядка больше времени, чем все другие этапы обработки в проекте.
Для каждого файла (page.pdf) я сначала конвертирую его в Tiff (image.tiff), например. Я отделил Python от этого вызова для ясности.
ghostscript -o image.tiff -q -r300x300 -sCompression=none -sDEVICE=tiffgray page.pdf
Затем я выполняю в основном следующую процедуру.
def ocr(image):
import tesseract, cv2.cv as cv
# Load Tesseract
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetPageSegMode(tesseract.PSM_AUTO)
# Load and OCR the image file
cv_image = cv.LoadImage(image, cv.CV_LOAD_IMAGE_GRAYSCALE)
tesseract.SetCvImage(cv_image, api)
# Return the text
return api.GetUTF8Text()
Я немного упростил для ясности. Например, я фактически не загружаю Tesseract отдельно для каждого файла. Я обрабатываю исключения и т. Д. Однако различия не имеют большого значения, так как 99,9% времени используется в вызове api.GetUTF8Text().
Есть идеи, чтобы ускорить его?
Спасибо за ваш ответ. Однако я уже распараллеливаю процесс в целом. Я запускаю процесс в облаке, поэтому каждый PDF-файл получает отдельную машину. Я запускаю около 100 ядер сразу. – beerslayer