@@ -0,0 +1,50 @@ | |||||
package com.iformall.controller; | |||||
import com.github.pagehelper.PageInfo; | |||||
import com.iformall.annotation.AuthIgnore; | |||||
import com.iformall.common.ErrorCode; | |||||
import com.iformall.common.ResultData; | |||||
import com.iformall.domain.po.base.BaseEntity; | |||||
import com.iformall.domain.po.sm.PersonPhoto; | |||||
import com.iformall.enums.EnumMouldSendType; | |||||
import com.iformall.enums.EnumaMouldPatchStatus; | |||||
import com.iformall.service.sm.MouldPatchSignService; | |||||
import com.iformall.service.sm.PersonPhotoService; | |||||
import com.iformall.utils.BaiduImageCheckUtil; | |||||
import io.swagger.annotations.Api; | |||||
import io.swagger.annotations.ApiImplicitParam; | |||||
import io.swagger.annotations.ApiImplicitParams; | |||||
import io.swagger.annotations.ApiOperation; | |||||
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.*; | |||||
import org.springframework.web.multipart.MultipartFile; | |||||
@RestController | |||||
@RequestMapping("/api/baidu") | |||||
@Api(description = "模板接口") | |||||
public class BaiduController extends BaseController { | |||||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
@ApiOperation("百度图片审核接口") | |||||
@PostMapping(value = "baiduPhoto", consumes = "multipart/*", headers = "content-type=multipart/form-data") | |||||
@ApiImplicitParam(name = "file", value = "file", dataType = "MultipartFile", paramType = "query", required = true) | |||||
public ResultData baiduCheckPhoto(@RequestPart("file") MultipartFile file) { | |||||
logger.debug("[" + getIpAddr() + "] PersonPhotoController::baiduCheckPhoto"); | |||||
if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) { | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "素材为空"); | |||||
} | |||||
long size = file.getSize(); | |||||
final long length = 4 * 1024 * 1024; | |||||
if (size > length) { | |||||
return new ResultData(ErrorCode.PICTURE_FOUR_SIZE_EXCEED); | |||||
} | |||||
return BaiduImageCheckUtil.photoCheck(file); | |||||
} | |||||
} |
@@ -12,6 +12,10 @@ import com.iformall.domain.po.sm.UserMouldVideo; | |||||
import com.iformall.enums.EnumVideoStatus; | import com.iformall.enums.EnumVideoStatus; | ||||
import com.iformall.service.ProductService; | import com.iformall.service.ProductService; | ||||
import com.iformall.service.UserBasicImageService; | import com.iformall.service.UserBasicImageService; | ||||
import com.iformall.sm.AiCheckPhotoParam; | |||||
import com.iformall.sm.AiCheckPhotoResult; | |||||
import com.iformall.sm.AiVideoHelper; | |||||
import com.iformall.utils.Base64Util; | |||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||
import io.swagger.annotations.ApiImplicitParams; | import io.swagger.annotations.ApiImplicitParams; | ||||
@@ -20,7 +24,11 @@ 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.*; | ||||
import org.springframework.web.multipart.MultipartFile; | |||||
import java.io.IOException; | |||||
@RestController | @RestController | ||||
@@ -50,5 +58,29 @@ public class UserBasicImageController extends BaseController { | |||||
return new ResultData(); | return new ResultData(); | ||||
} | } | ||||
@ApiOperation("图片人脸检测") | |||||
@PostMapping(value = "checkPhoto", consumes = "multipart/*", headers = "content-type=multipart/form-data") | |||||
@ApiImplicitParam(name = "file", value = "file", dataType = "MultipartFile", paramType = "query", required = true) | |||||
public ResultData checkPhoto(@RequestPart("file") MultipartFile file) { | |||||
logger.debug("[" + getIpAddr() + "] PersonPhotoController::checkPhoto"); | |||||
if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) { | |||||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "素材为空"); | |||||
} | |||||
try { | |||||
byte[] fileBytes = file.getBytes(); | |||||
String imgStr = Base64Util.encode(fileBytes); | |||||
AiCheckPhotoParam param = new AiCheckPhotoParam(); | |||||
param.setImg(imgStr); | |||||
AiCheckPhotoResult result = AiVideoHelper.checkPhoto(param); | |||||
if (result.isSuccess()) { | |||||
return new ResultData(); | |||||
} | |||||
return new ResultData(result.getCode(), result.getMsg()); | |||||
} catch (IOException e) { | |||||
e.printStackTrace(); | |||||
return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "接口请求异常"); | |||||
} | |||||
} | |||||
} | } |
@@ -12,7 +12,7 @@ public class UrlCheck { | |||||
|| url.contains("getCarStopFee") | || url.contains("getCarStopFee") | ||||
|| url.contains("/video/upload") | || url.contains("/video/upload") | ||||
|| url.contains("/personPhoto/baiduPhoto") | || url.contains("/personPhoto/baiduPhoto") | ||||
|| url.contains("/personPhoto/checkPhoto"); | |||||
|| url.contains("checkPhoto"); | |||||
} | } | ||||
} | } |
@@ -253,7 +253,7 @@ public class UserDigitalAvatarOrderServiceImpl implements UserDigitalAvatarOrder | |||||
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"上传图片参数异常"); | throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"上传图片参数异常"); | ||||
} | } | ||||
DigitalAvatarResult result = AiDigitalAvatarHelper.digitalAvatarPhoto(param); | |||||
DigitalAvatarResult result = AiDigitalAvatarHelper.digitalAvatarPhoto(param,record.getId()); | |||||
if(result.isSuccess()){ | if(result.isSuccess()){ | ||||
UserDigitalAvatarOrderServiceImpl proxy = (UserDigitalAvatarOrderServiceImpl) AopContext.currentProxy(); | UserDigitalAvatarOrderServiceImpl proxy = (UserDigitalAvatarOrderServiceImpl) AopContext.currentProxy(); | ||||
proxy.handlePhoto(record,result.getImgList()); | proxy.handlePhoto(record,result.getImgList()); | ||||
@@ -21,9 +21,48 @@ public class AiDigitalAvatarHelper { | |||||
this.digital_avatar = digital_avatar; | this.digital_avatar = digital_avatar; | ||||
} | } | ||||
private static String callbackUrl; | |||||
@Value("${photo.callbackUrl}") | |||||
public void setCallbackUrl(String callbackUrl){ | |||||
this.callbackUrl = callbackUrl; | |||||
} | |||||
public static DigitalAvatarResult digitalAvatarPhoto(DigitalAvatarParam param) { | |||||
public static AiCheckPhotoResult checkPhoto(AiCheckPhotoParam param) { | |||||
String response = HttpUtil.doAiVideoPost(digital_avatar + "/dec_face", JSONObject.toJSONString(param)); | |||||
log.info("图片人脸检测 end response:" + response); | |||||
AiCheckPhotoResult result = new AiCheckPhotoResult(); | |||||
if (StringUtils.isBlank(response)) { | |||||
result.setSuccess(false); | |||||
result.setMsg("(MetaService)图片人脸检测失败,请稍后重试"); | |||||
return result; | |||||
} | |||||
JSONObject jsonObject = JSON.parseObject(response); | |||||
JSONObject status = jsonObject.getJSONObject("status"); | |||||
Integer code = status.getInteger("code"); | |||||
String msg = status.getString("msg"); | |||||
if (code == null) { | |||||
result.setSuccess(false); | |||||
result.setMsg("(MetaService)图片人脸检测失败,请稍后重试"); | |||||
return result; | |||||
} | |||||
if (code.intValue() == 1000) { | |||||
result.setCode(code); | |||||
result.setSuccess(true); | |||||
result.setMsg(msg); | |||||
} else { | |||||
result.setCode(code); | |||||
result.setSuccess(false); | |||||
result.setMsg(msg); | |||||
} | |||||
return result; | |||||
} | |||||
public static DigitalAvatarResult digitalAvatarPhoto(DigitalAvatarParam param,Long taskId) { | |||||
param.setTask_id(taskId); | |||||
param.setCallback_url(callbackUrl + "/callback/photo/speak"); | |||||
// log.info("生成照片start request:" + param.getBg_img()); | // log.info("生成照片start request:" + param.getBg_img()); | ||||
String response = HttpUtil.doAiVideoPost(digital_avatar + "/make_face", JSONObject.toJSONString(param)); | String response = HttpUtil.doAiVideoPost(digital_avatar + "/make_face", JSONObject.toJSONString(param)); | ||||
log.info("生成照片end response:"+response); | log.info("生成照片end response:"+response); | ||||
@@ -45,7 +84,7 @@ public class AiDigitalAvatarHelper { | |||||
return result; | return result; | ||||
} | } | ||||
if(code.intValue() == 1000){ | |||||
if(code.intValue() == 2000){ | |||||
result.setSuccess(true); | result.setSuccess(true); | ||||
result.setMsg("success"); | result.setMsg("success"); | ||||
JSONObject data = jsonObject.getJSONObject("data"); | JSONObject data = jsonObject.getJSONObject("data"); | ||||
@@ -86,7 +125,43 @@ public class AiDigitalAvatarHelper { | |||||
return result; | return result; | ||||
} | } | ||||
if(code.intValue() == 1000){ | |||||
if(code.intValue() == 3000){ | |||||
result.setSuccess(true); | |||||
result.setMsg("success"); | |||||
JSONObject data = jsonObject.getJSONObject("data"); | |||||
result.setImg(data.getString("img")); | |||||
}else{ | |||||
result.setSuccess(false); | |||||
result.setMsg("[metavatar]"+status.getString("msg")); | |||||
} | |||||
return result; | |||||
} | |||||
public static ShareImgResult createShareImg(ShareImgParam param) { | |||||
// log.info("生成照片start request:" + param.getBg_img()); | |||||
String response = HttpUtil.doAiVideoPost(digital_avatar + "/logo_img", JSONObject.toJSONString(param)); | |||||
log.info("照片超分end response:"+response); | |||||
ShareImgResult result = new ShareImgResult(); | |||||
if(StringUtils.isBlank(response)){ | |||||
result.setSuccess(false); | |||||
result.setMsg("[metavatar]请求异常,请稍后重试"); | |||||
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("[metavatar]请求异常,请稍后重试"); | |||||
return result; | |||||
} | |||||
if(code.intValue() == 4000){ | |||||
result.setSuccess(true); | result.setSuccess(true); | ||||
result.setMsg("success"); | result.setMsg("success"); | ||||
JSONObject data = jsonObject.getJSONObject("data"); | JSONObject data = jsonObject.getJSONObject("data"); | ||||
@@ -15,4 +15,8 @@ public class DigitalAvatarParam { | |||||
private String img_middle; | private String img_middle; | ||||
private String img_right; | private String img_right; | ||||
private Long task_id; | |||||
private String callback_url; | |||||
} | } |
@@ -0,0 +1,12 @@ | |||||
package com.iformall.sm; | |||||
import lombok.Data; | |||||
@Data | |||||
public class ShareImgParam { | |||||
private String img; | |||||
private String watermark_img; | |||||
} |
@@ -0,0 +1,13 @@ | |||||
package com.iformall.sm; | |||||
import lombok.Data; | |||||
@Data | |||||
public class ShareImgResult { | |||||
private boolean success; | |||||
private String msg; | |||||
private String img; | |||||
} |