我用python给女朋友翻译化妆品标签

手撕代码八百里 2021-04-08 13:23:20
化妆品 Python 翻译 朋友 女朋友


Python批量图片识别并翻译——我用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') # 读取文件内容,转换为base64编码
f.close()
data = {
}
# data['from'] = '源语言'
# data['to'] = '目标语言'
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

版权声明
本文为[手撕代码八百里]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_17623363/article/details/109666880

  1. Python spatial analysis | 01 using Python to calculate global Moran's index
  2. python入门教程13-05 (python语法入门之数据备份、pymysql模块)
  3. Introduction to Python 13-05 (data backup and pymysql module of introduction to Python syntax)
  4. pandas如何操作Excel?还不会的,看此一篇足矣
  5. How does panda operate excel? Not yet. This is enough
  6. 用python连接数据库模拟用户登录
  7. Using Python to connect database to simulate user login
  8. python入门教程13-04 (语法入门之记录相关操作)
  9. Introduction to Python 13-04
  10. python入门教程13-03 (python语法入门之表相关操作)
  11. Introduction to Python 13-03
  12. python的多线程的网络爬虫,待改进
  13. Python multithreaded web crawler, to be improved
  14. 常见加密算法的Python实现:
  15. Python implementation of common encryption algorithms:
  16. python刷题-核桃的数量
  17. Number of walnuts
  18. Python爬虫知乎文章,采集新闻60秒
  19. Python crawler knows articles and collects news for 60 seconds
  20. Python爬虫知乎文章,采集新闻60秒
  21. Python crawler knows articles and collects news for 60 seconds
  22. bbox_overlaps python
  23. bbox_ overlaps python
  24. 7-43 jmu-python-字符串异常处理 (20 分)
  25. 7-43 JMU Python string exception handling (20 points)
  26. n行Python代码系列:两行代码实现视频文件转成系列图片输出
  27. N-line Python code series: two lines of code to achieve video files into a series of pictures output
  28. python-阶乘计算
  29. Python factorial calculation
  30. Python实现定时发送微信消息
  31. python爬取英雄联盟所有英雄皮肤海报
  32. Sending wechat messages regularly with Python
  33. Python crawls all hero skin posters of hero League
  34. 上手Pandas,带你玩转数据(4)-- 数据清洗
  35. Hands on pandas, take you to play with data (4) -- data cleaning
  36. Python继续霸榜,上古语言Cobol重获关注,IEEE 2020编程语言榜单揭晓
  37. 教你用 Python 下载手机小视频
  38. Python continues to dominate the list, ancient language COBOL regains attention, IEEE 2020 programming language list announced
  39. How to download small video of mobile phone with Python
  40. 如何用 Python 在京东上抢口罩
  41. How to use Python to grab masks in Jingdong
  42. arcgis10.2自带的python安装第三方库
  43. 学习Python,你看这篇就够了 | 【详细】Python基础(二)
  44. ArcGIS 10.2 comes with a third-party library for installing Python
  45. Learn python, you see this is enough | [detailed] Python Foundation (2)
  46. 盘点 Django 展示可视化图表的多种方式(建议收藏)
  47. 第123天: Web 开发 Django 管理工具
  48. 盘点 Django 展示可视化图表的多种方式(建议收藏)
  49. python utc时间转北京时间
  50. 想在Python中将Excel文件转换为PDF?来看看这份Aspose.Cells指南
  51. [practice] Python nn.Transformer Mask understanding of
  52. anchors_plane python
  53. python逗号bug
  54. 第115天:Python 到底是值传递还是引用传递
  55. 第118天:Python 之对象的比较与拷贝
  56. 第119天:Python 爬取豆瓣电影 top 250
  57. 从 0 学习 Python 0 - 120 大合集总结
  58. 第124天: Web 开发 Django 模板
  59. Check various ways of displaying visual charts in Django
  60. Python自动化运维工具-Fabric部署及使用总结