我正在尝试获得一些自动文本识别的经验,并且我正在使用包tesseract对一些图像(即我拍摄的一些屏幕截图)执行ocr 。
为了提高我的程序识别下图中价格的性能,我使用magick 包对图像进行了一些预处理,通过改变亮度和饱和度参数来增加图像的对比度。
但是,我认为通过转换为黑白图像可以进一步提高性能。
如何在R中有效地实现这一点?
我正在尝试获得一些自动文本识别的经验,并且我正在使用包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”包。