Flex
2025-04-22 c10246f262c27facb1eb12e31a21169dc72749e9
修改合成视频失败的bug
已修改2个文件
59 ■■■■ 文件已修改
easegen-front/src/utils/HaveFace.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
easegen-front/src/views/chooseTemplate/index.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
easegen-front/src/utils/HaveFace.ts
@@ -1,5 +1,7 @@
// 引入face.js
import * as faceapi from 'face-api.js';
import { reject } from 'lodash-es';
import { resolve } from 'path';
// 创建初始化标记,防止重复初始化
let isModelsLoaded = false;
// 类型定义
easegen-front/src/views/chooseTemplate/index.vue
@@ -956,6 +956,7 @@
const showLeftList = ref(true)
const selectPPT = ref({
  id:"",
  pictureUrl: '',
  innerPicture: {
    //定义画中画对象,属性与数字人相同
@@ -1187,7 +1188,6 @@
        console.log('PPTArr.value', PPTArr.value)
        PPTArr.value[0].isActive = true
        selectPPT.value = PPTArr.value[0]
        console.log('selectPPT.value', selectPPT.value)
        showLeftList.value = true
        clearInterval(schedulePPTTimer.value)
        //轮询保存课程
@@ -1380,12 +1380,25 @@
    accountId: userId.value
  }
  pptTemplateApi.coursesCreate(params).then((res) => {
    console.log(res)
    if (res) {
      courseInfo.value.id = res
    }
  })
}
//ppt人脸校验
const PPtIsHaveFace = async ()=>{
  //添加ppt中人脸校验
  //向原始ppt添加数据,用作后续ppt中是否包含人脸的数据校验原始数据
  const InitPpt = PPTArr.value.map( (item)=>{
      return item.innerPicture.src
  } )
  const { detectFacesInImages } = useFaceDetection()
  const IsHaveFace = await detectFacesInImages(InitPpt)
  return IsHaveFace
}
//获取保存时间
const saveTime = ref()
@@ -1433,7 +1446,6 @@
//传入 save 则代表保存,空字符传则是合成视频
const saveSubmit = async (type) => {
  if( type.length === 0 ){
    //此时为视频合成
    MakeLoading.value = true
@@ -1446,21 +1458,6 @@
  // 检查场景是否为空
  if (!PPTArr.value || PPTArr.value.length === 0) {
    message.warning('场景为空,请先上传PPT!')
    //关闭视频合成与保存按钮的loading动画
    MakeLoading.value = false
    SaveLoading.value = false
    return false
  }
  //添加ppt中人脸校验
  //向原始ppt添加数据,用作后续ppt中是否包含人脸的数据校验原始数据
  const InitPpt = PPTArr.value.map( (item)=>{
      return item.innerPicture.src
  } )
  const { detectFacesInImages } = useFaceDetection()
  const IsHaveFace = await detectFacesInImages(InitPpt)
  if( IsHaveFace ){
    message.warning('当前ppt中包含人脸元素, 为方便后续视频生成 ,请去除该元素')
    //关闭视频合成与保存按钮的loading动画
    MakeLoading.value = false
    SaveLoading.value = false
@@ -1520,7 +1517,6 @@
    matting: 1,
    marker: 1
  }
  let pageNum = 1
  if (PPTArr.value && PPTArr.value.length > 0) {
    console.log('开始处理PPTArr数据')
@@ -1536,7 +1532,6 @@
        const innerPictureCom = item.innerPicture
        console.log('innerPictureCom:', JSON.stringify(innerPictureCom))
        console.log(item.pptRemark)
        item.pptRemark = removeHtmlTags(item.pptRemark)
        // item.pptRemark = editorRef.value.getText()
        // item.pptRemark=item.pptRemark.replace(/<[^>]+>/g, '')
@@ -1613,8 +1608,6 @@
      }
    })
  }
  console.log('pageInfo:', JSON.stringify(pageInfo))
  console.log('thumbnail:', thumbnail)
  try {
    saveSubmitForm.pageInfo = JSON.stringify(pageInfo)
@@ -1627,8 +1620,18 @@
    SaveLoading.value = false
    console.error('保存表单数据时出错:', error)
  }
  if (type == 'save') {
    //反正怎么走都会走save这一步,那就只在这一步进行一次人脸校验,如果后续合成视频按钮不再走保存,请将这一步也一并进行更改
    //主要因为wangEditor过于敏感
    const isHaveFace = await PPtIsHaveFace()
    if( isHaveFace ){
      message.warning('当前ppt中包含人脸元素, 为方便后续视频生成 ,请去除该元素')
      //关闭视频合成与保存按钮的loading动画
      MakeLoading.value = false
      SaveLoading.value = false
      return false
    }
    try {
      const res = await pptTemplateApi.coursesSave(stringifySafely(saveSubmitForm))
      if (res) {
@@ -1647,6 +1650,7 @@
      SaveLoading.value = false
      return false
    }
  } else {
    // 合成视频前先保存
    try {
@@ -1658,12 +1662,10 @@
        SaveLoading.value = false
        return
      }
      // 校验场景数据
      let warningStrArr: any = []
      for (let i = 0; i < PPTArr.value.length; i++) {
        const item = PPTArr.value[i]
        console.log(item)
        // 校验背景宽高
        if (!item.width || !item.height) {
          message.warning('背景尺寸无效,请检查宽高设置,或者重新选择模板')
@@ -1690,7 +1692,6 @@
          }
        }
      }
      if (warningStrArr.length > 0) {
        warningDialog.value.open(warningStrArr.map((warning) => `<div>${warning}</div>`).join(''))
        //关闭视频合成与保存按钮的loading动画
@@ -1698,7 +1699,6 @@
        SaveLoading.value = false
        return
      }
      // 合成视频
      try {
        const res = await pptTemplateApi.megerMedia(saveSubmitForm)
@@ -1723,7 +1723,9 @@
      message.error('操作失败,请重试')
    }
  }
}
function stringifySafely(obj) {
  const seen = new WeakSet()
  return JSON.stringify(obj, (key, value) => {
@@ -1769,6 +1771,7 @@
    }
  }
}
//富文本编辑器  -start
// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef()