AlsoEasy-RecognitionTranslator

  • 具体实现
    • 开发环境准备和验证
      • 下载conda
      • 创建开发环境
      • 文字识别模块
        • 在线模块
        • 离线模块
      • 机器翻译模块
        • 在线模块
        • 离线模块
      • GUI
      • GUI-定位模块
      • GUI-截图模块

具体实现

开发环境准备和验证

前期测试项目文件已上传到我的仓库。

下载conda

conda是python的版本管理工具,因为不同库要求的python版本不一样,非常容易起冲突,所以建议装个conda来管理不同的生产环境,这里就偷个懒贴别人的安装教程了。

创建开发环境

cmd运行如下命令:

conda create -n test python==3.7.2

键入y并回车。

完成后cmd运行如下命令,进入测试环境(前面有环境名即进入了相应环境):

conda activate test


后面如果使用pip命令时出现"runtime out"错误,建议使用换源命令下载,以豆瓣换源下载torch为例:

pip install --index-url https://pypi.douban.com/simple torch

文字识别模块

在线模块

  使用百度的开放接口。虽然是免费的,但需要按照参考教程注册开发者帐号并申请调用权限,获取"APP_ID"、“API_KEY”、"SECRET_KEY"三个关键字。做完以上操作以后,在开发环境中使用pip命令添加依赖:

pip install baidu-aip
pip install chardet

然后用如下代码测试一下接口能否正常使用吧,将如下代码保存为py文件,并在cmd中相应目录下用python命令运行:

from aip import AipOcrconfig = {'BAIDU_OCR_APP_ID': '',         # 这里写自己的 APP_ID'BAIDU_OCR_API_KEY': '',     # 这里写自己的 API_KEY'BAIDU_OCR_SECRET_KEY': ''      # 这里写自己的 SECRET_KEY
}
path = 'D:\pybox\folder\test\example1.jpg'   # 写上你要检测图片的绝对地址# 下面的部分都不用动,检测的语言类型的关键字可以根据你检测图片的文字做变换
LANS = ['CHN_ENG','ENG','JAP','KOR']       # 记录语言类型的关键字
default_options = {                # 这里是一些检测选项"language_type": "JAP",          # 检测的语言类型,JAP表示日文"detect_direction": "false",    # 是否检测语言方向"detect_language": "true",      # 是否检测语言类型"paragraph": "false",           # 是否输出段落信息"probability": "false"          # 是否返回每段置信度
}client = AipOcr(config['BAIDU_OCR_APP_ID'], config['BAIDU_OCR_API_KEY'], config['BAIDU_OCR_SECRET_KEY']
)with open(path, 'rb') as f:result = client.basicGeneral(f.read(), default_options)
print(result)

这里提供一张样图和相应的测试结果

离线模块

  使用easyOCR模型,这个模型对游戏文本框这种文字明晰的简单环境识别率高,识别速度快。唯一比较麻烦的是初次使用需要下载模型。使用pip命令添加依赖:

pip install easyocr

如果出现"runtime out"错误,记得使用换源命令下载:

pip install --index-url https://pypi.douban.com/simple easyocr

如果模型下载得太慢了可以到我的百度里下载备份,提取码:vci8。
测试代码如下:

import easyocr
import os
__PATH__ = os.path.dirname(os.path.abspath(__file__))
__MODEL_PATH__ = os.path.join(__PATH__, '../model')
# ch_tra 繁体
LANS = ['ch_sim','en','ja','ko']
path = r'D:\pybox\folder\test\example4.jpg'     # 这里写自己测试图片的绝对路径client = easyocr.Reader(lang_list = ['en','ja'],    # 识别语言,可多项download_enabled = True,    # 自动下载模型model_storage_directory = __MODEL_PATH__    # 设置模型保存路径
)
result = client.readtext(path)
print(result)

此处同样提供一张测试图样和测试结果:

  当然离线ocr模块也可以选择pp-ocr,虽然pp-ocr的功能十分强大并且识别率也是极高,但是pp-ocr的依赖十分复杂并且需要手动选择复杂模型,过程比较繁琐,故不推荐。
  tesseractOCR因为有python版本冲突、识别率较低等问题故不作考虑。

机器翻译模块

在线模块

  在线翻译同样选择百度的百度翻译(百度真好用!)。同样需要我们按照百度的官方教程申请权限,获取"appid"和"SECRET_KEY"关键字。
  因为百度翻译的api使用的网络请求接口的方式,故不需要再添加依赖,直接调用如下测试代码:

