1

Ghostscript を使用して PDF ファイルから画像を jpg に取り除き、Tesseract を実行して txt コンテンツを次のように保存します。

  • c:\engine\gs\ にある Ghostscript
  • c:\engine\tesseract\ にある Tesseract
  • Web にある pdf/jpg/txt dir = file/tmp/

コード:

$pathgs = "c:\\engine\\gs\\";
$pathtess = "c:\\engine\\tesseract\\";
$pathfile = "file/tmp/"

// Strip images
putenv("PATH=".$pathgs);
$exec = "gs -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=".$pathfile."strip%d.jpg ".$pathfile."upload.pdf -q -c quit";
shell_exec($exec);

// OCR
putenv("PATH=".$pathtess);
$exec = "tesseract.exe '".$pathfile."strip1.jpg' '".$pathfile."ocr' -l eng";
exec($exec, $msg);
print_r($msg);
echo file_get_contents($pathfile."ocr.txt");

画像 (1 ページのみ) の削除は正常に機能しますが、Tesseract は次のようにエコーします。

Array
  (
    [0] => Tesseract Open Source OCR Engine v3.01 with Leptonica
    [1] => Cannot open input file: 'file/tmp/strip1.jpg'
  )

ocr.txt ファイルが生成されないため、PHP で「ストリームを開くことができませんでした」というエラーが発生します。

  • strip1.jpg を c:/engine/tesseract/ フォルダーにコピーし、コマンド (tesseract strip1.jpg ocr.txt -l eng) から Tesseract を実行すると、問題なく実行されます。
  • putenv() 引用符を exec(c:/engine/tesseract/tesseract ... ) に置き換えると、 am エラーが返されます
  • 私はstrip1.jpgをTesseractフォルダに保持し、実行した exec(tesseract 'c:/engine/tesseract/strip1.jpg' ... ) amエラーを返します
  • path/strip1.jpg をアポストロフィで囲むと、メッセージとして空の配列が返され、ocr.txt ファイルは作成されません。
  • $exec を使用する代わりに、コマンドを exec() クォートに直接書き込んでも、変更は行われません。

私は何を間違っていますか?

4

2 に答える 2

1

ハーフファー、あなたは私の一日を作りました:-)

あなたの投稿で説明されている方法とは異なりますが、次のようになります。

$path = str_replace("index.php", "../".$pathfile, $_SERVER['SCRIPT_FILENAME']);

$descriptors = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("pipe", "w")
);
$cwd = $pathtess;
$command = "tesseract ".$path."strip1.jpg" ".$path."ocr -l eng";

$process = proc_open($command, $descriptors, $pipes, $cwd);

if(is_resource($process)) {
    fclose($pipes[0]);
    fclose($pipes[1]);
    fclose($pipes[2]);
    proc_close($process);
}

echo file_get_contents($path."ocr.txt");
于 2012-04-19T21:20:12.617 に答える
0

おそらく、PHP に環境変数がないことがここでの問題です。ここで私の質問を見て、これを設定HOMEまたはPATH整理するかどうかを確認してください。

于 2012-04-19T17:50:27.037 に答える