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

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

新規登録して質問してみよう
ただいま回答率
85.35%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

565閲覧

Emotion-recognitionにおいて、表情検出が何秒刻みで行われているのか知りたい。

YYJP

総合スコア23

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2020/06/28 08:36

質問内容

お世話になります。
直接的なコーディングの質問ではないのですが、
現在下記リンク先の表情認識を用いて人の表情推移を測定しています。
https://github.com/omar178/Emotion-recognition

認識した表情が喜び、悲しみ、怒り、等の各表情である確率を、
常時算出し続けてくれるのですが、
この表情検出の値は、時間刻みでは、どのような間隔で行われているのでしょうか?
(0.1秒ごとに値を更新している、など)

試したこと

detectMultiScaleが表情認識の値の更新に関与しているのでは、と考え調べたのですが、
自力では分かりませんでした。
専門的な方の判断では、すぐに分かる内容かと思いますが、
何卒、宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

この表情検出の値は、時間刻みでは、どのような間隔で行われているのでしょうか?

Emotion-recognition/real_time_video.py at master · omar178/Emotion-recognition

このコードを見る限り、sleep 等はしていないので、可能な限り短い間隔で行うようになっています。
実際1秒間に何回ぐらいの検出が行われているかは以下の2点に依存するので、while ループの中に FPS を計測するコードを挿入して確かめるとよいかと思います。

  • 使用しているカメラの FPS
  • パソコンの処理能力

サンプルコード

FPS を計測するためのサンプルコード

1秒間に何回ループが回っているかを計測する

python

1import time 2 3start = time.time() 4i = 0 5 6while True: 7 # ここに処理が入る 8 9 ############ 10 elapsed = time.time() - start 11 i += 1 12 print(f"{i / elapsed:.2f} fps")

投稿2020/06/28 08:46

編集2020/06/28 08:47
tiitoi

総合スコア21956

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

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

YYJP

2020/06/28 09:28

ご回答ありがとうございます! 出力してみたところ、下記のようになったのですが、 これは加速度的に、fpsの数値が増えていっている、ということでしょうか?(最終的に、130に達してからは、130前後の数値を行き来するようになりました。) 2.04 fps 4.02 fps 5.94 fps 7.83 fps 9.66 fps 11.44 fps 13.19 fps 14.85 fps 16.53 fps 18.13 fps 19.70 fps 21.26 fps 22.71 fps 24.20 fps 25.62 fps 27.05 fps 28.46 fps 29.78 fps 31.08 fps 32.29 fps 33.64 fps 34.85 fps 36.03 fps 37.25 fps 38.33 fps 39.56 fps 40.65 fps 41.72 fps 42.82 fps 43.85 fps 44.85 fps 45.84 fps 46.80 fps 47.81 fps 48.81 fps 49.72 fps 50.68 fps 51.56 fps 52.49 fps 53.33 fps 54.16 fps 55.12 fps 55.85 fps 56.78 fps 57.55 fps 58.31 fps 59.13 fps 59.86 fps 60.66 fps 61.36 fps 62.06 fps 62.82 fps 63.49 fps 64.15 fps 64.80 fps 65.37 fps 66.07 fps 66.69 fps 67.38 fps 67.98 fps 68.49 fps 69.15 fps 69.72 fps
tiitoi

2020/06/28 09:38 編集

どのようにコードを修正したのか質問欄に追記していただけますか? 家庭用カメラで130FPSもでるのは早すぎる気がします
YYJP

2020/06/28 11:37

遅くなってしまい、申し訳ございません。 下記のように追記しました。 間違っているかもしれないので、ご指摘頂けますと幸いです。 from keras.preprocessing.image import img_to_array import imutils import cv2 from keras.models import load_model import numpy as np # parameters for loading data and images detection_model_path = 'haarcascade_files/haarcascade_frontalface_default.xml' emotion_model_path = 'models/_mini_XCEPTION.102-0.66.hdf5' # hyper-parameters for bounding boxes shape # loading models face_detection = cv2.CascadeClassifier(detection_model_path) emotion_classifier = load_model(emotion_model_path, compile=False) EMOTIONS = ["angry" ,"disgust","scared", "happy", "sad", "surprised", "neutral"] #feelings_faces = [] #for index, emotion in enumerate(EMOTIONS): # feelings_faces.append(cv2.imread('emojis/' + emotion + '.png', -1)) # starting video streaming cv2.namedWindow('your_face') camera = cv2.VideoCapture(r'C:\Users\yukak\OneDrive\experiment_videos\Ai_Miyazato_F.mp4') while True: frame = camera.read()[1] #reading the frame frame = imutils.resize(frame,width=300) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_detection.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5,minSize=(30,30),flags=cv2.CASCADE_SCALE_IMAGE) canvas = np.zeros((250, 300, 3), dtype="uint8") frameClone = frame.copy() if len(faces) > 0: faces = sorted(faces, reverse=True, key=lambda x: (x[2] - x[0]) * (x[3] - x[1]))[0] (fX, fY, fW, fH) = faces # Extract the ROI of the face from the grayscale image, resize it to a fixed 28x28 pixels, and then prepare # the ROI for classification via the CNN roi = gray[fY:fY + fH, fX:fX + fW] roi = cv2.resize(roi, (64, 64)) roi = roi.astype("float") / 255.0 roi = img_to_array(roi) roi = np.expand_dims(roi, axis=0) ###############ここから追記##################### import time start = time.time() i = 0 while True: preds = emotion_classifier.predict(roi)[0] #print(preds) emotion_probability = np.max(preds) label = EMOTIONS[preds.argmax()] elapsed = time.time() - start i += 1 print(f"{i / elapsed:.2f} fps") ###############ここまで追記##################### else: continue
tiitoi

2020/06/28 12:17

すみませんが、質問欄編集で質問欄にマークダウン記法で追加していただけますか? コメントだとインデントがくずれてしまいます。
tiitoi

2020/06/28 12:20 編集

コードを拝見しましたが、 Web カメラではなく、動画の読み込みなのですね。 そうであれば、1秒間に何回という形ではなく、すべてのフレームに対して推論が行われます。動画であれば、FPSを計測する意義は薄いと思いますが、130という値が出てもおかしくはないです。
YYJP

2020/06/28 12:25

はい、学校の課題で、動画内の人の表情推移を計測するタスクに取組んでいます。 そうなんですね。それでは、FPS130ということで教授にご報告させて頂きます。 本当に助かりました。 ありがとうございました!
tiitoi

2020/06/28 12:33

一応補足ですが、「動画の FPS 」と「処理する FPS 」は違うので注意してくださいね 上記で130と出てきたのであれば、それは動画を可能な限り早く読み込んで処理した場合に1秒間に何フレーム処理できるかという処理能力の話になります。なので、元の動画はたぶん30FPSとかだと思います。
YYJP

2020/06/30 09:20

ご返信が遅れてしまい、大変申し訳ございません。 今教授とお話し、130FPSはおかしいとご指摘を受けました。 time関数を使って、一定の時間刻みで処理がなされるように変更しようと思います。 本当に助かりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問