From 5b6bbf4c52cb0df666f5777e97937a377500c049 Mon Sep 17 00:00:00 2001
From: Penny <2500338766@qq.com>
Date: Mon, 24 Apr 2023 22:41:27 +0800
Subject: [PATCH] =?UTF-8?q?feature-img-1.0:=E6=9A=82=E5=AD=98=E7=BF=BB?=
=?UTF-8?q?=E8=AF=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bnyer-common/bnyer-common-core/pom.xml | 12 ++++
.../bnyer/common/core/client/TmtClient.java | 50 ++++++++++++++++
.../common/core/dto/TextTranslateDto.java | 31 ++++++++++
.../bnyer/common/core/vo/TextTranslateVo.java | 23 +++++++
bnyer-services/bnyer-img/pom.xml | 1 +
.../img/config/TencentTranslateConfig.java | 40 +++++++++++++
.../impl/StableDiffusionServiceImpl.java | 60 +++++++++++++++----
7 files changed, 204 insertions(+), 13 deletions(-)
create mode 100644 bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/client/TmtClient.java
create mode 100644 bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/TextTranslateDto.java
create mode 100644 bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/TextTranslateVo.java
create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/TencentTranslateConfig.java
diff --git a/bnyer-common/bnyer-common-core/pom.xml b/bnyer-common/bnyer-common-core/pom.xml
index e522210..b24cbb2 100644
--- a/bnyer-common/bnyer-common-core/pom.xml
+++ b/bnyer-common/bnyer-common-core/pom.xml
@@ -135,6 +135,18 @@
hutool-all
+
+
+
+
+
+
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java
+ 3.1.717
+
+
diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/client/TmtClient.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/client/TmtClient.java
new file mode 100644
index 0000000..2ef0325
--- /dev/null
+++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/client/TmtClient.java
@@ -0,0 +1,50 @@
+package com.bnyer.common.core.client;
+
+import com.bnyer.common.core.dto.TextTranslateDto;
+import com.bnyer.common.core.vo.TextTranslateVo;
+import com.google.gson.JsonSyntaxException;
+import com.google.gson.reflect.TypeToken;
+import com.tencentcloudapi.common.AbstractClient;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.JsonResponseModel;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import com.tencentcloudapi.common.profile.ClientProfile;
+
+import java.lang.reflect.Type;
+
+/**
+ * 翻译方法类
+ */
+public class TmtClient extends AbstractClient {
+ private static String endpoint = "tmt.tencentcloudapi.com";
+ private static String service = "tmt";
+ private static String version = "2018-03-21";
+
+ public TmtClient(Credential credential, String region) {
+ this(credential, region, new ClientProfile());
+ }
+
+ public TmtClient(Credential credential, String region, ClientProfile profile) {
+ super(TmtClient.endpoint, TmtClient.version, credential, region, profile);
+ }
+
+ /**
+ * 汉译英
+ * @param req TextTranslateRequest
+ * @return TextTranslateResponse
+ * @throws TencentCloudSDKException
+ */
+ public TextTranslateVo TextTranslate(TextTranslateDto req) throws TencentCloudSDKException {
+ JsonResponseModel rsp = null;
+ String rspStr = "";
+ try {
+ Type type = new TypeToken>() {
+ }.getType();
+ rspStr = this.internalRequest(req, "TextTranslate");
+ rsp = gson.fromJson(rspStr, type);
+ } catch (JsonSyntaxException e) {
+ throw new TencentCloudSDKException("response message: " + rspStr + ".\n Error message: " + e.getMessage());
+ }
+ return rsp.response;
+ }
+}
\ No newline at end of file
diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/TextTranslateDto.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/TextTranslateDto.java
new file mode 100644
index 0000000..6210ad0
--- /dev/null
+++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/TextTranslateDto.java
@@ -0,0 +1,31 @@
+package com.bnyer.common.core.dto;
+
+import com.tencentcloudapi.common.AbstractModel;
+import lombok.Data;
+
+import java.util.HashMap;
+
+/**
+ * 翻译接收参数类
+ */
+@Data
+public class TextTranslateDto extends AbstractModel {
+
+ //翻译文本
+
+ private String SourceText;
+
+ //源翻译语言
+ private String Source;
+
+ //目标翻译语言
+ private String Target;
+
+ //项目id
+ private Long ProjectId;
+
+ @Override
+ protected void toMap(HashMap hashMap, String s) {
+
+ }
+}
diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/TextTranslateVo.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/TextTranslateVo.java
new file mode 100644
index 0000000..9a656d9
--- /dev/null
+++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/TextTranslateVo.java
@@ -0,0 +1,23 @@
+package com.bnyer.common.core.vo;
+
+import lombok.Data;
+
+/**
+ * 翻译接收响应类
+ */
+@Data
+public class TextTranslateVo {
+
+ //翻译后的文本
+ private String TargetText;
+
+ //源翻译语言
+ private String Source;
+
+ //目标翻译语言
+ private String Target;
+
+ //请求id
+ private String RequestId;
+
+}
diff --git a/bnyer-services/bnyer-img/pom.xml b/bnyer-services/bnyer-img/pom.xml
index 63cd400..dcb287e 100644
--- a/bnyer-services/bnyer-img/pom.xml
+++ b/bnyer-services/bnyer-img/pom.xml
@@ -128,6 +128,7 @@
com.alipay.sdk
alipay-sdk-java
+
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/TencentTranslateConfig.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/TencentTranslateConfig.java
new file mode 100644
index 0000000..72f05b3
--- /dev/null
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/TencentTranslateConfig.java
@@ -0,0 +1,40 @@
+package com.bnyer.img.config;
+
+//import com.bnyer.img.handler.TokenCheckHandler;
+
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 腾讯翻译api配置类
+ * @author chengkun
+ * @date 2023/4/21 17:43
+ */
+@Configuration
+@ConfigurationProperties(prefix = "translate")
+@Getter
+@RefreshScope
+public class TencentTranslateConfig {
+
+ @Value("${translate.url}")
+ private String url;
+
+ @Value("${translate.secretId}")
+ private String secretId;
+
+ @Value("${translate.secretKey}")
+ private String secretKey;
+
+ @Value("${translate.region}")
+ private String region;
+
+ @Value("${translate.projectId}")
+ private String projectId;
+
+
+
+
+}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/StableDiffusionServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/StableDiffusionServiceImpl.java
index 1fccd3a..2426bde 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/StableDiffusionServiceImpl.java
+++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/StableDiffusionServiceImpl.java
@@ -3,19 +3,24 @@ package com.bnyer.img.service.impl;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.bnyer.common.core.client.TmtClient;
import com.bnyer.common.core.constant.RedisKeyConstant;
import com.bnyer.common.core.domain.AiPaint;
-import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.dto.TextToImgDto;
+import com.bnyer.common.core.dto.TextTranslateDto;
import com.bnyer.common.core.utils.TranslateUtils;
import com.bnyer.common.core.utils.file.Base64ToMultipartFileUtils;
-import com.bnyer.common.core.utils.file.ImageUtils;
import com.bnyer.common.core.vo.TextToImgVo;
+import com.bnyer.common.core.vo.TextTranslateVo;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.file.api.RemoteFileService;
+import com.bnyer.img.config.TencentTranslateConfig;
import com.bnyer.img.service.AiPaintService;
import com.bnyer.img.service.StableDiffusionService;
-import com.bnyer.system.api.RemoteSystemFileService;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -44,25 +49,54 @@ public class StableDiffusionServiceImpl implements StableDiffusionService {
@Autowired
private RedisService redisService;
+ @Autowired
+ private TencentTranslateConfig tencentTranslateConfig;
+
+ private String translate(String text){
+ try{
+ Credential cred = new Credential(tencentTranslateConfig.getSecretId(), tencentTranslateConfig.getSecretKey());
+ // 实例化一个http选项,可选的,没有特殊需求可以跳过
+ HttpProfile httpProfile = new HttpProfile();
+ httpProfile.setEndpoint(tencentTranslateConfig.getUrl());
+ // 实例化一个client选项,可选的,没有特殊需求可以跳过
+ ClientProfile clientProfile = new ClientProfile();
+ clientProfile.setHttpProfile(httpProfile);
+ // 实例化要请求产品的client对象,clientProfile是可选的
+ TmtClient client = new TmtClient(cred, tencentTranslateConfig.getRegion(), clientProfile);
+ // 实例化一个请求对象,每个接口都会对应一个request对象
+ TextTranslateDto req = new TextTranslateDto();
+ req.setSourceText(text);
+ req.setSource("zh");
+ req.setTarget("en");
+ req.setProjectId(Long.parseLong(tencentTranslateConfig.getProjectId()));
+ // 返回的resp是一个TextTranslateResponse的实例,与请求对象对应
+ TextTranslateVo resp = client.TextTranslate(req);
+ return resp.getTargetText();
+ } catch (TencentCloudSDKException e) {
+ log.error("调用腾讯api失败"+e.toString());
+ }
+ return "";
+ }
+
@Override
public TextToImgVo textToImg(TextToImgDto param) {
try{
- //String prompt = "";
+ String prompt = "";
//判断prompt是否包含中文,中文则翻译,否则跳过
-// if(TranslateUtils.isContainChinese(param.getPrompt())){
-// //调用翻译api
-// //prompt =
-// prompt = param.getPrompt();
-// }else{
-// prompt = param.getPrompt();
-// }
+ if(TranslateUtils.isContainChinese(param.getPrompt())){
+ //调用翻译api
+ prompt = translate(param.getPrompt());
+ }else{
+ prompt = param.getPrompt();
+ }
+ System.out.println(prompt);
//TODO 根据选择的风格来选择模型
Map map = new HashMap<>();
map.put("width",param.getWidth() == null ? 512 : param.getWidth());
map.put("height",param.getHeight() == null ? 512 : param.getHeight());
- //map.put("prompt", prompt);
- map.put("prompt", param.getPrompt());
+ map.put("prompt", prompt);
+ //map.put("prompt", param.getPrompt());
map.put("seed",-1);
map.put("batch_size",1);
map.put("cfg_scale",7);