python 实现批量图片识别并翻译


Posted in Python onNovember 02, 2020

近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签。美其名曰:"程序猿每天英语开发,英文一定很好吧,来帮我翻译翻译化妆品成分",”来,帮我看看这个面膜建议敷几分钟“。。。。看来斥巨资买化妆品不算完,还需要会各种英文介绍。

默默收起大学考的一摞429分的四级证书,我打开了IDE。。。我打算开发一个能批量翻译的图片的demo,把家里的各种化妆品都翻译好。机智如我,是不会自己从训练模型做起的,打开有道智云的友好的AI接口页面 ,果然有图片翻译服务,体验了一下可是真不错,于是果断使用。

效果展示

python 实现批量图片识别并翻译

开发过程介绍

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

以上就是python 实现批量图片识别并翻译的详细内容,更多关于python 图片识别并翻译的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python基于右递归解决八皇后问题的方法
May 25 Python
浅析python实现scrapy定时执行爬虫
Mar 04 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
Apr 18 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
Django将默认的SQLite更换为MySQL的实现
Nov 18 Python
python中with用法讲解
Feb 07 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 Python
基于python实现百度语音识别和图灵对话
Nov 02 #Python
用python进行视频剪辑
Nov 02 #Python
如何通过python实现IOU计算代码实例
Nov 02 #Python
Opencv常见图像格式Data Type及代码实例
Nov 02 #Python
Jupyter安装链接aconda实现过程图解
Nov 02 #Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 #Python
python定时截屏实现
Nov 02 #Python
You might like
谈谈PHP的输入输出流
2007/02/14 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
基于simple_html_dom的使用小结
2013/07/01 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
职工趣味运动会方案
2014/02/10 职场文书
农林环境专业求职信
2014/03/13 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
大班亲子运动会方案
2014/06/10 职场文书
日语系毕业求职信
2014/07/27 职场文书
python中如何对多变量连续赋值
2021/06/03 Python