Python实现图片转文字并翻译至剪切板
一、环境搭建:
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 sg
event,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()
复制至剪切板
三、完整代码:
from PIL import Image
import pytesseract
import subprocess
import PySimpleGUI
import PySimpleGUI as sg
import http.client
import hashlib
from urllib import parse
import random def 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 ans event,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
Python实现图片转文字并翻译至剪切板的更多相关文章
- 读取图片文件MetaFile放入Windows剪切板
前言 前段时间群里有个小伙在工作中遇到一个问题,透明的图片存入剪切板在粘贴到adobe PDF中出现不透明问题但是粘贴到Excel可以,还有就是从excel复制再粘贴到PDF也是可以.小伙在群里发了两 ...
- 用python给图片添加文字(水印)
题目来源于:Python 练习册,每天一个小程序 第0000题 代码如下: #-*- coding:utf-8 -*- import PIL from PIL import Image from PI ...
- python给图片添加文字
如何用几行代码给图片加上想要的文字呢? 下面为大家说下实现过程. 关注公众号 "轻松学编程"了解更多. 有图如下,想添加自写的诗句 诗句 静安心野 朝有赤羽暮落霞, 小舟载我湖旋停 ...
- Python批量图片识别并翻译——我用python给女朋友翻译化妆品标签
Python批量图片识别并翻译--我用python给女朋友翻译化妆品标签 最近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签.美其名曰:"程序猿每天英语开发,英文一定很好吧,来帮我翻 ...
- python 识别图片文字
今天群里有兄弟问如何把图片的文字给识别出来 对于python来说这不是小菜一碟吗,于是乎让pupilheart狠狠的吹了一波(哈哈,竟然没懂),下面将整个实现过程给大家实现下: 方法一:自己搞定ORC ...
- 鼠标滑过图片变暗文字链接滑出jQuery特效
效果体验:http://hovertree.com/texiao/jquery/7.htm HTML文件代码: <!DOCTYPE html> <html xmlns="h ...
- ios图片添加文字或者水印
在项目中,我们会对图片做一些处理,但是我们要记住,一般在客户端做图片处理的数量不宜太多,因为受设备性能的限制,如果批量的处理图片,将会带来交互体验性上的一些问题.首先让我们来看看在图片上添加文字的方法 ...
- iOS开发小技巧--即时通讯项目:使用富文本在UILabel中显示图片和文字;使用富文本占位显示图片
Label借助富文本显示图片 1.即时通讯项目中语音消息UI的实现,样式如图: 借助富文本在UILabel中显示图片和文字 // 1.创建一个可变的富文本 NSMutableAttributedStr ...
- php 图片添加文字水印 以及 图片合成(微信快码传播)
1.图片添加文字水印: $bigImgPath = 'backgroud.png'; $img = imagecreatefromstring(file_get_contents($bigImgPat ...
随机推荐
- CF844 C 置换 水
由于每个数字只出现一次,离散化一下,置换求个循环节就好了. /** @Date : 2017-08-25 01:39:39 * @FileName: C.cpp * @Platform: Window ...
- JS中client/offset/scroll等的宽高解析
原文地址:→传送门 window相关宽高属性 1. window.outerHeight (窗口的外层的高度) / window.outerWidth (窗口的外层的宽度) window.outerH ...
- c# 重载运算符(ovveride operator)踩坑记,关于null比对
场景描述: 需要比对两个版本的对应对象是否完全一致(每个属性值一致),不一致的导出报表颜色标识,以便提醒后续使用报表人员. 实现思路: 对象重载ToString方法,另实现一比对基类(为了通用)重载= ...
- (4.2)基于LingPipe的文本基本极性分析【demo】
酒店评论情感分析系统(四)—— 基于LingPipe的文本基本极性分析[demo] (Positive (favorable) vs. Negative (unfavorable)) 这篇文章为Lin ...
- img图片居中
关键词:clear: both; display: block; margin:auto; 图片居左,居右,居中: /* Alignment */ .alignleft { display ...
- 天梯赛 L2-006 树的遍历 (二叉树)
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点的个数.第二行给出其后序遍历序 ...
- Ubuntu命令设置ip网关dns
本文系转载,介绍Ubuntu如何设置IP和网络来连接网络 如果是在虚拟机中使用Ubuntu,那么设置之前请先参照我的上一遍文章虚拟机Net方式设置连接外网中的网络设置部分,先设置好主机的网络,然后配置 ...
- kvm命令参数记录
/usr/libexec/qemu-kvm -cpu host -m 1024 -enable-kvm -drive file=/var/lib/libvirt/images/zxc_linux1.i ...
- 64_t2
texlive-biblatex-chem-doc-svn42065-33.fc26.2.no..> 24-May-2017 15:44 1044190 texlive-biblatex-che ...
- 关于Hazard Pointers的话题
关于Hazard Pointers的话题, 起源于这个文章: 实现无锁的栈与队列(4) http://www.cnblogs.com/catch/p/3176636.html 其实他的系列文章(3)之 ...