我正在尝试获得一些自动文本识别的经验,并且我正在使用包 tesseract 对某些图像(即我拍摄的一些屏幕截图)执行 ocr。
为了提高程序识别下图中价格的性能,我使用 magick 包对图像进行了一些预处理,通过更改亮度和饱和度参数来增加图像的对比度。
但是,我认为通过转换为黑白图像可以进一步提高性能。
如何在R中有效地实现这一点?
您可以使用
magick::image_quantize
转换色彩空间:
library(magick)
#> Linking to ImageMagick 6.9.9.25
#> Enabled features: cairo, fontconfig, freetype, fftw, lcms, pango, rsvg, webp
#> Disabled features: ghostscript, x11
i <- image_read('https://i.stack.imgur.com/nn9k0.png')
i
i %>% image_quantize(colorspace = 'gray')
根据您想要的图像结构,您也可以使用
image_convert
来做同样的事情:
i %>% image_convert(colorspace = 'gray')
# or
i %>% image_convert(type = 'Grayscale')
或转换为真黑白(不是灰度),
i %>% image_convert(type = 'Bilevel')
在这种情况下返回带有椒盐噪声的图像,这可能有用也可能没用。
但请注意,虽然这对于 OCR 来说可能是一个很好的做法,但通过网络抓取来获取这些数据会简单得多,例如如果允许的话,使用 rvest (大概同样的问题也适用于抓取这些图像)。如果它包含您需要的信息,更好的是使用适当的 RyanAir API。
在 ImageMagick 命令行中,您可以简单地将阈值设置为某个百分比。我这里使用了 50%,但可以根据需要进行调整。
convert image.png -threshold 50% result.png
在Imagick中,命令是Imagick::thresholdImage。请参阅 http://php.net/manual/en/imagick.thresholdimage.php。抱歉,我不知道您使用的是哪个“Magick”软件包。
要使用 R 中的
magic
库将图像转换为黑白图像,需要执行以下步骤:
结果是黑白图像。这是一个代码片段:
library(magick)
library(magrittr)
img <- image_read('https://i.stack.imgur.com/nn9k0.png')
img %>%
image_convert(colorspace = "Gray") %>%
image_threshold(type = "black", threshold = "50%") %>%
image_threshold(type = "white", threshold = "50%")
阈值可以不同。