封装提示词翻译组件

embedded/2024/10/18 14:18:18/

一、本章诉求

由于前期设计的提示词均是英文输入,后期用户要求增加中文提示词输入,这个需求更改有两个方法,一个是修改comfyui工作流,另一个是修改前端,在前端将用户输入的中文翻译成英文,再推送到工作流中运行。
考虑到工作流功能较多,修改工作流也较为麻烦,本章选择修改前端的方式,封装一个前端vue翻译组件,实现提示词翻译功能的复用。

二、开发翻译接口

argos-translate 是一款基于OpenNMT(神经网络机器翻译框架)的离线翻译库,不依赖第三方翻译接口,支持翻译包括中文在内的 30 多种语言

python">pip install argostranslate# add by ywz 20240925 argostranslate翻译 用于提示词翻译
import argostranslate.package
import argostranslate.translatedef argos_translate(query: str) -> str:from_code = "zh"to_code = "en"argostranslate.package.update_package_index()available_packages = argostranslate.package.get_available_packages()package_to_install = next(filter(lambda x: x.from_code == from_code and x.to_code == to_code, available_packages))argostranslate.package.install_from_path(package_to_install.download())translatedText = argostranslate.translate.translate(query, from_code, to_code)return translatedText
from utils.argostranslate import argos_translate@app.get("/translate")
def translate(query: str = Query()):prompt = argos_translate(query)return prompt

三、封装前端翻译组件


