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

news/2023/6/6 4:05:24

具体实现

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

正式开始

项目结构

在这里插入图片描述    在这里插入图片描述

数据存储

  因为本系统为自用而非商用,并且偏向功能性,所以直接用一个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文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4561889.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

NOIP 2017初赛普及组C/C++答案详解

竞赛时间: 2017 年 10月14日 14:30~ 16:30 选手注意:不得使用任何电子设备(如计算器、手机、电子词典等 )或查阅任何书籍资料 一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅…

离散数学-2 命题逻辑等值演算

求公式主析取范式的方法步骤: 方法一:等值演算 设公式A含命题变项p1,p2,…,pn (1) 求A的析取范式AB1B2 … Bs , 其中Bj是简单合取 式 j1,2, … ,s (2) 若某个Bj既不含pi, 又不含pi, 则将Bj展开成 Bj Bj(pipi)  (Bjpi)(Bjpi) 重复这…

给出一个字符串,仅由小写字母组成。请找出是否仅删除其中的一个字母之后, 字符串变成回文串。

给出一个字符串,仅由小写字母组成。请找出是否仅删除其中的一个字母之后, 字符串变成回文串。返回值为删除的字符的索引。如果已经是回文字符串,返回-1 比如 输入 3 aaab baa aaa。 输出 3 0 -1. 思路:既然能通过增加一个字符…

离散数学 7.图

一个图是一个序偶<V ,E>&#xff0c;记为G < V, E>&#xff0c;其中&#xff1a; V {v1, v2,… , vn}是有限非空集合, V;称为结点(node) , V称为结点集。 E是有限集合,称为边集。E中的每个元素都有V中的结点对与之对应,称之为边(edge)。仅由孤立结点组成的图称为…

离散数学-图论知识总结(修改版)

文章目录图论基本概念矩阵邻接矩阵可达性矩阵完全关联矩阵矩阵与图连通性的关系&#xff1a;特殊图无向欧拉图定义判定定理有向欧拉图定义定理哈密尔顿图定义必要条件充分条件平面图定义欧拉公式库拉托夫斯基图对偶图着色树无向树性质特点生成树有向树根树k叉树最优树前缀码图论…

一棵树的成长史——JAVA如何把数据库的数据处理成树形结构(核心代码直接使用即可)

JAVA如何把数据库的数据处理成树形结构&#x1f4a8;前言&#x1f60e;实现思路&#x1f60e;&#x1f9e1;完整代码&#x1f9e1;&#x1f61c;总结-核心代码&#x1f61c;&#x1f4a8;前言 不知道大家在做项目的时候有没有接触到将平平无奇数据结合处理成有层次的数据呢&…

学Python,站在这棵树上就对了 | Python技能树测评

学Python&#xff0c;站在这棵树上就对了 | Python技能树测评前言Python 技能树介绍Python 技能树使用知识学习练习实践学习进度交流讨论总结前言 我们常说&#xff0c;在学习中要学会站在巨人的肩膀上前行&#xff0c;并不是所有的事情都要自己从头开始从零开始&#xff0c;特…

python打印一棵二叉树图形

为了便于刷leetcode测试自己写的函数&#xff0c;真实观察经过一些操作后树的变化&#xff0c; 写了以下几个函数&#xff1a; FUN1 由数组创建一棵树FUN2.3 层次遍历一棵树&#xff0c;以数组的形式返回遍历结果(完全二叉树&#xff0c;空结点-1补全), 用于绘制图形FUN3 一棵…