开通数据万象服务
对上传到腾讯云COS的图片进行审核
①、司机微服务模块中
java
public interface CiService{
//图片审核
Boolean imageAuditing(String path);
}
java
@Service
public class CiServiceImpl implements CiService{
@Autowried
private TencentCloudProperties tencentCloudProperties;
@Override
public Boolean imageAuditing(String path){
//创建任务请求对象
ImageAuditingRequest request = new ImageAuditingRequest();
//添加请求参数
request.setBucketName(tencentCloudProperties.getBucketPrivate());
request.setBizType();//设置请求策略(不传,为默认策略)
request.setObjectKey(path);//设置bucket中的图片位置
COSClient client = this.getCosClient();
ImageAuditingResponse response = client.imageAuditing(request);
cosClient.shutdown();
//上传之后,进行图片审核
Boolean imageAuditing = ciService.imageAuditing(uploadPath);
if(!imageAuditing){
//如果图片违规,删除图片
cosClient.deleteObject(tencentCloudProperties.getBucketPrivate(),uploadPath);
throw new GuiguException(ResultCodeEnum.IMAGE_AUDITION_FAIL);
}
//用于返回该审核场景的审核结果,0 表示正常 1 确认为当前场景的违规内容
//2 疑似为当前场景的违规内容
if(!response.getPornInfo().getHitFlag().equals("0")
|| !response.getAdsInfo().getHitFlag().equals("0")
|| !response.getTerroristInfo().getHitFlag().equals("0")
|| !response.getProliticsInfo().getHitFlag().equals("0")){
return false;
}
return true;
}
public COSClient getCosClient(){
String secretId = tencentCloudProperties.getSecretId();
String secretKey = tencentCloudProperties.getSecretKey();
COSCredentials cred = new BasicCOSCredentials(secretId,secretKey);
//设置bucket的地域
Region region = new Region(tencentCloudProperties.getRegion());
ClientConfig clientConfig = new ClientConfig(region);
//设置使用https协议
clientConfig.setHttpProtocol(HttpProtocol.https);
//生成cos客户端
COSClient cosClient = new COSClient(cred,clientConfig);
return cosClient;
}
}
②、腾讯云COS图片增加审核
java
@Override
public CosUploadVo upload(MultipartFile file,String path){
COSClient cosClient = this.getCosClient();
//元数据信息
ObjectMetaData meta = new ObjectMetadata();
meta.setContentLength(file.getSize());
meta.setContentEncoding("UTF-8");
meta.setContentType(file.getContentType());
//向存储桶中上传文件
String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndex("."));
String uploadPath = "/driver/" + path + "/" + UUID.randomUUID().toString().replaceAll("-","") + fileType;
PutObjectRequest putObjectRequest = null;
try{
putObjectRequest = new PutObjectRequest(tencentCloudProperties.getBucketPrivate(),
uploadPath,
file.getInputStream()
meta);
}catch(IOException e){
throw new RuntimeException();
}
putObjectRequest.setStorageClass(StorageClass.Standard);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
cosClient.shutdown();
//返回vo对象
CosUploadVo cosUploadVo = new CosUploadVo();
cosUploadVo.ssetUrl(uploadPath);
//图片临时访问url,回显使用
String imageUrl = this.getImageUrl(uploadPath);
cosUploadVo.setShowUrl(imageUrl);
return cosUploadVo;
}
//获取临时签名URL,上传图片到腾讯云会生成一个临时地址
@Override
public String getImageUrl(String path){
if(!StringUtils.hasText(path)) return "";
COSClient cosClient = this.getCosClient();
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(
tencentCloudProperties.getBucketPrivate(),
path,
HttpMethodName.GET);
//设置临时URL有效期为15分钟
Date date = new DateTime().plusMinutes(15).toDate();
request.setExpiration(date);
URL url = cosClent.getneratePresignedUrl(request);
return url.toString();
cosClient.shutdown();
}
文本审核接口
语音------>文本,对文本的审核
java
@Operation
@PostMapping("/textAuditing")
publc Result<TextAuditingVo> textAuditing(@ReqeustBody String content){
return Result.ok(ciService.textAuditing(content))
}
java
@Override
public TextAuditingVo textAuditing(String content){
if(!StringUtils.hasText(content)){
TextAuditingVo textAuditingVo = new TextAuditingVo();
textAuditingVo.setResult("0");
return textAuditingVo;
}
COSClient cosClient = this.getCosClient();
//创建任务请求对象
TextAuditingRequest request = new TextAuditingRequest();
//添加请求参数,参数详情见API接口文档
request.setBucketName(tencentCloudProperties.getBucketPrivate());
byte[] encoder = Base64.encodeBase64(content.getBytes());
String contentBase64 = new String(encoder);
request.getInput().setContent(contentBase64);
request.getConf().setDetectType("all");
TextAuditingResponse response = cosClient.createAuditingTextJobs(request);
AuditingJobsDetail detail = response.getJobsDetail();
TextAuditingVo textAuditingVo = new TextAuditingVo();
if("Success".equals(detail.getState())){
//检测结果:0 审核正常 1 判定违规敏感文件 2 疑似敏感,建议人工
String result = detail.getResult();
//违规关键词
StringBuffer keywords = new StringBuffer();
List<SectionInfo> sectionInfoList = detail.getSectionList();
for(SectionInfo info:sectionInfoList){
String pornInfoKeyword = info.getPornInfo().getKeywords();
String illegalInfoKeyword = info.getIllegalInfo().getKeywords();
String abuseInfoKeyword = info.getAbuseInfo().getKeywords();
if(pornInfoKeyword.length() > 0){
keywords.append(pornInfoKeyword).append(",");
}
if(illegalInfoKeyword.length() > 0){
keywords.append(illegalInfoKeyword).append(",")
}
if(abuseInfoKeyword.leneth() > 0){
keywords.append(abuseInfoKeyword).append(",");
}
}
textAuditingVo.getResult(result);
textAuditingVo.setKeywords(keywords.toString());
}
return textAuditingVo;
}
远程调用接口
java
@PostMapping("/ci/textAuditing")
Result<TextAuditingVo> textAuditing(@RequestBody String content);
web端进行调用
java
@Operation(summary = "上传录音")
@PostMapping("/upload")
public Result<Boolean> upload(@RequestParam("file") MultipartFile file
OrderMonitorForm orderMonitorForm){
return Result.ok(monitorService.upload(file,orderMonitorForm));
}
java
@Override
public Boolean upload(MultipartFile file,OrderMonitorForm orderMonitorForm){
String url = fileService.upload(file);
OrderMonitorRecord orderMonitorRecord = new OrderMonitorRecord();
orderMonitorRecord.setOrderId(orderMonitorForm.getOrderId());
orderMonitorRecord.setFileUrl(url);
orderMonitorRecord.setContent(orderMonitorForm.getContent());
//增加文本内容的审核
TextAuditingVo textAuditingVo = ciFeignClient.textAuditing(orderMonitorForm.getContent()).getData();
orderMonitorRecord.setResult(textAuditingVo.getResult());
orderMonitorRecord.setKeywords(textAuditingVo.getKeywords());
orderMonitorFeignClient.saveMonitorRecord(orderMonitorRecord);
return true;
}