<template><div><p><span style="font-size: medium; color: #333333">{{ cardTitle }}</span><span style="font-size: smaller; color: grey; margin-left: 5px">可选</span></p><a-textareav-model="inputText":placeholder="placeholder":auto-size="{ minRows: 4, maxRows: 5 }"/><p v-if="translationResult">翻译结果: {{ translationResult }}</p></div>
</template><script>export default {props: {cardTitle: {type: String,default: '',},promptFlag: {type: String,default: '',},placeholderText: {type: String,default: '',},},data() {return {inputText: '',promptFlagText: this.promptFlag,placeholder: this.placeholderText,translationResult: ''};},methods: {translate() {return new Promise((resolve, reject) => {fetch(`/seg/translate?query=${encodeURIComponent(this.inputText)}`, {method: "GET",}).then((response) => {if (!response.ok) {throw new Error('网络响应不正确');}return response.json();}).then((data) => {console.log("Success:", data);this.translationResult = dataif (this.promptFlagText === '正向') {resolve(data); // 返回结果} else {if (data != '') {let negativeInitPrompt = ",(worst quality:2.0),poorly drawn,bad anatomy,(bad proportions:1.3),ugly,disgusting,amputation,bugly,geometry,bad_prompt,multiple limbs,(bad hand:2.0),extra limb,(deformed fingers:2.0),mutated hands and fingers,disconnected limbs, geometry, bad_prompt,(missing fingers), (interlocked fingers:1.2), (extra digit and hands and fingers and legs and arms:1.4),(long fingers:1.2),(bad-artist-anime),(shinny skin, reflections on the skin, skin reflections:1.5)";resolve(data + negativeInitPrompt);} else {let negativeInitPrompt = "(worst quality:2.0),poorly drawn,bad anatomy,(bad proportions:1.3),ugly,disgusting,amputation,bugly,geometry,bad_prompt,multiple limbs,(bad hand:2.0),extra limb,(deformed fingers:2.0),mutated hands and fingers,disconnected limbs, geometry, bad_prompt,(missing fingers), (interlocked fingers:1.2), (extra digit and hands and fingers and legs and arms:1.4),(long fingers:1.2),(bad-artist-anime),(shinny skin, reflections on the skin, skin reflections:1.5)";resolve(negativeInitPrompt);}}}).catch((error) => {console.error("Error:", error);alert("'翻译出错: ' + error.message")reject('翻译出错: ' + error.message);});});},},};
</script><style scoped>* {margin: 0;}
</style>

//html
<div style="padding-left: 20px; padding-right: 20px;margin-top: 20px"><TranslationInputref="positiveTranslationInput":card-title="'正向提示词'":promptFlag="'正向'":placeholderText="'请输入正向提示词(中文)'"@translationComplete="handlePositiveTranslation"/></div><div style="padding-left: 20px; padding-right: 20px;margin-top: 20px"><TranslationInputref="negativeTranslationInput":card-title="'负向提示词'":promptFlag="'负向'":placeholderText="'请输入负向提示词(中文)'"@translationComplete="handleNegativeTranslation"/></div>//script
import TranslationInput from './TranslationInput.vue';components: {TranslationInput},confirmTranslation() {this.$refs.positiveTranslationInput.translate().then(result => {this.handlePositiveTranslation(result);this.confirmNegativeTranslation()})},confirmNegativeTranslation() {this.$refs.negativeTranslationInput.translate().then(result => {this.handleNegativeTranslation(result);this.generate()})},handlePositiveTranslation(result) {this.positive = result;},handleNegativeTranslation(result) {this.negative = result;},

http://www.ppmy.cn/embedded/121802.html

相关文章

VSOMEIP代码阅读整理(1) - 网卡状态监听

一. 概述 在routing进程所使用的配置文件中&#xff0c;存在如下配置项目&#xff1a;{"unicast" : "192.168.56.101",..."service-discovery" :{"enable" : "true","multicast" : "224.244.224.245",…

【数学分析笔记】第4章第3节 导数四则运算和反函数求导法则(2)

4. 微分 4.3 导数四则运算与反函数求导法则 双曲正弦函数 sh ⁡ x e x − e − x 2 \sh x\frac{e^x-e^{-x}}{2} shx2ex−e−x​ 双曲余弦函数 ch ⁡ x e x e − x 2 \ch x\frac{e^xe^{-x}}{2} chx2exe−x​ ch ⁡ 2 x − sh ⁡ 2 x 1 \ch^2 x-\sh^2 x1 ch2x−sh2x1 ( e…

防范.[support2022@cock.li].colony96勒索病毒:数据保护、恢复与安全意识提升

导言 在数字世界的暗流涌动中&#xff0c;.[support2022cock.li].colony96勒索病毒以其独特的智能监控技术和狡猾的传播策略&#xff0c;悄然成为网络安全领域的一颗“定时炸弹”。本文旨在深入剖析这一新型勒索病毒的运作机制&#xff0c;探索创新的数据恢复方法&#xff0c;…

【网络】web1.0 2.0 3.0各自出现背景/技术原理/演化发展过程,以及Web 3.0 对传统互联网的影响

一、web1.0 2.0 3.0各自出现背景/技术原理/演化发展过程 互联网自诞生以来&#xff0c;经历了三个主要的发展阶段&#xff1a;Web 1.0、Web 2.0 和 Web 3.0&#xff0c;每个阶段都有其独特的特点和影响。 1、Web 1.0 Web 1.0 是互联网的初始阶段&#xff0c;大约从1990年代到…

Redis: 集群测试和集群原理

集群测试 1 ) SET/GET 命令 测试 set 和 get 因为其他命令也基本相似&#xff0c;我们在 101 节点上尝试连接 103 $ /usr/local/redis/bin/redis-cli -c -a 123456 -h 192.168.10.103 -p 6376我们在插入或读取一个 key的时候&#xff0c;会对这个key做一个hash运算&#xff0c…

Ajax开发技术

什么是 Ajax&#xff1f; 概念: Asynchronous JavaScript And XML&#xff0c;异步的 JavaScript 和 XML。作用: 数据交换: 通过 Ajax 可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互: 可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更…

滚雪球学Oracle[3.4讲]:事务控制与锁管理

全文目录&#xff1a; 前言一、事务隔离级别的深入探讨1.1 事务的定义与基本特性1.2 事务隔离级别的概念1.3 各隔离级别中的问题案例演示&#xff1a;不同隔离级别的行为 1.4 隔离级别与性能的权衡 二、锁的种类与死锁问题解决2.1 锁的种类2.2 锁的粒度2.3 死锁与解决策略死锁的…

论文阅读(十一):CBAM: Convolutional Block Attention Module

文章目录 IntroductionConvolutional Block Attention ModuleExperimentsConclusion 论文题目&#xff1a;CBAM: Convolutional Block Attention Module&#xff08;CBAM&#xff1a;卷积注意力机制&#xff09;   论文链接&#xff1a;点击跳转   代码链接&#xff1a;Git…