tesseract.js-core
tesseract.js 的核心部分,将原始 tesseract 从 C 语言编译为 JavaScript WebAssembly。
编译
要自行构建 tesseract-core.js,请安装 docker 并运行:
bash build-with-docker.sh
生成的文件将存储在根路径中。编译时,有时会由于竞争条件而出现错误(某些依赖项似乎无法正确并行编译)。重新运行通常可以解决问题。
结构
- 构建脚本位于
build-scripts
文件夹中 - JavaScript/包装器文件位于
javascript
文件夹中 - 所有依赖项(包括 Tesseract)都在
third_party
文件夹中- 除 Tesseract 外,所有依赖项均未修改,Tesseract 使用了一个 fork 版本的仓库
- Tesseract 仓库有以下变更:
- 修改了
CMakeLists.txt
以使用 emscripten 构建 - 修改了
ltrresultiterator.h
和ltrresultiterator.cpp
以添加WordChoiceIterator
类 - 添加了
src/arch_see
文件夹,用于支持 SIMD 的构建- 这里硬编码了 SSE 函数的使用
- 在
src/textord/colfind.cpp
中注释掉了 "Empty page!!" 消息,以防止其打印到控制台 - 添加了检测页面角度和应用旋转的功能
- 修改了
src/ccmain/thresholder.cpp
、src/ccmain/thresholder.h
、src/api/baseapi.cpp
和include/tesseract/baseapi.h
,添加了exif
和angle
参数用于旋转图像 - 在
baseapi.h
中将FindLines
从 "protected" 改为 "public",以便暴露给 JavaScript- 允许在不执行后续不必要步骤的情况下检测行(从而检测页面角度)
- 在
baseapi.h
和baseapi.cpp
中添加了公共GetGradient
函数,用于报告页面角度- 还需要对
src/ccmain/tesseractclass.h
、src/ccmain/pagesegmain.cpp
、src/textord/textord.cpp
和src/textord/textord.h
进行小幅修改
- 还需要对
- 修改了
- 在
baseapi.h
和baseapi.cpp
中添加了WriteImage
函数,用于保存图像(原始、灰度和二值) - 在
baseapi.h
和baseapi.cpp
中添加了SaveParameters
和RestoreParameters
函数,用于保存和恢复参数 - 在
src/ccmain/control.cpp
中添加了对EM_ASM_ARGS
的调用,用于进度日志记录(并添加了<emscripten.h>
头文件) - 重写了
src/ccutil/tprintf.cpp
中的tprintf
函数,以强制刷新 - 在
src/api/baseapi.cpp
和include/tesseract/baseapi.h
中添加了新版本的SetImage
,用于从文件系统读取图像- 这是为了解决内存泄漏问题 —— 参见此问题
- 编辑了
src/ccutil/params.cpp
中的ParamUtils::PrintParams
,删除了描述文本(解决了一个 bug)- 该 bug 在这个 Git Issue 中被报告,如果在未来版本的 Tesseract 中得到解决,我们可以删除这一点
- 编辑了
src/ccmain/tessedit.cpp
,将错误日志保存到单独的文件(/debugDev.txt
)
- 修改了
运行最小示例
要运行浏览器示例,请在仓库根目录启动一个 Web 服务器(例如运行 http-server
)。然后在浏览器中导航到 examples/web/minimal/
中的页面。
要运行 Node 示例,请导航到 examples/node/minimal/
目录,然后运行如 node index.wasm.js [input_file]
。
"基准测试"示例的行为类似,只是运行时间更长,并报告运行时间而不是识别文本。所有其他示例都是实验性的,不应期望能够运行。
贡献
由于我们使用 git-submodule 来管理依赖项,请在克隆仓库时记得添加递归选项:
git clone --recursive https://github.com/naptha/tesseract.js-core