选择使用Tesseract OCR

时间:2018-11-07 07:42:15

标签: r ocr tesseract

我正在使用R中最新的Tesseract OCR引擎从几张图像中提取文本。它运行良好,我对结果感到满意。问题是我不希望整个文本只是一部分,但我不知道如何提取它。

代码是这样:

library("tesseract") 
library("pdftools")
library("magick")

mypdfFile<-"C:/Users/.../fileName.pdf"

mypngFile<-pdf_convert(mypdfFile, format="png", pages=1, dpi=600)

myImage<-image_read("fileName_1.png")

textFile<-ocr(myImage,engine = tesseract("spa"), HOCR = FALSE) # Text is in spanish

cat(textFile) 

现在,最终结果看起来像这样

bla bla bla bla bla bla 
bla text that I want to 
extract bla bla bla bla 
bla bla bla bla bla bla  

如何获取要提取的文本

我尝试在应用ocr()函数之前裁切图像,但是仅裁切该部分是不可行或非常准确的。 ocr()返回纯文本。

下面的完整示例

图像(最初是pdf文件)是电费单。由于隐私问题,我无法提供完整的信息,但是看起来像sample image。在 NOMBRE Y DIRECCION (名称和地址)下,应该有两行(一个带有名称,另一个带有地址),其后是“ GALEANA CENTRO LERDO。CP”(城市名称)和“ 35150 LERDO,DGO”。 (邮政编码和州)。我的代码如下:

myImage<-image_read("sampleImage.png")

myImage<-image_crop(myImage, new dimensions) #crop the right half and some from the top

textFile<-ocr(myImage,engine = tesseract("spa"), HOCR = FALSE) 

cat(textFile) 

我知道

Nombre y Domicilio
NAME REDACTED 
ADDRESS REDACTED
GALEANA CENTRO LERDO. C.P.
35150 LERDO, DGO.
Cuenta E Tarifa
30DC27B011164660 General < 25kW 02
AE A MA E
Num. de Lectura Lectura Mult. C
Medidor actual anterior
BD6687 40994 40539 1 ¿
Apoyo gubernamental

我只想从中提取“ NAME REDACTED”和“ 35150 LERDO,DGO”之间的所有内容。包括的。

1 个答案:

答案 0 :(得分:1)

如果您知道文本的位置,则可以先裁剪图像,也可以使用whitelist来限制tesseract寻找的内容,请参见here.


编辑: 经过评论,我们确实可以检索地址,这里使用逻辑“提到“地址”的行之后的两行

text <- ("Nombre y Domicilio
NAME REDACTED 
ADDRESS REDACTED
GALEANA CENTRO LERDO. C.P.
35150 LERDO, DGO.
Cuenta E Tarifa
30DC27B011164660 General < 25kW 02
AE A MA E
Num. de Lectura Lectura Mult. C
Medidor actual anterior
BD6687 40994 40539 1 ¿
Apoyo gubernamental")

library(dplyr)
text2 <- strsplit(text, "\n") %>% unlist()
addressline <- which(grepl("address", text2, ignore.case = T))
addresslines <- c(addressline+1:2)
address_extracted <- text2[addresslines]
address_extracted
[1] "GALEANA CENTRO LERDO. C.P." "35150 LERDO, DGO."