Python日记 -- 百度OCR翻译
侧边栏壁纸
  • 累计撰写 8 篇文章
  • 累计收到 2 条评论

Python日记 -- 百度OCR翻译

Reverse
2022-12-25 / 0 评论 / 34 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年12月25日,已超过279天没有更新,若内容或图片失效,请留言反馈。

前言

最近写了个 丐版百度 OCR 翻译 ,其实网络上也有很多类似的源码。
该教程为 简化版 ,详细查看 技术文档支持 python 版本 2.7.+ 和 3.+ 。

效果展示


百度OCR

准备工作

  1. 登录 / 注册 百度账号
  2. 创建 通用场景OCR应用归属 选择 个人应用名称应用描述 自定义
  3. 填完以上信息后,点击 立即创建 (注意要实名认证)
  4. 此时,应用列表 会出现 刚创建好的应用 ,分别把 AppIDAPI KeySecret Key 记录好 等下用

核心代码

  1. 当前版本为 python 3.8.1 (PIL 在 python3 时,第三方库应安装 pillow)

     # 截图
     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'
  2. 安装 OCR Python SDK

      pip install baidu-aip
  3. 配置 OCR
  4. 配置AipOcr ,把在 准备工作 获取的 AppIDAPI KeySecret Key 对应填入

      # 配置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)
  • 接口说明

    def 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)
  • 删减 + 筛选数据

        with 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'])

有道翻译

  • 用到了 爬虫网上有教程,不细说

    import 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'])

补充

拓展

  • 增加 复制弹窗 功能 加了些花里胡哨的东西

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

打包前 完整代码

  1. 演示版本为 python 3.8.1如出现报错请自行解决

    # 工程: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()
    
  2. 创建 OCR.ini 文件,复制以下内容 , 把在 准备工作 获取的 AppIDAPI KeySecret Key 对应填入

    [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
  3. 最后自行打包 (不打包在pycharm里也能用)

      pyinstaller -F 文件名.py
    
      # pyinstaller -F 文件名.pyw

打包后 使用教程

代码已打包上传到 githubgitee
  • 打开 new_OCR\dist\OCR.ini 文件,把在 准备工作 获取的 AppIDAPI KeySecret Key 对应填入运行exe文件 即可

    [aip]
    APP_ID = 
    API_KEY = 
    SECRET_KEY = 

  • 如出现闪退 / 想换成自己的 , / 更换以下内容

    [config]
    User-Agent = 
    
    Cookie = 
    
    bv = 
  • 方法如下
  1. F12 打开 开发者工具 ,选择 Network , 然后选择 XHR
  2. 翻译框 输入任意 文字页面 会出现 translate_ (如有多个选最新)
  3. 点击 translate_ ,在 Headers 页面可以找到 User-AgentCookie ,在 Payload 页面可以找到bv (火狐浏览器的 bv 在请求页面)
  4. 把找到的内容 替换 ini 文件内容重新运行 即可
  5. 不清楚文字描述 可按 如图 1 所示 步骤 即可

图 1


最后

代码已在 githubgitee 上开源
这个百度 OCR 只能翻译第一行的内容,多行无法翻译

个人版的调用次数已经够用了,不建议多对一,建议一对一


0

评论 (0)

取消