66283


PythonでpdfからOCRをしたくて、  
<https://imagisi.com/ocr-python/>  
上記のページを参考にしていたのですが、  
Windows 10のAnacondaで作成したPython3.6の仮想環境のJupterlab上で

[code]

    import pyocr
    
[/code]

を実行したところ、下記のエラーが出ます。

[code]

    Traceback (most recent call last):
    
      File "C:\Users\ilab2\anaconda3\envs\py36\lib\site-packages\IPython\core\interactiveshell.py", line 3331, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
    
      File "<ipython-input-10-8d1d5df63604>", line 1, in <module>
        import pyocr
    
      File "C:\Users\ilab2\anaconda3\envs\py36\lib\site-packages\pyocr\__init__.py", line 1, in <module>
        from .pyocr import *
    
      File "C:\Users\ilab2\anaconda3\envs\py36\lib\site-packages\pyocr\pyocr.py", line 50, in <module>
        from . import tesseract
    
      File "C:\Users\ilab2\anaconda3\envs\py36\lib\site-packages\pyocr\tesseract.py", line 168
        def detect_orientation(image,lang=None):
                                                ^
    IndentationError: expected an indented block
    
[/code]

errorを参考に該当のファイル（pyocr\tesseract.py）の168行目を確認したのですが、原因がわかりません。  
原因と解決方法をご教授いただければ幸いです。  
（def detect_orientation(image,lang=None):の行頭のインデントはこうなっていました）。

[code]

    def detect_orientation(image,lang=None):
    """
    Arguments:
        image --- Pillow image to analyze
        lang --- lang to specify to tesseract
    
    Returns:
        {
            'angle': 90,
            'confidence': 23.73,8
        }
    
    Raises:
        TesseractError --- if no script detected on the image
    """
    _set_environment()
        with temp_dir() as tmpdir:
            command = [TESSERACT_CMD, "input.bmp", 'stdout', "--psm", "0"]
            version = get_version()
        if version[0] >= 4:
            # XXX: temporary fix to remove once Tesseract 4 is stable
            command += ["--oem", "0"]
        if lang is not None:
            command += ['-l', lang]
    
        if image.mode != "RGB":
            image = image.convert("RGB")
        image.save(os.path.join(tmpdir, "input.bmp"))
    
        proc = subprocess.Popen(command, stdin=subprocess.PIPE, shell=False,
                                startupinfo=g_subprocess_startup_info,
                                creationflags=g_creation_flags,
                                cwd=tmpdir,
                                stdout=subprocess.PIPE,
                                stderr=subprocess.STDOUT)
        proc.stdin.close()
        original_output = proc.stdout.read()
        proc.wait()
    
        original_output = original_output.decode("utf-8")
        original_output = original_output.strip()
        try:
            output = original_output.split("\n")
            output = [line.split(": ", 1) for line in output if (": " in line)]
            output = {x: y for (x, y) in output}
            angle = int(output.get('Rotate', output['Orientation in degrees']))
            # Tesseract reports the angle in the opposite direction the one we
            # want
            angle = (360 - angle) % 360
            return {
                'angle': angle,
                'confidence': float(output['Orientation confidence']),
            }
        except:
            raise TesseractError(-1, "No script found in image (%s)"
                                 % original_output)
    
[/code]

## 追記

