From f57258069f2b95ff7fb1a9607663cb3b69f4d4a1 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Wed, 19 Nov 2025 15:18:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(ASR):=20=E6=B7=BB=E5=8A=A0ASR=E7=94=A8?= =?UTF-8?q?=E9=87=8F=E4=B8=8A=E6=8A=A5=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现ASR使用情况上报到服务器的功能,包括会话统计和用量参数处理。同时在翻译控制器中添加相关调用逻辑,确保在会话结束时上报数据。 --- lib/data/services/usage_stats_service.dart | 41 +++++++++++++++++++ .../controllers/translation_controller.dart | 16 +++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/lib/data/services/usage_stats_service.dart b/lib/data/services/usage_stats_service.dart index 5a361e341..ddd3677dd 100644 --- a/lib/data/services/usage_stats_service.dart +++ b/lib/data/services/usage_stats_service.dart @@ -3,6 +3,8 @@ import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import '../models/translation_usage_stats.dart'; import '../../core/utils/logger.dart'; +import 'network/api.dart'; +import '../models/goods.dart'; /// 使用量统计服务 class UsageStatsService extends GetxService { @@ -186,6 +188,45 @@ class UsageStatsService extends GetxService { } catch (e) { Logger.error('记录ASR API调用失败: $e'); } + + _reportAsrUsageToServer( + effectiveDurationSeconds: effectiveDurationSeconds, + //totalDurationSeconds: totalDurationSeconds, + language: language, + mode: mode, + ); + } + + /// 上报ASR用量到服务器 + Future _reportAsrUsageToServer({ + required int effectiveDurationSeconds, + //required int totalDurationSeconds, + required String language, + required String mode, + }) async { + try { + final params = { + 'usagetype': UsageType.Translation.toInt, + 'usages': { + // 'TRANSLATION_ASR_EFFECTIVE_SECONDS': effectiveDurationSeconds, + //'TRANSLATION_ASR_TOTAL_SECONDS': totalDurationSeconds, + 'TRANSLATION_MODE_$mode': effectiveDurationSeconds, + 'TRANSLATION_ASR_LANGUAGE_$language': 1, + 'TRANSLATION_SOURCE_CHARACTERS': + realtimeStats.value.sourceTextCharacters, + 'TRANSLATION_TARGET_CHARACTERS': + realtimeStats.value.ttsTextCharacters, + }, + }; + + Logger.info('lxm---ASR用量上报参数: $params'); + + final response = await Api.usagesResPoints(params); + + Logger.info('lxm---ASR用量上报响应: $response'); + } catch (e) { + Logger.error('记录ASR API调用失败: $e'); + } } /// 记录TTS API调用 diff --git a/lib/modules/translation/controllers/translation_controller.dart b/lib/modules/translation/controllers/translation_controller.dart index b89d5a6e7..bf53d8f36 100644 --- a/lib/modules/translation/controllers/translation_controller.dart +++ b/lib/modules/translation/controllers/translation_controller.dart @@ -318,6 +318,9 @@ class TranslationController extends GetxController with WidgetsBindingObserver { /// [speakerId] 说话者ID Future _startFaceToFaceRecognition(int speakerId) async { try { + if (_asrSessionStartTime == null) { + await _initializeSession(); + } await _asrService.startContinuousRecognition(_audioSourceType); //开启识别 _startAsrActiveTracking(); //开启识别活动跟踪 if (isRecording.value) { @@ -347,6 +350,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver { } await _asrService.stopContinuousRecognition(); _stopAsrActiveTracking(); //停止识别活动跟踪 + _recordAsrUsageStats(sourceLanguage.value); isRecognizing.value = false; currentSessionId = null; @@ -902,6 +906,13 @@ class TranslationController extends GetxController with WidgetsBindingObserver { await _astService.stopContinuousTranslation(); } _stopAsrActiveTracking(); + final langName = _languageManager + .getChineseNameByAsrCode( + (detectedLanguageCode.isNotEmpty + ? detectedLanguageCode + : sourceLanguageCode.value)) ?? + '未知'; + _recordAsrUsageStats(langName); isRecognizing.value = false; currentSessionId = null; } catch (e) { @@ -1197,7 +1208,6 @@ class TranslationController extends GetxController with WidgetsBindingObserver { Logger.info( '翻译统计: 源文本${sourceText.length}字符, 模式${currentMode.value}, 语言对$sourceLanguageName→$targetLanguageName'); - _recordAsrUsageStats(sourceLanguageName); } catch (e) { Logger.error('记录翻译统计失败: $e'); } @@ -1579,6 +1589,10 @@ class TranslationController extends GetxController with WidgetsBindingObserver { Logger.info( 'ASR会话统计: 总时长${totalDurationSeconds}秒, 实际活跃时长${effectiveDurationSeconds}秒, 语言$language'); + _asrSessionStartTime = null; + _asrActiveDuration = Duration.zero; + _isAsrActive = false; + _asrActiveStartTime = null; } catch (e) { Logger.error('记录ASR统计失败: $e'); }