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

news2024/9/21 4:34:31

AlsoEasy-RecognitionTranslator

  • 需求分析
  • 系统分析
    • 功能拆解
    • 工程语言选择
    • 技术可行性分析
  • 具体实现

需求分析

  见上篇[从零开始]用python制作识图翻译器·一

上篇分析了该产品的需求以及市场上的可行性(没有被吊打的竞品)。而本篇将着重于分析如何实现。

系统分析

功能拆解

  我们将一整个流程细化分成以下几个步骤,并分析每步涵盖的技术,一步步探索其可行性。

  1. 划定屏幕固定区域(用qq截图演示效果)
    在这里插入图片描述
    作  用:通过鼠标点击和松开确定识别区域的对角线坐标;
    相关技术:GUI、鼠标事件、键盘热键。

  2. 获取固定区域图像(用qq截图演示效果)
    在这里插入图片描述
    作  用:获取区域的图像以进行后续的识别操作;
    相关技术:GUI、PIL、屏幕截图。

  3. 识别图中文字(用qq截图演示效果)
    在这里插入图片描述作  用:将区域的图像中的文字识别出来,作为翻译的源文字;
    相关技术:文字识别

  4. 将该文字翻译成目标语言的文字(用百度翻译演示效果)
    在这里插入图片描述作  用:将识别的到的文字翻译为目标语言的文字;
    相关技术:机器翻译

  5. 显示在某一区域(用qq截图演示效果)
    在这里插入图片描述作  用:将翻译的结果反馈到屏幕上;
    相关技术:GUI、文本框。

工程语言选择

  因为项目可能含有“文本识别”、“机器翻译”等人工智能方向的功能,所以选择python作为基础编程语言,后续的技术选择和分析会更有偏向性。

技术可行性分析

  在将功能拆解以后,整个产品的制作方式就变得非常清晰了,现在我们只用从下至上一步步验证实现技术的可行性就行了。(从上到下发现最后一步翻译的技术难如登天的话那也太蛋疼了)

  1. 文字显示
    稍微搜索就会发现用GUI就能实现。python的GUI有:wxPython、pyQt、Tkinter……前端思维就是新建一个显示特定文字的box,实现起来没什么难度。

  2. 机器翻译
    机器翻译也是有很多种的,比较古早的是基于符号系统的,现在的主流方向都是人工智能方向,网上有一些公开的模型,一些大公司也对外开放了免费翻译API。百度的就很好用,使用教程见:python调用百度通用翻译API进行翻译。测试效果如下:
    在这里插入图片描述

  3. 文字识别
    文字识别技术和机器翻译一样,现在的主流方向都是人工智能方向了,识别率高,识别速度快,网上同样有丰富的开源资源,如:TesseractOCR、EasyOCR、BaiduOCR、PaddleOCR……其中飞桨的PaddleOCR甚至提供了详细的模型训练的教程:这是PaddleOCR在gitee上的代码仓库,其中附带了详细的训练教程。测试效果如下:
    在这里插入图片描述

  4. 截图
    用python中PIL库的ImageGrab.grab方法即可获取指定位置,指定大小的矩形区域截图(当然必须是最顶层窗口的,我没找到像腾讯会议那种直接获取进程窗口句柄的方法)。测试效果如下:
    在这里插入图片描述

  5. 确定矩形对角线
    没想到这一步才是让我反复碰壁的。以前端思想,就是在按快捷键后监听鼠标的按压和松开事件,分别获取发生两个事件时的鼠标坐标就能确定要截图的矩形区域了。但是,python中鼠标事件的库pyhook的版本2因安全性问题用不了了,而pyhook3的python版本要求3.10以上,和PaddleOCR要求的版本冲突了,总之就是用不了。后面我想到一个办法,可以利用GUI轻松实现:在触发快捷键后,直接生成一个覆盖全屏并置顶的半透明窗口,通过点击这个矩形可以轻松获取当时的鼠标位置。测试效果如下:
    在这里插入图片描述

以上,我们通过简单的测试确认了每一步的关键技术是可行的,接下来只用着重于将各个模块实现并组合在一起即可。

具体实现

见下期:[从零开始]用python制作识图翻译器·三。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gateway基本配置

目录 1、gateway简介 2、gateway核心概念 3、路由 4、断言 5、过滤器 5.1、过滤器介绍 5.2、内置局部过滤器与使用 5.3、内置全局过滤器 5.4、自定义全局过滤器 5.4.1、黑名单校验 5.4.2、模拟登录校验 6、一个简单的gateway配置实例 1、gateway简介 路由转发 执行…

Linear Regression with PyTorch 用PyTorch实现线性回归

文章目录4、Linear Regression with PyTorch 用PyTorch实现线性回归4.1 Prepare dataset 准备数据集4.2 Design Model 设计模型4.2.1 __call__() 作用4.3 Construct Loss and Optimizer 构造损失和优化器4.4 Training Cycle 训练周期4.5 Test Model 测试模型4.6 Different Opti…

redis缓存淘汰策略

定时删除 Redis不可能时时刻刻遍历所有被设置了生存时间的key,来检测数据是否已经到达过期时间,然后对它进行删除。 立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。…

zookeeper学习笔记2(小D课堂)

zookeeper数据模型: 我们的zookeeper是以节点的形式存在的,这样的形式和数据结构中的树的形式很像。同时也很像我们的linux的结构,例如linux的/user/local目录下可以有我们的/usr/local/tomcat目录。这样的节点形式。 我们的zookeeper中的每…

