Spaces:
Runtime error
Runtime error
import argparse | |
import random, os | |
from hashlib import md5 | |
from typing import Optional | |
import requests | |
import paddlehub as hub | |
from paddlehub.module.module import moduleinfo | |
from paddlehub.module.module import runnable | |
from paddlehub.module.module import serving | |
def make_md5(s, encoding='utf-8'): | |
return md5(s.encode(encoding)).hexdigest() | |
class BaiduTranslate: | |
def __init__(self, appid=None, appkey=None): | |
""" | |
:param appid: appid for requesting Baidu translation service. | |
:param appkey: appkey for requesting Baidu translation service. | |
""" | |
appid = os.environ.get('baidu_translate_appid') | |
appkey = os.environ.get('baidu_translate_appkey') | |
# Set your own appid/appkey. | |
if appid is None: | |
self.appid = '' | |
else: | |
self.appid = appid | |
if appkey is None: | |
self.appkey = '' | |
else: | |
self.appkey = appkey | |
self.url = 'http://api.fanyi.baidu.com/api/trans/vip/translate' | |
def translate(self, query: str, from_lang: Optional[str] = "en", to_lang: Optional[int] = "zh"): | |
""" | |
Create image by text prompts using ErnieVilG model. | |
:param query: Text to be translated. | |
:param from_lang: Source language. | |
:param to_lang: Dst language. | |
Return translated string. | |
""" | |
# Generate salt and sign | |
salt = random.randint(32768, 65536) | |
sign = make_md5(self.appid + query + str(salt) + self.appkey) | |
# Build request | |
headers = {'Content-Type': 'application/x-www-form-urlencoded'} | |
payload = {'appid': self.appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign} | |
# Send request | |
try: | |
r = requests.post(self.url, params=payload, headers=headers) | |
result = r.json() | |
except Exception as e: | |
error_msg = str(e) | |
raise RuntimeError(error_msg) | |
if 'error_code' in result: | |
raise RuntimeError(result['error_msg']) | |
return result['trans_result'][0]['dst'] | |
def run_cmd(self, argvs): | |
""" | |
Run as a command. | |
""" | |
self.parser = argparse.ArgumentParser(description="Run the {} module.".format(self.name), | |
prog='hub run {}'.format(self.name), | |
usage='%(prog)s', | |
add_help=True) | |
self.arg_input_group = self.parser.add_argument_group(title="Input options", description="Input data. Required") | |
self.add_module_input_arg() | |
args = self.parser.parse_args(argvs) | |
if args.appid is not None and args.appkey is not None: | |
self.appid = args.appid | |
self.appkey = args.appkey | |
result = self.translate(args.query, args.from_lang, args.to_lang) | |
return result | |
def serving_method(self, query, from_lang, to_lang): | |
""" | |
Run as a service. | |
""" | |
return self.translate(query, from_lang, to_lang) | |
def add_module_input_arg(self): | |
""" | |
Add the command input options. | |
""" | |
self.arg_input_group.add_argument('--query', type=str) | |
self.arg_input_group.add_argument('--from_lang', type=str, default='en', help="源语言") | |
self.arg_input_group.add_argument('--to_lang', type=str, default='zh', help="目标语言") | |
self.arg_input_group.add_argument('--appid', type=str, default=None, help="注册得到的个人appid") | |
self.arg_input_group.add_argument('--appkey', type=str, default=None, help="注册得到的个人appkey") | |