具体实现

整个工程文件已经上传到我的代码仓库。

正式开始

项目结构

    

数据存储

  因为本系统为自用而非商用,并且偏向功能性,所以直接用一个config.json文件保存所有的用户数据,就不用加密了。

原型设计

  如图,本系统一共包含两个用户页面,由主页和设置页构成(设置页内置三个分页)。全部都是简单的控件,包括:文本框、按钮、输入框、单选按钮、纯文字。


UI设计

  懒得找icon文件的小伙伴建议直接用的我的ui文件。对布局不熟悉的小伙伴建议直接用绝对布局(就是直接把控件拖到你想要的位置)。下面是用qt designer进行布局设计的主要流程:
1、将控件拖动到预设位置

2、为控件命名

3、调整控件大小

4、加载图标(记得把文字删掉)

图标文件需要自己事先保存,可以白嫖阿里云的。

模块设计

  在前篇测试时我们其实已经将大部分功能做出来了,但是为了组合成一个自恰的系统,需要将功能抽象,做成模块。下面是一个简化的UML组件图,实线表示 模块A→提供服务给→模块B,虚线表示 模块A→依赖于→模块B。

识别+翻译模块

  因为识别和翻译模块在提供功能的地位上极其相似,所以这里放在一起讲。回到我们的用户操作面板,找出所有本模块相关功能控件:



发现本模块一共要提供5个接口:

  1. API参数设置(初始化)
    包括识别语言、翻译语言、api参数等等数据的初始化和修改。
# OCR.py OffOCR.py Tran.py OffTran.py
def initOptions(self, config):  # 按照config进行设置
  1. 开始识别+翻译
    因为识别和翻译过程是一键完成的,所以需要组合识别图片和翻译文字的接口。
# OCR.py OffOCR.py
def ocrPath(self, path):    # 识别path地址的图片
# Tran.py OffTran.py
def trans(self, content):   # 翻译content的文字
  1. 修改识别语言
    注意:识别语言更改了,翻译源语言一样要改。
 # OCR.py OffOCR.py
def changeSource(self, lan_key):    # lan_key为键,隐含了键值映射
  1. 修改目标翻译语言
    这个只用修改翻译目标语言。
 # Tran.py OffTran.py
def initTran(self, config):     # 按照config进行设置
  1. 是否启用离线模式
    因为离线和在线模式调用的接口类不同,所以这个过程实际是由控制器控制的。

但是我们发现“修改识别语言”和“修改目标翻译语言”,其实本质上也是在修改参数,所以最终抽象成三个接口:

因为源代码量大,所以这里只列出函数名,详见我的代码仓库,/api下的py文件 和 run.py文件。
另外设计上(识别+翻译)模块只控制一次识图翻译过程,所以很多被认为是这个模块的功能其实并没有出现在上面。

划取选区模块

  前篇测试中我们已经做出了一个简单的定位模块,它的功能非常简单:提供截图区域的坐标。但是之前的模块还存在两个主要问题:
1、可绘制矩形区域不是全屏,我们不能选取屏幕上任意的区域;
2、矩形区域内并不是透明的,即使我们截取了区域图像,也只是白茫茫一片。

好在qt中为我提供了简单的函数用以解决:

 # 取消原生标题栏 | 窗口置顶 | 取消任务栏self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Tool)# 窗口全屏self.showFullScreen()# 设置透明度self.setWindowOpacity(0.3)

详见我的代码仓库,SelectArea.py文件

选区控制模块

  这个模块是我花时间最多的地方,因为国内的中文qt教程很少,也没有实现(虚线边框+透明背景)窗口的例子。不过qt存在和css类似的qss,所以在我的不懈摸索下最终实现了如下效果(加上划取选区的演示):

  除了视图层外,改模块还聚合了识别和翻译的功能,为控制器提供了识别并翻译选区的接口:

详见我的代码仓库,ControlArea.py文件

主要功能模块/内部设置模块

  做到这里我们会发现,上面的模块已经达到了最初的需求了,我们最后仅仅需要一个显示翻译结果的面板和几个调用上面功能的按钮。
  这两个模块能说的点非常少,基本几个按钮控件对应一个函数、对应一个功能。就不过多赘述了,看代码应该看得懂。

详见我的代码仓库,MainWindow.py文件和Setting.py文件

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

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

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

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

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

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

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

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

    AlsoEasy-RecognitionTranslator 具体实现 开发环境准备和验证 下载conda 创建开发环境 文字识别模块 在线模块 离线模块 机器翻译模块 在线模块 离线模块 GUI G ...

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

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

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

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

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

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

  8. python制作动图-用Python制作迷宫GIF

    原标题:用Python制作迷宫GIF 安装 可以通过PyPi安装 或者通过Git 为什么你需要这个库? 问:我是一个Python迷,并且对迷宫的生成和迷宫解决的办法非常感兴趣.我很羡慕别人能够做出生成 ...

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

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

最新文章

  1. 简单的分级别写日志程序
  2. 快速搭建samba服务
  3. html制作第二页,订单第二页.html
  4. std::jthread与std::thread的区别
  5. FreeNAS 安装与用户指导页
  6. HTML+CSS实现小米账号注册界面
  7. 小说网站源码_ptcms精美小说阅读网站源码(带采集规则)
  8. orl face data download
  9. 17 线性方程组——线性方程组解的结构、解的性质、解空间、基础解系、基础解系存在性
  10. 传智播客风清扬视频-------线程简介2
  11. Spark 高级数据分析(第2版)
  12. 腾达fh307没有显示服务器名,腾达(Tenda)FH307路由器无线WiFi密码和名称设置 | 192路由网...
  13. 苹果电脑入门:必须掌握的快捷键
  14. wstmart电子商务系统怎么样
  15. 【多目标优化】Pareto最优解很少
  16. 计算机网络七年级教学设计,初中七年级信息技术《计算机网络和因特网》教学设计.docx...
  17. 《数据库系统原理》教学上机实验报告
  18. 分享一个技术知识类电子书网站
  19. mysql数据库多实例启动_Mysql多实例运行
  20. ADONIS、ANOSIM、Mangel_test、MRPP

热门文章

  1. 论“蹭热点”,我只服“杜蕾斯”,盘点“杜蕾斯官方”曾蹭过的十大热点!
  2. Vue子组件触发父组件事件
  3. kettle配置资源库
  4. 苹果手机(iPhone)系统升级到IOS16.1后,发现连接WiFi、热点总是经常自动(随机)断开
  5. HTML5网页文本内容
  6. 图神经网络模型—PATCHY-SAN的基本思想与流程
  7. MCAL中GTM的配置
  8. 英语零散笔记Note整理
  9. Android项目开发:简易计步器
  10. 用ESP32与Python实现物联网(IoT)火焰检测报警系统