封装提示词翻译组件

devtools/2024/10/15 0:56:30/

一、本章诉求

由于前期设计的提示词均是英文输入,后期用户要求增加中文提示词输入,这个需求更改有两个方法,一个是修改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/devtools/121328.html

相关文章

【Element-UI】实现el-drawer抽屉的左右拖拽宽度

对Element-UI的el-drawer抽屉控件实现拖拽功能。 1、新增drawer-drag.js import Vue from vueVue.directive(drawerDrag, {bind(el, binding, vnode, oldVnode) {const minWidth 400const dragDom el.querySelector(.el-drawer)dragDom.style.overflow autoconst resizeElL…

LP3718BSL封装SOP8/12W隔离开关电源芯片

概述: LP3718BSL 是一款高度集成的隔离型适配器和充电器的自供电PSR控制芯片&#xff0c;外围设计极其简单。 LP3718BSL通过外置电阻&#xff0c;可调原边峰值电流&#xff0c;再 通过变压器原副边匝比来设置输出恒流点&#xff1b;通过设 定 FB 上偏电阻和下偏电阻来设置输出恒…

【Linux庖丁解牛】—Linux基本指令(中)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a; Linux庖丁解牛 &#x1f516;克心守己&#xff0c;律己则安 目录 1、rmdir与rm指令 2、man指令 3、cp指令 4、mv指令 5、cat与tac指令 6、重定向 7、more指令 8、…

Mybatis 学习之 分页实现

文章目录 1. Mybatis1.1. 代码实现 2. Mybatis Plus2.1. 代码实现2.2. 特别注意 3. PageHelper3.1. 代码实现3.2. 特别注意 参考资料 1. Mybatis 1.1. 代码实现 package com.example.demo;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot…

滚雪球学Oracle[2.3讲]:Oracle Listener配置与管理

全文目录&#xff1a; 前言一、Oracle Listener的基础概念1.1 什么是Oracle Listener&#xff1f;Listener的作用&#xff1a; 1.2 Oracle Listener的配置文件示例listener.ora配置文件&#xff1a; 1.3 启动与管理Listener 二、多Listener配置与负载分担2.1 多Listener的应用场…

TypeScript 算法手册 【计数排序】

文章目录 1. 计数排序简介1.1 计数排序定义1.2 计数排序特点 2. 计数排序步骤过程拆解2.1 找出数组中的最大值2.2 创建计数数组2.3 统计每个数字出现的次数2.4 重建排序后的数组 3. 计数排序的优化3.1 处理负数3.2 对象数组排序案例代码和动态图 4. 计数排序的优点5. 计数排序的…

Gradle 8.4.0 配置阿里云镜像的详细指南

引言 Gradle 是一个强大的构建工具&#xff0c;广泛用于自动化构建、测试、发布等过程。然而&#xff0c;由于网络原因&#xff0c;Gradle 默认的 Maven 中央仓库访问速度可能较慢&#xff0c;特别是在中国大陆地区。为了提高依赖下载速度&#xff0c;我们可以配置 Gradle 使用…

机器学习学习笔记-20240927

文章目录 一些简单的指令数据操作广播机制 标量&#xff0c;向量&#xff0c;矩阵的相互求导1. 标量对标量的求导2. 标量对向量的求导3. 向量对标量的求导4. 向量对向量的求导5. 矩阵对标量的求导6. 矩阵对向量的求导 链式求导法则YYDS求出损失函数偏导为0时的最优解w*1. 损失函…