从服务端异步翻译
This commit is contained in:
@@ -15,24 +15,15 @@ export default defineNuxtConfig({
|
|||||||
},
|
},
|
||||||
nitro: {
|
nitro: {
|
||||||
devProxy: {
|
devProxy: {
|
||||||
'/api': {
|
'/api/img': {
|
||||||
target: 'http://106.15.192.42:3000/api'
|
target: 'http://106.15.192.42:3000/api/img'
|
||||||
}
|
},
|
||||||
|
'/api/drawing': {
|
||||||
|
target: 'http://106.15.192.42:3000/api/drawing'
|
||||||
|
},
|
||||||
|
'/api/text': {
|
||||||
|
target: 'http://139.224.128.24:7861//api/text_to_text'
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
//devServer: {
|
|
||||||
// host: '106.15.192.42',
|
|
||||||
// port: 3000,
|
|
||||||
// url: 'http://106.15.192.42:3000'
|
|
||||||
//},
|
|
||||||
//vite: {
|
|
||||||
// server: {
|
|
||||||
// proxy: {
|
|
||||||
// '/api': {
|
|
||||||
// target: 'http://106.15.192.42:3000',
|
|
||||||
// changeOrigin: true
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
})
|
})
|
||||||
|
63
package-lock.json
generated
63
package-lock.json
generated
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"requires": true,
|
"name": "drawing",
|
||||||
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ampproject/remapping": {
|
"@ampproject/remapping": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
@@ -1356,6 +1358,11 @@
|
|||||||
"integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==",
|
"integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"asynckit": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||||
|
},
|
||||||
"autoprefixer": {
|
"autoprefixer": {
|
||||||
"version": "10.4.13",
|
"version": "10.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
|
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
|
||||||
@@ -1370,6 +1377,16 @@
|
|||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"axios": {
|
||||||
|
"version": "1.3.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.3.4.tgz",
|
||||||
|
"integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
|
||||||
|
"requires": {
|
||||||
|
"follow-redirects": "^1.15.0",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
|
"proxy-from-env": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"babel-walk": {
|
"babel-walk": {
|
||||||
"version": "3.0.0-canary-5",
|
"version": "3.0.0-canary-5",
|
||||||
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
|
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
|
||||||
@@ -1905,6 +1922,14 @@
|
|||||||
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
|
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"combined-stream": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"requires": {
|
||||||
|
"delayed-stream": "~1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"commander": {
|
"commander": {
|
||||||
"version": "7.2.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
|
||||||
@@ -2230,6 +2255,11 @@
|
|||||||
"integrity": "sha512-aA964RUCsBt0FGoNIlA3uFgo2hO+WWC0fiC6DBps/0SFzkKcYoM/3CzVLIa5xSsrFjdioMdYgAIbwo80qp2MoA==",
|
"integrity": "sha512-aA964RUCsBt0FGoNIlA3uFgo2hO+WWC0fiC6DBps/0SFzkKcYoM/3CzVLIa5xSsrFjdioMdYgAIbwo80qp2MoA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"delayed-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
|
||||||
|
},
|
||||||
"delegates": {
|
"delegates": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
||||||
@@ -2795,8 +2825,17 @@
|
|||||||
"follow-redirects": {
|
"follow-redirects": {
|
||||||
"version": "1.15.2",
|
"version": "1.15.2",
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
|
||||||
"dev": true
|
},
|
||||||
|
"form-data": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||||
|
"requires": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"formdata-polyfill": {
|
"formdata-polyfill": {
|
||||||
"version": "4.0.10",
|
"version": "4.0.10",
|
||||||
@@ -3869,6 +3908,19 @@
|
|||||||
"integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
|
"integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"mime-db": {
|
||||||
|
"version": "1.52.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
|
||||||
|
},
|
||||||
|
"mime-types": {
|
||||||
|
"version": "2.1.35",
|
||||||
|
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"requires": {
|
||||||
|
"mime-db": "1.52.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"mimic-fn": {
|
"mimic-fn": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
|
||||||
@@ -4835,6 +4887,11 @@
|
|||||||
"integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==",
|
"integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"proxy-from-env": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
||||||
|
},
|
||||||
"prr": {
|
"prr": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
||||||
|
@@ -22,5 +22,8 @@
|
|||||||
"url": "gitea@git.satori.love:gameui/drawing.git"
|
"url": "gitea@git.satori.love:gameui/drawing.git"
|
||||||
},
|
},
|
||||||
"author": "satori.love",
|
"author": "satori.love",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^1.3.4"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -216,7 +216,7 @@ const imageCreate = ref({
|
|||||||
const new_task = ref({
|
const new_task = ref({
|
||||||
model: 'SD2', // 模型
|
model: 'SD2', // 模型
|
||||||
ckpt: '768-v-ema', // 风格参数
|
ckpt: '768-v-ema', // 风格参数
|
||||||
prompt: 'A tabby cat, with a fluffy tail, basking in the sun, bright, warm, very cute!', // 渲染提示词
|
prompt: '一只猫, 汤姆', // 渲染提示词
|
||||||
exclude: 'puppets, death, decay, mess', // 排除词汇
|
exclude: 'puppets, death, decay, mess', // 排除词汇
|
||||||
number: 1, // 生成图片数量
|
number: 1, // 生成图片数量
|
||||||
width: 512, // 图片宽度
|
width: 512, // 图片宽度
|
||||||
@@ -282,10 +282,32 @@ const ModelsSelect = (index, model) => {
|
|||||||
imageCreate.value.models_show = false
|
imageCreate.value.models_show = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//// 判断是否为中文
|
||||||
|
//const isChinese = (str) => {
|
||||||
|
// var reg = /[\u4E00-\u9FA5\uF900-\uFA2D]/;
|
||||||
|
// return reg.test(str);
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 判断是否为英文
|
||||||
|
//const isEnglish = (str) => {
|
||||||
|
// var reg = /^[a-zA-Z]+$/;
|
||||||
|
// return reg.test(str);
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 翻译中文为英文
|
||||||
|
//const translate = async (str) => {
|
||||||
|
// let res = await fetch('/api/text?zh='+encodeURIComponent(str))
|
||||||
|
// let data = await res.json()
|
||||||
|
// return data.en
|
||||||
|
//}
|
||||||
|
|
||||||
// 提交新任务
|
// 提交新任务
|
||||||
const TaskSubmit = () => {
|
const TaskSubmit = async () => {
|
||||||
let data = new_task.value
|
const data = Object.assign({}, new_task.value) // 复制一份来修改
|
||||||
data.exclude = imageCreate.value.exclude_on ? '' : data.exclude // 是否启用排除词汇
|
//data.prompt = isChinese(data.prompt) ? await translate(data.prompt) : data.prompt // 翻译中文为英文
|
||||||
|
data.exclude = imageCreate.value.exclude_on ? data.exclude : '' // 是否启用排除词汇
|
||||||
|
console.log(data)
|
||||||
|
|
||||||
fetch('/api/drawing', {
|
fetch('/api/drawing', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {'Content-Type': 'application/json'},
|
headers: {'Content-Type': 'application/json'},
|
||||||
@@ -299,7 +321,6 @@ const TaskSubmit = () => {
|
|||||||
console.log(data.id, data.status, data.progress)
|
console.log(data.id, data.status, data.progress)
|
||||||
tasks.value = tasks.value.map(x => x.id == data.id ? data : x)
|
tasks.value = tasks.value.map(x => x.id == data.id ? data : x)
|
||||||
if (data.status == 'done') {
|
if (data.status == 'done') {
|
||||||
//data.data = ['https://storage.googleapis.com/pai-marketing/filters/elizaport_style.png']
|
|
||||||
window.clearInterval(t2)
|
window.clearInterval(t2)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
import axios from 'axios'
|
||||||
export default defineEventHandler(async event => {
|
export default defineEventHandler(async event => {
|
||||||
|
|
||||||
// 获取任务列表的状态进度(普通用户只能看到自己的)
|
// 获取任务列表的状态进度(普通用户只能看到自己的)
|
||||||
@@ -20,9 +21,18 @@ export default defineEventHandler(async event => {
|
|||||||
return tasks
|
return tasks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 翻译中文到英文
|
||||||
|
const translate = async (text: string, callback:Function) => {
|
||||||
|
if (!/^[a-zA-Z]+$/.test(text)) return
|
||||||
|
text = encodeURIComponent(text)
|
||||||
|
const {data} = await axios.get(`http://139.224.128.24:7861//api/text_to_text?zh=${text}`)
|
||||||
|
if (callback) callback(data.en)
|
||||||
|
return data.en
|
||||||
|
}
|
||||||
|
|
||||||
// 添加任务到队列(生成一个32位随机字符串作为任务ID)
|
// 添加任务到队列(生成一个32位随机字符串作为任务ID)
|
||||||
if (event.node.req.method === 'POST') {
|
if (event.node.req.method === 'POST') {
|
||||||
const {
|
let {
|
||||||
model = 'SD2', // 模型
|
model = 'SD2', // 模型
|
||||||
ckpt = '768-v-ema', // 风格
|
ckpt = '768-v-ema', // 风格
|
||||||
image = '', // 图片数据(img2img)
|
image = '', // 图片数据(img2img)
|
||||||
@@ -39,14 +49,19 @@ export default defineEventHandler(async event => {
|
|||||||
const id = Math.random().toString(36).substring(2, 34) // 生成随机任务ID
|
const id = Math.random().toString(36).substring(2, 34) // 生成随机任务ID
|
||||||
const uid = 1234567890 // 用户ID
|
const uid = 1234567890 // 用户ID
|
||||||
const createdAt = new Date().getTime() // 设定创建时间
|
const createdAt = new Date().getTime() // 设定创建时间
|
||||||
const status = 'waiting' // 任务状态
|
const status = 'translate' // 任务状态(翻译)
|
||||||
const progress = 0.00 // 任务进度
|
const progress = 0.00 // 任务进度
|
||||||
const data:any[] = [] // 生成结果
|
const data:any[] = [] // 生成结果
|
||||||
const task = { model, ckpt, image, prompt, remove, number, width, height, seed, sampler, prompt_guidance, quality_details, id, uid, createdAt, status, progress, data }
|
const task = { model, ckpt, image, prompt, remove, number, width, height, seed, sampler, prompt_guidance, quality_details, id, uid, createdAt, status, progress, data }
|
||||||
console.log('task:', task)
|
console.log('task:', task)
|
||||||
await useStorage().setItem(`task:${task.id}`, task) // 保存任务到内存
|
await useStorage().setItem(`task:${task.id}`, task) // 保存任务到内存
|
||||||
const tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
|
translate(prompt, (en: string) => {
|
||||||
console.log('tasks:', tasks)
|
task.prompt = en
|
||||||
|
task.status = 'waiting' // 任务状态(排队)
|
||||||
|
useStorage().setItem(`task:${task.id}`, task) // 修改任务状态
|
||||||
|
})
|
||||||
|
//const tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
|
||||||
|
//console.log('tasks:', tasks)
|
||||||
return task
|
return task
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user