• 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']+'
    '
    根据表单进行中英互译

      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()
    复制至剪切板

    三、完整代码:

     1 from PIL import Image
     2 import pytesseract
     3 import subprocess
     4 import PySimpleGUI
     5 import PySimpleGUI as sg
     6 import http.client
     7 import hashlib
     8 from urllib import parse
     9 import random
    10 
    11 def translate(q,fromLang,toLang):
    12    appid = '你的appid'
    13    secretKey = '你的密钥'
    14    httpClient = None
    15    myurl = '/api/trans/vip/translate'
    16    salt = random.randint(32768, 65536)
    17    sign = appid+q+str(salt)+secretKey
    18    m1 = hashlib.md5()
    19    m1.update(sign.encode(encoding='utf-8'))
    20    sign = m1.hexdigest()
    21    myurl = myurl+'?appid='+appid+'&q='+parse.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign
    22    try:
    23       httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
    24       httpClient.request('GET', myurl)
    25       response = httpClient.getresponse()
    26       ans = response.read().decode('utf-8')
    27       ans = eval(ans)
    28    except Exception as e:
    29       print(e)
    30    finally:
    31       if httpClient:
    32          httpClient.close()
    33       if ans:
    34          return ans
    35 
    36 event,values = sg.Window('选择转文字照片'). Layout([
    37                                                    [sg.Text('上传照片')],
    38                                                    [sg.Input(), sg.FileBrowse('选择文件')],
    39                                                    [sg.Radio('开启翻译','flag'),sg.Radio('中/英', "choose")],
    40                                                    [sg.OK('确认'), sg.Cancel('取消')]
    41                                                 ]).Read()
    42 if event=='取消':
    43     exit('no image file selected!')
    44 
    45 text=pytesseract.image_to_string(Image.open(values[0]),lang='chi_sim');
    46 text=str(text).replace('
    ','')
    47 if values[1]:
    48    if values[2]:
    49       res = translate(text, 'en', 'zh')
    50    else:
    51       res = translate(text, 'zh', 'en')
    52    text = ''
    53    for ans in res['trans_result']:
    54       text+=ans['dst']+'
    '
    55 text=bytes(text,'utf8')
    56 p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)
    57 p.stdin.write(text)
    58 p.stdin.close()
    59 p.communicate()
    Source Code
  • 相关阅读:
    使用pod install 出现bad interpreter: No such file or directory
    简单易用且功能丰富的纯Swift下载框架
    Swift主题色顶级解决方案一
    如何基于WKWebView开发一个功能完善的资讯内容页
    关于iPhone X 的适配
    iOS11及Xcode9适配问题汇总
    优豆云
    Mac 网站屏蔽修改
    c语言
    iOS 12 前台通知shouldAlwaysAlertWhileAppIsForeground崩溃问题
  • 原文地址:https://www.cnblogs.com/Rhythm-/p/10500092.html
Copyright © 2020-2023  润新知