diff --git a/CHANGES.md b/CHANGES.md index 7648413..c8397ed 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,15 @@ ## develop +- [ADD] 採用する結果の信頼スコアの最小値を指定する minimum_confidence_score を追加する + - Amazon Transcribe のみ有効 + - デフォルト値: 0(信頼スコアを無視する) + - @Hexa +- [ADD] 採用する結果の最小発話期間(秒)を指定する minimum_transcribed_time を追加する + - Amazon Transcribe のみ有効 + - デフォルト値: 0(最小発話期間を無視する) + - @Hexa + ### misc - [CHANGE] GitHub Actions の ubuntu-latest を ubuntu-24.04 に変更する diff --git a/amazon_transcribe_handler.go b/amazon_transcribe_handler.go index 3080874..06b04c8 100644 --- a/amazon_transcribe_handler.go +++ b/amazon_transcribe_handler.go @@ -152,11 +152,13 @@ func (h *AmazonTranscribeHandler) Handle(ctx context.Context, opusCh chan opusCh if at.Config.AwsResultID { result.WithResultID(*res.ResultId) } + for _, alt := range res.Alternatives { - var message string - if alt.Transcript != nil { - message = *alt.Transcript + message, ok := buildMessage(at.Config, *alt, *res.IsPartial) + if !ok { + continue } + result.SetMessage(message) if err := encoder.Encode(result); err != nil { w.CloseWithError(err) @@ -195,3 +197,53 @@ func (h *AmazonTranscribeHandler) Handle(ctx context.Context, opusCh chan opusCh return r, nil } + +func buildMessage(config Config, alt transcribestreamingservice.Alternative, isPartial bool) (string, bool) { + minimumConfidenceScore := config.MinimumConfidenceScore + minimumTranscribedTime := config.MinimumTranscribedTime + + var message string + if minimumConfidenceScore > 0 { + if isPartial { + // IsPartial: true の場合は Transcript をそのまま使用する + if alt.Transcript != nil { + message = *alt.Transcript + } + } else { + items := alt.Items + + for _, item := range items { + if item.Confidence != nil { + if *item.Confidence < minimumConfidenceScore { + // 信頼スコアが低い場合は次へ + continue + } + } + + if (item.StartTime != nil) && (item.EndTime != nil) { + if (*item.EndTime - *item.StartTime) > 0 { + if (*item.EndTime - *item.StartTime) < minimumTranscribedTime { + // 発話時間が短い場合は次へ + continue + } + } + } + + message += *item.Content + } + } + } else { + // minimumConfidenceScore が設定されていない(0)場合は Transcript をそのまま使用する + if alt.Transcript != nil { + message = *alt.Transcript + } + } + + // メッセージが空の場合は次へ + if message == "" { + return message, false + } + + return message, true + +} diff --git a/config.go b/config.go index 804475b..aeba0ad 100644 --- a/config.go +++ b/config.go @@ -79,6 +79,9 @@ type Config struct { // aws の場合は IsPartial が false, gcp の場合は IsFinal が true の場合にのみ結果を返す指定 FinalResultOnly bool `ini:"final_result_only"` + MinimumConfidenceScore float64 `ini:"minimum_confidence_score"` + MinimumTranscribedTime float64 `ini:"minimum_transcribed_time"` + // Amazon Web Services AwsCredentialFile string `ini:"aws_credential_file"` AwsProfile string `ini:"aws_profile"` diff --git a/config_example.ini b/config_example.ini index 19b71db..e5ce1cd 100644 --- a/config_example.ini +++ b/config_example.ini @@ -55,6 +55,12 @@ retry_interval_ms = 100 # aws の場合は IsPartial が false, gcp の場合は IsFinal が true の場合の最終的な結果のみを返す指定 final_result_only = true +# 採用する結果の信頼スコアの最小値です(aws 指定時のみ有効) +# minimum_confidence_score = 0.0 + +# 採用する結果の最小発話期間(秒)です(aws 指定時のみ有効) +# minimum_transcribed_time = 0.0 + # [aws] aws_region = ap-northeast-1 # Partial-result stabilization の有効化です