端到端公式识别模型 支持多种输入格式
TexTeller是一个基于TrOCR的公式识别模型,可将图像转换为LaTeX公式。该模型使用8000万对图像-公式数据训练,具备优秀的泛化能力和准确度。TexTeller支持多种输入格式,包括扫描图像、手写公式和中英文混合公式,还提供中英文印刷体OCR功能。此外,项目集成了公式检测、段落识别和Web演示界面,便于与其他项目整合。
📄 English | <a href="./assets/README_zh.md">中文</a>
<div align="center"> <h1> <img src="https://yellow-cdn.veclightyear.com/835a84d5/814239b6-ac6c-4f8c-b536-11038cf802a3.svg" width=30, height=30> 𝚃𝚎𝚡𝚃𝚎𝚕𝚕𝚎𝚛 <img src="https://yellow-cdn.veclightyear.com/835a84d5/814239b6-ac6c-4f8c-b536-11038cf802a3.svg" width=30, height=30> </h1> </div>https://github.com/OleehyO/TexTeller/assets/56267907/532d1471-a72e-4960-9677-ec6c19db289f
TexTeller是一个基于TrOCR的端到端公式识别模型,能够将图像转换为相应的LaTeX公式。
TexTeller使用8000万对图像-公式数据进行训练(之前的数据集可以在这里获取),相比于LaTeX-OCR使用的10万数据集,TexTeller具有更强的泛化能力和更高的准确性,覆盖了大多数使用场景。
[!NOTE] 如果您想为这个项目提供反馈或建议,欢迎在讨论区开启讨论。
另外,如果您觉得这个项目有帮助,请不要忘记给它一个星星⭐️🙏️
📮[2024-06-06] TexTeller3.0发布! 训练数据已增加到8000万(比TexTeller2.0多10倍,数据多样性也有所提高)。TexTeller3.0的新特性:
支持扫描图像、手写公式、中英 文混合公式。
具备中英文打印图像的OCR能力。
📮[2024-05-02] 支持段落识别。
📮[2024-04-12] 公式检测模型发布!
📮[2024-03-25] TexTeller2.0发布!TexTeller2.0的训练数据增加到750万(比TexTeller1.0多15倍,数据质量也有所提高)。经过训练的TexTeller2.0在测试集上表现出卓越的性能,尤其是在识别罕见符号、复杂多行公式和矩阵方面。
这里有更多测试图像和各种识别模型的横向比较。
克隆仓库:
git clone https://github.com/OleehyO/TexTeller
安装项目依赖:
pip install texteller
进入src/
目录,在终端中运行以下命令开始推理:
python inference.py -img "/path/to/image.{jpg,png}" # 使用--inference-mode选项启用GPU(cuda或mps)推理 #+例如:python inference.py -img "img.jpg" --inference-mode cuda
第一次运行时,将从Hugging Face下载所需的检查点。
如视频所示,TexTeller也能够识别整段文本。虽然TexTeller具有通用文本OCR能力,但我们仍建议使用段落识别以获得更好的结果:
下载权重并将公式检测模型放入src/models/det_model/model/
目录
在src/
目录中运行inference.py
并添加-mix
选项,结果将以markdown格式输出。
python inference.py -img "/path/to/image.{jpg,png}" -mix
TexTeller默认使用轻量级的PaddleOCR模型来识别中英文文本。您可以尝试使用更大的模型来获得更好的中英文识别结果:
检查点 | 模型描述 | 大小 |
---|---|---|
ch_PP-OCRv4_det.onnx | 默认检测模型,支持中英文文本检测 | 4.70M |
ch_PP-OCRv4_server_det.onnx | 高精度模型,支持中英文文本检测 | 115M |
ch_PP-OCRv4_rec.onnx | 默认识别模型,支持中英文文本识别 | 10.80M |
ch_PP-OCRv4_server_rec.onnx | 高精度模型,支持中英文文本识别 | 90.60M |
将识别/检测模型的权重放在src/models/third_party/paddleocr/checkpoints/
下的det/
或rec/
目录中,并将其重命名为default_model.onnx
。
[!NOTE] 段落识别无法还原文档的结构,它只能识别其内容。
进入src/
目录并运行以下命令:
./start_web.sh
在浏览器中输入http://localhost:8501
即可查看网页演示。
[!NOTE]
- 对于Windows用户,请运行
start_web.bat
文件。- 使用onnxruntime + GPU进行推理时,需要安装onnxruntime-gpu。
TexTeller的公式检测模型在3,415张中文教育材料图像(包含130多种布局)和8,272张来自IBEM数据集的图像上进行训练,支持对整张图像进行公式检测。
<div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/84d99c38-3ce3-4090-8995-deb92c5724ba.png" width=250> </div>下载模型权重并将其放置在src/models/det_model/model/
目录下[链接]。
在src/
目录下运行以下命令,结果将保存在src/subimages/
目录中
在公式检测之后,在src/
目录下运行以下命令:
python rec_infer_from_crop_imgs.py
这将使用之前的公式检测结果对所有裁剪出的公式进行批量识别,并将识别结果以txt文件形式保存在src/results/
目录中。
我们使用ray serve为TexTeller提供API接口,使您能够将TexTeller集成到自己的项目中。要启动服务器,首先需要进入src/
目录,然后运行以下命令:
python server.py
参数 | 描述 |
---|---|
-ckpt | 权重文件路径,默认为TexTeller的预训练权重。 |
-tknz | 分词器路径,默认为TexTeller的分词器。 |
-port | 服务器服务端口,默认为8000。 |
--inference-mode | 是否使用"cuda"或"mps"进行推理,默认为"cpu"。 |
--num_beams | 束搜索的束数,默认为1。 |
--num_replicas | 在服务器上运行的服务副本数量,默认为1个副本。您可以使用更多副本来实现更高的吞吐量。 |
--ncpu_per_replica | 每个服务副本使用的CPU核心数,默认为1。 |
--ngpu_per_replica | 每个服务副本使用的GPU数量,默认为1。您可以将此值设置在0到1之间,以在一个GPU上运行多个服务副本来共享GPU,从而提高GPU利用率。(注意,如果--num_replicas为2,--ngpu_per_replica为0.7,则必须有2个可用的GPU) |
-onnx | 使用Onnx Runtime进行推理,默认禁用 |
[!注意] 客户端演示可以在
src/client/demo.py
中找到,您可以参考demo.py
向服务器发送请求
我们在src/models/ocr_model/train/dataset/
目录中提供了一个示例数据集,您可以将自己的图像放在images/
目录中,并在formulas.jsonl
中为每个图像标注相应的公式。
准备好数据集后,您需要在**/train/dataset/loader.py
中将DIR_URL
变量更改为您自己数据集的路径
如果您使用的是不同的数据集,可能需要重新训练分词器以获得不同的词汇表。配置好数据集后,您可以使用以下命令训练自己的分词器:
在src/models/tokenizer/train.py
中,将new_tokenizer.save_pretrained('./your_dir_name')
更改为您的自定义输出目录
如果您想使用不同的词汇量大小(默认15K),需要在
src/models/globals.py
中更改VOCAB_SIZE
变量
在src/
目录下,运行以下命令:
python -m models.tokenizer.train
在src/train_config.yaml
中修改num_processes
以匹配可用于训练的GPU数量(默认为1)。
在src/
目录下,运行以下命令:
accelerate launch --config_file ./train_config.yaml -m models.ocr_model.train.train
您可以在src/models/ocr_model/train/train.py
中设置自己的分词器和检查点路径(更多信息请参考train.py
)。如果您使用的架构和词汇表与TexTeller相同,您还可以使用自己的数据集对TexTeller的默认权重进行微调。
在src/globals.py
和src/models/ocr_model/train/train_args.py
中,您可以更改模型的架构和训练超参数。
[!注意] 我们的训练脚本使用Hugging Face Transformers库,因此您可以参考他们的文档获取有关训练参数的更多详细信息和配置。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生 成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号