diff --git a/suimangCApi/src/main/java/com/iformall/controller/PersonPhotoController.java b/suimangCApi/src/main/java/com/iformall/controller/PersonPhotoController.java index eb8d1b0..6a7a611 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/PersonPhotoController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/PersonPhotoController.java @@ -21,6 +21,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; @@ -76,7 +77,10 @@ public class PersonPhotoController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"素材为空"); } //todo 掉第三方接口判断图片是否符合规范 - + ResultData data = personPhotoService.checkPhoto(record.getMaterial()); + if (data.code != 2000){ + return new ResultData(data.code,data.message); + } if(record.getTitle() == null){ record.setTitle("用户自建"); diff --git a/suimangCApi/src/main/java/com/iformall/controller/VoiceMouldController.java b/suimangCApi/src/main/java/com/iformall/controller/VoiceMouldController.java index d5189d5..18515cb 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/VoiceMouldController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/VoiceMouldController.java @@ -153,4 +153,16 @@ public class VoiceMouldController extends BaseController { logger.debug("[" + getIpAddr() + "] MouldPatchController::chooseType"); return new ResultData(voiceInfoService.chooseType(id)); } + + @AuthIgnore + @ApiOperation("TTS音色预览") + @GetMapping("/preview") + @ApiImplicitParams({ + @ApiImplicitParam(name = "genTxt", value = "需要生成的文字", dataType = "String", paramType = "query", required = true), + @ApiImplicitParam(name = "voiceId", value = "音色ID", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "voiceStyle", value = "语音风格", dataType = "String", paramType = "query", required = true)}) + public ResultData voicePreview(String genTxt, Long voiceId, String voiceStyle) { + logger.debug("[" + getIpAddr() + "] MouldPatchController::voicePreview"); + return new ResultData(voiceInfoService.voicePreview(genTxt, voiceId, voiceStyle)); + } } diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java b/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java index 60fa0a8..defe03f 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java @@ -62,6 +62,7 @@ public class PhotoSpeakVideo extends TenantEntity { * { * "title":, * "languages":, + * "sex":, * "mouldSmId":, * "personId":, * "personType":, diff --git a/suimangService/src/main/java/com/iformall/service/sm/PersonPhotoService.java b/suimangService/src/main/java/com/iformall/service/sm/PersonPhotoService.java index dbc4160..61e3049 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/PersonPhotoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/PersonPhotoService.java @@ -43,4 +43,5 @@ public interface PersonPhotoService { void updateOnline(PersonPhoto record); + ResultData checkPhoto(String material); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/VoiceInfoService.java b/suimangService/src/main/java/com/iformall/service/sm/VoiceInfoService.java index 1f1de87..11c44ee 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/VoiceInfoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/VoiceInfoService.java @@ -2,6 +2,7 @@ package com.iformall.service.sm; import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; import com.iformall.domain.po.sm.VoiceInfo; import com.iformall.domain.po.sm.VoiceLanguage; @@ -12,4 +13,6 @@ public interface VoiceInfoService { List chooseType(Long id); VoiceInfo getById(Long voiceMouldId); + + ResultData voicePreview(String genTxt, Long voiceId, String voiceStyle); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/PersonPhotoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/PersonPhotoServiceImpl.java index cb086d7..7f5f042 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/PersonPhotoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/PersonPhotoServiceImpl.java @@ -1,5 +1,7 @@ package com.iformall.service.sm.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; @@ -7,6 +9,7 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.sm.MaterialMould; import com.iformall.domain.po.sm.MouldPatchSign; import com.iformall.domain.po.sm.PersonPhoto; +import com.iformall.douyin.pay.preOrder.CreatePreOrderResult; import com.iformall.enums.EnumMouldSendType; import com.iformall.enums.EnumaMouldPatchStatus; import com.iformall.mapper.MaterialMouldMapper; @@ -14,6 +17,10 @@ import com.iformall.mapper.PersonPhotoMapper; import com.iformall.service.sm.MaterialMouldService; import com.iformall.service.sm.MouldPatchSignService; import com.iformall.service.sm.PersonPhotoService; +import com.iformall.sm.AiVideoHelper; +import com.iformall.utils.Base64Util; +import com.iformall.utils.HttpUtil; +import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,6 +29,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Date; +import java.util.HashMap; import java.util.List; @@ -35,11 +43,11 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { @Autowired MouldPatchSignService mouldPatchSignService; - private void handleSendType(PersonPhoto record){ + private void handleSendType(PersonPhoto record) { // - if(record.getUserId() != null){ + if (record.getUserId() != null) { record.setSendType(EnumMouldSendType.build.getCode()); - }else if(record.getSendType() == null){ + } else if (record.getSendType() == null) { record.setSendTypes(EnumMouldSendType.getSysSendTypes()); } } @@ -56,7 +64,7 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { handleSendType(record); return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> personPhotoMapper.findCList(record)); } - + @Override public PersonPhoto getById(Long id) { return personPhotoMapper.selectById(id); @@ -65,10 +73,10 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { @Override public PersonPhoto getDetailById(Long id) { PersonPhoto personPhoto = getById(id); - if(personPhoto == null){ + if (personPhoto == null) { return null; } - if(personPhoto.getSceneSignList() != null && !personPhoto.getSceneSignList().isEmpty()){ + if (personPhoto.getSceneSignList() != null && !personPhoto.getSceneSignList().isEmpty()) { MouldPatchSign signQ = new MouldPatchSign(); signQ.setIds(personPhoto.getSceneSignList()); List signList = mouldPatchSignService.getList(signQ); @@ -92,7 +100,7 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); final IdWorker idWorker = IdWorker.get(); record.setId(idWorker.nextId()); - if(record.getStatus() == null){ + if (record.getStatus() == null) { record.setStatus(EnumaMouldPatchStatus.draft.getCode()); } record.setCreateDate(now); @@ -102,7 +110,7 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { record.setUpdateDate(now); personPhotoMapper.updateById(record); } - return new ResultData(record); + return new ResultData(record); } @Override @@ -116,11 +124,25 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { PersonPhoto personPhotoUpd = new PersonPhoto(); personPhotoUpd.setId(record.getId()); personPhotoUpd.setStatus(record.getStatus()); - if(EnumaMouldPatchStatus.put_on.getCode().equals(personPhotoUpd.getStatus())){ + if (EnumaMouldPatchStatus.put_on.getCode().equals(personPhotoUpd.getStatus())) { personPhotoUpd.setPutonDate(now); } personPhotoUpd.setUpdateDate(now); personPhotoMapper.updateById(personPhotoUpd); } + @Override + public ResultData checkPhoto(String material) { + String url = "http://nas.pucao.cn:2002/image_qualit"; + String result = AiVideoHelper.doPost(url, Base64Util.imageUrlToBase64(material)); + if (StringUtils.isNotEmpty(result)) { + JSONObject result1 = JSON.parseObject(result); + String status = result1.getString("status"); + JSONObject jsonObject = JSON.parseObject(status); + Integer code = jsonObject.getInteger("code"); + String msg = jsonObject.getString("msg"); + return new ResultData(code, msg); + } + return new ResultData("图片质量审核失败"); + } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java index 043e487..6e5eafb 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java @@ -1,5 +1,6 @@ package com.iformall.service.sm.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -10,6 +11,8 @@ import com.iformall.domain.po.sm.*; import com.iformall.enums.*; import com.iformall.mapper.PhotoSpeakVideoMapper; import com.iformall.service.sm.*; +import com.iformall.sm.*; +import com.iformall.utils.Base64Util; import com.iformall.video.VideoFactory; import com.iformall.video.entity.VideUploadResult; import org.apache.commons.lang3.StringUtils; @@ -20,6 +23,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Service; +import javax.transaction.xa.XAException; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -98,6 +102,7 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { JSONObject voiceMouldObject = new JSONObject(); voiceMouldObject.put("title",voiceMould.getLocalName()); voiceMouldObject.put("mouldSmId",voiceMould.getMouldSmId()); + voiceMouldObject.put("sex",voiceMould.getSex()); voiceMouldObject.put("personType",0); voiceMouldObject.put("personTypeStr","默认"); voiceMouldObject.put("speakType",0); @@ -216,77 +221,50 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { return new AsyncResult<>(0); } + try { + AiPhotoSpeakParam param = new AiPhotoSpeakParam(); + param.setImg(Base64Util.imageUrlToBase64(photoSpeakVideo.getPersonPhotoUrl())); + param.setVoice_id(voiceMouldSmId); + param.setVoice_style(StringUtils.isBlank(voiceType) ? "default" : voiceType); + + String voiceMouldSm = photoSpeakVideo.getVoiceMouldSm(); + JSONObject jsonObject = JSON.parseObject(voiceMouldSm); + Integer sex = jsonObject.getInteger("sex"); + if (EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)) { + param.setGen_txt(paperwork); + param.setGender(sex.toString()); + param.setUrl("None"); + } else if (EnumVoiceFrom.FROM_UPD.getCode().equals(voiceFrom)) { + param.setGen_txt("None"); + param.setGender("None"); + param.setUrl(voiceMaterialUrl); + } + + AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); + if (video.isSuccess()) { + videoUpd.setVideoPath(video.getUrl()); + videoUpd.setVideoStatus(EnumVideoStatus.success.getCode()); + videoUpd.setVideoMsg("success"); + videoUpd.setCreateVideoDate(new Date()); + this.saveOrUpdate(videoUpd); - try{ -// AiVideoParam videoParam = new AiVideoParam(); -// videoParam.setGen_txt(paperwork); -// videoParam.setVideo_template_id(personMouldSmId); -// videoParam.setVoice_id(voiceMouldSmId); -// videoParam.setVoice_style(voiceType); -// AiVideoParam.VideoFiles videoFiles = new AiVideoParam.VideoFiles(); -// AiVideoParam.BackGround backGround = new AiVideoParam.BackGround(); -// backGround.setType(EnumVideoType.getEnum(mouldVideo.getVideoType()).getType()); -// JSONObject backgroundObject = JSONObject.parseObject(mouldVideo.getBackgroundSm()); -// backGround.setImage(Base64Util.imageUrlToBase64(backgroundObject.getString("material"))); -// videoFiles.setBack_ground(backGround); -// AiVideoParam.Material digitalHuman = new AiVideoParam.Material(); -// JSONObject personObject = JSONObject.parseObject(mouldVideo.getPersonJson()); -// int[] digitalHumanCoord = new int[]{personObject.getIntValue("x"),personObject.getIntValue("y")}; -// digitalHuman.setCoord(digitalHumanCoord); -// digitalHuman.setLevel(personObject.getIntValue("z")); -// digitalHuman.setRatio(personObject.getFloatValue("w")); -// videoFiles.setDigital_human(digitalHuman); -// -// if(StringUtils.isNotBlank(mouldVideo.getMaterialAllJson())){ -// JSONArray materialAllArray = JSONArray.parseArray(mouldVideo.getMaterialAllJson()); -// if(materialAllArray != null && !materialAllArray.isEmpty()){ -// List materialList = new ArrayList<>(); -// for(int i = 0;i < materialAllArray.size();i++) { -// JSONObject materialObject = materialAllArray.getJSONObject(i); -// if(EnumMouldPatchType.material_mould.getCode().equals(materialObject.getInteger("type"))){ -// AiVideoParam.Material material = new AiVideoParam.Material(); -// int[] materialCoord = new int[]{materialObject.getIntValue("x"),materialObject.getIntValue("y")}; -// material.setCoord(materialCoord); -// material.setImage(Base64Util.imageUrlToBase64(materialObject.getString("material"))); -// material.setLevel(materialObject.getIntValue("z")); -// material.setRatio(materialObject.getFloatValue("w")); -// materialList.add(material); -// } -// } -// if(materialList.size() > 0){ -// videoFiles.setMaterial(materialList); -// } -// } -// } -// videoParam.setVideo_files(videoFiles); -// -// AiVideoResult video = AiVideoHelper.createVideo(videoParam); -// if(video.isSuccess()){ -// videoUpd.setVideoPath(video.getUrl()); -//// videoUpd.setVideoTime(video.getDuration()+""); -// videoUpd.setVideoStatus(EnumVideoStatus.success.getCode()); -// videoUpd.setVideoMsg("success"); -// videoUpd.setCreateVideoDate(new Date()); -// this.saveOrUpdate(videoUpd); -// -// videoUpd.setTitle(mouldVideo.getTitle()); -// this.uploadVideo(videoUpd); -// -// return new AsyncResult<>(1); -// } + videoUpd.setTitle(photoSpeakVideo.getTitle()); + this.uploadVideo(videoUpd); + + return new AsyncResult<>(1); + } videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); videoUpd.setVideoMsg("fail"); this.saveOrUpdate(videoUpd); return new AsyncResult<>(0); - }catch(Exception e){ + } catch (Exception e) { e.printStackTrace(); videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); videoUpd.setVideoMsg("请求异常"); this.saveOrUpdate(videoUpd); return new AsyncResult<>(0); } - } @Override diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java index 27f0f2c..874a62b 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java @@ -2,14 +2,20 @@ package com.iformall.service.sm.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Lists; +import com.iformall.common.ResultData; import com.iformall.domain.po.sm.VoiceInfo; +import com.iformall.enums.EnumSex; import com.iformall.mapper.VoiceMapper; import com.iformall.service.sm.VoiceInfoService; +import com.iformall.sm.AiPhotoSpeakResult; +import com.iformall.sm.AiVideoHelper; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; import java.util.List; @@ -37,4 +43,29 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { public VoiceInfo getById(Long voiceMouldId) { return voiceMapper.selectById(voiceMouldId); } + + @Override + public ResultData voicePreview(String genTxt, Long voiceId, String voiceStyle) { + if (voiceId == null || StringUtils.isBlank(genTxt)) { + return new ResultData(); + } + VoiceInfo voiceInfo = voiceMapper.selectOne(new LambdaQueryWrapper().eq(VoiceInfo::getIsDel, 0).eq(VoiceInfo::getId, voiceId)); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("gen_txt", genTxt); + jsonObject.put("voice_id", voiceInfo.getMouldSmId()); + jsonObject.put("voice_style", voiceStyle); + jsonObject.put("gender", voiceInfo.getSex() == 1 ? "male" : "female"); + String response = AiVideoHelper.doPost("http://nas.pucao.cn:2002/tts_wav", jsonObject.toJSONString()); + if (StringUtils.isNotBlank(response)) { + String str = "http://nas.pucao.cn:2002"; + JSONObject object = JSON.parseObject(response); + JSONObject status = object.getJSONObject("status"); + Integer code = status.getInteger("code"); + if (code.intValue() == 3000) { + JSONObject data = object.getJSONObject("data"); + return new ResultData(str + data.getString("url")); + } + } + return new ResultData(); + } } diff --git a/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakParam.java b/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakParam.java new file mode 100644 index 0000000..d9943c9 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakParam.java @@ -0,0 +1,38 @@ +package com.iformall.sm; + +import io.swagger.models.auth.In; +import lombok.Data; + + +@Data +public class AiPhotoSpeakParam { + /** + * | 参数 | 必选 | 类型 | 说明 | + * | ----------------- | ---- | ------- | ------------------------------------------------------------ | + * | gen_txt | 是 | string | 需要生成的文字, 如果上传语音文件就为None | + * | voice_id | 是 | string | 音色ID,如:"zh-CN-YunxiNeural"。如果使用“default”,表示不指定具体的,由后端服务自动匹配 | + * | voice_style | 是 | string | TTS语音风格,如:”angry“。如果使用“default”,表示默认风格 | + * | gender | 是 | string | 说话人性别,male或者female | + * | url | 是 | string | 如果上传音频就传url,否则为None | + * | img | 是 | base64 | 编码后的图片 | + */ + + private String gen_txt; + private String voice_id; + private String voice_style; + private String gender; + private String url; + private String img; + + public String neglectImgString() { + StringBuffer str = new StringBuffer(); + str.append("{"); + str.append("\"gen_txt\":").append("\"").append(gen_txt).append("\","); + str.append("\"voice_id\":").append("\"").append(voice_id).append("\","); + str.append("\"voice_style\":").append("\"").append(voice_style).append("\","); + str.append("\"gender\":").append("\"").append(gender).append("\","); + str.append("\"url\":").append("\"").append(url).append("\","); + str.append("\"img\":").append("\"").append(img).append("\"}"); + return str.toString(); + } +} diff --git a/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakResult.java b/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakResult.java new file mode 100644 index 0000000..f258822 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/sm/AiPhotoSpeakResult.java @@ -0,0 +1,12 @@ +package com.iformall.sm; + +import lombok.Data; + +@Data +public class AiPhotoSpeakResult { + + private boolean success; + private String msg; + private String url; + +} diff --git a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java index f38d5e9..89d2068 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java @@ -31,6 +31,7 @@ public class AiVideoHelper { // http://nas.pucao.cn:2001/gen_dh_video public static String uri = "http://nas.pucao.cn:2001"; + public static String url = "http://nas.pucao.cn:2002/img_talking"; public static String doPost(String url, String params) { return HttpUtil.doAiVideoPost(url,params); } @@ -96,26 +97,69 @@ public class AiVideoHelper { // } } + + public static AiPhotoSpeakResult createPhotoSpeakVideo(AiPhotoSpeakParam videoParam) { + log.info("生成视频start request:" + videoParam.neglectImgString()); + String response = doPost(url, JSONObject.toJSONString(videoParam)); + log.info("生成视频end response:" + response); + AiPhotoSpeakResult result = new AiPhotoSpeakResult(); + if (StringUtils.isBlank(response)) { + result.setSuccess(false); + result.setMsg("请求生成视频异常,请稍后重试"); + return result; + } + JSONObject jsonObject = JSON.parseObject(response); + JSONObject status = jsonObject.getJSONObject("status"); + Integer code = status.getInteger("code"); + if (code == null) { + result.setSuccess(false); + result.setMsg("请求生成视频异常,请稍后重试"); + return result; + } + + if (code.intValue() == 1000) { + JSONObject data = jsonObject.getJSONObject("data"); + String videoUrl = data.getString("url"); + result.setSuccess(true); + result.setMsg("success"); + result.setUrl(videoUrl); + } else { + result.setSuccess(false); + result.setMsg(status.getString("msg")); + } + return result; + } + public static void main(String[] args) { - AiVideoParam videoParam = new AiVideoParam(); - videoParam.setGen_txt("我写了一篇小说,你帮我看看。"); - videoParam.setVideo_template_id("16776650495633934_PgNAW8Sm"); - videoParam.setVoice_id("zh-CN-XiaohanNeural"); - videoParam.setVoice_style("default"); - AiVideoParam.VideoFiles videoFiles = new AiVideoParam.VideoFiles(); - AiVideoParam.BackGround backGround = new AiVideoParam.BackGround(); - backGround.setType("vertical"); - backGround.setImage(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/background/grace/1080.jpg")); - videoFiles.setBack_ground(backGround); - AiVideoParam.Material digitalHuman = new AiVideoParam.Material(); - int[] digitalHumanCoord = new int[]{0,0}; - digitalHuman.setCoord(digitalHumanCoord); - digitalHuman.setLevel(0); - digitalHuman.setRatio(1.0f); - videoFiles.setDigital_human(digitalHuman); - videoParam.setVideo_files(videoFiles); - - AiVideoResult video = AiVideoHelper.createVideo(videoParam); +// AiVideoParam videoParam = new AiVideoParam(); +// videoParam.setGen_txt("我写了一篇小说,你帮我看看。"); +// videoParam.setVideo_template_id("16776650495633934_PgNAW8Sm"); +// videoParam.setVoice_id("zh-CN-XiaohanNeural"); +// videoParam.setVoice_style("default"); +// AiVideoParam.VideoFiles videoFiles = new AiVideoParam.VideoFiles(); +// AiVideoParam.BackGround backGround = new AiVideoParam.BackGround(); +// backGround.setType("vertical"); +// backGround.setImage(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/background/grace/1080.jpg")); +// videoFiles.setBack_ground(backGround); +// AiVideoParam.Material digitalHuman = new AiVideoParam.Material(); +// int[] digitalHumanCoord = new int[]{0,0}; +// digitalHuman.setCoord(digitalHumanCoord); +// digitalHuman.setLevel(0); +// digitalHuman.setRatio(1.0f); +// videoFiles.setDigital_human(digitalHuman); +// videoParam.setVideo_files(videoFiles); +// +// AiVideoResult video = AiVideoHelper.createVideo(videoParam); + + AiPhotoSpeakParam param = new AiPhotoSpeakParam(); + param.setGen_txt("我写了一篇小说,你帮我看看。"); + param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personmould/16739389169485046_nVi875Ej_grace_1080.jpg")); + param.setGender("male"); + param.setVoice_id("zh-CN-XiaohanNeural"); + param.setVoice_style("default"); + param.setUrl("None"); + AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); + } }