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

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

一、环境搭建:

  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、设计一个窗口,支持上传图片文件和相关参数设定。大概长这样:

GUI代码

想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载!

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()

 分支控制: 

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()

三、完整代码:

from PIL import Imageimport pytesseractimport subprocessimport PySimpleGUIimport PySimpleGUI as sgimport http.clientimport hashlibfrom urllib import parseimport randomdef translate(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 ansevent,values = sg.Window('选择转文字照片'). Layout([                                                   [sg.Text('上传照片')],                                                   [sg.Input(), sg.FileBrowse('选择文件')],                                                   [sg.Radio('开启翻译','flag'),sg.Radio('中/英', "choose")],                                                   [sg.OK('确认'), sg.Cancel('取消')]                                                ]).Read()if event=='取消':    exit('no image file selected!')text=pytesseract.image_to_string(Image.open(values[0]),lang='chi_sim');text=str(text).replace('\n','')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'text=bytes(text,'utf8')p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)p.stdin.write(text)p.stdin.close()p.communicate()Source Code

 

转载地址:http://qinmf.baihongyu.com/

你可能感兴趣的文章
笔试题(一)—— java基础
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>