見出し画像

顔画像から感情認識をするAIアプリ作成(個人開発)


きっかけ

pythonの知識がある程度ついてきたので、Flaskを使って実際に手を動かしてアプリを作ってみようと思った


使用したフレームワーク

Deepface
感情認識や顔の属性分析(age,gender,emotion and race)がpythonで実行できるフレームワーク
最新のモデルを複数内蔵している(今回はmtcnnを使用)
人間と同じ97.5%ほどの正確性を持った顔認識ができるんだとか


実行コード

model.py

//model.py

from deepface import DeepFace

def function(file_path):
  objs = DeepFace.analyze(
    img_path = file_path, 
    actions = ['age', 'gender', 'race', 'emotion'],
    detector_backend = 'mtcnn'  # 他の選択肢: 'dlib', 'retinaface', 'facenet'
  )
    # 感情データを取得
  emotion_data = {emotion:int(value) for emotion, value in objs[0]["emotion"].items()}

  # 主な感情(dominant_emotion)を取得
  dominant_emotion = objs[0]['dominant_emotion']

  return emotion_data,dominant_emotion


app.py


from flask import Flask, request, render_template
import os
from model import function

app = Flask(__name__)

# アップロードされた画像の保存先フォルダ
UPLOAD_FOLDER = './static/image'

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload_image():
    upload_image = request.files['file'] #HTML内で指定されたname
    file_path = os.path.join(UPLOAD_FOLDER, upload_image.filename) #パスの生成
    upload_image.save(file_path)

    emotion_data,dominant_emotion = function(file_path)

    return render_template("result.html",emotion_data=emotion_data,dominant_emotion=dominant_emotion,uploaded_image=file_path)


if __name__ == '__main__':
    app.run(debug=True)


実行結果

result.html

めっちゃ笑顔の写真を使ったからhappy 100になったけど、就活の写真使ったらneutralが支配感情トップになってたので精度かなりいい!

苦労した点

最初はFace APIを使ってバックエンドを省略して、1日で開発完了するつもりだったけど、感情分析が最近?できなくなったらしくて、急遽Deepfaceに変更したところ

今後

  • フロントエンドを進める

  • 画像からの感情分析以外に音声からの感情分析も組み込む(機能の追加)


いいなと思ったら応援しよう!