前提・実現したいこと
撮影した画像の顔認識を実行するphoto.pyを起動させるGUIを開発しています。
python
1# GUI_test.py 2import PySimpleGUI as sg 3 4# ウィンドウに配置するコンポーネント 5layout = [ [sg.Text('撮影しますか?')], 6 [sg.Button('OK'), sg.Button('キャンセル')] ] 7 8# ウィンドウの生成 9window = sg.Window('サンプルプログラム', layout) 10 11# イベントループ 12while True: 13 event, values = window.read() 14 if event == sg.WIN_CLOSED or event == 'キャンセル': 15 break 16 elif event == 'OK': 17 window.close() 18 import photo 19 print("撮影完了") 20 21window.close()
python
1# photo.py 2import cv2 3import os 4import matplotlib.pyplot as plt 5 6def save_frame_camera_key(device_num, dir_path, basename, ext='jpg', delay=1, window_name='frame'): 7 cap = cv2.VideoCapture(device_num) 8 9 if not cap.isOpened(): 10 return 11 12 os.makedirs(dir_path, exist_ok=True) 13 14 # cで撮影、qで認識して終了 15 n = 0 16 while True: 17 ret, frame = cap.read() 18 cv2.imshow(window_name, frame) 19 key = cv2.waitKey(delay) & 0xFF 20 if key == ord('c'): 21 cv2.imwrite("face.jpg", frame) 22 n += 1 23 elif key == ord('q'): 24 # カスケードファイルを使って認識器を作成 25 cascade_file = "haarcascade_frontalface_alt.xml" 26 cascade = cv2.CascadeClassifier(cascade_file) 27 28 # 画像を読み込みグレイスケールに変換 29 img = cv2.imread("face.jpg") 30 gray_cv = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) 31 32 # 顔認識 33 face_list = cascade.detectMultiScale(gray_cv, minSize=(150, 150)) 34 # 認識失敗時の処理 35 if len(face_list) == 0: 36 print("失敗") 37 continue 38 39 # 認識した顔の座標、位置を視覚化 40 for (x, y, w, h) in face_list: 41 print("顔の座標(x,y,w,h):", x, y, w, h) 42 red = (0, 0, 255) 43 cv2.rectangle(img, (x, y), (x + w, y + h), red, thickness=20) 44 45 # 顔認識した画像を表示 46 cv2.imwrite("face-recognition.jpg", img) 47 plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) 48 plt.show() 49 break 50 51 cv2.destroyWindow(window_name) 52 53save_frame_camera_key(0, 'data/temp', 'camera_capture')
発生している問題
photo.py単体では問題なくプログラムが終了しましたが、GUIから起動すると撮影ウィンドウが残り処理が終了しませんでした。
アドバイスを頂けると幸いです。よろしくお願いします。
試したこと
photo.pyの「cv2.destroyWindow(window_name)」を「cv2.destroyAllWindows()」と変更してみましたが、変化はありませんでした。
また、手動での操作を試したところウィンドウは閉じましたが、処理は終わらないままでした。
補足情報
OS:Windows10
Pythonのバージョン:Python3.8.5
開発環境:PyCharm Community Edition 2020.2.4 x64
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/30 05:46