From 4f48553afd7cac49aa97ba6d9154fcd15a43031a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Thu, 28 Aug 2025 10:29:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=96=E6=B6=88=20ai=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AD=97=E5=B9=95=E7=9A=84=20=E6=AD=BB=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E6=83=85=E5=86=B5=20=E6=96=B0=E5=A2=9E=20=E6=8E=A5=E6=94=B6?= =?UTF-8?q?=E7=9A=84=E4=BB=BB=E5=8A=A1=E5=AD=A6=E7=A7=91=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AICore/FFMPGE/FFMPGEHandle.cs | 2 +- .../AICore/GPT/DeepSeek/DeepSeek_GPT.cs | 70 ++++++++++--------- VideoAnalysisCore/Common/DownloadFile.cs | 1 + .../Controllers/LJZK_Controller.cs | 7 ++ 4 files changed, 45 insertions(+), 35 deletions(-) diff --git a/VideoAnalysisCore/AICore/FFMPGE/FFMPGEHandle.cs b/VideoAnalysisCore/AICore/FFMPGE/FFMPGEHandle.cs index 617076d..aa220fe 100644 --- a/VideoAnalysisCore/AICore/FFMPGE/FFMPGEHandle.cs +++ b/VideoAnalysisCore/AICore/FFMPGE/FFMPGEHandle.cs @@ -84,7 +84,7 @@ namespace VideoAnalysisCore.AICore.FFMPGE keyFrames.Add((int)timestamp); //string outputPath = Path.Combine(outputDir, $"change_{timestamp:0000}.jpg"); //currFrame.Save(outputPath); - Console.WriteLine($"变化帧: {timestamp}秒,差异值: {ssim:F2}"); + //Console.WriteLine($"变化帧: {timestamp}秒,差异值: {ssim:F2}"); } //Console.WriteLine($"帧: {timestamp}秒,SSIM{ssim:F2} 差异值: {ssim:F2} "); diff --git a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs index 79d0750..d95bff3 100644 --- a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs +++ b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs @@ -200,42 +200,40 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek new ParallelOptions() { MaxDegreeOfParallelism = 20 }, async (s, c) => { - while (true) - { - var cArr = captionsArr - .Skip(spanCount * s) - .Take(spanCount); - if (cArr.Count() == 0) - return; - var nowCaptionStr = cArr.Select(s => s.Text).ToJson(); - var resFormat = """[string(修改结果)]"""; - var postMessages = - $"这是一堂中国{subject}课堂的字幕,由结果是语音识别提供。" + - $"字幕内容与{subject}学科{sections}章节相关。" + - $"但是识别出来的字幕包含错误的关键字 例如应当是'数列'被识别为'树列'。" + - $"所以需要你帮我修复其中的错别字,修复公式排版。" + - $"请注意,只允许对字幕进行修改。" + - $"输出内容只返回json格式({resFormat})" + - $"字幕内容(JSON字符串)" + - $"`{nowCaptionStr}`" + - $"字幕结束。" + - $"最后请确保输出字幕条数与输入字幕条数一致!!! 如果不一致则重新优化并且确保字幕条数一致!!!!"; - Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s}开始..."); - var resData = await ChatAsync(taskInfo.Id.ToString(), postMessages, "优化字幕", "deepseek-chat", 3000); - if (resData.Count() != cArr.Count()) - { - Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s} AI结果数量不匹配,重试×"); - continue; - } - newCaptionsList.AddRange(resData.Select((text, i) => new SenseVoiceRes() - { - Start = captionsArr[spanCount * s + i].Start, - End = captionsArr[spanCount * s + i].End, - Text = text, - })); - Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s}完成√ "); + var cArr = captionsArr + .Skip(spanCount * s) + .Take(spanCount); + if (cArr.Count() == 0) return; + var cStrArr = cArr.Select(s => s.Text); + var nowCaptionStr = cStrArr.ToJson(); + var resFormat = """[string(修改结果)]"""; + var postMessages = + $"这是一堂中国{subject}课堂的字幕,由结果是语音识别提供。" + + $"字幕内容与{subject}学科{sections}章节相关。" + + $"但是识别出来的字幕包含错误的关键字 例如应当是'数列'被识别为'树列'。" + + $"所以需要你帮我修复其中的错别字,修复公式排版。" + + $"请注意,只允许对字幕进行修改。" + + $"输出内容只返回json格式({resFormat})" + + $"字幕内容(JSON字符串)" + + $"`{nowCaptionStr}`" + + $"字幕结束。" + + $"最后请确保输出字幕条数与输入字幕条数一致!!! 如果不一致则重新优化并且确保字幕条数一致!!!!"; + Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s}开始..."); + var resData = await ChatAsync(taskInfo.Id.ToString(), postMessages, "优化字幕", "deepseek-chat", 3000); + if (resData.Count() != cArr.Count()) + { + resData = cStrArr.ToArray(); + Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s} AI结果数量不匹配,采用原始值"); } + newCaptionsList.AddRange(resData.Select((text, i) => new SenseVoiceRes() + { + Start = captionsArr[spanCount * s + i].Start, + End = captionsArr[spanCount * s + i].End, + Text = text, + })); + Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s}完成√ "); + return; }); var res = newCaptionsList.OrderBy(s => s.Start).ToArray(); Console.WriteLine(DateTime.Now + $"=>字幕优化执行完成"); @@ -505,6 +503,10 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek } } } + + if(insertData==null || insertData.Count==0|| insertQuestionKonw.Count==0) + return null; + //上传oss 并更新imageUrl ossClient.AddVideoQuestionUrl(insertData); diff --git a/VideoAnalysisCore/Common/DownloadFile.cs b/VideoAnalysisCore/Common/DownloadFile.cs index f79a042..834d3a2 100644 --- a/VideoAnalysisCore/Common/DownloadFile.cs +++ b/VideoAnalysisCore/Common/DownloadFile.cs @@ -12,6 +12,7 @@ using VideoAnalysisCore.Job; using VideoAnalysisCore.Model; using VideoAnalysisCore.Model.Enum; using AlibabaCloud.SDK.Vod20170321; +using UserCenter.Model.Enum; namespace VideoAnalysisCore.Common { diff --git a/VideoAnalysisCore/Controllers/LJZK_Controller.cs b/VideoAnalysisCore/Controllers/LJZK_Controller.cs index 26644c9..e90f665 100644 --- a/VideoAnalysisCore/Controllers/LJZK_Controller.cs +++ b/VideoAnalysisCore/Controllers/LJZK_Controller.cs @@ -70,11 +70,18 @@ namespace VideoAnalysisCore.Controllers var nodePackages = new List(reqArr.Count()); var videoIdArr = videoTaskDB.AsQueryable().Select(v => v.TagId).Distinct().ToArray(); var courseArr = await courseInfoDB.AsQueryable().ToArrayAsync(); + //ϵͳɽѧ + var subjectArr = new List + { + SubjectEnum.ѧ + }; foreach (var sGroup in reqArr.GroupBy(s => s.ContentId)) { var s = sGroup.FirstOrDefault(s => s.VideoType == VideoType.ͷ); if (s is null) return BadRequest("ЧʦڿƵ"); + //УѧЧ + if (!subjectArr.Contains(s.SubjectId)) continue; var stageId = s.StageId.GetHashCode(); var subjectId = s.SubjectId.GetHashCode(); var course = courseArr.FirstOrDefault(x => stageId == x.Stage_Id && subjectId == x.Subject_Id);