質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
87.20%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

opencvによる映像処理後のウィンドウが「応答なし」となって閉じれず、その後の処理が実行できません。

muts
muts

総合スコア2

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0評価

0クリップ

189閲覧

投稿2022/06/13 10:14

問題

映像から表情認識を行うプログラムを使いたいのですが、表情認識自体はできているものの、映像が最後までいくと、出力された映像のウィンドウが「応答なし」となり、その後の処理を実行できません。

映像の途中であれば、キーボードからの入力によりウィンドウを閉じることはできます。
映像が最後までいっても「応答なし」の状態にならずにその後の処理を実行できるようにするにはどうしたらよいのか教えてください。

下記に、プログラムを記載します。

Python

import os os.environ["OMP_NUM_THREADS"] = "2" import glob import json import cv2 import numpy as np import torch from torchvision.transforms import transforms from models import densenet121, resmasking_dropout1 import time import pandas as pd def ensure_color(image): if len(image.shape) == 2: return np.dstack([image] * 3) elif image.shape[2] == 1: return np.dstack([image] * 3) return image net = cv2.dnn.readNetFromCaffe( "deploy.prototxt.txt", "res10_300x300_ssd_iter_140000.caffemodel" ) transform = transforms.Compose([transforms.ToPILImage(), transforms.ToTensor()]) FER_2013_EMO_DICT = { 0: "angry", 1: "disgust", 2: "fear", 3: "happy", 4: "sad", 5: "surprise", 6: "neutral", } #Time = [] #emo = [] def main(): # load configs and set random seed configs = json.load(open("./configs/fer2013_config.json")) image_size = (configs["image_size"], configs["image_size"]) # model = densenet121(in_channels=3, num_classes=7) model = resmasking_dropout1(in_channels=3, num_classes=7) model.cuda() # state = torch.load('./saved/checkpoints/densenet121_rot30_2019Nov11_14.23') # state = torch.load('./saved/checkpoints/resmasking_dropout1_rot30_2019Nov17_14.33') state = torch.load( "./saved/checkpoints/Z_resmasking_dropout1_rot30_2019Nov30_13.32" ) model.load_state_dict(state["net"]) model.eval() vid = cv2.VideoCapture('NWH2_exported.mp4') # cv2.namedWindow('disp') # cv2.resizeWindow('disp', width=800) with torch.no_grad(): #start_time = time.time() while True: ret, frame = vid.read() if frame is None or ret is not True: continue try: frame = np.fliplr(frame).astype(np.uint8) # frame += 50 h, w = frame.shape[:2] gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # gray = frame blob = cv2.dnn.blobFromImage( cv2.resize(frame, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0), ) net.setInput(blob) faces = net.forward() for i in range(0, faces.shape[2]): confidence = faces[0, 0, i, 2] if confidence < 0.5: continue box = faces[0, 0, i, 3:7] * np.array([w, h, w, h]) start_x, start_y, end_x, end_y = box.astype("int") # covnert to square images center_x, center_y = (start_x + end_x) // 2, (start_y + end_y) // 2 square_length = ((end_x - start_x) + (end_y - start_y)) // 2 // 2 square_length *= 1.1 start_x = int(center_x - square_length) start_y = int(center_y - square_length) end_x = int(center_x + square_length) end_y = int(center_y + square_length) cv2.rectangle( frame, (start_x, start_y), (end_x, end_y), (179, 255, 179), 2 ) # cv2.rectangle(frame , (x, y), (x + w, y + h), (179, 255, 179), 2) # face = gray[y:y + h, x:x + w] face = gray[start_y:end_y, start_x:end_x] face = ensure_color(face) face = cv2.resize(face, image_size) face = transform(face).cuda() face = torch.unsqueeze(face, dim=0) output = torch.squeeze(model(face), 0) proba = torch.softmax(output, 0) """ now_time = time.time() delta_time = now_time - start_time Time.append(delta_time) """ # emo_idx = torch.argmax(proba, dim=0).item() emo_proba, emo_idx = torch.max(proba, dim=0) emo_idx = emo_idx.item() emo_proba = emo_proba.item() emo_label = FER_2013_EMO_DICT[emo_idx] #emo.append(emo_label) label_size, base_line = cv2.getTextSize( "{}: 000".format(emo_label), cv2.FONT_HERSHEY_SIMPLEX, 0.8, 2 ) cv2.rectangle( frame, (end_x, start_y + 1 - label_size[1]), (end_x + label_size[0], start_y + 1 + base_line), (223, 128, 255), cv2.FILLED, ) cv2.putText( frame, "{} {}".format(emo_label, int(emo_proba * 100)), (end_x, start_y + 1), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 0), 2, ) cv2.imshow("disp", frame) # cv2.imshow('disp', np.concatenate((gray ), axis=1)) #print(emo_label,emo_proba) if cv2.waitKey(1) & 0xFF == ord("q"): break except: continue vid.release() cv2.destroyAllWindows() """ data = {"Time": Time, "Emotion": emo } fixed_emo = pd.DataFrame(data) fixed_emo.to_csv('demo_emotions_2.csv', index=False) """ if __name__ == "__main__": main()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。