算法练习-常用查找算法复现

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2023.1.1 Last edited: 2023.1.1 目录 算法练习-常用查找算法复现(PS:1 -- 3自己写的,4、5懒得写了&#xf…

PHP开发者之路

我们经常会发现,历时四年软件专业的大学生毕业居然找不到工作,即便找到了工作也只能是做一些简单的辅助性工作。 那么我们不禁要问,究竟是什么原因让我们可爱的大学生们学而无用,或者用而不学呢? 我认为主要是因为现…

三角形年份aabb3n+1近似计算阶乘之和数据统计水仙花数韩信点兵倒三角形子序列的和分数化小数排列蛇形填数sprintf竖式问题

目录 P16_习题1-6_三角形 P16_习题1-7_年份 P20_eg2-1_aabb 为什么是int n a*1100 b*11 为什么要将向下取整? P22_eg2-2_3n1问题 P24_eg2-3_近似计算 P25_eg2-4_阶乘之和 P27_eg2-5_数据统计 P34_习题2-1_水仙花数 P34_习题2-2_韩信点兵 P34_习题2-3_倒…

Fragment全文详解(由浅入深_源码分析)

相信android开发者们一定或多或少的用过Fragment,但是对于其更深层次的原理我猜可能大部分应该都没有了解过,今天这里就由浅入深,整体对Fragment做一个全面解析。 基础介绍 Fragment是什么以及为什么要有Fragment呢? Fragment直…

长沙烟火气回来了,颐而康客流回暖为什么这么快?

随着一大批阳康的人们走出家门,长沙这座消费之城也逐步恢复了往日的活力。车多起来了、路堵起来了、线下店铺恢复营业了、长沙的烟火气息又回来了。 在颐而康万家丽西子店的大厅里,等候休息区已经坐满了顾客,他们有的在等待,有的…

Centos6从零开始安装mysql和tomcat后台环境,并成功部署Tomcat项目

最近因为搞定了一些环境的搭建因为项目过于老旧的缘故我从centosstream9一直改换7一直到6都没有成功一直到改成6.5的32位版本才算是成功搭建完成所以特地来写一篇文章记录一下。 首先我的liunx使用版本是 centos6.5 32位 java版本:jdkCentos6从零开始安装mysql和tom…

7-6 整除光棍

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定…

【Kuangbin数论】阿拉丁和飞毯

4577. 阿拉丁和飞毯 - AcWing题库 题意&#xff1a; 思路&#xff1a; 就是去求x和y 使得 1.x!y 2.x*ya 3.min(x,y)b 一开始想的是去根号n地枚举a的约数 &#xff0c;然后直接统计 但是这样肯定T&#xff0c;所以换成dfs枚举约数去了 但是也T了 首先a*a<b的话直接特…

前端 | 手把手教你装饰你的github profile(github 首页)

1.创建存储库 您可以创建一个与您的 github 帐户名同名的存储库 添加README文件 2.编辑README.md 现在&#xff0c;可以根据自己的喜好修改 repo 中的自述文件&#xff0c;但我在考虑包含哪些信息时查看了其他开发人员的资料。通常包括简短的介绍、使用的技术堆栈和联系方式…

Buildroot编译hisi平台根文件系统

Buildroot编译hisi平台根文件系统 文章目录1. 下载Buildroot源码2. Menuconfig配置3. 编译Buildroot3.1 手动下载软件包3.2 kernel header 报错3.3 arm-hisiv300-linux-gcc-ar&#xff1a;cannot find plugin liblto_plugin.so3.4 /media/data/hisi/buildroot-2022.02.8/output…

C++类的多种构造函数

目录默认构造函数普通构造函数拷贝构造函数转换构造函数移动构造函数举例两个场景下面以Complex 复数类来学习C类中的各种构造函数; #include <iostream> using namespace std;//复数类 class Complex{friend ostream & operator<<(ostream &out, Complex…

2022年终结——人生中最美好的一站

文章目录前言回顾2022工作上学习上投资上生活上展望2023工作学习投资生活总结有一种责任与压力&#xff0c;叫做上有老下有小&#xff0c;但有一种幸福也叫做上有老下有小&#xff0c;当你遭遇挫折与困难时&#xff0c;这些“老小”以及那个同龄的“她”是你坚实的后盾&#xf…

Redisson中的“琐事”

文章目录前言锁分类Redisson可重入锁&#xff08;Reentrant Lock&#xff09;公平锁&#xff08;Fair Lock&#xff09;联锁&#xff08;MultiLock&#xff09;红锁&#xff08;RedLock&#xff09;读写锁&#xff08;ReadWriteLock&#xff09;信号量&#xff08;Semaphore&am…

【C++】左值、右值、语义移动和完美转发

右值引入的目的是为了对象移动&#xff1a; 因为在很多情况下&#xff0c;对象拷贝会经常发生&#xff0c;但是很多对象在拷贝后就直接被销毁了。这对性能是一个很大损耗。在重新分配内存的时候&#xff0c;从旧的内存将元素拷贝到新的内存中是不必要的。更好的方法是移动元素。…

论文投稿指南——中文核心期刊推荐(天文、测绘学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

使用Kalibr问题汇总:ModuleNotFoundError: No module named ‘wx‘

问题1&#xff1a; 报错&#xff1a;/kalibr_ws/src/Kalibr/Schweizer-Messer/sm_python/python/sm/PlotCollection.py", line 4, in import wx ModuleNotFoundError: No module named ‘wx’ 解决&#xff1a; sudo apt-get install python3-wxgtk4.0问题2&#xff1…