我用 python 给女朋友翻译化妆品标签
最近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签。美其名曰:“程序猿每天英语开发, 英文一定很好吧,来帮我翻译翻译化妆品成分”,” 来,帮我看看这个面膜建议敷几分钟 “。。。。看来斥巨资买化妆品不算完,还需要会各种英文介绍。
默默收起大学考的一摞 429 分的四级证书,我打开了 IDE。。。我打算开发一个能批量翻译的图片的 demo,把家里的各种化妆品都翻译好。机智如我,是不会自己从训练模型做起的,打开有道智云的友好的 AI 接口页面 ,果然有图片翻译服务,体验了一下可是真不错,于是果断使用。
效果展示
Demo 在这里,一起来看看效果吧:
识别过程如下:
逐个看看效果哈!make up for ever 虽然没翻译成玫珂菲,哈哈哈但是关键词长期保湿、固定喷雾都翻译出来了~~ 棒
这个更是不明觉厉, 韩文、英文混合都能翻译~~~
樱花水的表现也不错哦~
再乱入一个开起来更像包装盒的图片识别,效果不错,没受图片上文字倾斜等影响 :
调用 API 的准备工作——生成调用所需要的应用 id 和密钥
根据有道智云的接口约定,需要先在有道智云的个人页面上生成调用所需要的应用 id 和密钥,以便作为你的调用标识以及收费参考。。
具体步骤是:在有道智云的个人页面上创建实例、创建应用、绑定应用和实例,获取调用接口用到的应用的 id 和密钥。具体个人注册的过程和应用创建过程详见文章分享一次批量文件翻译的开发过程
开发过程介绍
1、api 接口介绍
先介绍下该工程的核心部分,有道智云图片翻译服务的调用接口
API HTTPS 地址:https://openapi.youdao.com/ocrtransapi
接口调用方式:POST
请求格式:表单
相应格式:JSON
接口调用参数
调用 API 需要向接口发送以下字段来访问服务。
字段名 | 类型 | 含义 | 必填 | 备注 | type | text | 文件上传类型 | True | 目前支持 Base64,请置该字段值为 1 | from | text | 源语言 | True | 参考下方的 支持语言 (可设置为 auto) | to | text | 目标语言 | True | 参考下方的 支持语言 (可设置为 auto) | appKey | text | 应用 ID | True | 可在 应用管理 查看 | salt | text | UUID | True | 1995882C5064805BC30A39829B779D7B | sign | text | 签名 | True | md5(应用 Id+q+salt + 应用密钥) | ext | text | 翻译结果音频格式,支持 mp3 | false | mp3 | q | text | 要识别的图片 | true | type 为 1 时必填, 图片的 Base64 编码 | docType | text | 服务器响应类型,目前只支持 json | false | json | render | text | 是否需要服务端返回渲染的图片,0:否;1:是,默认是 0 | false | 0 | nullIsError | text | 如果 ocr 没有检测到文字,是否返回错误,false:否;true:是,默认是 false | false | 注意是字符串 |
---|
签名生成方法如下:
1、将请求参数中的 应用ID appKey
, 图片的Base64编码 q
,UUID salt
和 应用密钥
按照 应用ID+q+salt+应用密钥
的顺序拼接得到字符串 str
。
2、对字符串 str
做 md5,得到 32 位大写的 sign
(参考 Java 生成 MD5 示例, 可点击右侧的 JAVA 示例)。
输出结果
返回的结果是 json 格式,具体说明如下:
字段名 | 字段说明 | orientation | 图片所对应的方向 | lanFrom | ocr 所识别出来认为的图片中的语言 | textAngle | 图片的倾斜角度 | errorCode | 错误码 | lanTo | 目标语言 | resRegions | 图片翻译的具体内容 | -boundingBox | 区域范围,四个值: 左上角的 x 值,左上角的 y 值,区域的的宽,区域的高 例如:134,0,1066,249 | -linesCount | 行数(用于前端排版) | -lineheight | 行高 | -context | 该区域的原文 | -linespace | 行间距 | -tranContent | 翻译结果 |
---|
2、详细开发
这个 demo 使用 python3 开发,包括 maindow.py,transclass.py,pictranslate.py 三个文件。maindow.py 主要实现界面部分,使用 python 自带的 tkinter 库,来进行图片文件选择、选择结果存放路径。transclass.py 实现了图片读取、处理等逻辑,最后通过 pictranslate.py 中的方法来调用图片翻译 API。
1、界面部分
主要元素:
root=tk.Tk()
root.title("netease youdao translation test")
frm = tk.Frame(root)
frm.grid(padx='50', pady='50')
btn_get_file = tk.Button(frm, text='选择待翻译图片', command=get_files)
btn_get_file.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')
text1 = tk.Text(frm, width='40', height='10')
text1.grid(row=0, column=1)
btn_get_result_path=tk.Button(frm,text='选择翻译结果路径',command=set_result_path)
btn_get_result_path.grid(row=1,column=0)
text2=tk.Text(frm,width='40', height='2')
text2.grid(row=1,column=1)
btn_sure=tk.Button(frm,text="翻译",command=translate_files)
btn_sure.grid(row=2,column=1)
root.mainloop()
获取待翻译图片文件的方法(此处设置的仅支持. jpg 文件):
def get_files():
files = filedialog.askopenfilenames(filetypes=[('text files', '.jpg')])
translate.file_paths=files
if files:
for file in files:
text1.insert(tk.END, file + '\n')
text1.update()
else:
print('你没有选择任何文件')
获取结果存储路径:
def set_result_path():
result_path=filedialog.askdirectory()
translate.result_root_path=result_path
text2.insert(tk.END,result_path)
翻译按钮,调用了 translate_files,该文件中的 translate_files() 方法最终调用了 translate 类的 translate_files() 方法:
def translate_files():
if translate.file_paths:
translate.translate_files()
tk.messagebox.showinfo("提示","搞定")
else :
tk.messagebox.showinfo("提示","无文件")
2、批量图片处理
transclass.py 实现了图片读取、处理等逻辑,Translate 类定义如下:
class Translate():
def __init__(self,name,file_paths,result_root_path,trans_type):
self.name=name
self.file_paths=file_paths
self.result_root_path=result_root_path
self.trans_type=trans_type
def translate_files(self):
for file_path in self.file_paths:
file_name=os.path.basename(file_path)
print('==========='+file_path+'===========')
trans_reult=self.translate_use_netease(file_path)
resul_file=open(self.result_root_path+'/result_'+file_name.split('.')[0]+'.txt','w').write(trans_reult)
def translate_use_netease(self,file_content):
result= connect(file_content)
return result
3、有道 api 调用
pictranslate.py 中封装了调用有道智云 API 的一些方法,其中最核心的是 connect() 方法,按照接口要求拼接了所需参数,发起请求并返回结果。
def connect(file_content,fromLan,toLan):
f = open(file_content, 'rb')
q = base64.b64encode(f.read()).decode('utf-8')
f.close()
data = {}
data['from'] = 'auto'
data['to'] = 'auto'
data['type'] = '1'
data['q'] = q
salt = str(uuid.uuid1())
signStr = APP_KEY + q + salt + APP_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['salt'] = salt
data['sign'] = sign
response = do_request(data)
result=json.loads(str(response.content, encoding="utf-8"))
print(result)
translateResults=result['resRegions']
print(translateResults)
pictransresult=""
for i in translateResults:
pictransresult=pictransresult+i['tranContent']+"\n"
return pictransresult
总结
又是一次愉快的开发体验,而且还是为数不多的求生成功体验 : P ,没想到借助开放平台的力量,图像识别,自然语言处理变得如此易如反掌,只要能正确发起请求,就能得到不错的翻译结果,剩下大把的时间用来和女朋友炫技,这感觉——爽!
项目地址:https://github.com/LemonQH/BatchPicTranslate
truedei.blog.csdn.net/article/det…)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!