Rainbow OCR: 一款简单、安全、快捷的图像文字识别与翻译工具

Saturday, March 26, 2022

img

WebAssembly

在介绍这个工具之前,我想先简单聊一下对于WebAssembly这个技术。

WebAssemlby不在传统的前端知识框架范畴之内,它使得前端项目可以以很小的性能损失来调用非JS语言编写的代码,比如C/C++。你也许会问为什么要这么做?为什么不用JS来写呢?我认为是两个原因。第一,JS作为一个动态语言,先天在性能上与系统编程语言有差距,尽管现在JS引擎已经优化了很好了,但是有些东西你无法通过引擎优化来弥补,比如冷启动,没有整数类型,没有精细化内存管理,无法访问高级CPU指令等等。第二,JS是一个编程语言,而WebAssembly是语言无关的,只定义了一种二进制格式和虚拟机。因此,JS和WebAssembly两者是互补关系,而非竞争关系,WebAssembly的出现会使得Web平台能力得到前所未有的提升。

从实现角度上来看,WebAssembly完全复用了现有编译器的前端部分(词法解析/中间代码生成/代码优化),通过替换编译器后端(机器码生成)生成WebAssembly虚拟机字节码。

从前端开发角度来看,WebAssembly引入了一套全新的对于前端来讲比较陌生的工具链,入门成本是有点高的。

最后不得不提一下Emscripten这个项目,如果没有这个项目,你会发现你想把一个C语言写的helloworld应用编译成WebAssembly也很困难。原因是每个C语言的项目一定会依赖于C运行时,举个例子,C运行时提供诸如printf这个看似普通的格式化输出函数。Emscripten能够自动帮你生成JS与WebAssembly之间调用的胶水代码。通常情况下,只要你的C/C++代码不直接调用系统的API或者使用汇编代码,你不需要改变任何代码,只需要重新写一个构建脚本(比如CMake),就能够完成C/C++到WebAssembly的编译。注意,这里这个编译过程只需要执行一次,就能够在所有支持WebAssembly的平台里面运行,这一点和Java非常类似。

产品背景

这个项目起源于我自己的一个需求。在二月份的时候我在Amazon美国站点上面买了本英文电子书,Web版本的Kindle是不支持文字的选择的,这么一来我原先安装的Google Translate Chrome插件就没法用了,这给我看书带来了很大的不变。于是我在Chrome扩展市场里面查找了一番,试用了好几个插件,没有一个能够完全符合我的需求,最大的问题就是这些插件都是通过把图片发送到远程服务器进行识别,然后返回结果。这种方式受到网络的影响很严重,且也不太安全。正巧二月份我正好在学习WebAssembly,一直想找一个实战的项目进行落地。于是乎Rainbow OCR这个项目就诞生了。起初我打算做一个Chrome插件,后来做着做着我发现为啥要局限在浏览器里面呢,这个工具脱离浏览器能够有更大的发挥空间,于是乎就用Electron做了个壳,我之前也没用过Electron,第一次使用给我的体验是惊艳的,开发一个跨平台的桌面应用竟然如此简单。在Mac上面开发完之后,我只做了很小的代码调整就在Windows上面顺利的跑起来了。

产品功能

电脑上不能够复制的文字,点击“框选桌面区域”按钮,选择文字所在区域,工具自动把文字内容识别出来,识别后的内容可随意编辑和复制。

同时工具会对识别出来的内容进行翻译(翻译目标语言可自主选择,默认为中文)。

  • 支持多种内容来源:文件、剪贴板或截屏
  • 高安全性:识别过程发生在用户电脑上,不会把你的内容上传到外部服务器上
  • 高性能:使用CPU SIMD扩展指令及多线程能力,识别速度快
  • 保留历史记录,方便追溯之前的识别内容
  • 支持7种常用语言识别(简体中文,繁体中文,英语,日语,德语,法语,西班牙语)
  • 支持100多种目标翻译语言
  • 换行保留或自动剔除,对于代码类截屏友好
  • 同时支持Windows和Mac两个操作系统

如果你也有这方面的需求,可以到这里下载使用,完全免费,有啥问题随时与我交流。

毓杰Oliver © 2022 - Present