一、环境搭建:

  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实现图片转文字并翻译至剪切板的更多相关文章

  1. 读取图片文件MetaFile放入Windows剪切板

    前言 前段时间群里有个小伙在工作中遇到一个问题,透明的图片存入剪切板在粘贴到adobe PDF中出现不透明问题但是粘贴到Excel可以,还有就是从excel复制再粘贴到PDF也是可以.小伙在群里发了两 ...

  2. 用python给图片添加文字(水印)

    题目来源于:Python 练习册,每天一个小程序 第0000题 代码如下: #-*- coding:utf-8 -*- import PIL from PIL import Image from PI ...

  3. python给图片添加文字

    如何用几行代码给图片加上想要的文字呢? 下面为大家说下实现过程. 关注公众号 "轻松学编程"了解更多. 有图如下,想添加自写的诗句 诗句 静安心野 朝有赤羽暮落霞, 小舟载我湖旋停 ...

  4. Python批量图片识别并翻译——我用python给女朋友翻译化妆品标签

    Python批量图片识别并翻译--我用python给女朋友翻译化妆品标签 最近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签.美其名曰:"程序猿每天英语开发,英文一定很好吧,来帮我翻 ...

  5. python 识别图片文字

    今天群里有兄弟问如何把图片的文字给识别出来 对于python来说这不是小菜一碟吗,于是乎让pupilheart狠狠的吹了一波(哈哈,竟然没懂),下面将整个实现过程给大家实现下: 方法一:自己搞定ORC ...

  6. 鼠标滑过图片变暗文字链接滑出jQuery特效

    效果体验:http://hovertree.com/texiao/jquery/7.htm HTML文件代码: <!DOCTYPE html> <html xmlns="h ...

  7. ios图片添加文字或者水印

    在项目中,我们会对图片做一些处理,但是我们要记住,一般在客户端做图片处理的数量不宜太多,因为受设备性能的限制,如果批量的处理图片,将会带来交互体验性上的一些问题.首先让我们来看看在图片上添加文字的方法 ...

  8. iOS开发小技巧--即时通讯项目:使用富文本在UILabel中显示图片和文字;使用富文本占位显示图片

    Label借助富文本显示图片 1.即时通讯项目中语音消息UI的实现,样式如图: 借助富文本在UILabel中显示图片和文字 // 1.创建一个可变的富文本 NSMutableAttributedStr ...

  9. php 图片添加文字水印 以及 图片合成(微信快码传播)

    1.图片添加文字水印: $bigImgPath = 'backgroud.png'; $img = imagecreatefromstring(file_get_contents($bigImgPat ...

随机推荐

  1. css单位em、px、rem和pt的区别

    1.PX :像素(Pixel) PX是相对长度单位,它是相对于显示器屏幕分辨率而言的. 优缺点:比较稳定和精确,但在浏览器中放大或缩放浏览页面时会出现页面混乱的情况. 2.EM:是相对长度单位. EM ...

  2. MongoDB常用方法

    一.查询 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): se ...

  3. 覆盖equals时总要覆盖hashCode

    本文涉及到的概念 1.为什么重载equals方法时,要重载hashCode函数;没有重载hashCode带来的问题 2.一个对象hashCode的生成规则       1.为什么重载equals方法时 ...

  4. HDU 2050 折线分割平面 (数学)

    题目链接 Problem Description我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可 ...

  5. spring mvc convention over configuration 之 RequestToViewNameTranslator

    1. RequestToViewNameTranslator简介 在springmvc中很多地方都是约定优于配置的,比如这种写法: @Controller public class IndexActi ...

  6. thinkphp 漂亮的分页样式

    ---恢复内容开始--- 首先:需要两个文件 page.class.php page.css 1.在TP原有的 page.class.php 文件稍作修改几条代码就可以了, 修改过的地方我会注释, 2 ...

  7. 关于servlet中重定向、转发的地址问题

    先写一个正斜杠"/",再判断是服务器使用该地址还是网站使用该地址. 访问网络资源用/,访问硬盘资源用\. 例如: 转发:      request.getRequestDispat ...

  8. PEB及LDR链

    PEB地址的取得在NT内核系统中fs寄存器指向TEB结构,TEB+0x30处指向PEB结构,PEB+0x0c处指向PEB_LDR_DATA结构,PEB_LDR_DATA+0x1c处存放一些指向动态链接 ...

  9. linux下C语言实现的哈希链表【转】

    转自:http://blog.chinaunix.net/uid-28458801-id-4276934.html 操作系统:ubuntu10.04 前言:     在稍微大点的项目中,基本都会遇到算 ...

  10. shell编程===执行shell脚本的四种方法

    使用vim创建一个shell文件,命名 hello.sh #!/bin/bash echo "hello shell !" 在linux中进行加载 chmod +x ./hello ...