🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

Q&A

解決済

2回答

3107閲覧

pyinstallerでexe化したファイルを実行させたい

_N_M_

総合スコア1

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

0グッド

1クリップ

投稿2021/01/15 03:24

前提・実現したいこと

【前提】
撮影した顔写真と一致する画像をフォルダから探し出すアプリを開発しています。

【実現したいこと】
下記のPythonファイルをpyinstallerでexe化して実行する。

python

1import PySimpleGUI as sg 2import cv2 3import os 4import matplotlib.pyplot as plt 5 6#メインメニュー 7layout1 = [ 8 [sg.Text('顔認証アプリ',size=(27,2), font=(100) ,justification='center')], 9 [sg.Button('撮影',size=(15,3)),sg.Button('顔認証',size=(15,3))], 10 [sg.Button('終了',size=(32,2),)], 11] 12 13window = sg.Window('face_checker', layout1) 14 15 16while True: 17 event, values = window.read() 18 19 if event == '終了' or event == sg.WIN_CLOSED or event == '' : 20 break 21 22 elif event == '顔認証': 23 window.close() 24 import Authentication 25 Authentication.save_frame_camera_key(0, 'data/temp', 'camera_capture') 26 27 elif event == '撮影': 28 def save_frame_camera_key(device_num, dir_path, basename, ext='jpg', delay=1, window_name='frame'): 29 cap = cv2.VideoCapture(device_num) 30 31 if not cap.isOpened(): 32 return 33 34 os.makedirs(dir_path, exist_ok=True) 35 36 # cで撮影、qで認識して終了 37 n = 0 38 while True: 39 ret, frame = cap.read() 40 cv2.imshow(window_name, frame) 41 key = cv2.waitKey(delay) & 0xFF 42 if key == ord('c'): 43 cv2.imwrite("face.jpg", frame) 44 n += 1 45 elif key == ord('q'): 46 # カスケードファイルを使って認識器を作成 47 cascade_file = "haarcascade_frontalface_alt.xml" 48 cascade = cv2.CascadeClassifier(cascade_file) 49 50 # 画像を読み込みグレイスケールに変換 51 img = cv2.imread("face.jpg") 52 gray_cv = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) 53 54 # 顔認識 55 face_list = cascade.detectMultiScale(gray_cv, minSize=(150, 150)) 56 # 認識失敗時の処理 57 if len(face_list) == 0: 58 print("失敗") 59 continue 60 61 # 認識した顔の座標、位置を視覚化 62 for (x, y, w, h) in face_list: 63 print("顔の座標(x,y,w,h):", x, y, w, h) 64 red = (0, 0, 255) 65 cv2.rectangle(img, (x, y), (x + w, y + h), red, thickness=20) 66 67 # 顔認識した画像を表示 68 cv2.imwrite("face-recognition.jpg", img) 69 plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) 70 plt.show() 71 break 72 73 cv2.destroyWindow(window_name) 74 75 76 if __name__ == "__main__": 77 save_frame_camera_key(0, 'data/temp', 'camera_capture') 78 79window.close() 80input("ENTERキーを押すと終了します")

発生している問題・エラーメッセージ

本来なら撮影フォームを呼び出してから撮影後、撮影した写真が顔であるかの認識が始まります。PyCharmでは問題なく実行されましたが、exe化したもの実行するとそこでシステムが停止して下記のエラーが発生しました。

python

1Traceback (most recent call last): 2 File "face_checker.py", line77, in <module> 3 File "face_checker.py", line52, in save_frame_camera_key 4cv2.error: Opencv(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-h4wtvo23\opencv\modules\imgproc\src\color. 5cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvColor' 6 7[7232] Failed to execute script face_checker 8[WARN:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-h4wtvo23\opencv\modules\videoio\src\cap_msmf.cpp ( 9435) ‵anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback

補足情報

OS:Windows10
Pythonのバージョン:Python3.8.5
開発環境:PyCharm Community Edition 2020.2.4 x64

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

カスケード分類器を作成するためのカスケードファイルが同ディレクトリにないことが原因でした。

投稿2021/01/22 05:05

_N_M_

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Traceback (most recent call last):
File "face_checker.py", line77, in <module>
File "face_checker.py", line52, in save_frame_camera_key
cv2.error: Opencv(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-h4wtvo23\opencv\modules\imgproc\src\color.
cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvColor'

save_frame_camera_key関数から呼び出しているcvColor関数でsrcが空というエラーですね。
つまり、cvColorの前に行っている

python

1img = cv2.imread("face.jpg")

での画像の読み込みに失敗しているのでしょう。
.exeファイルと同じディレクトリにface.jpgは存在していますか?

投稿2021/01/17 06:31

TaroToyotomi

総合スコア1449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_N_M_

2021/01/20 02:02 編集

ご回答ありがとうございます。 ディレクトリは確認しましたが、face.jpgはexeファイルと同じディレクトリに存在していました。 撮影前に予めface.jpgを用意してみましたが、同じエラーが出ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問