安装PDFMathTranslate遇到huggingface_hub.errors.LocalEntryNotFoundError的修复方案

部署运行你感兴趣的模型镜像

1.概述

2025年2月19日,历时5小时,安装PDFMathTranslate工具,通过ollama本地调用预训练大模型,成功运行,实现了英文科技论文机器翻译为中文,并保持原文件排版。

安装过程并不复杂,根据网上已有教程,一步步操作即可。

但安装完成后,输入pdf2zh -i或pdf2zh test.pdf后总是报错,命令行输出的最后一行错误信息如下。

huggingface_hub.errors.LocalEntryNotFoundError: An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on.

查阅网络信息得知,这个问题是在尝试从 Hugging Face Hub 下载模型时出现了连接超时和文件未找到的错误。

网友方法1:

如果在启动时下载该模型遇到问题,可使用如下环境变量:

set HF_ENDPOINT=https://hf-mirror.com

但根据说明设置后,仍报出以上错误,该方法对本人环境无效。

网友方法2:

发现问题出现在代理服务器上,如果通过 all_proxy / http_proxy 等方式指定了代理,则就会如上报错,但没有代理又无法访问huggingface_hub,因此解决的方式是本机不要设置代理,在路由器上采用自动代理,或者在本地开启代理软件设置为全局代理模式。均可规避上述错误。

本人菜鸟,不会进行相关设置,故该方法对本人也无效。

重新梳理报错情况,发现引发该网络连接错误的原因是,pdf2zh的运行依赖于额外模型(wybxc/DocLayout-YOLO-DocStructBench-onnx),该模型需要从Hugging Face Hub 在线下载。

2.解决方法

解决思路:

用最笨最粗暴的办法,先手动下载该模型文件,放到指定路径;再手动修改相应代码段,将模型文件路径直接赋值到模型调用路径,以绕过下载,解决该问题。

第一步,从魔搭社区下载该模型。

下载链接为:魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。https://www.modelscope.cn/models/AI-ModelScope/DocLayout-YOLO-DocStructBench-onnx/files

下载页面为:

点击下载即可,下载完成本地模型,找到该模型路径为(该路径请根据各自电脑实际情况替换,后边会用到):

D:/PycharmProjects/ModelTest/doclayout_yolo_docstructbench_imgsz1024.onnx

第二步,找到调用该模型的文件代码位置。

