Browse Source

视频审核API暂存2

dev
yinzuomei 5 years ago
parent
commit
62c88286bd
  1. 25
      epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/controller/ScanController.java
  2. 18
      epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/service/impl/ScanService.java
  3. 138
      epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/service/impl/ScanServiceImpl.java

25
epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/controller/ScanController.java

@ -6,10 +6,14 @@ import com.epmet.openapi.scan.service.impl.ScanService;
import com.epmet.openapi.scan.support.param.ImgScanParam; import com.epmet.openapi.scan.support.param.ImgScanParam;
import com.epmet.openapi.scan.support.param.TextScanParam; import com.epmet.openapi.scan.support.param.TextScanParam;
import com.epmet.openapi.scan.support.param.VoiceAsyncScanParam; import com.epmet.openapi.scan.support.param.VoiceAsyncScanParam;
import com.epmet.openapi.scan.support.param.video.VideoAsyncScanParam;
import com.epmet.openapi.scan.support.result.ImgAsyncScanResult; import com.epmet.openapi.scan.support.result.ImgAsyncScanResult;
import com.epmet.openapi.scan.support.result.SyncScanResult; import com.epmet.openapi.scan.support.result.SyncScanResult;
import com.epmet.openapi.scan.support.result.VoiceAsyncScanResult; import com.epmet.openapi.scan.support.result.VoiceAsyncScanResult;
import com.epmet.openapi.scan.support.result.VoiceAsyncScanTaskResult; import com.epmet.openapi.scan.support.result.VoiceAsyncScanTaskResult;
import com.epmet.openapi.scan.support.result.video.VideoAsyncScanTaskResultDTO;
import com.epmet.openapi.scan.support.result.video.VideoResultDTO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -81,4 +85,25 @@ public class ScanController {
return scanService.voiceResults(taskIds); return scanService.voiceResults(taskIds);
} }
/**
* @author yinzuomei
* @description 视频检测-异步检测
**/
@PostMapping("videoAsyncScan")
public Result<VideoAsyncScanTaskResultDTO> videoAsyncScan(@RequestBody VideoAsyncScanParam param) {
ValidatorUtils.validateEntity(param);
return scanService.videoAsyncScan(param);
}
/**
* @author yinzuomei
* @description 视频异步检测结果查询接口
**/
@PostMapping("videoResults")
public Result<VideoResultDTO> videoResults(@RequestBody List<String> taskIds) {
if (CollectionUtils.isEmpty(taskIds)) {
return new Result<>();
}
return scanService.videoResults(taskIds);
}
} }

18
epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/service/impl/ScanService.java

@ -4,9 +4,12 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.openapi.scan.support.param.ImgScanParam; import com.epmet.openapi.scan.support.param.ImgScanParam;
import com.epmet.openapi.scan.support.param.TextScanParam; import com.epmet.openapi.scan.support.param.TextScanParam;
import com.epmet.openapi.scan.support.param.VoiceAsyncScanParam; import com.epmet.openapi.scan.support.param.VoiceAsyncScanParam;
import com.epmet.openapi.scan.support.param.video.VideoAsyncScanParam;
import com.epmet.openapi.scan.support.result.SyncScanResult; import com.epmet.openapi.scan.support.result.SyncScanResult;
import com.epmet.openapi.scan.support.result.VoiceAsyncScanResult; import com.epmet.openapi.scan.support.result.VoiceAsyncScanResult;
import com.epmet.openapi.scan.support.result.VoiceAsyncScanTaskResult; import com.epmet.openapi.scan.support.result.VoiceAsyncScanTaskResult;
import com.epmet.openapi.scan.support.result.video.VideoAsyncScanTaskResultDTO;
import com.epmet.openapi.scan.support.result.video.VideoResultDTO;
import java.util.List; import java.util.List;
@ -48,4 +51,19 @@ public interface ScanService {
* @return com.epmet.openapi.scan.support.result.VoiceAsyncScanResult * @return com.epmet.openapi.scan.support.result.VoiceAsyncScanResult
*/ */
Result<List<VoiceAsyncScanResult>> voiceResults(List<String> taskIds); Result<List<VoiceAsyncScanResult>> voiceResults(List<String> taskIds);
/**
* desc:视频检测-异步检测
* @param videoAsyncScanParam
* @return 异步检测返回数据taskId<=>dataId
*/
Result<VideoAsyncScanTaskResultDTO> videoAsyncScan(VideoAsyncScanParam videoAsyncScanParam);
/**
* @param taskIds
* @author yinzuomei
* @description 视频异步检测结果查询接口
* @Date 2020/12/29 16:10
**/
Result<VideoResultDTO> videoResults(List<String> taskIds);
} }

