質問するログイン新規登録

回答編集履歴

3

改行を削除

2020/07/01 04:05

投稿

yymmt
yymmt

スコア1615

answer CHANGED
@@ -23,8 +23,7 @@
23
23
  ```
24
24
 
25
25
  [追記]
26
- ソースコード外でなんとかしたいと言うことなのでpyocrの問題箇所にモンキーパッチを充てる方法を追記します。
26
+ ソースコード外でなんとかしたいと言うことなのでpyocrの問題箇所にモンキーパッチを充てる方法を追記します。ただしパッケージが更新した際に問題が発生すると言うことは解消されません。
27
- ただしパッケージが更新した際に問題が発生すると言うことは解消されません。
28
27
 
29
28
  ```python
30
29
  import pyocr

2

モンキーパッチを追記

2020/07/01 04:05

投稿

yymmt
yymmt

スコア1615

answer CHANGED
@@ -20,4 +20,45 @@
20
20
 
21
21
  if __name__ == "__main__":
22
22
  unittest.main()
23
+ ```
24
+
25
+ [追記]
26
+ ソースコード外でなんとかしたいと言うことなのでpyocrの問題箇所にモンキーパッチを充てる方法を追記します。
27
+ ただしパッケージが更新した際に問題が発生すると言うことは解消されません。
28
+
29
+ ```python
30
+ import pyocr
31
+ ...
32
+ def run_tesseract_monkey_patch(input_filename, output_filename_base, cwd=None, lang=None, flags=None, configs=None):
33
+ # オリジナルのソースコードをコピペ
34
+ pyocr.tesseract._set_environment()
35
+ command = [
36
+ pyocr.tesseract.TESSERACT_CMD,
37
+ input_filename,
38
+ output_filename_base,
39
+ ]
40
+ if lang is not None:
41
+ command += ["-l", lang]
42
+ if flags is not None:
43
+ command += flags
44
+ if configs is not None:
45
+ command += configs
46
+ proc = subprocess.Popen(
47
+ command,
48
+ cwd=cwd,
49
+ startupinfo=pyocr.tesseract.g_subprocess_startup_info,
50
+ creationflags=pyocr.tesseract.g_creation_flags,
51
+ stdout=subprocess.PIPE,
52
+ stderr=subprocess.STDOUT,
53
+ )
54
+ errors = proc.stdout.read()
55
+ status = proc.wait()
56
+ proc.stdout.close()
57
+ return (status, errors)
58
+
59
+
60
+ def main():
61
+ pyocr.tesseract.run_tesseract = run_tesseract_monkey_patch
62
+ # get_version()も同じように上書きする
63
+ # 以降普通に処理
23
64
  ```

1

おかしな日本語を修正

2020/07/01 04:03

投稿

yymmt
yymmt

スコア1615

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  `pyocr`と言うパッケージの[ソースコード tesseract.py](https://gitlab.gnome.org/World/OpenPaperwork/pyocr/-/blob/master/src/pyocr/tesseract.py)を確認しました。`tesseract`と言うコマンドを`subprocess.Popen()`で呼び出していますが、stdoutを開けっ放しのままにしてcloseしていないことが原因です。`pyocr`の開発者に連絡を取らない限り、根本的な解決にはならないでしょう。
2
2
 
3
- 以下、同様のエラーを出力ソースコードです。
3
+ 以下、同様のエラーを出力するソースコードです。
4
4
 
5
5
  ```python
6
6
  import unittest