# API文档地址: https://fanyi-api.baidu.com/product/113
import hashlib
import json
from random import randint
import time
import urllib.request
import urllib.parseMAX_RESP_TIME = 5   # 超时最大重传数
REQUEST_FAILED = -1 # 请求失败码
LANS = ['auto','zh','en','jp','kor']    # 语言类型关键字
encoding = 'utf-8'  # 编码用utf-8SECRET_KEY = ''     # 填上自己的SECRET_KEY
options = {'appid': '',    # 填上自己的APP_ID'salt': '777',    # 只是一个随机数,用于和sign进行验证'from': 'en',   # 源语言类型,自己根据翻译内容做修改'to': 'zh',     # 目标语言类型,自己根据翻译内容做修改'q': '',        # 翻译的文本内容'sign': ''      # 数字签名
}def trans(content, lfrom):url = 'https://fanyi-api.baidu.com/api/trans/vip/translate'options['q'] = contentoptions['from'] = lfromoptions['sign'] = getMD5(options['appid'] + content + options['salt'] + SECRET_KEY)html = getTranslateResponce(url, options)res = json.loads(html)i = 0 while i < MAX_RESP_TIME:if res.get('error_code') != REQUEST_FAILED:breaki += 1print('本次请求失败,原因为:', res['error_msg'])time.sleep(1)html = getTranslateResponce(url, options)res = json.loads(html)print(res)# md5加密生成数字签名sign
def getMD5(content):return hashlib.md5(content.encode(encoding)).hexdigest()# 发送http网络接口请求
def getTranslateResponce(url, data):data = urllib.parse.urlencode(data).encode(encoding)response = urllib.request.urlopen(url, data)return response.read().decode(encoding)test_text_en = 'A secret makes a woman woman.'
test_text_jp = '真実はいつもひとつ。'
trans(test_text_en, 'en')
trans(test_text_jp, 'jp')

得到结果:

离线模块

  在github上搜索“offline translate”,直接找高星项目。发现argos-translate简单好用,故冲之。

按照代码仓库readme的教程,pip下载依赖。

pip install argostranslate

当然因为是离线的,同样也需要下载模型。不过可以直接用代码中下载,下载速度也很快:

# API文档地址: https://github.com/argosopentech/argos-translate
# 模型下载地址:https://www.argosopentech.com/argospm/index/
from email.policy import default
from argostranslate import package, translate# 中-3 英-0 日-16 韩-17
LANS = [3, 0, 16, 17]
MIDDLEWARE = 0  # 中间转换语言
options = {'from': LANS[2],'to': LANS[0]
}
translation = [None, None]
client = translate.get_installed_languages()    # 下载语言包
print(package.get_available_packages())         # 查看能用的语言包
# 因为都是某语言译英或者英译某语言,所以如果源语言和目标语言不包含英语时需要进行二次转换
def trans(content):if options['from'] == MIDDLEWARE | options['to'] == MIDDLEWARE:translation[0] = client[options['from']].get_translation(client[options['to']])return translation[0].translate(content)else:translation[0] = client[options['from']].get_translation(client[MIDDLEWARE])translation[1] = client[MIDDLEWARE].get_translation(client[options['to']])mid = translation[0].translate(content)return translation[1].translate(mid)result = trans('真実はいつもひとつ。')
print(result)

注意:argostranslate只支持某译英或英译某,所以在源语言和目标语言中不含英语时,需要先翻译成英语再翻译成目标语言。因此日译汉时会出现不小的精度损失。

GUI

  前文已经解释过选择pyqt而非wxpython的原因。直接pip添加GUI的依赖:

pip install PyQt5

测试代码如下:

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,  QPlainTextEdit
import PyQt5.QtWidgets as QT# 应用
app = QApplication([])# 绘制窗口
window = QMainWindow()
window.resize(500, 400)
window.move(300, 310)
window.setWindowTitle('薪资统计')textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("请输入薪资表")
textEdit.move(10,25)
textEdit.resize(300,350)button = QPushButton('统计', window)
button.move(380,80)# 事件注册
def handleCalc():window.close()
button.clicked.connect(handleCalc)# 窗口显示
window.show()
app.exec_()

演示结果(这只是一个简单的demo,点击统计按钮窗口就会关闭):

GUI-定位模块

import sys,math
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *class Drawing(QWidget):def __init__(self, parent = None):super(Drawing, self).__init__(parent)self.resize(600,400)self.setWindowTitle('拖拽绘制矩形')self.rect = None#重写绘制函数def paintEvent(self, event):#初始化绘图工具qp = QPainter()#开始在窗口绘制qp.begin(self)#自定义画点方法if self.rect:self.drawRect(qp)#结束在窗口的绘制qp.end()def drawRect(self, qp):#创建红色,宽度为4像素的画笔pen = QPen(Qt.red, 4)qp.setPen(pen)qp.drawRect(*self.rect)#重写三个时间处理def mousePressEvent (self, event):print("mouse press")self.rect = (event.x(), event.y(), 0, 0)def mouseReleaseEvent (self, event) :print("mouse release")def mouseMoveEvent(self, event):start_x, start_y = self.rect[0:2]self.rect = (start_x, start_y, event.x() - start_x, event.y() - start_y)self.update()if __name__ == '__main__':app=QApplication(sys.argv)demo=Drawing()demo.show()sys.exit(app.exec_())

测试效果(在窗口内用鼠标拖拽绘制矩形):

GUI-截图模块

from PIL import ImageGrab
import os
__dir__ = os.path.dirname(os.path.abspath(__file__))
__cache_path__ = os.path.join(__dir__, '../shot_cache.jpg')position = [100, 0, 500, 1000] # 左上右下定位# 开始截图
def capturePhoto(position):# 左上右下img = ImageGrab.grab(position)img.save(__cache_path__)return imgimg = capturePhoto(position)
# 显示截图
img.show()

