前提・実現したいこと
【前提】
撮影した顔写真と一致する画像をフォルダから探し出すアプリを開発しています。
【実現したいこと】
下記の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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。