【问题标题】:tesseract in R - read white font on black backgroundR中的tesseract - 在黑色背景上读取白色字体
【发布时间】:2023-03-22 05:33:01
【问题描述】:

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

我有来自街头摄影机的照片,我想获得镜头的时间戳。去掉时间戳后,它们看起来像这样:

我通过使用带有 R 的 tesseract 来解决这个问题:

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 回答了这个例子的问题。但是,我意识到有些图像仍然被错误读取,例如

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

【问题讨论】:

    标签: r tesseract image-recognition


    【解决方案1】:

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

    
    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-01-15 创建

    【讨论】:

    • 感谢 Max 的帮助,非常感谢!像这样工作得很好。现在我只需要为每张图片自动化它并将其匹配回图片的其余部分:))
    • 请在原帖中查看我的编辑,不幸的是,您的解决方案似乎不适用于我的所有照片,您能进一步提供帮助吗?
    • 只需将其大小调整为 400x 就可以了。您可能还想考虑是否可以在顶部剪掉更多的图片。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2016-12-18
    • 2017-04-23
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多