测试效果:

[从零开始]用python制作识图翻译器·三相关推荐

  1. [从零开始]用python制作识图翻译器·二

    AlsoEasy-RecognitionTranslator 需求分析 系统分析 功能拆解 工程语言选择 技术可行性分析 具体实现 需求分析   见上篇[从零开始]用python制作识图翻译器·一 上 ...

  2. [从零开始]用python制作识图翻译器·一

    AlsoEasy-RecognitionTranslator 前言 需求分析 应用场景 需求提取 需求补充 竞品分析 QQ识图 百度翻译 UU翻译器 小结 功能实现 前言   这是我的毕设作品.当时玩 ...

  3. [从零开始]用python制作识图翻译器·四

    具体实现 整个工程文件已经上传到我的代码仓库. 正式开始 项目结构      数据存储   因为本系统为自用而非商用,并且偏向功能性,所以直接用一个config.json文件保存所有的用户数据,就不用 ...

  4. [从零开始]用python制作识图翻译器·五

    测试   通过以上步骤我们终于实现了系统,现在到了紧张刺激的测试环节.直接运行run.py文件: python run.py ::注意需要进入conda环境 稍作等等,我们的系统就运行啦(啵唧啵唧). ...

  5. python图像识别生成矢量图_使用python制作矢量图

    Get一个使用python制作矢量图的新技能: 前言: Matplotlib远比我们想象的强大,而这只是众多python强大的包中的一个,不愧是群英荟萃. 绘图后端我们一般是看不见的,matplotl ...

  6. python多张图片合并拼接,python制作sprite图、雪碧图

    python多张图片合并拼接,python制作sprite图.雪碧图 整理图片集 找两个文件夹,yangying和zhaoliying,分别放上照片8张,共16张照片. 创建sprite.py # 多 ...

  7. Python 制作迷宫游戏(三)——地图精灵

    Python 制作迷宫游戏(三)--地图精灵 上一节我们已经成功的生成了一个游戏窗口 这一节我们将试着把地图的瓦片与地图数组绑定并绘制到窗口中 当然,作为一个迷宫,地图的作用不仅仅是背景板,它最为重要 ...

  8. 利用Python制作动图演示坐标变换理论

    利用Python制作动图演示坐标变换理论 永磁同步电机是一个非线性.强耦合的物理系统,因而不便直接进行控制.后有研究人员创造性的提出了坐标变换理论(后逐渐成为矢量控制的一个部分),让永磁同步电机得以转 ...

  9. python 百度识图_python如何调用百度识图api

    一.先去百度识别官网注册开通服务且获得ak和sk 二.代码模板 import cv2 import base64 import requests import numpy as np import t ...

最新文章

  1. python做电脑软件-作为一个Python程序员,电脑上应该具备哪些软件?
  2. MySql 中的常见问题解决方法
  3. IOS可执行文件学习总结
  4. RFID图书管理系统程序源代码(转)
  5. 用计算机弹可惜不是你,可惜不是你 还是幸亏不是你
  6. POCO C++ Libraies介绍及常见用法
  7. 【BLE蓝牙学习开发笔记】安利一款简单好用且高性价比的BLE蓝牙抓包器
  8. java的输入输出流
  9. linux 编写 声卡驱动程序,在Linux中注册声卡驱动程序
  10. 值得注意的两个friendster新服务:校友和web共享搜索
  11. 金蝶K3系统如何更改已使用物料的计量单位信息
  12. 新西兰梅西大学有计算机专业吗,新西兰梅西大学世界排名|怎么样|入学条件_海外院校库-柳橙网...
  13. 一文读懂随机森林的解释和实现(附python代码)
  14. arp: 查看,为主机添加一个arp 表项
  15. 《EfficientDet:Scalable and Efficient Object Detection》论文笔记
  16. 在Linux平台上搭建EasyDarwin,编译代码并简单部署
  17. 华为防火墙实战配置教程,太全了
  18. Appium v1.17.1-1报错:pkg: /data/local/tmp/appium_cache/8d4156e508daae39c3f4815552e22e311432ff1f.apk
  19. 一张图读懂PBN旁切转弯计算
  20. 【亲测有效】维基百科图片不能显示

热门文章

  1. 基于JavaEE和SSH框架的网络阅卷任务分发系统
  2. 如何以 PDF/X 格式保存报表
  3. ROS2之OpenCV人脸识别foxy~galactic~humble
  4. EasyRecovery易恢复15好用的电脑数据恢复管理软件
  5. 仿面包旅行个人中心下拉顶部背景放大高斯模糊效果
  6. 三维Tensor维度分析,举例mask[0,:],mask[:,:,0],mask[:,0,:]
  7. xiaoxia的vim配置
  8. 中国运营商: 为3G快马加鞭
  9. mysql away,MySQL server has gone away问题及其解决
  10. mqtt 域名连接_Modicon M262通过MQTT连接阿里云实现