如何解决R magick 抛出负或零图像大小错误
我正在尝试编写一个迭代的用户指导函数来浏览图像 (PDF) 列表并在对它们运行 OCR/文本识别之前进行调整。其中一个块涉及通过去除噪声、去斑、增强和调整对比度来改善图像。重要的是,相应的 image_xxx
函数中的任何一个都倾向于在每次运行 rsession.exe: NegativeOrZeroImageSize `' @ error/image.c/CloneImage/794
时随机抛出此错误。我正在运行带有最新版本的 R、magick
及其依赖项的 Windows 10 64 位。谷歌搜索无法提供有关此问题的任何见解。
注意:此处的 while
循环对于让用户返回并更改参数至关重要。我尝试通过使用 tryCatch()
将其封装在 break/next
中来避免破坏流程的错误。我删除了函数的所有工作块,并提供了出现问题的部分的可重现示例:
library(tesseract)
library(magick)
library(dplyr)
img.list <- list(Alabama.pdf) ### <<< this is a list with many PDFs (in this case just one,linked above)
ocr.manual <- function(img,denoise = T,denoise.rad = 1,despeckle.times = 2,enhance = T,sharpen.factor = 2) {
img.out <- img[[1]]
if(denoise) {
# Initial parameters
proceed.user.input <- 0
denoise.rad.new.input <- denoise.rad
despeckle.times.new.input <- despeckle.times
enhance.new.input <- enhance
sharpen.new.input <- sharpen.factor
while(proceed.user.input != 1) {
img.denoise <- img.out
skip <- FALSE
repeat {
tryCatch({
if(!is.null(denoise.rad.new.input) | denoise.rad.new.input != 0) img.denoise <- image_reducenoise(img.denoise,radius = denoise.rad.new.input)},error = function(e){cat("Error in 'image_reducenouse()':",conditionMessage(e),"\n")},finally = {skip <<- TRUE; break})
}
if(skip) {next}
skip <- FALSE
repeat {
tryCatch({
if(!is.null(despeckle.times.new.input) | despeckle.times.new.input != 0) img.denoise <- image_despeckle(img.denoise,times = despeckle.times.new.input)},error = function(e){cat("Error in 'image_despeckle()':",finally = {skip <<- TRUE; break})
}
if(skip) {next}
skip <- FALSE
repeat {
tryCatch({
if(enhance.new.input) img.denoise <- image_enhance(img.denoise)},error = function(e) {cat("Error in 'image_enhance()':",finally = {skip <<- TRUE; break})
}
if(skip) {next}
skip <- FALSE
repeat {
tryCatch({
if(!is.null(sharpen.new.input) | sharpen.new.input != 0) img.denoise <- image_contrast(img.denoise,sharpen = sharpen.new.input)},error = function(e) {cat("Error in 'image_contrast()':",finally = {skip <<- TRUE; break})
}
if(skip) {next}
print(image_ggplot(img.denoise))
### FOR CONTEXT: THIS PART IS JUST FOR USERS TO CHECK AND ADJUST ParaMETERS,IF NECESSARY
proceed.user.input <- as.numeric(readline("Please look at the image. Continue? (next step = 1 / try different settings = 2): "))
if(proceed.user.input == 2) {
denoise.rad.new.input <- as.numeric(readline("Input denoise smoother radius value in pixels (e.g. 3): "))
despeckle.times.new.input <- as.numeric(readline("How many times to run a speckle remover?: "))
enhance.new.input <- as.logical(readline("Change whether to enhance the image (T/F,TRUE/FALSE): "))
sharpen.new.input <- as.numeric(readline("Sharpness factor (e.g. 1): "))
}
}
# If all cleared,reassign to img.out object to proceed to next step
img.out <- img.denoise
}
# OCR
img.out %>% image_ocr(language = "eng") %>% {. ->> out.text}
return(out.text)
}
# Example of a run
ocr.manual(img = img.list[1])
Error in 'image_despeckle()': rsession.exe: NegativeOrZeroImageSize `' @ error/image.c/CloneImage/794
Error in 'image_contrast()': rsession.exe: NegativeOrZeroImageSize `' @ error/image.c/CloneImage/794
Error in magick_image_write_frame(image,format = format,i = i) :
rsession.exe: NegativeOrZeroImageSize `' @ error/image.c/CloneImage/794
Called from: magick_image_write_frame(image,i = i)
如果您能帮助我处理(或忽略)错误,我将不胜感激。换句话说,如果其中一个图像增强功能失败,我也可以,只要代码不中断即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。