R 中的 tesseract - 在黑色背景上读取白色字体

tesseract in R - read white font on black background

所以,我对 tesseract 还很陌生,有些人遇到了与我在这个论坛上遇到的类似问题,但我无法得到令人满意的解决方案,因此我发布了这个问题。

我有来自街拍的照片,我想获取镜头的时间戳。剪掉时间戳后,它们看起来像这样:

我通过将 tesseract 与 R 一起使用来解决这个问题:

library(tesseract)
library(magick)
eng <- tesseract("eng")

input <- image_read("image from above")

使用基本的 tesseract 我得到:

input %>% tesseract::ocr(,engine = eng) 
# [1] "SRE SAA PRO 206197180731 17:33:88\n"

显然,这没什么用。因此,在阅读了这个问题之后,我尝试了这个:

text <- input %>%
  image_resize("2000x") %>%
  image_convert(type = 'Grayscale') %>%
  image_trim(fuzz = 40) %>%
  image_write(format = 'png', density = '300x300') %>%
  tesseract::ocr() 

cat(text)

# es bt i deen | ee) eee i ae 2s ee ee ee eee ec ee |

这个结果更糟,真是令人沮丧。 我如何获得正确的结果?热烈欢迎任何帮助:)

编辑

@Max Teflon 回答了这个例子的问题。然而,我意识到有些图像仍然被错误地读取,例如

谁能进一步改进他的解决方案?

多么好的问题!玩起来真的很有趣。 我发现此解决方案适用于您的示例:


library(tesseract)
library(magick)

eng <- tesseract("eng")

input <- image_read("https://i.stack.imgur.com/0QzhP.jpg") %>% 
  .[[1]] %>% 
  as.numeric() # cause numerics are just easier to work with
image_read(ifelse(input <.9, 1, 0) )  # changing every non-white pixel to white and every white pixel to black

到目前为止一切顺利,这是黑白版本:

只是尝试对这个进行 ocr 效果不佳,所以我尝试更改它的大小:


image_read(ifelse(input <.9, 1, 0) ) %>% 
  image_resize('500x') %>% # make it smaller to work around the errors
  tesseract::ocr()
#> [1] "TLC200 PRO 2019/10/31 17:33:00\n"

调整大小和对比部分只是玩弄的结果。如果该解决方案对您的其余图片效果不佳,您可能想要更改它。

reprex package (v0.3.0)

于 2020 年 1 月 15 日创建