前言
最近写了个 丐版 的 百度 OCR 翻译 ,其实网络上也有很多类似的源码。
该教程为 简化版 ,详细查看 技术文档 , 支持 python 版本 2.7.+ 和 3.+ 。
效果展示
百度OCR
准备工作
创建 通用场景OCR ,应用归属 选择
个人
,应用名称 和 应用描述 自定义填完以上信息后,点击
立即创建
(注意要实名认证)此时,应用列表 会出现 刚创建好的应用 ,分别把
AppID
、API Key
和Secret Key
记录好 等下用
核心代码
当前版本为 python 3.8.1 (PIL 在 python3 时,第三方库应安装 pillow)
1
2
3
4
5
6
7
8
9
10
11
12
13# 截图
import keyboard
import time
from PIL import ImageGrab
keyboard.wait(hotkey='ctrl+c') # 触发按键
time.sleep(0.01) # 延迟
# 保存图片
image = ImageGrab.grabclipboard()
image.save('OCR.png') # 图片命名为'OCR.png'安装 OCR Python SDK
1
pip install baidu-aip
配置 OCR
配置AipOcr ,把在 准备工作 获取的
AppID
、API Key
和Secret Key
对应填入1
2
3
4
5
6
7
8# 配置AipOcr
from aip import AipOcr
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)-
1
2
3
4
5
6
7
8
9def get_file_content(filePath):
with open('OCR.png', "rb") as fp:
return fp.read()
image = get_file_content('OCR.png')
# 调用通用文字识别(标准版)
res_image = client.basicGeneral(image)
print(res_image) 删减 + 筛选数据
1
2
3
4
5
6
7
8
9
10
11with open('OCR.png', "rb") as fp:
image = fp.read()
# 调用通用文字识别(标准版)
res_image = client.basicGeneral(image)
# print(res_image)
# 筛选数据
res = res_image['words_result']
for i in res:
print(i['words'])
有道翻译
- 用到了 爬虫 ,网上有教程,不细说
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62import requests
import json
import time
import random
import hashlib
# 网址
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
# 反爬
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
'Cookie': 'OUTFOX_SEARCH_USER_ID=1870252624@10.110.96.157; OUTFOX_SEARCH_USER_ID_NCOO=1338974472.751384; ___rl__test__cookies=1654489795853',
'Referer': 'https://fanyi.youdao.com/'
}
# 时间戳
r = str(int(time.time()*1000))
# print(r)
# 随机数
random_num = random.randint(0,9)
i = r + str(random_num)
# print(i)
def data_new(e):
# md5
str_sign = "fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5"
md5 = hashlib.md5()
md5.update(str_sign.encode())
sign = md5.hexdigest()
# print(sign)
data_old = {
'i': e,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': i,
'sign': sign,
'lts': r,
'bv': 'dbf26599b4389c828cae8b896c9b0708',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
return data_old
a = input('请输入需要翻译的内容:\n')
data = data_new(a)
# 请求
result = requests.post(url,headers=header,data=data).text
# print(result)
# 数据筛选
dict_res = json.loads(result)
print(dict_res['translateResult'][0][0]['tgt'])
补充
拓展
- 增加 复制 和 弹窗 功能
加了些花里胡哨的东西1
2
3
4
5
6
7
8
9
10
11
12
13import pyperclip
import tkinter as tk
# copy
pyperclip.copy(a + '\n' + b)
time.sleep(0.02)
# 弹窗
root = tk.Tk()
root.title("info")
tk.Label(root, text="已复制", ).pack() # 弹窗显示
root.after(1000, lambda: root.destroy()) # 停留1s
root.mainloop()
打包前 完整代码
演示版本为 python 3.8.1 , 如出现报错请自行解决
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124# 工程:test
# 创建时间:2022/6/2 11:41
# encoding:utf-8
import keyboard
import time
import requests
import random
import hashlib
import json
import configparser
import pyperclip
import tkinter as tk
from PIL import ImageGrab
from aip import AipOcr
# 读取ini文件
aip = 'OCR.ini'
conf = configparser.ConfigParser()
conf.read(aip)
# 配置AipOcr
APP_ID = conf.get('aip', 'APP_ID') # 你的 App ID
API_KEY = conf.get('aip', 'API_KEY') # 你的 Api Key
SECRET_KEY = conf.get('aip', 'SECRET_KEY') # 你的 Secret Key
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
while True:
# --------------- 截图识别 --------------
# 截图
keyboard.wait(hotkey='ctrl+c') # 触发按键
time.sleep(0.01) # 延迟
# 保存图片
image = ImageGrab.grabclipboard()
image.save('OCR.png') # 图片命名为'OCR.png'
print('识别中...')
with open('OCR.png', "rb") as fp:
image = fp.read()
# 调用通用文字识别(标准版)
res_image = client.basicGeneral(image)
# print(res_image)
# 筛选数据
all_text = ''
res = res_image['words_result']
for i in res:
all_text += i['words'] + '\n'
a = all_text
print(a + '-' * 70)
# --------------- 有道翻译 --------------
# 网址
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
# 反爬
header = {
'User-Agent': conf.get('config', 'User-Agent'),
'Cookie': conf.get('config', 'Cookie'),
'Referer': 'https://fanyi.youdao.com/'
}
# 时间戳
r = str(int(time.time() * 1000))
# print(r)
# 随机数
random_num = random.randint(0, 9)
i = r + str(random_num)
# print(i)
def data_new(e):
# md5
str_sign = "fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5"
md5 = hashlib.md5()
md5.update(str_sign.encode())
sign = md5.hexdigest()
# print(sign)
data_old = {
'i': e,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': i,
'sign': sign,
'lts': r,
'bv': conf.get('config', 'bv'),
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
return data_old
data = data_new(a)
# 请求
result = requests.post(url, headers=header, data=data).text
# print(result)
# 数据筛选
dict_res = json.loads(result)
b = dict_res['translateResult'][0][0]['tgt']
print(b + '\n')
# copy
pyperclip.copy(a + '\n' + b)
time.sleep(0.02)
# 弹窗
root = tk.Tk()
root.title("info")
tk.Label(root, text="已复制", ).pack() # 弹窗显示
root.after(1000, lambda: root.destroy()) # 停留1s
root.mainloop()创建
OCR.ini
文件,复制以下内容 , 把在 准备工作 获取的AppID
、API Key
和Secret Key
对应填入1
2
3
4
5
6
7
8
9
10
11[aip]
APP_ID =
API_KEY =
SECRET_KEY =
[config]
User-Agent = Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
Cookie = OUTFOX_SEARCH_USER_ID=1870252624@10.110.96.157; OUTFOX_SEARCH_USER_ID_NCOO=1338974472.751384; ___rl__test__cookies=1654489795853
bv = dbf26599b4389c828cae8b896c9b0708最后自行打包 (不打包在pycharm里也能用)
1
2
3pyinstaller -F 文件名.py
# pyinstaller -F 文件名.pyw
打包后 使用教程
- 打开
new_OCR\dist\OCR.ini
文件,把在 准备工作 获取的AppID
、API Key
和Secret Key
对应填入 , 运行exe文件 即可1
2
3
4[aip]
APP_ID =
API_KEY =
SECRET_KEY =
如出现闪退 / 想换成自己的 , 请 / 可 更换以下内容
1
2
3
4
5
6[config]
User-Agent =
Cookie =
bv =方法如下
F12 打开 开发者工具 ,选择 Network , 然后选择 XHR
在 翻译框 输入任意 文字 ,页面 会出现 translate_ (如有多个选最新)
点击 translate_ ,在 Headers 页面可以找到
User-Agent
和Cookie
,在 Payload 页面可以找到bv
(火狐浏览器的bv
在请求页面)把找到的内容 替换 ini 文件内容 ,重新运行 即可
如 不清楚文字描述 可按 如图 1 所示 步骤 即可
图 1
最后
这个百度 OCR 只能翻译第一行的内容,多行无法翻译
个人版的调用次数已经够用了,不建议多对一,建议一对一
HY Group , Entertainment first , Just be happy . SuiXing Originality Parking Iot . Ruan Fan Ying Chi Herbal Tea Shop .
Internet Of Things .