package io.loli.box.green;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.green.model.v20160621.ImageDetectionRequest;
import com.aliyuncs.green.model.v20160621.ImageDetectionResponse;
import com.aliyuncs.green.model.v20160621.ImageResultRequest;
import com.aliyuncs.green.model.v20160621.ImageResultResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import javax.annotation.PostConstruct;
import java.util.Arrays;
import java.util.List;
/**
* Created by chocotan on 2016/8/6.
*/
@ConfigurationProperties(prefix = "admin.green.aliyun")
public class AliGreenService implements GreenService {
private String key;
private String secret;
private String greenUrlPrefix;
private static final Logger logger = LoggerFactory.getLogger(AliGreenService.class);
IClientProfile profile;
IAcsClient client;
@PostConstruct
public void init() {
profile = DefaultProfile.getProfile("cn-qingdao", key, secret);
client = new DefaultAcsClient(profile);
}
@Override
public String asyncDetect(String url) {
url = greenUrlPrefix + url;
//请替换成你自己的accessKeyId、secret
ImageDetectionRequest imageDetectionRequest = new ImageDetectionRequest();
imageDetectionRequest.setAsync(true);
imageDetectionRequest.setScenes(Arrays.asList("porn"));
imageDetectionRequest.setImageUrls(Arrays.asList(url));
try {
ImageDetectionResponse imageDetectionResponse = client.getAcsResponse(imageDetectionRequest);
logger.info("Detecting image... {}^^^^{}^^^^{}", url,imageDetectionResponse.getCode(), imageDetectionResponse.getMsg());
if ("Success".equals(imageDetectionResponse.getCode())) {
List<ImageDetectionResponse.ImageResult> imageResults = imageDetectionResponse.getImageResults();
if (imageResults != null && imageResults.size() > 0) {
for (ImageDetectionResponse.ImageResult imageResult : imageResults) {
String taskId = imageResult.getTaskId();
return taskId;
}
}
} else {
logger.error("Ali green detect error, reason: {}", imageDetectionResponse.getMsg());
}
} catch (Throwable e) {
logger.error("Ali green detect error, reason: {}", ExceptionUtils.getStackTrace(e));
}
throw new RuntimeException("Ali green detect error");
}
@Override
public float getCheckResult(String taskId) {
ImageResultRequest imageResultRequest = new ImageResultRequest();
imageResultRequest.setTaskId(taskId);
try {
ImageResultResponse imageResultResponse = client.getAcsResponse(imageResultRequest);
logger.info("Getting image detection result... {}^^^^{}", imageResultResponse.getCode(), imageResultResponse.getMsg());
if ("Success".equals(imageResultResponse.getCode())
&& "TaskProcessSuccess".equals(imageResultResponse.getStatus())) {
ImageResultResponse.ImageResult imageResult = imageResultResponse.getImageResult();
ImageResultResponse.ImageResult.PornResult pornResult = imageResult.getPornResult();
if (pornResult != null) {
Integer label = pornResult.getLabel();
Float rate = pornResult.getRate();
return rate;
}
imageResult.getOcrResult();
imageResult.getIllegalResult();
} else {
logger.error("Failed to get image check result");
}
} catch (ClientException e) {
logger.error("Failed to get image check result");
throw new RuntimeException(e);
}
logger.error("Failed to get image check result");
throw new RuntimeException("Failed to get image check result");
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public String getGreenUrlPrefix() {
return greenUrlPrefix;
}
public void setGreenUrlPrefix(String greenUrlPrefix) {
this.greenUrlPrefix = greenUrlPrefix;
}
}