使用streamlit构建网站

news/2024/10/19 7:29:38/

1.目的

最近团队有一个人脸识别的项目,想做一个网站界面来演示,同时使用了花生壳进行内网穿透,使得可以在其他设备访问该界面。

2.算法部分

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt
import cv2
import numpy as np
import tensorflow as tf
import sys
sys.path.append(r'D:\study\EmotionDetection_RealTime-master\model')
# from model.ResNextT import ResNeXt50
from keras.layers import Layerfrom keras.layers import Add, Conv2D, MaxPooling2D, Flatten, Dense, Dropout, Multiply
from keras.models import Sequential
# 加载预训练的 VGG16 模型
class ECABlock(Layer):def __init__(self, k=3, gamma=2, t=2):super(ECABlock, self).__init__()self.k = kself.gamma = gammaself.t = tdef build(self, input_shape):self.conv1 = Conv2D(self.k, (1, 1), activation='relu')self.conv2 = Conv2D(self.k, (1, 1), activation='relu')self.pool = MaxPooling2D(pool_size=(self.t, self.t))self.flatten = Flatten()self.dense1 = Dense(units=self.k//self.gamma, activation='relu')self.dense2 = Dense(units=self.k, activation='sigmoid')self.multiply = Multiply()def call(self, inputs):x = self.conv1(inputs)y = self.conv2(inputs)y = self.pool(y)y = self.flatten(y)y = self.dense1(y)y = self.dense2(y)y = self.multiply([x, y])return Add()([x, y])model = Sequential()model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(48,48,1)))
model.add(ECABlock(k=3, gamma=2, t=2))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2)))
model.add(Dropout(0.5))model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2)))
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2)))
model.add(Dropout(0.5))model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(7, activation='softmax'))# 图像情感分类函数
def predict_emotion(image_path):class_labels = ["Angry", "Disgusted",  "Fearful", "Happy",  "Neutral", "Sad",  "Surprised"]img = Image.open(image_path)# 将图片转换为灰度图像img_gray = img.convert('L')# 将灰度图像调整为目标尺寸(48, 48)img_resized = img_gray.resize((48, 48))# 将调整后的灰度图像转换为 NumPy 数组img_array = np.array(img_resized)# 将数组转换为形状为(1, 48, 48, 1)img_array = img_array.reshape((1, 48, 48, 1))predictions = model.predict(img_array)# 获取最大概率的类别索引predicted_class_index = np.argmax(predictions)# 获取对应的情感类别标签emotion = class_labels[predicted_class_index]return emotion

使用的resne50结合ECA注意力机制的模型,七分类任务。

3.网站部分

# Streamlit 应用程序
st.title('图像情感分类器')uploaded_image = st.file_uploader("上传一张图片", type=['jpg', 'jpeg', 'png'])if uploaded_image:image_path = 'temp_image.jpg'with open(image_path, 'wb') as f:f.write(uploaded_image.read())st.image(uploaded_image, caption='Uploaded Image', use_column_width=True)emotion = predict_emotion(image_path)st.write(f'该图片的情感类别为:{emotion}')

Streamlit 是一个用于构建数据应用程序的开源 Python 库。它使用户能够轻松创建具有交互性和可视化效果的 Web 应用程序,无需具备Web开发经验。使用Streamlit,您可以通过简单的Python脚本快速构建数据可视化、机器学习模型展示、数据分析工具等应用。

具体的命令,在终端(或者文件路径下)输入:

python -m streamlit run D:\study\EmotionDetection_RealTime-master\demo\01web.py

4.界面展示

终端在执行命令后,后输出构建的网站地址,同时会弹出构建的网站:

这个网站界面形式可以更改,对应的是3网站部分。具体功能是,点击上传按钮或者“Browse files”从电脑本地选择图片上传,经过短暂算法运行,会给出图片对应的情况类型。

 上传图片

输出结果 

5.内网穿透

这个网站地址是本地地址,只能通过本地电脑访问,其他设备无法访问,这里使用花生壳来实现内王穿透。

具体参考:

三步就能内网穿透实现远程办公?甚至还能搭建安全稳定的私有云盘?贝锐花生壳内网穿透评测 

花生壳内网穿透教程(图文并茂)


http://www.ppmy.cn/news/1438444.html

相关文章

rust 卸载重新安装 安装

原因:接触区块链时报错 linking with x86_64-w64-mingw32-gcc failed: exit code: 1 Rust编译需要C环境,如果你没有,Rust也能安装成功,只是无法编译代码 C的编译工具有两个,一个是msvc,也就是visual studi…

2.C++类和对象

1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器…

Java23种设计模式-行为型模式之策略模式

策略模式(Strategy Pattern):将算法的使用从算法的实现中分离出来,从而让算法的变化不会影响到使用算法的用户。 通常涉及三个角色: 1.上下文(Context):持有策略接口的引用&#xf…

个人音乐播放网站项目(SpringBoot+Linux部署上线)

在做完第一个博客系统项目以后,接着做下一个项目:音乐播放网站项目,此项目应用的技术栈和第一个项目是差不多的,即算是学完SSM等知识以后的两个入门级Java开发项目吧。 此项目包含的核心功能有: 一、登录、注册、退出…

某赛通电子文档安全管理系统 多处 SQL注入漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

oracle--merge into :匹配则更新不匹配则插入

merge into :匹配则更新不匹配则插入 --语法 merge into 目标表 using (增量) on (匹配字段) where matched then update set --update和sel直接不需要加表名 when not matched then insert values--insert和values之间不需要加i…

C++感受6-Hello World 交互版

变量、常量输入、输出、流getline() 函数读入整行输入Hello() 函数复习新定义函数 Input() 实现友好的人机交互还有 “痘痘” 为什么挤不到的分析…… 1. DRY 原则简介 上一节课,我们写了两版“问候”程序。第一版的最大问题是重复的内容比较多,每一次问…

【微软押注ARM架构,“Wintel”联盟摇摇欲坠?】

2024年,对于PC产业而言也许将会是转折性的一年。得益于ARM芯片的入局以及ChatGPT所带来的人工智能风潮,新一代移动架构的笔记本和应用人工智能技术的「AI PC」已经走上舞台。 本文引用地址:http://www.eepw.com.cn/article/202404/457786.ht…