后台服务
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

377 rader
14 KiB

  1. package com.iformall.sm;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.iformall.common.ErrorCode;
  6. import com.iformall.douyin.pay.orderQuery.OrderQueryResult;
  7. import com.iformall.douyin.pay.orderQuery.QueryMerchantResult;
  8. import com.iformall.douyin.pay.orderQuery.QueryRefundResult;
  9. import com.iformall.douyin.pay.orderQuery.QuerySettleResult;
  10. import com.iformall.douyin.pay.preOrder.*;
  11. import com.iformall.enums.EnumMouldPatchType;
  12. import com.iformall.enums.EnumPayStatus;
  13. import com.iformall.enums.EnumVideoType;
  14. import com.iformall.exception.MallinkException;
  15. import com.iformall.utils.Base64Util;
  16. import com.iformall.utils.HttpUtil;
  17. import com.iformall.utils.sign.SignUtils;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.stereotype.Component;
  22. import sun.net.www.content.audio.wav;
  23. import java.nio.charset.StandardCharsets;
  24. import java.security.MessageDigest;
  25. import java.security.NoSuchAlgorithmException;
  26. import java.util.*;
  27. @Slf4j
  28. @Component
  29. public class AiVideoHelper {
  30. public static String oral_broadcasting;
  31. @Value("${suimang.oral_broadcasting}")
  32. public void setOralBroadcasting(String oral_broadcasting){
  33. this.oral_broadcasting = oral_broadcasting;
  34. }
  35. public static String photo_speak;
  36. @Value("${suimang.photo_speak}")
  37. public void setPhotoSpeak(String photo_speak){
  38. this.photo_speak = photo_speak;
  39. }
  40. public static String photo_speak_hy;
  41. @Value("${suimang.photo_speak_hy}")
  42. public void setPhotoSpeakHy(String photo_speak_hy){
  43. this.photo_speak_hy = photo_speak_hy;
  44. }
  45. public static String callbackUrl;
  46. @Value("${suimang.callbackUrl}")
  47. public void setCallbackUrl(String callbackUrl){
  48. this.callbackUrl = callbackUrl;
  49. }
  50. public static boolean localDeploy;//是否是私有化部署
  51. @Value("${suimang.local_deploy}")
  52. public void setLocalDeploy(boolean localDeploy) {
  53. this.localDeploy = localDeploy;
  54. }
  55. public static String token;//跟遂芒唯一验证
  56. @Value("${suimang.token}")
  57. public void setToken(String token) {
  58. this.token = token;
  59. }
  60. public static String doPost(String url, String params) {
  61. return HttpUtil.doAiVideoPost(url,params);
  62. }
  63. public static AiVideoResult createVideo(AiVideoParam videoParam) {
  64. // videoParam.setTask_id(taskId);
  65. if (StringUtils.isNotBlank(videoParam.getCallback_url())) {
  66. videoParam.setCallback_url(videoParam.getCallback_url());
  67. } else {
  68. videoParam.setCallback_url(callbackUrl + "/callback/oral/broadcasting");
  69. }
  70. //videoParam.setToken(token);
  71. log.info("生成视频start request:" + videoParam.neglectImgString());
  72. String response = doPost(oral_broadcasting+"/gen_dh_video", JSONObject.toJSONString(videoParam));
  73. log.info("生成视频end response:"+response);
  74. AiVideoResult result = new AiVideoResult();
  75. if(StringUtils.isBlank(response)){
  76. result.setSuccess(false);
  77. result.setMsg("请求生成视频异常,请稍后重试");
  78. return result;
  79. }
  80. JSONObject jsonObject = JSON.parseObject(response);
  81. JSONObject status = jsonObject.getJSONObject("status");
  82. Integer code = status.getInteger("code");
  83. if(code == null){
  84. result.setSuccess(false);
  85. result.setMsg("请求生成视频异常,请稍后重试");
  86. return result;
  87. }
  88. if(code.intValue() == 1000){
  89. JSONObject data = jsonObject.getJSONObject("data");
  90. JSONObject video = data.getJSONObject("video");
  91. result.setSuccess(true);
  92. result.setMsg("success");
  93. result.setDuration(video.getFloatValue("duration"));
  94. result.setUrl(video.getString("url"));
  95. }else{
  96. result.setSuccess(false);
  97. result.setMsg(status.getString("msg"));
  98. }
  99. return result;
  100. // Integer code = jsonObject.getInteger("err_no");
  101. // if (null != code && code.intValue() == 0 ) {
  102. // CreatePreOrderResult result = new CreatePreOrderResult();
  103. // result.setSuccess(true);
  104. // result.setOutOrderNo(preOrder.getOutOrderNo());
  105. // JSONObject data = jsonObject.getJSONObject("data");
  106. // if (null != data ) {
  107. // result.setOrderId(data.getString("order_id"));
  108. // result.setToken(data.getString("order_token"));
  109. // }else {
  110. // log.error("createPreOrder reponse empity. request: "+JSON.toJSONString(preOrder.toRequestMap())+" response:"+response);
  111. // result.setSuccess(false);
  112. // result.setMsg("createPreOrder reponse empity."+response);
  113. // }
  114. // return result;
  115. // }else {
  116. // log.error("createPreOrder reponse error. request: "+JSON.toJSONString(preOrder.toRequestMap())+" response:"+response);
  117. // CreatePreOrderResult result = new CreatePreOrderResult();
  118. // result.setSuccess(false);
  119. // result.setMsg("createPreOrder reponse error."+response);
  120. // return result;
  121. // }
  122. }
  123. public static AiCheckPhotoResult checkPhoto(AiCheckPhotoParam param) {
  124. // String response = doPost("http://111.198.0.15:22299" + "/image_qualit", JSONObject.toJSONString(param));
  125. //param.setToken(token);
  126. String response = doPost(photo_speak + "/image_qualit", JSONObject.toJSONString(param));
  127. log.info("图片质量审核 end response:" + response);
  128. AiCheckPhotoResult result = new AiCheckPhotoResult();
  129. if (StringUtils.isBlank(response)) {
  130. result.setSuccess(false);
  131. result.setMsg("(MetaService)图片质量审核失败,请稍后重试");
  132. return result;
  133. }
  134. JSONObject jsonObject = JSON.parseObject(response);
  135. JSONObject status = jsonObject.getJSONObject("status");
  136. Integer code = status.getInteger("code");
  137. String msg = status.getString("msg");
  138. if (code == null) {
  139. result.setSuccess(false);
  140. result.setMsg("(MetaService)请求图片质量检查失败,请稍后重试");
  141. return result;
  142. }
  143. if (code.intValue() == 2000) {
  144. result.setCode(code);
  145. result.setSuccess(true);
  146. String resultMsg = result.getMsgInfo(code, msg);
  147. result.setMsg(resultMsg);
  148. } else {
  149. result.setCode(code);
  150. result.setSuccess(false);
  151. String resultMsg = result.getMsgInfo(code, msg);
  152. result.setMsg(resultMsg);
  153. }
  154. return result;
  155. }
  156. public static AiPreviewResult voicePreview(AiPreviewParam param) {
  157. //param.setToken(token);
  158. log.info("TTS音色预览 start request:" + JSONObject.toJSONString(param));
  159. String response = doPost(photo_speak + "/tts_wav", JSONObject.toJSONString(param));
  160. log.info("TTS音色预览 end response:" + response);
  161. AiPreviewResult result = new AiPreviewResult();
  162. if (StringUtils.isBlank(response)) {
  163. result.setSuccess(false);
  164. result.setMsg("(MetaService) no result");
  165. return result;
  166. }
  167. JSONObject jsonObject = JSON.parseObject(response);
  168. JSONObject status = jsonObject.getJSONObject("status");
  169. JSONObject data = jsonObject.getJSONObject("data");
  170. String strURL = null;
  171. String time = null;
  172. if (data != null){
  173. strURL = data.getString("url");
  174. time = data.getString("time");
  175. }
  176. Integer code = status.getInteger("code");
  177. String msg = status.getString("msg");
  178. if (code == null) {
  179. result.setSuccess(false);
  180. result.setMsg("(MetaService) error,"+msg);
  181. return result;
  182. }
  183. if (code.intValue() == 3000) {
  184. result.setCode(200);
  185. result.setSuccess(true);
  186. result.setUrl(photo_speak + strURL);
  187. result.setTime(Double.valueOf(time));
  188. result.setMsg("(MetaService) error,"+msg);
  189. } else {
  190. result.setCode(code);
  191. result.setSuccess(false);
  192. result.setMsg("(MetaService) error,"+msg);
  193. }
  194. return result;
  195. }
  196. public static AiPhotoSpeakResult createPhotoSpeakVideo(AiPhotoSpeakParam videoParam,Long taskId) {
  197. videoParam.setTask_id(taskId);
  198. videoParam.setCallback_url(callbackUrl + "/callback/photo/speak");
  199. log.info("生成视频start request:" + videoParam.neglectImgString());
  200. String response = doPost(photo_speak + "/img_talking", JSONObject.toJSONString(videoParam));
  201. log.info("生成视频end response:" + response);
  202. AiPhotoSpeakResult result = new AiPhotoSpeakResult();
  203. if (StringUtils.isBlank(response)) {
  204. result.setSuccess(false);
  205. result.setMsg("(MetaService) not result");
  206. return result;
  207. }
  208. JSONObject jsonObject = JSON.parseObject(response);
  209. JSONObject status = jsonObject.getJSONObject("status");
  210. Integer code = status.getInteger("code");
  211. String msg = status.getString("msg");
  212. if (code == null) {
  213. result.setSuccess(false);
  214. result.setMsg("(MetaService) error."+msg);
  215. return result;
  216. }
  217. if (code.intValue() == 4000) {
  218. JSONObject data = jsonObject.getJSONObject("data");
  219. String videoUrl = data.getString("url");
  220. String saveDir = data.getString("save_dir");
  221. String audioPath = data.getString("audio_path");
  222. result.setSuccess(true);
  223. result.setUrl(videoUrl);
  224. result.setSaveDir(saveDir);
  225. result.setCode(code);
  226. result.setAudioPath(audioPath);
  227. result.setMsg("(MetaService) error."+msg);
  228. } else {
  229. result.setSuccess(false);
  230. result.setCode(code);
  231. result.setMsg("(MetaService) error."+msg);
  232. }
  233. return result;
  234. }
  235. public static AiVideoHqResult videoHq(AiVideoHqParam param,Long taskId) {
  236. param.setTask_id(taskId);
  237. param.setCallback_url(callbackUrl + "/callback/photo/speak");
  238. String response = doPost(photo_speak_hy + "/video_hq", JSONObject.toJSONString(param));
  239. log.info("视频超分 end response:" + response);
  240. AiVideoHqResult result = new AiVideoHqResult();
  241. if (StringUtils.isBlank(response)) {
  242. result.setSuccess(false);
  243. result.setMsg("(MetaService)视频超分失败,请稍后重试");
  244. return result;
  245. }
  246. JSONObject jsonObject = JSON.parseObject(response);
  247. JSONObject status = jsonObject.getJSONObject("status");
  248. JSONObject data = jsonObject.getJSONObject("data");
  249. String strURL = null;
  250. if (data != null){
  251. strURL = data.getString("url");
  252. }
  253. Integer code = status.getInteger("code");
  254. String msg = status.getString("msg");
  255. if (code == null) {
  256. result.setSuccess(false);
  257. result.setMsg("(MetaService)视频超分异常,请稍后重试");
  258. return result;
  259. }
  260. if (code.intValue() == 5000) {
  261. result.setCode(200);
  262. result.setSuccess(true);
  263. result.setUrl(strURL);
  264. String resultMsg = result.getMsgInfo(code, msg);
  265. result.setMsg(resultMsg);
  266. } else {
  267. result.setCode(code);
  268. result.setSuccess(false);
  269. String resultMsg = result.getMsgInfo(code, msg);
  270. result.setMsg(resultMsg);
  271. }
  272. return result;
  273. }
  274. public static void main(String[] args) {
  275. // AiVideoParam videoParam = new AiVideoParam();
  276. // videoParam.setGen_txt("我写了一篇小说,你帮我看看。");
  277. // videoParam.setVideo_template_id("16776650495633934_PgNAW8Sm");
  278. // videoParam.setVoice_id("zh-CN-XiaohanNeural");
  279. // videoParam.setVoice_style("default");
  280. // AiVideoParam.VideoFiles videoFiles = new AiVideoParam.VideoFiles();
  281. // AiVideoParam.BackGround backGround = new AiVideoParam.BackGround();
  282. // backGround.setType("vertical");
  283. // backGround.setImage(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/background/grace/1080.jpg"));
  284. // videoFiles.setBack_ground(backGround);
  285. // AiVideoParam.Material digitalHuman = new AiVideoParam.Material();
  286. // int[] digitalHumanCoord = new int[]{0,0};
  287. // digitalHuman.setCoord(digitalHumanCoord);
  288. // digitalHuman.setLevel(0);
  289. // digitalHuman.setRatio(1.0f);
  290. // videoFiles.setDigital_human(digitalHuman);
  291. // videoParam.setVideo_files(videoFiles);
  292. //
  293. // AiVideoResult video = AiVideoHelper.createVideo(videoParam);
  294. //
  295. // AiPhotoSpeakParam param = new AiPhotoSpeakParam();
  296. // param.setGen_txt("道可道,非常道。名可名,非常名。无名天地之始;有名万物之母。故常无欲,以观其妙;常有欲,以观其徼。此两者,同出而异名,同谓之玄。玄之又玄,众妙之门");
  297. // param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personphoto/165640997370212321.png"));
  298. // param.setGender("female");
  299. // param.setVoice_id("zh-CN-XiaoqiuNeural");
  300. // param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak");
  301. // param.setTask_id(837169827124269056L);
  302. // param.setVoice_style("default");
  303. // param.setUrl("None");
  304. // AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param);
  305. // AiPhotoSpeakParam param = new AiPhotoSpeakParam();
  306. // param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak");
  307. // param.setTask_id(836805079248850944L);
  308. // param.setGen_txt("None");
  309. // param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/capi/2023-06-07/6da595fe12ef405bb6434f31e6bad4ec.png"));
  310. // param.setGender("None");
  311. // param.setVoice_id("default");
  312. // param.setVoice_style("default");
  313. // param.setUrl("https://video.metavatar.cc/sv/262b03bd-18929af12fd/262b03bd-18929af12fd.mp3");
  314. // AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param);
  315. AiCheckPhotoParam param = new AiCheckPhotoParam();
  316. String img = Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personmould/16760216806604820_cSHoijDX_grace_1080.jpg");
  317. param.setImg(img);
  318. AiCheckPhotoResult result = AiVideoHelper.checkPhoto(param);
  319. System.out.println(result);
  320. //
  321. // AiPreviewParam param = new AiPreviewParam();
  322. // param.setGen_txt("今天是个好日子");
  323. // param.setVoice_id("ar-DZ-AminaNeural");
  324. // param.setVoice_style("default");
  325. // param.setGender("female");
  326. // AiPreviewResult result = AiVideoHelper.voicePreview(param);
  327. // System.out.println(result);
  328. // AiVideoHqParam param = new AiVideoHqParam();
  329. // param.setSave_dir("static/tts/2023-07-07/16886958135060428.wav.mp4");
  330. // param.setAudio_path("static/tts/2023-07-07/16886958135060428.wav");
  331. // param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak");
  332. // param.setTask_id(836541377936281600L);
  333. // AiVideoHqResult result = AiVideoHelper.videoHq(param);
  334. // System.out.println(result);
  335. }
  336. }