前提・実現したいこと
元々の目的はデスクトップアプリで簡単にOCRできるアプリを作りたい。でしたが、別のさらに気になる点が出ました。それはよくある参考先URLの環境がMACやLinuxであるときの簡単な解消法がないかです。
元の目的(OCRデスクトップアプリ実装)
問題点
参照先URLではbrewを利用しており、その方法で環境を整えWSLによって実行した際に下記エラーが起きていること。
行ったこと
WSLを利用してwindowsの特定フォルダにMacやLinux環境作成
(WSLのデメリットはGPUなどに接続はできないことで、今回はそこまでの使い方はしないため問題なしと判断しました。)
スタート環境
windows10 pro 64bit
具体的手順
①WSLをインストールする
②powershellでバージョン確認
powershell
1PS C:\Users\User> wsl -l -v 2 NAME STATE VERSION 3* Ubuntu Running 1
③windowsマーク+S → WSL入力しEnter
④作業ディレクトリ作成と移動
cd ../../work/
mkdir jatoen_display
cd jatoen_display
pwd
pip install pysimplegui
◇問題発生1:Command 'pip' not found, but there are 18 similar ones.
◇対策1-1:Stackoverflow Ubuntu Command 'pip' not found, but there are 18 similar ones [closed]
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
pip install pysimplegui
brew install tesseract
◇問題発生2:Command 'brew' not found
◇対策2-1:brew|command not foundコマンドが見つかりませんの対処
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew -v → brew: command not found
◇対策2-2:Homebrew をインストールしたはずなのにbash: brew: command not foundになる。
echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
brew -v
brew install tesseract
sudo pip3 install pyocr
sudo pip3 install pillow
brew install python3
brew upgrade python
⑥ソースコード記述
同階層に以下作成
jatoen_display.py
python
1# https://qiita.com/yamacs/items/cebb34227ad7373e9e3b 2import os 3import sys 4from PIL import Image 5 6import PySimpleGUI as sg 7import pyocr 8import pyocr.builders 9 10 11def scan_file_to_str(file_path, langage): 12 """read_file_to_str 13 14 画像ファイルから文字列を生成する 15 16 Args: 17 file_path(str): 読み取るファイルのパス 18 langage(str): 'jpn' または 'eng' 19 20 Returns: 21 読み取った文字列 22 """ 23 tools = pyocr.get_available_tools() 24 if len(tools) == 0: 25 print("No OCR tool found") 26 sys.exit(1) 27 28 tool = tools[0] 29 30 text = tool.image_to_string( 31 Image.open(file_path), 32 lang=langage, 33 builder=pyocr.builders.TextBuilder(tesseract_layout=6) 34 ) 35 return text 36 37 38# テーマを設定 39sg.theme('Light Grey1') 40 41layout = [ 42 # 1行目 43 [sg.Text('読み取るファイル(複数選択可)', font=('IPAゴシック', 16))], 44 # 2行目 45 [sg.InputText(font=('IPAゴシック', 14), size=(70, 10),), sg.FilesBrowse('ファイルを選択', key='-FILES-'),], 46 # 3行目 47 [sg.Text('読み取る言語', font=('IPAゴシック', 16)), 48 sg.Radio('日本語', 1, key='-jpn-', font=('IPAゴシック', 10)), 49 sg.Radio('英語', 1, key='-eng-', font=('IPAゴシック', 10))], 50 # 4行目 51 [sg.Button('読み取り実行'),], 52 # 5行目 53 [sg.MLine(font=('IPAゴシック', 14), size=(100,30), key='-OUTPUT-'),] 54] 55 56# ウィンドウを取得 57window = sg.Window('簡単OCR', layout) 58 59files = [] 60 61a = 0 62 63while True: 64 event, values = window.read() 65 if event == None: 66 break 67 68 if event == '読み取り実行': 69 files.extend(values['-FILES-'].split(';')) 70 language = 'jpn' if values['-jpn-'] else 'eng' 71 text = '' 72 for i in range(len(files)): 73 if not i == 0: 74 text += '================================================================================================\n' 75 text += scan_file_to_str(files[i], language) 76 if language == 'jpn': 77 text = text.replace(' ', '') 78 text += '\n\n' 79 window.FindElement('-OUTPUT-').Update(text) 80 sg.Popup('完了しました') 81 82window.close()
⑦実行
python3 jatoen_display.py
◇問題発生3:not found 'tkinter' (OSと依存関係あるらしくubuntuの場合以下を実行
◇対策3-1:Ubuntu18.10でNo module named ‘tkinter’になる問題を解決
sudo apt-get install python3-tk
python3 jatoen_display.py
python
1username1@DESKTOP-V56OCM5:/mnt/c/work/jatoen_display$ python3 jatoen_display.py 2Traceback (most recent call last): 3 File "/mnt/c/work/jatoen_display/jatoen_display.py", line 6, in <module> 4 import PySimpleGUI as sg 5 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/PySimpleGUI/__init__.py", line 2, in <module> 6 from .PySimpleGUI import * 7 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/PySimpleGUI/PySimpleGUI.py", line 96, in <module> 8 import tkinter as tk 9 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/tkinter/__init__.py", line 37, in <module> 10 import _tkinter # If this fails your Python may not be configured for Tk 11ModuleNotFoundError: No module named '_tkinter'
◇No module named '_tkinter'
◇対策3-2:PythonでTkinterがimportできなかった
sudo apt-get install tk-dev
pyenv install 3.9.6
python
1username1@DESKTOP-V56OCM5:/mnt/c/work/jatoen_display$ python3 jatoen_display.py 2Traceback (most recent call last): 3 File "/mnt/c/work/jatoen_display/jatoen_display.py", line 6, in <module> 4 import PySimpleGUI as sg 5 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/PySimpleGUI/__init__.py", line 2, in <module> 6 from .PySimpleGUI import * 7 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/PySimpleGUI/PySimpleGUI.py", line 96, in <module> 8 import tkinter as tk 9 File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/tkinter/__init__.py", line 37, in <module> 10 import _tkinter # If this fails your Python may not be configured for Tk 11ModuleNotFoundError: No module named '_tkinter'
このあとは失念してしまい時系列で説明できません。
他にチャレンジした方法やエラーは以下です。
◇python3 jatoen_display.py → no display name and no $DISPLAY environment variable
sudo apt install x11-apps
vi ~/.profile
追加
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
◇VcXsrvの導入(WSLでGUIを利用する際のツール)
https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html
https://sourceforge.net/projects/vcxsrv/にアクセスしVcXsrvをインストール
C:\Program Files\VcXsrvのxlaunch.exeを実行
◇Command 'pyenv' not found
https://qiita.com/emi-cd/items/d7207409f20a7a6029d6
brew install pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
そもそもWSLでデスクトップアプリとして画面を開くことは難しいのでしょうか。もしWSLで気軽にbrewを使い、windows環境を作成できるのであれば非常に便利だと感じました。私の懸念点は、WSLによるpythonの環境、もしくはその場で作る仮想のpython環境が、windowsにてpython実行時にその環境が受け継がれたまま実行できるのかです。
問題点
問題点をまとめますと、2点あると思っています。
一、WSLによるbrewで環境を整えても、windowsにてpython実行時に同じ環境として実行できるのか。
二、WSL実行によってwindows画面上にデスクトップアプリの画面が開けるものなのか。
いろいろと調べているのですがかなり時間を要してしまっております。どなたかアドバイス頂けないでしょうか。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー