Hugging Face SpacesとYOLOv5モデル(NDL-DocLデータセットで学習済み)を使った推論アプリの修正

2024/05/20に公開

概要

以下の記事でHugging Face Spacesと、以下の記事で紹介したYOLOv5モデル(NDL-DocLデータセットで学習済み)を使った推論アプリを紹介しました。

https://zenn.dev/nakamura196/articles/d33cf08cce6f37

このアプリが動作しなくなっていたため、動作するように修正しました。

https://huggingface.co/spaces/nakamura196/yolov5-ndl-layout

この修正で行なった対応についてメモします。

修正点

修正を加えたapp.pyは以下です。

app.py
import gradio as gr
from PIL import Image
import yolov5
import json

model = yolov5.load("nakamura196/yolov5-ndl-layout")

def yolo(im):

    results = model(im)  # inference

    df = results.pandas().xyxy[0].to_json(orient="records")
    res = json.loads(df)

    im_with_boxes = results.render()[0]  # results.render() returns a list of images
    
    # Convert the numpy array back to an image
    output_image = Image.fromarray(im_with_boxes)

    return [
        output_image,
        res
    ]


inputs = gr.Image(type='pil', label="Original Image")
outputs = [
    gr.Image(type="pil", label="Output Image"), 
    gr.JSON()
]

title = "YOLOv5 NDL-DocL Datasets"
description = "YOLOv5 NDL-DocL Datasets Gradio demo for object detection. Upload an image or click an example image to use."
article = "<p style='text-align: center'>YOLOv5 NDL-DocL Datasets is an object detection model trained on the <a href=\"https://github.com/ndl-lab/layout-dataset\">NDL-DocL Datasets</a>.</p>"

examples = [
    ['『源氏物語』(東京大学総合図書館所蔵).jpg'],
    ['『源氏物語』(京都大学所蔵).jpg'],
    ['『平家物語』(国文学研究資料館提供).jpg']
]
demo = gr.Interface(yolo, inputs, outputs, title=title, description=description, article=article, examples=examples)

demo.launch(share=False)

まず、Gradioのバージョンアップに伴い、gr.inputs.Imageをgr.Imageなどに変更しました。

また、以下のyolov5ライブラリを使用するように修正しました。

https://pypi.org/project/yolov5/

さらに、以下のように、huggingface上のモデルを使用するように修正しました。(これまではローカルにダウンロードしたモデルをロードしていました。)

yolov5.load("nakamura196/yolov5-ndl-layout")

結果、以下のモデルのページにおいて、本モデルが使用されているスペースが表示されるようになりました。モデルの説明は不十分なので、今後更新予定です。

https://huggingface.co/nakamura196/yolov5-ndl-layout

まとめ

不十分な点が多いですが、参考になる部分がありましたら幸いです。

Discussion