2017-11-03 3 views
0

thisを基にした関数内でこの関数を実行しようとしましたが、xPDFがPDFをPNGに変換できるため、ImageMagick変換ステップと、 pdftopngはルート名を必要とし、この場合は "ocrbook-000001.png"であり、元のPDFのファイル名のPNGを探すときにエラーをスローするので、関数(i)の処理を伴う論理。Tesseract「pixCreateNoInitのエラー:データのpix_mallocが失敗しました」

私の問題は、TesseractにPNGファイルで何かをさせることです。私はエラーを取得する:

Tesseract Open Source OCR Engine v3.05.01 with Leptonica 
Error in pixCreateNoInit: pix_malloc fail for data 
Error in pixCreate: pixd not made 
Error in pixReadStreamPng: pix not made 
Error in pixReadStream: png: no pix returned 
Error in pixRead: pix not read 
Error during processing. 

はここに私のコードです:

lapply(myfiles, function(i){ 

shell(shQuote(paste0("pdftopng -f 1 -l 10 -r 600 ", i, " ocrbook"))) 
mypngs <- list.files(path = dest, pattern = "png", full.names = TRUE) 
    lapply(mypngs, function(z){ 
    shell(shQuote(paste0("tesseract ", z, " out"))) 
    file.remove(paste0(z)) 
    }) 
}) 

答えて

0

問題がDPIは明らかに、たTesseractが処理するにはあまりにも高く設定しました。 PDFtoPNG DPIパラメータを600から150に変更すると、問題が解決されているようです。 Tesseractのための最大のDPIが何をすべきかを理解し、知っているようです。

私はまた、ファイルの元の名前を模倣し、よりダイナミックなものに静的な命名規則から私のコードを修正しました。

dest <- "C:\\users\\YOURNAME\\desktop" 

    files <- tools::file_path_sans_ext(list.files(path = dest, pattern = "pdf", full.names = TRUE)) 
    lapply(files, function(i){ 
     shell(shQuote(paste0("pdftoppm -f 1 -l 10 -r 150 ", i,".pdf", " ",i))) 
     }) 


    myppms <- tools::file_path_sans_ext(list.files(path = dest, pattern = "ppm", full.names = TRUE)) 
    lapply(myppms, function(y){ 
     shell(shQuote(paste0("magick ", y,".ppm"," ",y,".tif"))) 
     file.remove(paste0(y,".ppm")) 
     }) 

    mytiffs <- tools::file_path_sans_ext(list.files(path = dest, pattern = "tif", full.names = TRUE)) 
    lapply(mytiffs, function(z){ 
     shell(shQuote(paste0("tesseract ", z,".tif", " ",z))) 
     file.remove(paste0(z,".tif")) 
     }) 
関連する問題