-
百度AI
-
文字识别API
获取文字识别应用的AppID、API KEY、Secret Key
-
-
百度翻译开放平台
-
百度翻译API
加入百度翻译开放平台,获取百度翻译应用的APP ID、密钥
-
-
有道智云
-
有道翻译API
获取有道翻译应用的APP ID、密钥
-
阅读百度官方提供的API文档,图片的文字识别需要安装百度ai的包,
- 获取连接client
- 读取图片
- 调用通用识别方法
- 接收返回结果
- 结果解析
返回结果示例
至此,简单版图片文字识别已完成,详细阅读官方文档
1. 百度翻译
百度翻译API
请求
通用翻译API HTTP地址:http://api.fanyi.baidu.com/api/trans/vip/translate
通用翻译API HTTPS地址:https://fanyi-api.baidu.com/api/trans/vip/translate
完整请求示例为:http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
下面我们需要拼接这个url请求,官方解释如下:
-
q:请求翻译query,例如文字识别出的文字
注:若翻译多个单词或者多段文本,需要发送请求之前对q字段做URL encode,
-
from:翻译源语言,语言选择代码见官方文档,常见的有:auto-自动检测,zh-中文,en-英文
-
to:译文语言 注:不可设置为auto
-
appid: APP ID
-
salt:随机数 例如 salt = random.randint(1, 65536)
-
sign:签名 appid+q+salt+密钥 的MD5值
解析返回数据
返回示例
注:若返回的是response.text,在解析时,需要将字符串转化为json,
至此,百度通用翻译已完成,详细阅读官方文档
2. 有道翻译(与百度翻译类似)
有道翻译API
请求
有道翻译API HTTP地址:http://openapi.youdao.com/api
有道翻译API HTTPS地址:https://openapi.youdao.com/api
完整请求示例为:http://openapi.youdao.com/api?q=good&from=EN&to=zh_CHS&appKey=ff889495-4b45-46d9-8f48-946554334f2a&salt=2&sign=1995882C5064805BC30A39829B779D7B
* 来自官方文档
中英文语言代码:zh-CHS-中文,EN-英文,更多见 支持语言表
具体请求操作与百度翻译类似,就不赘述了。
解析返回数据
官方示例如下:
与百度翻译类似,若返回的是response.text,需要将字符串转化为json
接下来就是根据需要,解析json从而获得想要的结果。
至此,有道通用翻译已完成,详细阅读官方文档
ImageGrab.grabclipboard() 获取剪贴板的快照对象, 调用isinstance() 判断是否为图片。
-
如何将剪贴板的图片对象传入到百度文字识别函数中?
将读到的图片对象写入到内存字节缓冲区中,然后百度文字识别函数从内存字节缓冲区中读取到图片进行识别
以上,将mf对象传给百度文字识别函数
感觉整个项目过程中,属图形界面最花时间,也是最让我烦恼的。不过说到底还是对tkinter不熟悉,需要用的时候都是现查。虽然之前做过一个小demo–天气查询,基础功能已实现,看起来很low。
初始设计图如下:
效果图如下(还存在一些问题):
1. 按照设计图填充控件
(1)窗体初始化
(2)主体框架
(3)左边frame填充
(4)中间frame填充
以上控件会涉及到一些函数
-
ocr_clipboard()
从剪贴板获取图片,第四章已经提到了,补充 图片自适应窗体大小
-
resize()
-
-
scan_image()
-
ocr_image()
-
ocr()
调用第二章中的百度图片文字识别
-
-
show_msg()
-
trans()
-
translate()
调用第三章中的文字翻译函数
-
(5)右边frame填充
(6)底部frame填充
2. 补充——设置代理(存在问题)
在调用识别、翻译时都是需要网络的,在特殊情况下,本地网络需要走代理,这时需要灵活地设置代理功能。想法是设计一个类似微信客户端的代理设置界面(弹窗设置)。
整体效果:
(1)新建agent.py文件
(2)主窗体调用设置代理弹窗
主窗体添加设置代理按钮
-
set_proxy()
-
get_info()
-
(3)修改网络调用的函数(添加代理)
在百度识图和翻译调用函数中,需要传输代理参数。具体如何添加就不多讲了,
-
set_proxy()
解析agent,获取addr,port,user,passwd即可,注proxies是字典类型
如何保存代理配置?
重新打开程序的时候,代理设置就会被初始化(初始化代理状态是关闭)。
如果是读取配置文件,那么程序运行后会生成一个config文件;但初衷是只打包成一个exe文件,双击即可运行。
界面控件问题
程序初始运行,窗体如上图所示,左侧图片控件内容为空时,未加载指定大小,若插入图片后,左侧frame会扩展为指定大小,中部和右侧frame会向右移动,见第五章的程序界面设计效果图;而且底部frame未显示,需要手动向下放大才能显示Label(Copyright)。不知如何解决,tkinter的窗口调试太麻烦了。
界面美化
界面如同90年代的Windows 98风格(笑哭),太丑了(无力吐槽)。
以上问题欢迎提供解决方案
Python图像处理库PIL的ImageGrab模块介绍
python界面上的图片缩放,根据窗口大小
tkinter Combobox组件
获取屏幕及桌面大小