Mistral AI OCR介绍

从本期开始将整理一些常用的 LaTeX 相关工具，回归一下本账号成立的初衷。

简要介绍

在过去，最好用的识别数学公式并进行代码转换的网站 / 软件莫过于 Mathpix 了：支持各种格式转换，比如 pdf,png 到 tex,md，当然也包括 docx 等等，无论是 pdf 文档转换还是截图识别，从移动端的 Snip App 再到桌面客户端以及网页版、浏览器插件全生态的覆盖让使用体验无比丝滑。

但免费版的使用额度相当有限，而付费订阅又太贵（一年 50 美刀）；此外，网页版还偶尔会出现网络连接不稳定的情形。

不过现在，号称地表最强的 OCR 工具 Mistral 出现了。这是一家法国的初创 AI 公司，可以理解为欧洲版的 DeepSeek，它的价格也十分便宜（OCR 功能大概 1 美刀可以转换上千页 pdf）。

使用示例

文件上传

直接访问官网聊天界面（可能需要用手机号注册账号）：

https://chat.mistral.ai/chat

像其他大语言模型一样对话框内上传文件，输入 “转换成 markdown” 即可；比如这里我上传了一篇和 DeepSeek-R1 的论文：

等待几秒钟，即可得到转换后的 markdown 代码。
进一步地，利用 Typora 或 Obsidian 等 markdown 编辑器，即可查看或转换成 pdf、docx 等格式（可能需要额外安装 pandoc）。

网页版效果展示

更多效果展示请参阅官网介绍：

https://mistral.ai/news/mistral-ocr

这是原来的 pdf 文件：

这是转化后并在 Typora 中显示的效果（主题：Newsprint）：

可以看到，除了图片外的效果非常不错，但如果要把图片也提取出来并在相应位置保留，就需要用到下面的方法了。

进阶配置

除了在官网的对话界面处理文件外，也可以通过 API 调用进行批量处理。
感谢@nicekate 提供的 Python 代码，可以实现在本地调用 Mistral API 进行文件处理，并且在 B 站上还有相应的演示视频。

GitHub 仓库地址：
https://github.com/nicekate/mistral-ocr

B 站视频：
【实测 Mistral OCR ：世界最佳文档理解模型？】 https://www.bilibili.com/video/BV1Bw92YiEEH

配置方法也非常简单，只需要申请一个自己的 API key，然后再把上面的仓库 clone 下来，填入相应的 API key 即可。

申请 API key

在控制台左侧菜单栏点击 "API Keys"，然后点击右上角的 “Create new key”，复制即可。

https://console.mistral.ai/home

下载 Python 代码

先将上述仓库 clone 到本地：

Copy
git clone https://github.com/nicekate/mistral-ocr.git

再安装依赖项：

Copy
pip install mistralai

在pdf_ocr.py 中修改 API 密钥和 PDF 文件路径即可（72～73 行）：

Copy
API_KEY = "填入你自己的api key""

PDF_PATH = "xxx.pdf"

运行文件，即可在同目录下找到转换后的文件夹ocr_results_xxx，其中包含了转换后的 markdown 文件和图片文件。

本地转换效果展示

主题：Typora GitHub

批处理

有时需要同时进行多个 PDF 文件的转换，于是在此基础上我自己动手增加了批处理功能，可以将同一目录下的所有 PDF 文件进行转换。

具体修改如下：

新增 get_pdf_files_in_directory 函数，用于扫描指定文件夹并返回所有 PDF 文件的完整路径。

在 __main__ 中，替换手动指定 PDF 文件路径的方式，改为从文件夹中自动获取 PDF 文件。

如果文件夹中没有 PDF 文件，会提示用户。
以下是新增的代码片段：

Copy
def process_pdfs(pdf_paths: list, api_key: str) -> None:

for pdf_path in pdf_paths:

try:

output_dir = process_pdf(pdf_path, api_key)

print(f"文件 {pdf_path} 处理完成，结果保存在: {output_dir}")

except Exception as e:

print(f"处理文件 {pdf_path} 时出错: {e}")

def get_pdf_files_in_directory(directory: str) -> list:

"""获取指定目录中的所有PDF文件路径"""

pdf_files = []

for file in os.listdir(directory):

if file.endswith(".pdf"):

pdf_files.append(os.path.join(directory, file))

return pdf_files

if __name__ == "__main__":

# 使用示例

API_KEY = "your_mistral_api_key"

DIRECTORY = "your_pdf_file" # 指定包含PDF文件的文件夹名称

# 获取文件夹中的所有PDF文件

PDF_PATHS = get_pdf_files_in_directory(DIRECTORY)

if not PDF_PATHS:

print(f"目录 {DIRECTORY} 中没有找到PDF文件。")

else:

process_pdfs(PDF_PATHS, API_KEY)

完整的文件已上传至 GitHub，欢迎 star：

参考资料

完美翻译 PDF 的第一步 - Mistral OCR 初步使用指南 https://zhuanlan.zhihu.com/p/28801320889

【实测 Mistral OCR ：世界最佳文档理解模型？】 https://www.bilibili.com/video/BV1Bw92YiEEH

https://github.com/nicekate/mistral-ocr

在前者基础上增加批处理功能：https://github.com/YZDame/mistral-ocr