拆分think模块包
This commit is contained in:
@@ -0,0 +1,317 @@
|
||||
package com.gxwebsoft.common.core.utils;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.alibaba.fastjson2.TypeReference;
|
||||
import com.aliyun.green20220302.Client;
|
||||
import com.aliyun.green20220302.models.*;
|
||||
import com.aliyun.teaopenapi.models.Config;
|
||||
import com.aliyun.teautil.models.RuntimeOptions;
|
||||
import com.gxwebsoft.common.core.enums.GreenWebType;
|
||||
import com.gxwebsoft.common.system.vo.faceId.HeadPortraitResult;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@Component
|
||||
public class GreenWebUtils {
|
||||
private static Client contentGreenClient = null;
|
||||
|
||||
static final String accessKeyId = "LTAI5t8UTh8CTXEi2dYxobhj";
|
||||
static final String accessKeySecret = "fNdJOT4KAjrVrzHNAcSJuUCy9ZljD9";
|
||||
|
||||
static final String[] badAudioLabel = {"violence", "political_content", "sexual_content", "sexual_sounds", "contraband", "profanity", "religion", "cyberbullying", "negative_content", "specified_speaking", "specified_lyrics"};
|
||||
// static final String[] badVideoLabel = {"pornographic_adultContent","pornographic_adultToys","pornographic_artwork","pornographic_adultContent_tii","sexual_suggestiveContent","sexual_breastNudity","sexual_cleavage","sexual_femaleUnderwear","sexual_maleTopless","sexual_femaleShoulder","sexual_cartoon","sexual_pregnancy","sexual_underage","political_politicalFigure_1","political_politicalFigure_2","political_politicalFigure_3","political_politicalFigure_name_tii",""};
|
||||
|
||||
private static class ContentGreenClientHolder {
|
||||
private static final Client INSTANCE = createContentGreenClient();
|
||||
}
|
||||
|
||||
private static Client createContentGreenClient() {
|
||||
Config config = new Config();
|
||||
config.setAccessKeyId(accessKeyId);
|
||||
config.setAccessKeySecret(accessKeySecret);
|
||||
config.setRegionId("cn-shenzhen");
|
||||
config.setEndpoint("green-cip.cn-shenzhen.aliyuncs.com");
|
||||
config.setReadTimeout(6000);
|
||||
config.setConnectTimeout(3000);
|
||||
try {
|
||||
return new Client(config);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static Client getContentGreenClient() {
|
||||
|
||||
if (contentGreenClient == null) {
|
||||
contentGreenClient = ContentGreenClientHolder.INSTANCE;
|
||||
}
|
||||
return contentGreenClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* 文本审核
|
||||
*
|
||||
* @param text
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
public static boolean testText(String text, GreenWebType type) {
|
||||
if (!StringUtils.hasText(text)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
JSONObject serviceParameters = new JSONObject();
|
||||
serviceParameters.put("content", text);
|
||||
|
||||
// 创建RuntimeObject实例并设置运行参数。
|
||||
RuntimeOptions runtime = new RuntimeOptions();
|
||||
runtime.readTimeout = 10000;
|
||||
runtime.connectTimeout = 10000;
|
||||
|
||||
TextModerationRequest textModerationRequest = new TextModerationRequest();
|
||||
textModerationRequest.setService(type.name());
|
||||
textModerationRequest.setServiceParameters(serviceParameters.toJSONString());
|
||||
|
||||
// try {
|
||||
TextModerationResponse response = null;
|
||||
try {
|
||||
response = getContentGreenClient().textModerationWithOptions(textModerationRequest, runtime);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
if (response.statusCode != 200) {
|
||||
return false;
|
||||
}
|
||||
|
||||
TextModerationResponseBody result = response.getBody();
|
||||
Integer code = result.getCode();
|
||||
if (code != null && code == 200) {
|
||||
TextModerationResponseBody.TextModerationResponseBodyData data = result.getData();
|
||||
return !StringUtils.hasText(data.getReason());
|
||||
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 图片审核
|
||||
*
|
||||
* @param imgUrl
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
|
||||
public static boolean testImage(String imgUrl, GreenWebType type) {
|
||||
|
||||
if(!imgUrl.contains("?x-oss-process=image/resize")) {
|
||||
imgUrl += "?x-oss-process=image/resize,w_750/quality,Q_90";
|
||||
}
|
||||
|
||||
Map<String, String> serviceParameters = new HashMap<>();
|
||||
//公网可访问的URL。
|
||||
serviceParameters.put("imageUrl", imgUrl);
|
||||
serviceParameters.put("dataId", UUID.randomUUID().toString());
|
||||
|
||||
ImageModerationRequest request = new ImageModerationRequest();
|
||||
// 图片检测service: baselineCheck通用基线检测。
|
||||
request.setService(type.name());
|
||||
request.setServiceParameters(JSON.toJSONString(serviceParameters));
|
||||
|
||||
RuntimeOptions runtime = new RuntimeOptions();
|
||||
runtime.readTimeout = 10000;
|
||||
runtime.connectTimeout = 10000;
|
||||
ImageModerationResponse response = null;
|
||||
try {
|
||||
response = getContentGreenClient().imageModerationWithOptions(request, runtime);
|
||||
System.out.println(response);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
ImageModerationResponseBody body = response.getBody();
|
||||
|
||||
String[] unSafeLabelArr = {"pornographic_adultContent_tii","pornographic_adultContent","sexual_suggestiveContent",""};
|
||||
if (body.getCode() == 200) {
|
||||
ImageModerationResponseBody.ImageModerationResponseBodyData data = body.getData();
|
||||
System.out.println("dataId=" + data.getDataId());
|
||||
List<ImageModerationResponseBody.ImageModerationResponseBodyDataResult> results = data.getResult();
|
||||
for (ImageModerationResponseBody.ImageModerationResponseBodyDataResult result : results) {
|
||||
|
||||
if (!"nonLabel".equals(result.getLabel())) {
|
||||
System.out.println(String.format("Label: %s,Confidence: %f",result.getLabel(),result.getConfidence()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 视频审核(异步)
|
||||
*
|
||||
* @param videoUrl
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
public static String testVideo(String videoUrl, GreenWebType type) {
|
||||
|
||||
JSONObject serviceParameters = new JSONObject();
|
||||
serviceParameters.put("url", videoUrl);
|
||||
|
||||
VideoModerationRequest videoModerationRequest = new VideoModerationRequest();
|
||||
// 检测类型:videoDetection
|
||||
videoModerationRequest.setService(type.name());
|
||||
videoModerationRequest.setServiceParameters(serviceParameters.toJSONString());
|
||||
|
||||
|
||||
try {
|
||||
VideoModerationResponse response = getContentGreenClient().videoModeration(videoModerationRequest);
|
||||
if (response.getStatusCode() == 200) {
|
||||
VideoModerationResponseBody result = response.getBody();
|
||||
System.out.println(JSON.toJSONString(result));
|
||||
System.out.println("requestId = " + result.getRequestId());
|
||||
System.out.println("code = " + result.getCode());
|
||||
System.out.println("msg = " + result.getMessage());
|
||||
Integer code = result.getCode();
|
||||
if (200 == code) {
|
||||
VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData();
|
||||
return data.taskId;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取视频审核结果
|
||||
*
|
||||
* @param taskId
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
public static boolean getTestVideoResult(String taskId, GreenWebType type) {
|
||||
|
||||
|
||||
JSONObject serviceParameters = new JSONObject();
|
||||
// 提交任务时返回的taskId。
|
||||
serviceParameters.put("taskId", taskId);
|
||||
VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest();
|
||||
videoModerationResultRequest.setService(type.name());
|
||||
videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
|
||||
try {
|
||||
VideoModerationResultResponse response = getContentGreenClient().videoModerationResult(videoModerationResultRequest);
|
||||
if (response.getStatusCode() == 200) {
|
||||
VideoModerationResultResponseBody result = response.getBody();
|
||||
System.out.println("requestId=" + result.getRequestId());
|
||||
System.out.println("code=" + result.getCode());
|
||||
System.out.println("msg=" + result.getMessage());
|
||||
if (200 == result.getCode()) {
|
||||
VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData();
|
||||
VideoModerationResultResponseBody.VideoModerationResultResponseBodyDataAudioResult audioResult = data.getAudioResult();
|
||||
VideoModerationResultResponseBody.VideoModerationResultResponseBodyDataFrameResult frameResult = data.getFrameResult();
|
||||
boolean hasBadAudio = audioResult.sliceDetails.stream().filter(w -> {
|
||||
String labels = w.getLabels();
|
||||
String[] labelArr = labels.split(",");
|
||||
return Arrays.stream(labelArr).filter(l -> {
|
||||
return Arrays.stream(badAudioLabel).filter(b -> b.equals(l)).findFirst().isPresent();
|
||||
}).findFirst().isPresent();
|
||||
}).findFirst().isPresent();
|
||||
if (hasBadAudio) {
|
||||
return false;
|
||||
}
|
||||
boolean hasBadVideo = frameResult.getFrames().stream().filter(w -> {
|
||||
return w.getResults().stream().filter(r -> {
|
||||
return r.getResult().stream().filter(r2 -> {
|
||||
return !"nonLabel".equals(r2.label);
|
||||
}).findFirst().isPresent();
|
||||
}).findFirst().isPresent();
|
||||
}).findFirst().isPresent();
|
||||
if (hasBadVideo) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 鉴别头像是否是真人头像(非卡通) 2. 鉴别图片是否有性感,色情信息 3. 鉴别头像是否有广告,敏感信息,以及二维码等 4. 鉴别头像性别。
|
||||
*
|
||||
* @param imageBase64
|
||||
* @param imageType
|
||||
* @param genter
|
||||
* @return
|
||||
*/
|
||||
public static boolean testAvatar(String imageBase64, String imageType, Integer genter) {
|
||||
String host = "https://edishead.market.alicloudapi.com";
|
||||
String path = "/faceId/headPortrait/getResult";
|
||||
String method = "POST";
|
||||
String appcode = "566b5786c5874464909d8c0b7f64cdc7";
|
||||
Map<String, String> headers = new HashMap<String, String>();
|
||||
//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
|
||||
headers.put("Authorization", "APPCODE " + appcode);
|
||||
//根据API的要求,定义相对应的Content-Type
|
||||
headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
|
||||
Map<String, String> querys = new HashMap<String, String>();
|
||||
Map<String, String> bodys = new HashMap<String, String>();
|
||||
bodys.put("image", imageBase64);
|
||||
bodys.put("imageType", imageType);
|
||||
HttpResponse response = null;
|
||||
try {
|
||||
response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
|
||||
HttpEntity entity = response.getEntity();
|
||||
String string = EntityUtils.toString(entity);
|
||||
HeadPortraitResult result = JSONObject.parseObject(string, new TypeReference<HeadPortraitResult>() {
|
||||
});
|
||||
if (!"0000".equals(result.getCode())) {
|
||||
return false;
|
||||
}
|
||||
if (!"normal".equals(result.getPorn()) || !"normal".equals(result.getAd())) {
|
||||
return false;
|
||||
}
|
||||
if (result.getFaceCount() != 1 || result.getCartoonImg()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!genter.equals(result.getGenterList()[0])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
System.out.println(response.toString());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user