[プラスさん共有用]EiongakuGrader仕様書
Search
Notion
[プラスさん共有用]EiongakuGrader仕様書
Author
mackeee (Akihiro Makino)
Tags
Empty
EiongakuGrader概要
英音楽アプリの発話採点を行うServerless Functionで、以下の要求に沿ったシステムです。
AWS Lambdaでの動作を想定しています。
できる
1 ~ 100の間の整数スコアリングを行う
スコアと人間の感覚のある程度の共有性がある
単語ごと、ないし文章ごとで採点が行える
イントネーションを考慮できるか
できない
リズム・流暢さを別軸測る
リエゾンの考慮
何をどうすべきかアドバイスする
システム構成
システム動作フロー
1. (Client) テスト中に録音した音声をS3にアップロード
一旦はこのフォーマット
* チャンネル数: 2 => 1 * サンプリングレート: 44100Hz * ビット深度: 16bit(コーデックはLINEAR16)
Plain Text
ファイルはWAV形式で保存される必要がある
musical-english-audio-data-[環境] <= バケット名 ├── master <= 正解データのためのフォルダ │ └── [question_id] │ ├── info.json <= 正解のwordないしsentence │ └── us_male_1.wav └── submissions <= ユーザーから提出された発話音声データ └── [question_id] └── [user_id] ├── 1572247278747.wav <= ミリ秒のUnixタイムスタンプ(提出時刻) └── 1572247281743.wav
Markdown
[環境] => prd / stg
[question_id] => Int型のID
[user_id] => Int型のID
IDの型は今回の再開発プロジェクトで変わると言うことでしたらそれはそれでオッケーです。
2. (Lambda) S3からイベントを受け取って音声を採点してAPIに結果を送付
Lambda --> APIのリクエストの仕様
認証
AWS KMS等で永久トークンを管理し、Lambda側からリクエストを送る際にAuthorizationヘッダーにtokenを入れて飛ばし、API側で、Authorizationヘッダーをチェックする。
ただ、正直よくない設計な気がしています。
リクエスト
POST {{HOST_URL}}/api/v1/users/:id/scoring_results payload: 採点成功時 { "scoring_result": { "question_id": 123, "score": 100, "type": "word", "word": "テスト", "sentence": null } } payload: 採点失敗時 { "scoring_result": { "error": "エラーメッセージ" } }
Markdown
question_id: (required)Int型、questionのプライマリーID
score: (required)Int型, 0 ~ 100の点数
type: (required)単語か文か
word: typeがwordの時はrequired、認識した文字列
sentence: typeがsentenceの時はrequired、認識した文字列
レスポンス
{ "status": 201, "message": "作成が成功しました。" }
Markdown
3. (API) 結果を受け取ってハンドリング
Client側では、音声を投げてからバッチポーリングで点数を取得しようとするので、採点エラーは採点エラーで、そのように保存しておかないと、 採点が終わった上でエラーだったのか、まだ採点中なのかが判別できないので、なにかエラーだったかどうかのフラグをスキーマに入れて、 Lambdaからエラー登録のリクエストを受け付けた時にもInsertを行う
4. (Client)結果が帰ってくるまで点数をfetchし続ける
正直個人的にはWebSocketでやればいいと感じていますが、Clientは数秒おきにquestion_idを指定して自分のその問題の点数を取得する。と言うような話になっていたかと思います。
本件の開発プロジェクトにおいてPMにやっていただきたいこと
各種アカウントの整備(AWSに入れるようにしていただいたりなど)
https://www.notion.so/simuland/EiongakuGrader-d26bf928b6d84e93aebebdd2491807bc#6c31d5b594504fa69c1524277e24711b にあるようなディレクトリ構成で、正解音源などをS3上に整備していっていただく
パブリックな英単語発音記号DBで紹介できない単語の発音記号の整備 ⇒ ここら辺はほぼ想定されていないので例外発生については都度ご相談になるかと思います。