使用 Streamlit 和 Heroku 在 Web 上部署图像分类

发布日期:2026-07-09 04:55:02   来源 : 杭州电子商务研究院    浏览量 :2
杭州电子商务研究院 发布日期:2026-07-09 04:55:02  
2

介绍

在本指南中,您将学习如何使用 Streamlit 和 Heroku 在 Web 上部署图像分类器。图像分类器是一种计算机视觉算法,能够根据图像文件的内容将图像分配给特定的预定义类别。它用于使应用程序能够对图像数据执行分类和排序任务。

在本指南中,您将从 Google Teachable Machine 下载一个简单的二元分类器。本指南假设您具有中级 Python 知识。本指南的其他先决条件是:

  1. Streamlit 的基础知识

  2. 机器学习中图像分类的基础知识

  3. Google Teachable Machine 平台的基础知识

以下是一个真实场景:

想象一下,您是一家远程优先 AI/ML 初创公司的机器学习工程师。您是专门从事 AI 和 ML 的研发团队的一员。由于是远程优先,您不仅需要与团队成员分享您的图像分类应用想法,还需要与其他团队和公司员工分享,他们可能不了解 ML,但想测试您的解决方案的实用性。您还需要向公众推出您的图像分类解决方案。这意味着它应该简单、直观且易于访问,并且您应该知道如何部署 ML 解决方案。

环境设置

要准备好环境,请运行命令安装相关软件包

pip 安装 keras streamlit pillow numpy

有了这四个包,您就可以启动一个简单的图像分类器了。

使用 Google Teachable Machine 进行图像分类

Teachable Machine允许您在网络上训练分类器模型。您可以创建图像音频姿势项目。在本例中,请选择图像分类项目。在本指南中,您将使用Kaggle上的脑肿瘤检测数据集。点击链接下载数据集。

进入图像分类页面后,将第 1 类标记为脑肿瘤第 2 类标记无脑肿瘤。将图像上传到相应的类别。上传数据后,单击训练模型按钮并等待结果。

完成后,您将能够下载扩展名为.h5 的权重文件。您将使用它来完成分类任务。

基于 Streamlit 的图像分类器

在您的开发文件夹中,创建一个名为app.py 的文件。该文件包含负责在网页上显示内容的 Streamlit 代码。

要通过提供页眉、标题和描述来设置页面,请编写以下代码。

      import streamlit as st
st.title("Image Classification with Google's Teachable Machine")
st.header("Brain Tumor MRI Classification Example")
st.text("Upload a brain MRI Image for image classification as tumor or no-tumor")
    

接下来,处理文件上传、Teachable Machine 分类器处理,最后显示结果。为确保代码整洁并遵循最佳实践,请创建一个单独的文件来处理实际分类。

图像分类代码

在包含app.py的同一文件夹中,创建一个名为img_classification.py的文件。这将保存您将在app.py文件中调用的分类函数,用于图像分类。

要执行分类,请将您下载的.h5格式的权重文件加载到 keras 模型中。

      import keras
from PIL import Image, ImageOps
import numpy as np


def teachable_machine_classification(img, weights_file):
    # Load the model
    model = keras.models.load_model(weights_file)

    # Create the array of the right shape to feed into the keras model
    data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
    image = img
    #image sizing
    size = (224, 224)
    image = ImageOps.fit(image, size, Image.ANTIALIAS)

    #turn the image into a numpy array
    image_array = np.asarray(image)
    # Normalize the image
    normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1

    # Load the image into the array
    data[0] = normalized_image_array

    # run the inference
    prediction = model.predict(data)
    return np.argmax(prediction) # return position of the highest probability
    

Streamlit 文件处理和结果

这部分代码执行图像上传处理,从img_classification.py文件中的函数运行推理并显示结果。在app.py中的导入下方,添加此行以允许您使用分类函数。

      from img_classification import teachable_machine_classification
    

以下代码将添加到您的app.py文件中。

      uploaded_file = st.file_uploader("Choose a brain MRI ...", type="jpg")
    if uploaded_file is not None:
        image = Image.open(uploaded_file)
        st.image(image, caption='Uploaded MRI.', use_column_width=True)
        st.write("")
        st.write("Classifying...")
        label = teachable_machine_classification(image, 'brain_tumor_classification.h5')
        if label == 0:
            st.write("The MRI scan has a brain tumor")
        else:
            st.write("The MRI scan is healthy")
    

要在本地主机上运行应用程序,请打开终端或 shell,导航到当前工作目录,然后运行命令

streamlit 运行应用程序.py

该应用程序将在本地运行,并通过 URL https://localhost:8501访问

Heroku 帐户设置

此时,您的应用已设置完毕并在本地运行。是时候分享它了。注册一个Heroku帐户,以便将出色的分类器部署到 Web。注册后,下载Heroku CLI

部署解决方案

生成一个requirements.txt文件,其中包含所使用的库及其版本。您可以使用pipreqs命令。该文件应如下所示:

      numpy==1.16.4
streamlit==0.52.1
pillow
keras
tensorflow==2.0.0b1
    

创建一个setup.sh文件和一个procfile文件。这些文件将指示 Heroku 如何设置应用程序并使其运行。在setup.sh文件中,写入以下代码,这将创建一个 streamlit 文件夹,其中包含 credentials.toml 和 config.toml 文件。

      mkdir -p ~/.streamlit/
echo "\
[general]\n\
email = \"your@domain.com\"\n\
" > ~/.streamlit/credentials.toml
echo "\
[server]\n\
headless = true\n\
enableCORS=false\n\
port = $PORT\n\
" > ~/.streamlit/config.toml
    

接下来,procfile将是执行 setup.sh的那个。然后运行 ​​Streamlit app.py文件 procfile 代码:

      web: sh setup.sh && streamlit run app.py
    

使用命令git init启动一个空的 Git 存储库。

在终端中,导航到代码的工作目录,然后使用 CLI 命令heroku login登录 Heroku 。要部署,请运行命令heroku create。完成此命令后,Heroku 将为您的应用分配一个应用名称和 URL,以便您通过 Web 访问它。

最后,使用下面的 Git 命令将您的代码推送到您的 Heroku 实例。

      git add .
git commit -m "commit message"
git push heroku master
    

要检查部署是否成功,请运行命令heroku ps scale:web=1

结论

您现在已经学会了使用 Streamlit 构建界面和使用 Heroku 在 Web 上为应用程序提供服务,从而在 Web 上部署机器学习解决方案。这些技能对于现实世界的角色至关重要,例如 ML 工程师、ML devops、对 ML 感兴趣的软件工程师以及想要分享其工作的自由职业 ML 爱好者。要更深入地了解 Heroku,请考虑本教程

您还可以通过研究基于云的 ML 部署解决方案(例如 Amazon AWS、Microsoft Azure、GCP 和 FloydHub)进一步巩固本指南中的技能。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据