Python による デスクトップアプリ(エグゼ)の作成方法!!OpenCV を活用した画像処理ソフト開発について!!

image-processingGAN&画像処理
画像処理
Ganzy
Ganzy

こんにちは、Ganzyです!!今回はpythonを用いたエグゼファイルの作成方法について紹介します。エグゼファイルに変換することで環境に依存せず実行することができますのでぜひ試してみてください!!

エグゼファイルとは

エグゼファイルとは、Windowsで実行可能なプログラムのファイル形式になります。いわゆるデスクトップにアイコンがあり、それをクリックすることで実行やGUI画面が表示されて操作することができるようなイメージです!!またエグゼファイルの拡張子は「.exe」という拡張子を持っております。

このエグゼファイルの利点としては、基本的にエグゼファイル単体で実行することができることにあります。例えばpythonであれば「.py」ファイルを実行する場合、ソースコードに応じた環境を構築する必要がありますが、エグゼファイルではそのような環境構築が必要なく実行することが可能になります。ですのでエグゼファイルにすることでだれでもどこでも簡単に実行することができます!!

pythonファイルをエグゼ化する方法

pythonでエグゼファイルを作成するためには「PyInstaller」を使用することで可能です!!

PyInstaller」 は Python ファイルと依存するライブラリなどのファイルを一つのパッケージにまとめます。 そしてユーザーは、Python インタプリタやモジュールをインストールすることなく、パッケージ化されたアプリを実行することができるようになります!

それでは実際にPyInstallerを用いてエグゼファイルを作成してみます!!

①PyInstallerをインストールする

AnacondaPrompt上でインストールコマンドを実施します。

$ pip install pyinstaller

エグゼ化するPYファイルのディレクトリに移動

今回エグゼ化するファイルは以下のPYファイルとします。こちらのコードではPysimpleGUIはを用いた2値化処理をGUI上で操作できる内容になっております。詳細についてはリンク先から確認してみてください!!

import datetime
import io
from pathlib import Path
import cv2
import numpy as np
import PySimpleGUI as sg

#レイアウト
original_image = [[sg.Image(filename='', key='-orginal_img-')]]
modify_image = [[sg.Image(filename='', key='-result_img-')]]

#read 
read_layout = [[sg.Text("File"), sg.InputText(key='-input_file-', enable_events=True, ),
                sg.FileBrowse('FileBrowse', key='-file-', target="-input_file-",), sg.Button('Read File', key='-read_file-')],
                [sg.Button('Save',key='-save-'),sg.Button('Update',key='-Update-'),sg.Cancel()],
                [sg.Text("Threshold")],
                [sg.Slider((0, 255), 0, 1, orientation='h', key='-THRESH SLIDER-')]]

layout= [[sg.Frame(title='Read',layout=read_layout)],
             [sg.Frame(title='Original',layout=original_image),sg.Frame(title='Results',layout=modify_image),]]


sg.theme('Dark Blue 3')

window = sg.Window('Threshold', layout,
                   location=(10, 10),alpha_channel=1.0,
                   no_titlebar=False,grab_anywhere=False).Finalize()

# flag
READ_File = False

while True:

    event, values = window.read(timeout=20)

    if event in (None, 'Cancel'):
        break

    elif event == '-read_file-':

        read_path = Path(values['-input_file-'])
        read_img = cv2.imread(str(read_path), cv2.IMREAD_GRAYSCALE)
        read_display_img = cv2.resize(read_img,(320,320))
        copy_img = read_display_img.copy()
        
        read_display_img= cv2.imencode('.png', read_display_img)[1].tobytes()
        copy_img= cv2.imencode('.png', copy_img)[1].tobytes()
        
        window['-orginal_img-'].update(data=read_display_img)
        window['-result_img-'].update(data=copy_img)
        window['-THRESH SLIDER-'].update(128)
        READ_File = True

    if READ_File:    
        if event == '-save-':
            out_path = f'{read_path.stem}_result.png'
            cv2.imwrite(out_path, th_img)


        elif event == '-Update-':
            img_median = cv2.medianBlur(src=read_img, ksize=3)
            _, th_img  = cv2.threshold(img_median, int(values['-THRESH SLIDER-']), 255, cv2.THRESH_BINARY) 
            th_display_img= cv2.resize(th_img,(320,320))
            th_display_img= cv2.imencode('.png',th_display_img)[1].tobytes()
            window['-result_img-'].update(data=th_display_img)

window.close()

さて上記PYファイルをCドライブ直下のPythonフォルダに格納されている場合、以下のコマンドをAnacondaPrompt上で実行し、カレントディレクトリをPYファイルが格納されているディレクトリに変更します。

cd C:\Python

③エグゼ化コマンドを実行する

以下のコマンドを実行してエグゼファイルを作成します!

pyinstaller GUI_th.py

コマンドを実行すると以下のフォルダが作成されます。この中のdistフォルダ内のGUI_th.pyをクリックすることで実行することができます!!なおほかの環境でエグゼファイルを実行する際はdistフォルダごと配布しなければいけません!!

ちなみにコマンドを以下のようにすることでエグゼファイル1つに固めることができます。しかしファイルを固めることで容量が大きくなりすこし処理が重たくなる傾向にあるのでご注意ください。

pyinstaller GUI_th.py --onefile

その他注意点

エグゼファイル化する際、実行環境をまるごろ処理されるため、実行環境にモジュールをたくさんインストールしている場合、処理が非常に重くなります。ですのでエグゼファイルを作成用の必要最低限の環境を構築することをお勧めします!!

またPysimpleGUIを活用して商用利用する場合、利用規約についても確認しなければなりません!利用する場合は注意です!!

The Project - PySimpleGUI Documentation

まとめ

今回は、Pythonのファイルをエグゼ化する方法について紹介しました!!冒頭で説明したとおりエグゼ化すると環境構築が必要なく使用することができるのでめちゃくちゃ便利です!!そしてなによりエグゼ化することで作った感がありますので是非試してください!!!

参考サイト

【初心者おすすめ】Pythonライブラリ「PySimpleGUI」で、簡単にGUIアプリを作る
Pythonで簡単にGUIアプリを作成することができる「PySimpleGUI」を紹介します。PySimpleGUIを知ってもらうために、この記事では、公式サイトで紹介しているサンプルコードを試してみてください。PySimpleGUIが簡単にGUIアプリを作れることが体感できると思います。

コメント

タイトルとURLをコピーしました