博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python实现图片转文字并翻译至剪切板
阅读量:5076 次
发布时间:2019-06-12

本文共 4330 字,大约阅读时间需要 14 分钟。

一、环境搭建:

  1、PySimpleGUI: pip3 install pysimplegui

  2、pytesseract需要有tesseract环境才行:

    1. 先搭建tesseract:

      brew install tesseract  /*安装tesseract环境*/

      brew install tesseract-lang   /*安装语言包,大概有600+M,心痛。。*/

    2. 安装pytesseract

      pip3 install pytesseract

二、基本流程:

  1、设计一个窗口,支持上传图片文件和相关参数设定。大概长这样:

  

  
import PySimpleGUI as sgevent,values = sg.Window('选择转文字照片'). Layout([                                                   [sg.Text('上传照片')],                                                   [sg.Input(), sg.FileBrowse('选择文件')],                                                   [sg.Radio('开启翻译','flag'),sg.Radio('中/英', "choose")],                                                   [sg.OK('确认'), sg.Cancel('取消')]                                                ]).Read()
GUI代码

  分支控制:  

  
if values[1]:   if values[2]:      res = translate(text, 'en', 'zh')   else:      res = translate(text, 'zh', 'en')   text = ''   for ans in res['trans_result']:      text+=ans['dst']+'\n'
根据表单进行中英互译

  2、图片转文字:

  这里主要用到的是pytesseract库,引用库以后一行代码就搞定了。

  text=pytesseract.image_to_string(Image.open(values[0]),lang='chi_sim')

   参数:values[0]是上传图片的地址,lang代表文字识别语言

  3、调用百度翻译api:

  首先去百度翻译开发者平台注册申请api:

  然后在控制台的开发者信息里,会有你的appid和密钥:

  

  根据官方提供的demo,我撸了一个调用函数:

  
def translate(q,fromLang,toLang):    # q代表需要翻译的语句、fromlang是待翻译语言、tolang是翻译成的语言   appid = '你的appid'   secretKey = '你的密钥'   httpClient = None   myurl = '/api/trans/vip/translate'   salt = random.randint(32768, 65536)   sign = appid+q+str(salt)+secretKey   m1 = hashlib.md5()   m1.update(sign.encode(encoding='utf-8'))   sign = m1.hexdigest()   myurl = myurl+'?appid='+appid+'&q='+parse.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign   try:      httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')      httpClient.request('GET', myurl)      response = httpClient.getresponse()      ans = response.read().decode('utf-8')      ans = eval(ans)   except Exception as e:      print(e)   finally:      if httpClient:         httpClient.close()      if ans:         return ans
百度翻译api调用

  4、调用剪切板:

  利用subprocess库,按照基本使用方法直接用就好。

  
text=bytes(text,'utf8')p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)p.stdin.write(text)p.stdin.close()p.communicate()
复制至剪切板

三、完整代码:

1 from PIL import Image 2 import pytesseract 3 import subprocess 4 import PySimpleGUI 5 import PySimpleGUI as sg 6 import http.client 7 import hashlib 8 from urllib import parse 9 import random10 11 def translate(q,fromLang,toLang):12    appid = '你的appid'13    secretKey = '你的密钥'14    httpClient = None15    myurl = '/api/trans/vip/translate'16    salt = random.randint(32768, 65536)17    sign = appid+q+str(salt)+secretKey18    m1 = hashlib.md5()19    m1.update(sign.encode(encoding='utf-8'))20    sign = m1.hexdigest()21    myurl = myurl+'?appid='+appid+'&q='+parse.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign22    try:23       httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')24       httpClient.request('GET', myurl)25       response = httpClient.getresponse()26       ans = response.read().decode('utf-8')27       ans = eval(ans)28    except Exception as e:29       print(e)30    finally:31       if httpClient:32          httpClient.close()33       if ans:34          return ans35 36 event,values = sg.Window('选择转文字照片'). Layout([37                                                    [sg.Text('上传照片')],38                                                    [sg.Input(), sg.FileBrowse('选择文件')],39                                                    [sg.Radio('开启翻译','flag'),sg.Radio('中/英', "choose")],40                                                    [sg.OK('确认'), sg.Cancel('取消')]41                                                 ]).Read()42 if event=='取消':43     exit('no image file selected!')44 45 text=pytesseract.image_to_string(Image.open(values[0]),lang='chi_sim');46 text=str(text).replace('\n','')47 if values[1]:48    if values[2]:49       res = translate(text, 'en', 'zh')50    else:51       res = translate(text, 'zh', 'en')52    text = ''53    for ans in res['trans_result']:54       text+=ans['dst']+'\n'55 text=bytes(text,'utf8')56 p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)57 p.stdin.write(text)58 p.stdin.close()59 p.communicate()
Source Code

转载于:https://www.cnblogs.com/Rhythm-/p/10500092.html

你可能感兴趣的文章
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
3.0.35 platform 设备资源和数据
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
sublime 配置java运行环境
查看>>
在centos上开关tomcat
查看>>
重启rabbitmq服务
查看>>
正则表达式(进阶篇)
查看>>
无人值守安装linux系统
查看>>
【传道】中国首部淘宝卖家演讲公开课:农业本该如此
查看>>
jQuery应用 代码片段
查看>>