查看报错信息,调用该模型的代码文件为:

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python312\Scripts\pdf2zh.exe\__main__.py", line 7, in <module>
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python312\Lib\site-packages\pdf2zh\pdf2zh.py", line 234, in main
    ModelInstance.value = OnnxModel.load_available()
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python312\Lib\site-packages\pdf2zh\doclayout.py", line 25, in load_available
    return DocLayoutModel.load_onnx()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python312\Lib\site-packages\pdf2zh\doclayout.py", line 17, in load_onnx
    model = OnnxModel.from_pretrained(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python312\Lib\site-packages\pdf2zh\doclayout.py", line 87, in from_pretrained
    pth = hf_hub_download(repo_id=repo_id, filename=filename, etag_timeout=1)

查看发现,调用该模型的函数位于文件doclayout.py中:

C:\Users\xxx\AppData\Local\Programs\Python\Python312\Lib\site-packages\pdf2zh\doclayout.py", line 17, in load_onnx
    model = OnnxModel.from_pretrained(

打开该文件,找到函数定义def from_pretrained(repo_id: str, filename: str):

class OnnxModel(DocLayoutModel):
    def __init__(self, model_path: str):
        self.model_path = model_path

        model = onnx.load(model_path)
        metadata = {d.key: d.value for d in model.metadata_props}
        self._stride = ast.literal_eval(metadata["stride"])
        self._names = ast.literal_eval(metadata["names"])

        self.model = onnxruntime.InferenceSession(model.SerializeToString())

    @staticmethod
    def from_pretrained(repo_id: str, filename: str):
        if ConfigManager.get("USE_MODELSCOPE", "0") == "1":
            repo_mapping = {
                # Edit here to add more models
                "wybxc/DocLayout-YOLO-DocStructBench-onnx": "AI-ModelScope/DocLayout-YOLO-DocStructBench-onnx"
            }
            from modelscope import snapshot_download

            model_dir = snapshot_download(repo_mapping[repo_id])
            pth = os.path.join(model_dir, filename)
        else:
            pth = hf_hub_download(repo_id=repo_id, filename=filename, etag_timeout=1)
        return OnnxModel(pth)

发现函数from_pretrained(repo_id: str, filename: str)返回模型路径pth,修改该路径为当前环境中onnx模型文件路径即可。

第三步,修改函数中pth的路径为绝对值。

此处我将该文件放置在与doclayout.py文件相同路径下,修改后的函数from_pretrained(repo_id: str, filename: str)定义如下。

def from_pretrained(repo_id: str, filename: str):
        pth = "C:/Users/xxx/AppData/Local/Programs/Python/Python312/Lib/site-packages/pdf2zh/doclayout_yolo_docstructbench_imgsz1024.onnx"
        return OnnxModel(pth)

保存doclayout.py文件,重新测试运行pdf2zh -h等代码,不再报出huggingface_hub.errors.LocalEntryNotFoundError错误。

第四步,测试过程。

使用ollama拉取模型,此处采用qwen2.5:7b模型进行测试。

命令行切换到测试文件所在路径。

D:/PycharmProjects/ModelTest>

在命令行输入命令。

D:\PycharmProjects\ModelTest>pdf2zh eng2.pdf -s ollama:qwen2.5:7b

输出结果如下。

工具成功运行。

3.测试结果

翻译效果如下。

对本人而言,机器翻译科技论文能有这个效果就很不错了,内容基本ok,排版也ok,输出文件既有中英文对照版,也有仅中文版,虽然目录稍显混乱,但不影响阅读,VeryNice。

还有一个影响使用的小情况待解决,目前在个人笔记本运行该工具的速度太慢,翻译一个8页的英文PDF文章,耗时40多分钟;测试发现,果然目前ollama框架运行时未调用本机GPU,纯CPU运行速度慢,使用GPU应该可以加速运行,后边有机会使用GPU进行测试。

最后,Solute To开源PDFMathTranslate和输出工具安全教程、问题解决教程的大佬们,感谢。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

出现 `ImportError: cannot import LocalEntryNotFoundError from huggingface_hub.errors` 错误通常表明你尝试导入的类 `LocalEntryNotFoundError` 并不存在于当前安装的 `huggingface_hub` 库版本中。这可能是由于以下原因: 1. **类名拼写错误或不存在**:Hugging Face Hub 的错误类中可能没有名为 `LocalEntryNotFoundError` 的类。你可能误将其他错误类名拼写错误,或者该类尚未在公开版本中发布[^1]。 2. **版本不兼容**:你正在使用的 `huggingface_hub` 版本可能不包含该错误类。某些错误类可能是在较新版本中引入的,而你的本地环境安装的是旧版本。 3. **API 变更**:Hugging Face 的库可能会在不同版本之间进行 API 调整,某些类或模块可能被重命名、移除或重构。 ### 解决方案 - **检查类名拼写**:确认你尝试导入的类名是否正确。Hugging Face Hub 中常见的错误类包括 `EntryNotFoundError`、`ModelNotFoundError` 等,但目前并未公开 `LocalEntryNotFoundError` 这一名称[^1]。 - **升级 `huggingface_hub` 到最新版本**:使用以下命令升级库以确保你使用的是最新 API: ```bash pip install --upgrade huggingface_hub ``` - **查看官方文档**:查阅 [Hugging Face Hub 官方文档](https://huggingface.co/docs/huggingface_hub/main/en/),确认你所使用的错误类是否存在于当前版本的 API 中。 - **替代方式处理错误**:如果你只是希望捕获模型或文件未找到的异常,可以使用已存在的 `EntryNotFoundError` 或 `ModelNotFoundError`: ```python from huggingface_hub import HfApi from huggingface_hub.errors import EntryNotFoundError try: # 尝试下载或访问模型 api = HfApi() model_info = api.model_info("non-existent-model") except EntryNotFoundError: print("模型未找到,请确认模型名称是否正确。") ``` - **查看 GitHub 仓库源码**:如果你怀疑该类可能存在于某个尚未发布的分支中,可以前往 [huggingface/huggingface_hub GitHub 仓库](https://github.com/huggingface/huggingface_hub) 查看最新源码中的错误类定义。 ### 示例代码:捕获模型未找到错误 ```python from huggingface_hub.errors import EntryNotFoundError try: # 模拟访问不存在的模型 raise EntryNotFoundError("模型不存在,请检查名称") except EntryNotFoundError as e: print(f"捕获到错误:{e}") ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值