python实现批量图⽚识别并翻译
近⼩编遇到⼀个⽣存问题,⼥朋友让我给她翻译英⽂化妆品标签。美其名⽈:"程序猿每天英语开发,英⽂⼀定很好吧,来帮我翻译翻译化妆品成分",”来,帮我看看这个⾯膜建议敷⼏分钟“。。。。看来斥巨资买化妆品不算完,还需要会各种英⽂介绍。
默默收起⼤学考的⼀摞429分的四级证书,我打开了IDE。。。我打算开发⼀个能批量翻译的图⽚的demo,把家⾥的各种化妆品都翻译好。机智如我,是不会⾃⼰从训练模型做起的,打开有道智云的友好的AI接⼝页⾯,果然有图⽚翻译服务,体验了⼀下可是真不错,于是果断使⽤。
效果展⽰
,⼀起来看看效果吧:
识别过程如下:
逐个看看效果哈!make up for ever 虽然没翻译成玫珂菲,哈哈哈但是关键词长期保湿、固定喷雾都翻译出来了~~棒
这个更是不明觉厉,韩⽂、英⽂混合都能翻译~~~
樱花⽔的表现也不错哦~
再乱⼊⼀个开起来更像包装盒的图⽚识别,效果不错,没受图⽚上⽂字倾斜等影响:
调⽤API的准备⼯作——⽣成调⽤所需要的应⽤id和密钥
根据有道智云的接⼝约定,需要先在有道智云的个⼈页⾯上⽣成调⽤所需要的应⽤id和密钥,以便作为你的调⽤标识以及收费参考。。
具体步骤是:在有道智云的个⼈页⾯上创建实例、创建应⽤、绑定应⽤和实例,获取调⽤接⼝⽤到的应⽤的id和密钥。具体个⼈注册的过程和应⽤创建过程详见⽂章分享
开发过程介绍
1、api接⼝介绍
先介绍下该⼯程的核⼼部分,有道智云服务的调⽤接⼝
接⼝调⽤⽅式:POST
请求格式:表单
相应格式:JSON
接⼝调⽤参数
调⽤API需要向接⼝发送以下字段来访问服务。
字段名类型含义必填备注
type text⽂件上传类型True⽬前⽀持Base64,请置该字段值为1
from text源语⾔True参考下⽅的⽀持语⾔ (可设置为auto)
to text⽬标语⾔True参考下⽅的⽀持语⾔ (可设置为auto)
appKey text应⽤ID True可在应⽤管理查看
salt text UUID True1995882C5064805BC30A39829B779D7B
sign text签名True md5(应⽤Id+q+salt+应⽤密钥)
ext text翻译结果⾳频格式,⽀持mp3false mp3
q text要识别的图⽚true type为1时必填,图⽚的Base64编码
false json
docType text服务器响应类型,⽬前只⽀持
json
render text是否需要服务端返回渲染的图
⽚,0:否;1:是,默认是0
false0
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)
btn_get_file = tk.Button(frm, text='选择待翻译图⽚', command=get_files)
btn_id(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')
text1 = tk.Text(frm, width='40', height='10')
btn_get_result_path=tk.Button(frm,text='选择翻译结果路径',command=set_result_path)
btn_get_id(row=1,column=0)
text2=tk.Text(frm,width='40', height='2')
btn_sure=tk.Button(frm,text="翻译",command=translate_files)
id(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()
text2.insert(tk.END,result_path)
翻译按钮,调⽤了translate_files,该⽂件中的translate_files()⽅法最终调⽤了translate类的translate_files()⽅法:
def translate_files():
if translate.file_paths:
else :
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    # 待翻译⽂件路径
def translate_files(self):
for file_path in self.file_paths: #对批量图⽚逐个处理
file_name=os.path.basename(file_path)
print('==========='+file_path+'===========')
trans_anslate_use_netease(file_path) #对单个图⽚调⽤接⼝
resul_file=sult_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.ad()).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
python怎么读取py文件
data['salt'] = salt
data['sign'] = sign
response = do_request(data)
result=json.loads(t, encoding="utf-8"))
print(result)
translateResults=result['resRegions']
print(translateResults)
pictransresult=""
for i in translateResults:
pictransresult=pictransresult+i['tranContent']+"\n"
return pictransresult
总结
⼜是⼀次愉快的开发体验,⽽且还是为数不多的求⽣成功体验 : P ,没想到借助开放平台的⼒量,图像识别,⾃然语⾔处理变得如此易如反掌,只要能正确发起请求,就能得到不错的翻译结果,剩下⼤把的时间⽤来和⼥朋友炫技,这感觉——爽!
以上就是python 实现批量图⽚识别并翻译的详细内容,更多关于python 图⽚识别并翻译的资料请关注其它相关⽂章!