コメントで勧められたとおり、一度pyocrを削除（Anaconda prompt上で conda uninstall
pyocr)し、再度インストール（[https://anaconda.org/brianjmcguirk/pyocrを参考にconda](https://anaconda.org/brianjmcguirk/pyocr%E3%82%92%E5%8F%82%E8%80%83%E3%81%ABconda)
install -c brianjmcguirk pyocr）したところ、無事importできました。  
今まではJupyter lab上で

[code]

    !conda install -c brianjmcguirk pyocr
    
[/code]

としていたのですが、Safty error?が出ていたようです（再現できないのですが、File
sizeが異なるというような内容のエラーだったかと思います）。  
Jupyter lab上で行う!マークを付けたconda installは、Anaconda prompt上でconda
installを行うのと同じという認識でしたがよろしいでしょうか。


CC BY-SA 4.0
2020-05-03T23:27:15.573
66262
2020-05-04T10:49:03.853
2020-05-04T10:38:57.510
19110
39973
question
python python3
pyocrがimportできない


最初に提示された [【文字起こし】pythonでOCRを使ってみた](https://imagisi.com/ocr-python/)
に記述された通りの手順で pyocr をインストールしていなかったのが原因でしょう。  
追記されたアンインストール/再インストールの手順も、記事に書かれた以下とは違うので微妙ですが、それで動作したなら一応結果オーライでしょうね。

> **pyocrのインストール**
>
> では最後にpyocrをインストールします。これはpythonでOCRを使うことができるようにするためのモジュールです。  
>  これは簡単で **AnacondaPromptで**
>
> 1| pip install pyocr
>
> とすればインストールできます。

* * *

上記記事に書かれている、condaによるtesseractのインストールと、pipによるpyocrのインストールを混ぜているのは、危ない可能性があるのでどうかと思いますが、そのとおりに作業すれば記事の通りに動作は正常に出来ました。

参照した記事があるなら、先ずはその記述のとおりに作業してみてください。

違う手順を混ぜたり、そこでエラーが発生したりしていたなら、質問記事にはその詳細を記述しておいてください。

* * *

「Jupyter lab上で行う!マークを付けた...」に関連して見つかる記述は以下くらいでしょうか。

[Jupyter
知っておくと少し便利なTIPS集](https://qiita.com/simonritchie/items/d7dccb798f0b9c8b1ec5)  
[!マークを付けると、コマンドが使える](https://qiita.com/simonritchie/items/d7dccb798f0b9c8b1ec5#%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%92%E4%BB%98%E3%81%91%E3%82%8B%E3%81%A8%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E4%BD%BF%E3%81%88%E3%82%8B)

>
> pipコマンドなどは、結構ノート上で使うこともあります。ただし、pipでライブラリ設定などを変えた際には、ノートのカーネルを一度再起動しないと反映されません。（ノートブックサーバーなどは起動したまま行えます）  
>  引数に、ノート上の変数を指定したい場合なとには$の記号を変数の前に置くと使えます。
>
> **実は一部コマンドはそのまま実行できる**
>
> マジックコマンドや、!の記号をつけなくても、一部コマンドはそのままノート上で実行できます。  
>  lsコマンドなど。引数も認識してくれます。


CC BY-SA 4.0
2020-05-04T07:54:30.460
66278
2020-05-04T08:21:20.713
2020-06-17T08:14:45.997
-1
26370
66262
answer

  * 手元の pyocr のソースコードではインデントが壊れていた。
  * `!conda install pyocr` をした際に Safety error が出ていた。

ということから判断すると、インストール時にネットワーク不調かなにかでバイト欠損が生じたのかもしれません。エラーに再現性が無いことからも、低確率で起こるエラーだったのではないかと推測します。あるいは他に考えられる理由としては一時的にライブラリ配布元のデータが壊れていた可能性があります。

理由はともあれ IndentationError
は手元のライブラリのソースコードでインデントがずれていたからで、ライブラリを一度アンインストールして再度インストールすると直ったのであれば以降は問題ないでしょう。

> Jupyter lab上で行う!マークを付けたconda installは、Anaconda prompt上でconda
> installを行うのと同じという認識でしたがよろしいでしょうか。

こちらに関して、はい、その通りです。今回の問題はインストール方法に起因するものではなく、何かしらインストール途中のどこかの手順が失敗したのではないかと私は推測しています。


CC BY-SA 4.0
2020-05-04T10:49:03.853
66283
2020-05-04T10:49:03.853
19110
66262
answer