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 日创建
所以,我对 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 日创建