Browse Source

feat(ASR): 添加ASR用量上报服务器功能

实现ASR使用情况上报到服务器的功能,包括会话统计和用量参数处理。同时在翻译控制器中添加相关调用逻辑,确保在会话结束时上报数据。
newdev_shunjiawei
lxm 11 months ago
parent
commit
f57258069f
  1. 41
      lib/data/services/usage_stats_service.dart
  2. 16
      lib/modules/translation/controllers/translation_controller.dart

41
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<void> _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调用

16
lib/modules/translation/controllers/translation_controller.dart

@ -318,6 +318,9 @@ class TranslationController extends GetxController with WidgetsBindingObserver {
/// [speakerId] 说话者ID
Future<void> _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');
}

Loading…
Cancel
Save