dslclib.src.face_recognition module#
- class dslclib.src.face_recognition.EmotionType(Neutral: Literal['neutral'] = 'neutral', Happiness: Literal['happiness'] = 'happiness', Surprise: Literal['surprise'] = 'surprise', Sadness: Literal['sadness'] = 'sadness', Anger: Literal['anger'] = 'anger', Disgust: Literal['disgust'] = 'disgust', Fear: Literal['fear'] = 'fear')#
ベースクラス:
object
感情認識サーバが出力する感情値を定義したデータクラス
- Anger: Literal['anger'] = 'anger'#
- Disgust: Literal['disgust'] = 'disgust'#
- Fear: Literal['fear'] = 'fear'#
- Happiness: Literal['happiness'] = 'happiness'#
- Neutral: Literal['neutral'] = 'neutral'#
- Sadness: Literal['sadness'] = 'sadness'#
- Surprise: Literal['surprise'] = 'surprise'#
- class dslclib.src.face_recognition.FaceRecognitionClient(ip: str | None = None, port: int = 4500)#
ベースクラス:
dslclib.src.base.BaseClient
ユーザの感情を認識するサーバとソケット通信するクライアント. (これから顔の向きに対応する予定)
- パラメータ:
ip (str, optional) --
ipアドレス.
デフォルトはNoneであり,Noneが与えられた時,127.0.0.1(ローカルホスト)を指定し, もし,docker内でこのモジュールが立ち上がっていた場合,自動でそれが認識され,host.docker.internalを指定する.
host.docker.internalは,docker内からローカルホストのポートに接続するために必要である.
port (int = 4500) -- ソケット通信を行うポート.
サンプル
>>> client = FaceRecognitionClient() ipがNoneだったため、127.0.0.1をipアドレスとして設定します。 >>> client Socket( ip = 127.0.0.1 port = 4500 ) >>>
- get_user_info() tuple[Optional[int], Optional[Literal['Man', 'Woman']], Optional[float]] #
- listen(func: Callable | None = None) dslclib.src.face_recognition.OutputForFaceRecognition #
感情認識サーバとのソケット通信をするメソッド
- パラメータ:
func (Callable, optional) --
funcに何も与えない場合、感情認識結果が取得された時点ですぐに結果を返します.
ただし、認識結果の応答が早く、安定しないこともあることから、funcを与えないことは推奨しません.
カスタムでfuncを定義してもよいですが、簡易的な静的メソッドとして`summarize_times`と`summarize_timestamps`を用意してあります. カスタムで定義する場合の要件は以下です. 入力: list[tuple[float, str, float]]
リストの各要素は各時点での認識結果であり、 認識結果は (timestamp, emotion_class, emotion_score)です.
出力: tuple[bool, Optional[float], Optional[str], Optional[float]]
(要約した認識結果を返す=True | まだプールする=False, timestamp, emotion_class, emotion_score) 以上の要件を満たした関数を設計してください.
- 戻り値の型:
サンプル
>>> client = FaceRecognitionClient() >>> output = client.listen(FaceRecognitionClient.summarize_times) >>> output.emotion angry >>> output["emotion"] angry
- receive_line() str #
ソケットから受け取ったバイナリコードを文字列(utf-8)に変換するメソッド
- 戻り値:
received -- ソケット通信によって受け取った値を文字列に変換したもの
- 戻り値の型:
str
- static summarize_times(data: list[tuple[float, str, float]], times: int = 10, strategy: Literal['majority', 'latest'] = 'majority') tuple[bool, Optional[float], Optional[str], Optional[float]] #
感情認識サーバから得たtimes回の結果を集約し,strategyに則ったアルゴリズムで感情値を決定する静的メソッド.
strategyはmajorityを推奨する.
- パラメータ:
data (list[tuple[float, str, float]]) -- 各時刻における感情認識結果がプールされたリスト
times (int, default = 10) -- 何回分の結果をプールしたら要約するか
strategy (str, default = 'majority') -- majorityならば多数決、latestならば最新の認識結果を認識結果とする
- 戻り値:
(戻り値があるか?, timestamp, 感情値, 感情スコア)
1つ目の要素がTrueならば,指定回数分の結果を用いて感情値を決定していることを示す. Falseならば,回数分に満たないため,さらにプールを要求することを示す.
- 戻り値の型:
tuple[bool, Optional[float], Optional[str], Optional[float]]
- static summarize_timestamps(data: list[tuple[float, str, float]], sec: float = 1, strategy: Literal['majority', 'latest'] = 'majority') tuple[bool, Optional[float], Optional[str], Optional[float]] #
感情認識サーバから得たsec秒分の結果を集約し,strategyに則ったアルゴリズムで感情値を決定する静的メソッド.
strategyはmajorityを推奨する.
- パラメータ:
data (list[tuple[float, str, float]]) -- 各時刻における感情認識結果がプールされたリスト
sec (float, default = 1) -- 何秒プールしたら認識結果を要約するか
strategy (str, default = 'majority') -- majorityならば多数決、latestならば最新の認識結果を認識結果とする
- 戻り値:
1つ目の要素がTrueならば,指定回数分の結果を用いて感情値を決定していることを示す. Falseならば,回数分に満たないため,さらにプールを要求することを示す.
- 戻り値の型:
tuple[bool, Optional[float], Optional[str], Optional[float]]
- class dslclib.src.face_recognition.OutputForFaceRecognition(summarized: bool, timestamp: float, emotion: str, emotion_score: float, rotations: list[dslclib.src.face_recognition.Rotation], age: int | None = None, gender: Literal['Man', 'Woman'] | None = None, gender_score: float | None = None)#
ベースクラス:
object
感情認識サーバのクライアントが出力するデータクラス
各アトリビュートは以下の通りです.
summarized: 出力結果が,funcによって,一定時刻分の認識結果を要約されたものであるかどうか
timestamp: タイムスタンプ
emotion: 認識された感情クラス
emotion_score: 感情クラスのスコア
rotations: 各時刻のRotationの情報が時系列順に含まれるリスト
age: 推測された年齢
gender: 推測された性別
gender_score: 推測性別のスコア
- age: int | None = None#
- emotion: str#
- emotion_score: float#
- gender: Literal['Man', 'Woman'] | None = None#
- gender_score: float | None = None#
- rotations: list[dslclib.src.face_recognition.Rotation]#
- summarized: bool#
- timestamp: float#