@@ -21,6 +21,7 @@ import org.apache.commons.lang3.StringUtils; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.util.ObjectUtils; | |||||
import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
@@ -76,7 +77,10 @@ public class PersonPhotoController extends BaseController { | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"素材为空"); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"素材为空"); | ||||
} | } | ||||
//todo 掉第三方接口判断图片是否符合规范 | //todo 掉第三方接口判断图片是否符合规范 | ||||
ResultData data = personPhotoService.checkPhoto(record.getMaterial()); | |||||
if (data.code != 2000){ | |||||
return new ResultData(data.code,data.message); | |||||
} | |||||
if(record.getTitle() == null){ | if(record.getTitle() == null){ | ||||
record.setTitle("用户自建"); | record.setTitle("用户自建"); | ||||
@@ -153,4 +153,16 @@ public class VoiceMouldController extends BaseController { | |||||
logger.debug("[" + getIpAddr() + "] MouldPatchController::chooseType"); | logger.debug("[" + getIpAddr() + "] MouldPatchController::chooseType"); | ||||
return new ResultData(voiceInfoService.chooseType(id)); | 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)); | |||||
} | |||||
} | } |
@@ -62,6 +62,7 @@ public class PhotoSpeakVideo extends TenantEntity { | |||||
* { | * { | ||||
* "title":, | * "title":, | ||||
* "languages":, | * "languages":, | ||||
* "sex":, | |||||
* "mouldSmId":, | * "mouldSmId":, | ||||
* "personId":, | * "personId":, | ||||
* "personType":, | * "personType":, | ||||
@@ -43,4 +43,5 @@ public interface PersonPhotoService { | |||||
void updateOnline(PersonPhoto record); | void updateOnline(PersonPhoto record); | ||||
ResultData checkPhoto(String material); | |||||
} | } |
@@ -2,6 +2,7 @@ package com.iformall.service.sm; | |||||
import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
import com.iformall.common.ResultData; | |||||
import com.iformall.domain.po.sm.VoiceInfo; | import com.iformall.domain.po.sm.VoiceInfo; | ||||
import com.iformall.domain.po.sm.VoiceLanguage; | import com.iformall.domain.po.sm.VoiceLanguage; | ||||
@@ -12,4 +13,6 @@ public interface VoiceInfoService { | |||||
List<VoiceInfo> chooseType(Long id); | List<VoiceInfo> chooseType(Long id); | ||||
VoiceInfo getById(Long voiceMouldId); | VoiceInfo getById(Long voiceMouldId); | ||||
ResultData voicePreview(String genTxt, Long voiceId, String voiceStyle); | |||||
} | } |
@@ -1,5 +1,7 @@ | |||||
package com.iformall.service.sm.impl; | 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.PageHelper; | ||||
import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
import com.iformall.common.IdWorker; | 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.MaterialMould; | ||||
import com.iformall.domain.po.sm.MouldPatchSign; | import com.iformall.domain.po.sm.MouldPatchSign; | ||||
import com.iformall.domain.po.sm.PersonPhoto; | import com.iformall.domain.po.sm.PersonPhoto; | ||||
import com.iformall.douyin.pay.preOrder.CreatePreOrderResult; | |||||
import com.iformall.enums.EnumMouldSendType; | import com.iformall.enums.EnumMouldSendType; | ||||
import com.iformall.enums.EnumaMouldPatchStatus; | import com.iformall.enums.EnumaMouldPatchStatus; | ||||
import com.iformall.mapper.MaterialMouldMapper; | 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.MaterialMouldService; | ||||
import com.iformall.service.sm.MouldPatchSignService; | import com.iformall.service.sm.MouldPatchSignService; | ||||
import com.iformall.service.sm.PersonPhotoService; | 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.apache.commons.lang3.StringUtils; | ||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
@@ -22,6 +29,7 @@ import org.springframework.stereotype.Service; | |||||
import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
import java.util.Date; | import java.util.Date; | ||||
import java.util.HashMap; | |||||
import java.util.List; | import java.util.List; | ||||
@@ -35,11 +43,11 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { | |||||
@Autowired | @Autowired | ||||
MouldPatchSignService mouldPatchSignService; | 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()); | record.setSendType(EnumMouldSendType.build.getCode()); | ||||
}else if(record.getSendType() == null){ | |||||
} else if (record.getSendType() == null) { | |||||
record.setSendTypes(EnumMouldSendType.getSysSendTypes()); | record.setSendTypes(EnumMouldSendType.getSysSendTypes()); | ||||
} | } | ||||
} | } | ||||
@@ -56,7 +64,7 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { | |||||
handleSendType(record); | handleSendType(record); | ||||
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> personPhotoMapper.findCList(record)); | return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> personPhotoMapper.findCList(record)); | ||||
} | } | ||||
@Override | @Override | ||||
public PersonPhoto getById(Long id) { | public PersonPhoto getById(Long id) { | ||||
return personPhotoMapper.selectById(id); | return personPhotoMapper.selectById(id); | ||||
@@ -65,10 +73,10 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { | |||||
@Override | @Override | ||||
public PersonPhoto getDetailById(Long id) { | public PersonPhoto getDetailById(Long id) { | ||||
PersonPhoto personPhoto = getById(id); | PersonPhoto personPhoto = getById(id); | ||||
if(personPhoto == null){ | |||||
if (personPhoto == null) { | |||||
return null; | return null; | ||||
} | } | ||||
if(personPhoto.getSceneSignList() != null && !personPhoto.getSceneSignList().isEmpty()){ | |||||
if (personPhoto.getSceneSignList() != null && !personPhoto.getSceneSignList().isEmpty()) { | |||||
MouldPatchSign signQ = new MouldPatchSign(); | MouldPatchSign signQ = new MouldPatchSign(); | ||||
signQ.setIds(personPhoto.getSceneSignList()); | signQ.setIds(personPhoto.getSceneSignList()); | ||||
List<MouldPatchSign> signList = mouldPatchSignService.getList(signQ); | List<MouldPatchSign> signList = mouldPatchSignService.getList(signQ); | ||||
@@ -92,7 +100,7 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { | |||||
//record.setId(UUID.randomUUID().toString().replaceAll("-", "")); | //record.setId(UUID.randomUUID().toString().replaceAll("-", "")); | ||||
final IdWorker idWorker = IdWorker.get(); | final IdWorker idWorker = IdWorker.get(); | ||||
record.setId(idWorker.nextId()); | record.setId(idWorker.nextId()); | ||||
if(record.getStatus() == null){ | |||||
if (record.getStatus() == null) { | |||||
record.setStatus(EnumaMouldPatchStatus.draft.getCode()); | record.setStatus(EnumaMouldPatchStatus.draft.getCode()); | ||||
} | } | ||||
record.setCreateDate(now); | record.setCreateDate(now); | ||||
@@ -102,7 +110,7 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { | |||||
record.setUpdateDate(now); | record.setUpdateDate(now); | ||||
personPhotoMapper.updateById(record); | personPhotoMapper.updateById(record); | ||||
} | } | ||||
return new ResultData(record); | |||||
return new ResultData(record); | |||||
} | } | ||||
@Override | @Override | ||||
@@ -116,11 +124,25 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { | |||||
PersonPhoto personPhotoUpd = new PersonPhoto(); | PersonPhoto personPhotoUpd = new PersonPhoto(); | ||||
personPhotoUpd.setId(record.getId()); | personPhotoUpd.setId(record.getId()); | ||||
personPhotoUpd.setStatus(record.getStatus()); | personPhotoUpd.setStatus(record.getStatus()); | ||||
if(EnumaMouldPatchStatus.put_on.getCode().equals(personPhotoUpd.getStatus())){ | |||||
if (EnumaMouldPatchStatus.put_on.getCode().equals(personPhotoUpd.getStatus())) { | |||||
personPhotoUpd.setPutonDate(now); | personPhotoUpd.setPutonDate(now); | ||||
} | } | ||||
personPhotoUpd.setUpdateDate(now); | personPhotoUpd.setUpdateDate(now); | ||||
personPhotoMapper.updateById(personPhotoUpd); | 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("图片质量审核失败"); | |||||
} | |||||
} | } |
@@ -1,5 +1,6 @@ | |||||
package com.iformall.service.sm.impl; | package com.iformall.service.sm.impl; | ||||
import com.alibaba.fastjson.JSON; | |||||
import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
import com.github.pagehelper.PageHelper; | import com.github.pagehelper.PageHelper; | ||||
import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
@@ -10,6 +11,8 @@ import com.iformall.domain.po.sm.*; | |||||
import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
import com.iformall.mapper.PhotoSpeakVideoMapper; | import com.iformall.mapper.PhotoSpeakVideoMapper; | ||||
import com.iformall.service.sm.*; | import com.iformall.service.sm.*; | ||||
import com.iformall.sm.*; | |||||
import com.iformall.utils.Base64Util; | |||||
import com.iformall.video.VideoFactory; | import com.iformall.video.VideoFactory; | ||||
import com.iformall.video.entity.VideUploadResult; | import com.iformall.video.entity.VideUploadResult; | ||||
import org.apache.commons.lang3.StringUtils; | 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.scheduling.annotation.AsyncResult; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import javax.transaction.xa.XAException; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Date; | import java.util.Date; | ||||
import java.util.List; | import java.util.List; | ||||
@@ -98,6 +102,7 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||||
JSONObject voiceMouldObject = new JSONObject(); | JSONObject voiceMouldObject = new JSONObject(); | ||||
voiceMouldObject.put("title",voiceMould.getLocalName()); | voiceMouldObject.put("title",voiceMould.getLocalName()); | ||||
voiceMouldObject.put("mouldSmId",voiceMould.getMouldSmId()); | voiceMouldObject.put("mouldSmId",voiceMould.getMouldSmId()); | ||||
voiceMouldObject.put("sex",voiceMould.getSex()); | |||||
voiceMouldObject.put("personType",0); | voiceMouldObject.put("personType",0); | ||||
voiceMouldObject.put("personTypeStr","默认"); | voiceMouldObject.put("personTypeStr","默认"); | ||||
voiceMouldObject.put("speakType",0); | voiceMouldObject.put("speakType",0); | ||||
@@ -216,77 +221,50 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||||
return new AsyncResult<>(0); | 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<AiVideoParam.Material> 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.setVideoStatus(EnumVideoStatus.fail.getCode()); | ||||
videoUpd.setVideoMsg("fail"); | videoUpd.setVideoMsg("fail"); | ||||
this.saveOrUpdate(videoUpd); | this.saveOrUpdate(videoUpd); | ||||
return new AsyncResult<>(0); | return new AsyncResult<>(0); | ||||
}catch(Exception e){ | |||||
} catch (Exception e) { | |||||
e.printStackTrace(); | e.printStackTrace(); | ||||
videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | ||||
videoUpd.setVideoMsg("请求异常"); | videoUpd.setVideoMsg("请求异常"); | ||||
this.saveOrUpdate(videoUpd); | this.saveOrUpdate(videoUpd); | ||||
return new AsyncResult<>(0); | return new AsyncResult<>(0); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
@@ -2,14 +2,20 @@ package com.iformall.service.sm.impl; | |||||
import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
import com.iformall.common.ResultData; | |||||
import com.iformall.domain.po.sm.VoiceInfo; | import com.iformall.domain.po.sm.VoiceInfo; | ||||
import com.iformall.enums.EnumSex; | |||||
import com.iformall.mapper.VoiceMapper; | import com.iformall.mapper.VoiceMapper; | ||||
import com.iformall.service.sm.VoiceInfoService; | import com.iformall.service.sm.VoiceInfoService; | ||||
import com.iformall.sm.AiPhotoSpeakResult; | |||||
import com.iformall.sm.AiVideoHelper; | |||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import org.springframework.util.ObjectUtils; | |||||
import java.util.List; | import java.util.List; | ||||
@@ -37,4 +43,29 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { | |||||
public VoiceInfo getById(Long voiceMouldId) { | public VoiceInfo getById(Long voiceMouldId) { | ||||
return voiceMapper.selectById(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<VoiceInfo>().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(); | |||||
} | |||||
} | } |
@@ -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(); | |||||
} | |||||
} |
@@ -0,0 +1,12 @@ | |||||
package com.iformall.sm; | |||||
import lombok.Data; | |||||
@Data | |||||
public class AiPhotoSpeakResult { | |||||
private boolean success; | |||||
private String msg; | |||||
private String url; | |||||
} |
@@ -31,6 +31,7 @@ public class AiVideoHelper { | |||||
// http://nas.pucao.cn:2001/gen_dh_video | // http://nas.pucao.cn:2001/gen_dh_video | ||||
public static String uri = "http://nas.pucao.cn:2001"; | 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) { | public static String doPost(String url, String params) { | ||||
return HttpUtil.doAiVideoPost(url,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) { | 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); | |||||
} | } | ||||
} | } |