修复 接入 SenseVoice模型 异常

This commit is contained in:
小肥羊 2024-11-04 18:31:45 +08:00
parent 9e0dca0283
commit c9ef1d230c
1 changed files with 14 additions and 13 deletions

View File

@ -9,6 +9,7 @@ using System.Runtime.Loader;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using VideoAnalysisCore.AICore.SherpaOnnx; using VideoAnalysisCore.AICore.SherpaOnnx;
using VideoAnalysisCore.AICore.Whisper;
using VideoAnalysisCore.Enum; using VideoAnalysisCore.Enum;
using VideoAnalysisCore.Model.Dto; using VideoAnalysisCore.Model.Dto;
using Whisper.net; using Whisper.net;
@ -138,7 +139,7 @@ namespace VideoAnalysisCore.Common
/// </summary> /// </summary>
public static TotalCaptionsDto GetSpeakerCaptions(string task) public static TotalCaptionsDto GetSpeakerCaptions(string task)
{ {
var captionsArr = RedisExpand.Redis.HMGet<SegmentData[]>(RedisExpandKey.Task(task), "Captions").FirstOrDefault(); var captionsArr = RedisExpand.Redis.HMGet<SenseVoiceRes[]>(RedisExpandKey.Task(task), "Captions").FirstOrDefault();
var speakerArr = RedisExpand.Redis.HMGet<OfflineSpeakerRes[]>(RedisExpandKey.Task(task), "Speaker").FirstOrDefault(); var speakerArr = RedisExpand.Redis.HMGet<OfflineSpeakerRes[]>(RedisExpandKey.Task(task), "Speaker").FirstOrDefault();
if (captionsArr is null || captionsArr.Length == 0 if (captionsArr is null || captionsArr.Length == 0
|| speakerArr is null || speakerArr.Length == 0) || speakerArr is null || speakerArr.Length == 0)
@ -146,18 +147,18 @@ namespace VideoAnalysisCore.Common
// 教师说话人Id // 教师说话人Id
var techerId = speakerArr.GroupBy(s=>s.SpeakerIndex).Select(s => (s.Key,s.Sum(x=>x.Total))) var techerId = speakerArr.GroupBy(s=>s.SpeakerIndex).Select(s => (s.Key,s.Sum(x=>x.Total)))
.OrderByDescending(s=>s.Item2).First().Key; .OrderByDescending(s=>s.Item2).First().Key;
var teacherSpeaking = 0m; var teacherSpeaking = 0f;
var studentSpeaking = 0m; var studentSpeaking = 0f;
var results = new Dictionary<SegmentData, List<int>>(); var results = new Dictionary<SenseVoiceRes, List<int>>();
foreach (var segment in captionsArr) foreach (var segment in captionsArr)
{ {
var spList = new List<int>(); var spList = new List<int>();
foreach (var speakerRes in speakerArr) foreach (var speakerRes in speakerArr)
{ {
if ((double)speakerRes.Start > segment.End.TotalSeconds) if (speakerRes.Start > segment.End)
break; break;
if (segment.Start.TotalSeconds <= (double)speakerRes.End if (segment.Start <= speakerRes.End
&& segment.End.TotalSeconds >= (double)speakerRes.Start) && segment.End >= speakerRes.Start)
{ {
if (speakerRes.SpeakerIndex == techerId) if (speakerRes.SpeakerIndex == techerId)
teacherSpeaking += speakerRes.Total; teacherSpeaking += speakerRes.Total;
@ -176,22 +177,22 @@ namespace VideoAnalysisCore.Common
{ {
stringBuilder.Append(item.Value.First()); stringBuilder.Append(item.Value.First());
stringBuilder.Append(":"); stringBuilder.Append(":");
stringBuilder.Append(item.Key.Start.TotalSeconds); stringBuilder.Append(item.Key.Start);
stringBuilder.Append(":"); stringBuilder.Append(":");
stringBuilder.Append(item.Key.End.TotalSeconds); stringBuilder.Append(item.Key.End);
stringBuilder.Append(":"); stringBuilder.Append(":");
stringBuilder.Append(item.Key.Text); stringBuilder.Append(item.Key.Text);
stringBuilder.Append("|"); stringBuilder.Append("|");
} }
return new TotalCaptionsDto return new TotalCaptionsDto
{ {
StudentSpeaking = studentSpeaking, StudentSpeaking = (decimal)studentSpeaking,
TeacherSpeaking = teacherSpeaking, TeacherSpeaking = (decimal)teacherSpeaking,
Captions = stringBuilder.ToString(), Captions = stringBuilder.ToString(),
TimeBase = results.Select(s=>new TimeBase() TimeBase = results.Select(s=>new TimeBase()
{ {
Start = s.Key.Start.TotalSeconds, Start = s.Key.Start,
End = s.Key.End.TotalSeconds, End = s.Key.End,
Content = s.Key.Text, Content = s.Key.Text,
TimeBaseType = s.Value.Count == 1 && s.Value.First() == techerId TimeBaseType = s.Value.Count == 1 && s.Value.First() == techerId
? TimeBaseTypeEnum. ? TimeBaseTypeEnum.