0

セグメント化されていない画像を二値化してセグメント化する目的で、ocropus を使用しています。コマンドを使用して、ocropus で画像ファイルを 2 値化します。

ocropus-binarize -o book /home/images/*.tif

上記のコマンドを使用すると、いくつかの画像では問題なく動作しましたが、しばらくすると、以下に示すようなエラー メッセージが表示されます。

File "/usr/local/bin/ocropus-binarize", line 151, in <module>
   result = pool.map(process1, jobs)
File "/usr/lib/python2.7/multiprocessing/pool.py"
   return self.map_async(func, iterable, chunksize).get()
File "/usr/lib/python2.7/multiprocessing/pool.py", line 517, in get
   raise self._value
IndexError: narray: index out of range

この問題に関するヘルプは非常に高く評価されます。

4

1 に答える 1

0

この回答は特に OCRopus に関連するものではありませんが、今後の Google 検索では一般的にこのエラーに関連しています。

マルチプロセッシング モジュールは作業をチャンクに分割し、各チャンクをワーカー プロセスに送信します。作業は次のようなブロックで実行されます。

try:
    result = (True, func(*args, **kwds))
except Exception, e:
    result = (False, e)

or は、 orを使用したかどうかに応じてorfunc()のいずれかであり、args とkwdsには、実行する関数と実行するデータの両方が含まれています。apply()map()pool.apply()pool.map()

関数が例外を発生させた場合、ワーカー プロセスを直接バグ アウトするのではなく、そのエラーが結果タプルとしてすべてのワーカーを管理するプロセスに返されます。メイン プロセスはこれを確認し (上記で報告された multiprocessing.py:517 で、Python のバージョンによって異なります)、関数から元の例外を再発生させます。

これは、おそらく単一のデータに対する関数のエラーです。残念ながら、元の例外の行番号は報告されないため、デバッグが少し難しくなります。

于 2013-12-16T20:05:30.123 に答える