138
epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/service/impl/ScanServiceImpl.java

@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.AcsRequest; import com.aliyuncs.AcsRequest;
import com.aliyuncs.green.model.v20180509.ImageSyncScanRequest; import com.aliyuncs.green.model.v20180509.*;
import com.aliyuncs.green.model.v20180509.TextScanRequest;
import com.aliyuncs.green.model.v20180509.VoiceAsyncScanRequest;
import com.aliyuncs.green.model.v20180509.VoiceAsyncScanResultsRequest;
import com.aliyuncs.http.FormatType; import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse; import com.aliyuncs.http.HttpResponse;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
@ -19,7 +16,12 @@ import com.epmet.openapi.scan.common.exception.ExecuteHttpException;
import com.epmet.openapi.scan.common.redis.RedisKeys; import com.epmet.openapi.scan.common.redis.RedisKeys;
import com.epmet.openapi.scan.common.util.IAcsClientUtil; import com.epmet.openapi.scan.common.util.IAcsClientUtil;
import com.epmet.openapi.scan.support.param.*; import com.epmet.openapi.scan.support.param.*;
import com.epmet.openapi.scan.support.param.video.VideoAsyncScanParam;
import com.epmet.openapi.scan.support.param.video.VideoAsyncScanTask;
import com.epmet.openapi.scan.support.result.*; import com.epmet.openapi.scan.support.result.*;
import com.epmet.openapi.scan.support.result.video.VideoAsyncScanTaskDataDTO;
import com.epmet.openapi.scan.support.result.video.VideoAsyncScanTaskResultDTO;
import com.epmet.openapi.scan.support.result.video.VideoResultDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -503,4 +505,132 @@ public class ScanServiceImpl implements ScanService {
return getResultsRequest; return getResultsRequest;
} }
/**
* desc:视频检测-异步检测
*
* @param videoAsyncScanParam
* @return
*/
@Override
public Result<VideoAsyncScanTaskResultDTO> videoAsyncScan(VideoAsyncScanParam videoAsyncScanParam) {
//一次至多提交100个检测对象
List<VideoAsyncScanTask> videoTasks = videoAsyncScanParam.getTasks();
if (CollectionUtils.isEmpty(videoTasks) || videoTasks.size() > SysConstant.MAX_TASK_SIZE) {
return new Result<VideoAsyncScanTaskResultDTO>().error(SysResponseEnum.SCAN_TASK_LIST_PARAM_ERROR.getCode(), SysResponseEnum.SCAN_TASK_LIST_PARAM_ERROR.getMsg().concat(SysConstant.MAX_TASK_SIZE.toString()));
}
//默认参数赋值
videoAsyncScanParam.setScenes(VideoSceneEnum.getVideoSceneList());
videoAsyncScanParam.setBizType(bizType);
videoAsyncScanParam.setAudioScenes(VoiceSceneEnum.getVoiceSceneList());
videoAsyncScanParam.setSeed(UUID.randomUUID().toString().replace("-", ""));
//API文档没写限制多少最大多少,应该与图片一致
if (videoTasks.size() <= SysConstant.MAX_SCAN_IMG_TASK_SIZE) {
return doScanVideo(videoAsyncScanParam);
}
log.info("videoAsyncScan tasks size:{} over 10", videoTasks.size());
//分组调用,一次提交10个
List<List<VideoAsyncScanTask>> partition = ListUtils.partition(videoTasks, SysConstant.MAX_SCAN_IMG_TASK_SIZE);
VideoAsyncScanTaskResultDTO finalResult = new VideoAsyncScanTaskResultDTO();
for (List<VideoAsyncScanTask> tasks : partition) {
VideoAsyncScanParam videParam = new VideoAsyncScanParam();
videParam.setBizType(videoAsyncScanParam.getBizType());
videParam.setScenes(videoAsyncScanParam.getScenes());
videParam.setTasks(tasks);
videParam.setCallback(videoAsyncScanParam.getCallback());
videParam.setSeed(videoAsyncScanParam.getSeed());
videParam.setAudioScenes(videoAsyncScanParam.getAudioScenes());
Result<VideoAsyncScanTaskResultDTO> partResult = doScanVideo(videParam);
try {
Thread.sleep(5L);
} catch (InterruptedException e) {
log.error("videoAsyncScan InterruptedException");
}
if (partResult.success()) {
VideoAsyncScanTaskResultDTO data = partResult.getData();
finalResult.setSeed(data.getSeed());
finalResult.getSuccessTasks().addAll(data.getSuccessTasks());
finalResult.getFailTasks().addAll(data.getFailTasks());
} else {
return partResult;
}
}
return new Result<VideoAsyncScanTaskResultDTO>().ok(finalResult);
}
private Result<VideoAsyncScanTaskResultDTO> doScanVideo(VideoAsyncScanParam videoAsyncScanParam) {
VideoAsyncScanRequest videoAsyncScanRequest = getVideoAsyncScanRequest();
try {
videoAsyncScanRequest.setHttpContent(JSON.toJSONString(videoAsyncScanParam).getBytes(SysConstant.UTF8), SysConstant.UTF8, FormatType.JSON);
} catch (UnsupportedEncodingException e) {
log.error("doScanVideo parse param exception", e);
return new Result<VideoAsyncScanTaskResultDTO>().error(SysResponseEnum.SCAN_PARAM_ERROR.getCode(), SysResponseEnum.SCAN_PARAM_ERROR.getMsg());
}
try {
VideoAsyncScanTaskResultDTO scanResult = executeAsyncVideo(videoAsyncScanRequest);
scanResult.setSeed(videoAsyncScanParam.getSeed());
return new Result<VideoAsyncScanTaskResultDTO>().ok(scanResult);
} catch (ExecuteHttpException e) {
log.error("doScanVideo execute exception,param:{},fail msg:{}", JSON.toJSONString(videoAsyncScanParam), e.getMsg());
return new Result<VideoAsyncScanTaskResultDTO>().error(e.getCode(), e.getMsg());
}
}
private VideoAsyncScanRequest getVideoAsyncScanRequest() {
VideoAsyncScanRequest videoAsyncScanRequest = new VideoAsyncScanRequest();
videoAsyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
videoAsyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定请求方法。
/**
* 请务必设置超时时间
*/
videoAsyncScanRequest.setConnectTimeout(3000);
videoAsyncScanRequest.setReadTimeout(6000);
return videoAsyncScanRequest;
}
private VideoAsyncScanTaskResultDTO executeAsyncVideo(VideoAsyncScanRequest videoAsyncScanRequest) {
try {
HttpResponse httpResponse = IAcsClientUtil.getIAcsClient().doAction(videoAsyncScanRequest);
if (httpResponse.isSuccess()) {
JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
if (HttpStatus.SC_OK == scrResponse.getInteger(SysConstant.CODE)) {
//获取data列表
JSONArray dataResults = scrResponse.getJSONArray(SysConstant.DATA);
List<VideoAsyncScanTaskDataDTO> dataList = dataResults.toJavaList(VideoAsyncScanTaskDataDTO.class);
VideoAsyncScanTaskResultDTO result=new VideoAsyncScanTaskResultDTO();
dataList.forEach(data->{
if (HttpStatus.SC_OK == data.getCode()) {
result.getSuccessTasks().add(data);
} else {
result.getFailTasks().add(data);
}
});
return result;
} else {
log.warn("executeAsyncVideo detect not success. code:{}", scrResponse.getInteger(SysConstant.CODE));
throw new ExecuteHttpException(SysResponseEnum.THIRD_PLATFORM_RESP_CODE_ERROR.getCode(),
SysResponseEnum.THIRD_PLATFORM_RESP_CODE_ERROR.getMsg() + ",status:" + httpResponse.getStatus());
}
} else {
log.warn("executeAsyncVideo response status is not success. httpResponse:{}", JSON.toJSONString(httpResponse));
throw new ExecuteHttpException(SysResponseEnum.THIRD_PLATFORM_RESP_STATUS_ERROR.getCode(),
SysResponseEnum.THIRD_PLATFORM_RESP_STATUS_ERROR.getMsg() + ",status:" + httpResponse.getStatus());
}
} catch (Exception e) {
log.error("executeAsyncVideo exception IAcsClientUtil do action exception", e);
throw new ExecuteHttpException(SysResponseEnum.THIRD_PLATFORM_SERVER_ERROR.getCode(), SysResponseEnum.THIRD_PLATFORM_SERVER_ERROR.getMsg());
}
}
/**
* @param taskIds
* @author yinzuomei
* @description 视频异步检测结果查询接口
* @Date 2020/12/29 16:10
**/
@Override
public Result<VideoResultDTO> videoResults(List<String> taskIds) {
//todo 未完待续
return null;
}
} }

Loading…
Cancel
Save