如何离线使用 yolov5 api 和 flask?

How to use yolov5 api with flask offline?

我能够在具有互联网连接的 PC 上 运行 带有 yolov5 的 Flask 应用程序。我按照 yolov5 文档中提到的步骤使用了这个文件:yolov5/utils/flask_rest_api/restapi.py,

但我需要实现相同的离线(在特定 PC 上)。现在的问题是,当我使用以下内容时:

model = torch.hub.load("ultralytics/yolov5", "yolov5", force_reload=True)

它试图从互联网上下载模型。并抛出错误。

Urllib.error.URLError: <urlopen error [Errno - 2] name or service not known>

如何离线获得相同的结果。

提前致谢。

如果您想运行离线检测,您需要已经下载了模型。

因此,从 https://github.com/ultralytics/yolov5/releases 下载模型(例如 yolov5s.pt)并将其存储到 yolov5/models。

之后,替换

# model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True)  # force_reload to recache

model = torch.hub.load(r'C:\Users\Milan\Projects\yolov5', 'custom', path=r'C:\Users\Milan\Projects\yolov5\models\yolov5s.pt', source='local')

有了这条线,你也可以运行离线检测。

注意:当您第一次使用更新后的 torch.hub.load 启动应用程序时,如果模型不存在,它将下载该模型(因此您无需从 https://github.com/ultralytics/yolov5/releases 下载)。

这里还涉及到一个问题。当此代码在完全没有互联网连接的计算机上为 运行 时。那么你可能会遇到如下错误。

Downloading https://ultralytics.com/assets/Arial.ttf to /home/<local_user>/.config/Ultralytics/Arial.ttf...
Traceback (most recent call last):
  File "/home/<local_user>/Py_Prac_WSL/yolov5-flask-master/yolov5/utils/plots.py", line 56, in check_pil_font
    return ImageFont.truetype(str(font) if font.exists() else font.name, size)
  File "/home/<local_user>/.local/share/virtualenvs/23_Jun-82xb8nrB/lib/python3.8/site-packages/PIL/ImageFont.py", line 836, in truetype
    return freetype(font)
  File "/home/<local_user>/.local/share/virtualenvs/23_Jun-82xb8nrB/lib/python3.8/site-packages/PIL/ImageFont.py", line 833, in freetype
    return FreeTypeFont(font, size, index, encoding, layout_engine)
  File "/home/<local_user>/.local/share/virtualenvs/23_Jun-82xb8nrB/lib/python3.8/site-packages/PIL/ImageFont.py", line 193, in __init__
    self.font = core.getfont(
OSError: cannot open resource

要克服此错误,您需要从 https://ultralytics.com/assets/Arial.ttf 手动下载 Arial.ttf 文件并将其粘贴到 Linux 上的以下位置:

/home/<your_pc_user>/.config/Ultralytics

在 windows 上,在此处粘贴 Arial.ttf:

C:\Windows\Fonts

错误消息的第一行提到了同样的事情。在此之后,代码运行在离线模式下顺利进行。

此外,如 https://docs.ultralytics.com/tutorials/pytorch-hub/ 所述,除 PyTorch-model-hub 上传的以外,任何 custom-trained-model 都可以通过此代码访问。

path_hubconfig = 'absolute/path/to/yolov5'
path_trained_model = 'absolute/path/to/best.pt'
model = torch.hub.load(path_hubconfig, 'custom', path=path_trained_model, source='local')  # local repo

通过这段代码,对象检测是由本地保存的custom-trained模型进行的。曾经,自定义训练模型保存在本地,这段代码直接访问它,避免了互联网的任何必要性。