Gradio 月活用户突破 100 万!
阅读更多Gradio 月活用户突破 100 万!
阅读更多图像分类是计算机视觉中的核心任务。构建更好的分类器来分类图片中存在的对象是一个活跃的研究领域,它在交通控制系统到卫星图像等领域都有应用。
这样的模型非常适合与 Gradio 的图像输入组件一起使用,因此在本教程中,我们将构建一个 Web 演示,使用 Gradio 对图像进行分类。我们将能够完全使用 Python 构建整个 Web 应用程序,它看起来会像页面底部的演示一样。
让我们开始吧!
请确保您已经安装了 gradio
Python 包。我们将使用预训练的 Keras 图像分类模型,因此您也应该安装 tensorflow
。
首先,我们需要一个图像分类模型。在本教程中,我们将使用预训练的 MobileNet 模型,因为它很容易从 Keras 下载。您可以使用不同的预训练模型或训练您自己的模型。
import tensorflow as tf
inception_net = tf.keras.applications.MobileNetV2()
此行代码使用 Keras 库自动下载 MobileNet 模型和权重。
predict
函数接下来,我们需要定义一个函数,该函数接收用户输入(在本例中为图像),并返回预测结果。预测结果应以字典形式返回,其中键是类别名称,值是置信概率。我们将从这个文本文件加载类别名称。
对于我们的预训练模型,它看起来像这样
import requests
# Download human-readable labels for ImageNet.
response = requests.get("https://git.io/JJkYN")
labels = response.text.split("\n")
def classify_image(inp):
inp = inp.reshape((-1, 224, 224, 3))
inp = tf.keras.applications.mobilenet_v2.preprocess_input(inp)
prediction = inception_net.predict(inp).flatten()
confidences = {labels[i]: float(prediction[i]) for i in range(1000)}
return confidences
让我们分解一下。该函数接受一个参数
inp
:输入图像,为 numpy
数组然后,该函数添加一个批次维度,将其传递给模型,并返回
confidences
:预测结果,以字典形式,其中键是类别标签,值是置信概率现在我们已经设置好了预测函数,我们可以围绕它创建一个 Gradio 界面。
在本例中,输入组件是一个拖放图像组件。要创建此输入,我们可以使用 "gradio.inputs.Image"
类,它创建组件并处理预处理以将其转换为 numpy 数组。我们将实例化该类,并使用一个参数自动预处理输入图像,使其大小为 224 像素 x 224 像素,这是 MobileNet 期望的大小。
输出组件将是一个 "label"
,它以友好的形式显示顶部标签。由于我们不想显示所有 1000 个类别标签,我们将对其进行自定义,仅显示前 3 个图像。
最后,我们将添加一个参数 examples
,它允许我们使用一些预定义的示例来预填充我们的界面。Gradio 的代码如下所示
import gradio as gr
gr.Interface(fn=classify_image,
inputs=gr.Image(width=224, height=224),
outputs=gr.Label(num_top_classes=3),
examples=["banana.jpg", "car.jpg"]).launch()
这将生成以下界面,您可以在浏览器中尝试一下(尝试上传您自己的示例!)
完成啦!这就是构建图像分类器 Web 演示所需的所有代码。如果您想与他人分享,请在 launch()
Interface 时尝试设置 share=True
!