《mnist_model.h5》在flask中加载mnist模型

news2024/11/25 6:30:43

一、在tensorflow中新建及保存模型

启动Jupyter Notebook

新建Notebook

代码

from flask import Flask, request, jsonify   # type: ignore
import numpy as np   # type: ignore
import tensorflow as tf   # type: ignore
import json  
from PIL import Image  # type: ignore
  
app = Flask(__name__)  
  
# 加载模型(确保模型文件与此脚本在同一目录下,或者提供正确的路径)  
model = tf.keras.models.load_model('mnist_model.h5')  
  
def get_image_metadata(image_path):  
    img = Image.open(image_path)  
    metadata = {  
        'filename': image_path.split('/')[-1],  
        'width': img.width,  
        'height': img.height,  
        'format': img.format,  
        'mode': img.mode  
    }  
    return metadata 

def image_to_json(image_path, output_path):  
    metadata = get_image_metadata(image_path)  
    with open(output_path, 'w') as f:  
        json.dump(metadata, f, ensure_ascii=False, indent=4)  

def preprocess_image(img):  
    # 将 PIL 图像转换为 numpy 数组  
    img_array = np.array(img)  
    # 归一化  
    img_array = img_array / 255.0  
    # 如果模型需要特定的维度(例如,扩展维度和颜色通道),则进行调整  
    img_array = np.expand_dims(img_array, axis=0)  
    # 如果模型接受的是灰度图像,但是 PIL 加载的是 RGB 图像,需要转换为灰度  
    if img_array.shape[3] == 3:  
        img_array = np.mean(img_array, axis=3, keepdims=True)  
    return img_array


@app.route('/predictlast', methods=['GET'])  
def predictlast():  
    # if 'file' not in request.files:  
    #    return jsonify({'error': 'No file part in the request'}), 400  
  
    # file = request.files['file']  
    # file = Image.open('path_to_your_image.jpg')
    # 如果用户未选择文件,浏览器也会提交一个空文件部分,没有文件名  
    # if file.filename == '':  
    #    return jsonify({'error': 'No selected file'}), 400  
  
    # 读取图片文件  
    img = Image.open('path_to_your_image.jpg')  
    # 转换为模型需要的格式  
    img_array = preprocess_image(img)  
    
  
    # 使用模型进行预测  
    prediction = model.predict(img_array)
    
    # print(prediction)
    # 假设你的模型输出的是 one-hot 编码,你需要找到概率最高的类别  
    # predicted_class = np.argmax(prediction, axis=1)[0]  
  
    # 返回预测结果  
    # return jsonify({'predicted_class': predicted_class}) 
    return "dfd" 

@app.route('/test', methods=['GET'])  
def test():  
    print(233)
    # data = request.get_json()  # 假设客户端发送JSON格式的数据  
    # data =get_image_metadata('path_to_your_image.jpg')
    image_to_json('path_to_your_image.jpg', 'image_metadata.json')
    # input_data = np.array(data).reshape(1, -1)  # 转换输入数据格式以适应模型  
    # print(input_data)
    # prediction = model.predict(input_data)  # 使用模型进行预测  
    # return jsonify({'prediction': prediction.tolist()})  # 返回预测结果作为JSON响应  
    return "dfdf"
  
if __name__ == '__main__':  
    app.run(debug=True)  # 启动Flask应用(开发模式)

二、VScode 启动Flask命令

pip install tensorflow
pip install Pillow
python -- mnist_hello.py

启动效果

三、访问地址

http://127.0.0.1:5000/predictlast

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bigtop gradle 任务依赖关系

./gradlew deb 会编译ubuntu的所有deb包 任务deb会依赖17个任务,它们会按字母排序执行,如下: alluxio-deb bigtop-groovy-deb bigtop-jsvc-deb bigtop-utils-deb flink-deb hadoop-deb hbase-deb hive-deb kafka-deb livy-deb phoenix-deb …

React 19 新特性集合

前言:https://juejin.cn/post/7337207433868197915 新 React 版本信息 伴随 React v19 Beta 的发布,React v18.3 也一并发布。 React v18.3相比最后一个 React v18 的版本 v18.2 ,v18.3 添加了一些警告提示,便于尽早发现问题&a…

51单片机STC89C52RC——8.1 8*8 LED点阵模块(点亮一个LED)

目录 目的/效果 一,STC单片机模块 二,8*8 LED点阵模块 2.1 电路图 2.1.1 8*8 点阵模块电路图 2.1.2 74HC595(串转并)模块 电路图 2.1.3 芯片引脚 2.2 引脚电平分析 2.3 74HC595 串转并模块 2.3.1 装弹(移位…

强化学习专题:强化学习知识梳理(一)

2024/6/23: 前段时间有幸完成了大学期间的第一篇论文。在面试之前复盘一下关于自己论文中DQN的一些相关点。 浅谈主要区别(在线 or 离线) 首先,一切的开始是强化学习中时序差分方程,这体现了强化学习方法的优化策略。在…

【MySQL进阶之路 | 高级篇】MySQL8.0索引新特性->降序索引与隐藏索引

1. 支持降序索引 降序索引以降序存储键值.虽然在语法上,从MySQL4版本已经支持降序索引的语法了,但实际上该DESC定义是被忽略的.知道MySQL8.x版本才开始真正支持降序索引.(仅限于InnoDB存储引擎). MySQL在8.0版本前创建的仍然是升序索引,使用…

PADS系列:如何导入元件库新建元件

对于普通的原理图,位置的摆放是比较随意的,并且也没有一些特殊的或者元件库里面没有的元件,相对来说绘制会比较简单。但是如果碰上复杂一点的电路,要绘制起来就会比较麻烦,需要一些新的PADS使用技巧,最基础…

云计算考试题

Cloud ❀ 云计算-虚拟化常见的两种架构_裸金属架构和宿主型架构的区别-CSDN博客 为啥要成2 11 bcd 16 acd abcd BCD NAS为啥支持文件存储的协议 选BCD 什么是网络文件系统 选bcd 错题 选abc 选bcd 选 abd

NetSuite Account Merge 科目合并功能分析

最近项目中,客户有提到过能否将不用的Account与新建的Account进行合并,即我们所说的Merge功能~可以,但是该功能有使用的限制,比如最直接的一点需要注意,不同类型的Account是不可以使用Merge功能的&#xff…

c++内存管理_复习

new与placement new new: 先调用operator new(大小),而operator new()会调用malloc尝试分配内存,失败则调用_callnewh()来释放内存,直至分配成功 可以设置分配失败的处理函数:将写好的处理函数作为参数传入set_new_han…

一文2000字记录基于jmeter+perfmon的稳定性测试

01、任务情况 1、任务总览 本次平台稳定性测试的目的在于:在服务器压力处于较饱和(达到80%系统最大TPS)压力之下,在较长时间(>8小时)之内观测服务器稳定性问题,以及资源使用情况和异常。 …

清科ZF引导基金数据(1990-2023年)

清科ZF引导基金数据,参考经济学家吴超鹏和严泽浩在《经济研究》2023年的研究,通过清科私募通数据库,获取ZF引导基金的管理机构信息。数据涵盖了ZF引导基金的关键信息,如基金名称、管理机构详情、所属层级、发展阶段、地域分布、初…

渗透测试之SQL注入

渗透测试之SQL注入 1. SQL注入分类 按照攻击类型分为:联合查询注入、布尔注入、时间延迟注入、报错型注入、堆叠型注入等 按照注入位置分为:HTTP头注入、请求参数注入等 按照数据库场景分为:MySQL注入、MSSQL注入、Oracle场景注入 1. My…

【D3.js in Action 3 精译】1.1.2 D3.js 的适用场景

译注 上一节中我们了解了 D3 诞生的技术背景——为了满足 Web 可访问数据的可视化需求。本节再来看看 D3.js 的适用场景是怎样的、在什么时候会考虑使用 D3.js。 1.1.2 D3.js 的适用场景 数据可视化领域正蓬勃发展,且备受青睐。过去十年间用于生成数据驱动图形的工…

中小学劳技课程开展创意木工 传承非遗木工魅力

学生劳技课程,全称劳动技术课程,是一门旨在通过实践活动培养学生的劳动技能、创新思维、实践能力和社会责任感的基础教育课程。这门课程强调学生的参与和体验,让学生在动手实践中学习并掌握知识,提高解决问题的能力。 学生劳技课程…

Charles抓包工具系列文章(四)-- Rewrite 重写工具

一、背景 这是一款比Map Local/Remote 还强大的工具,更加灵活,体现在以下几点: 重写request报文重写response报文header 字段的增删改query param 字段的增删改重写 body 字段改写http 响应状态status重写host/url/path 从这也可以看出其强…

【链表经典算法OJ题】(2)

4.链表的中间节点 单链表相关经典算法OJ题4: 链表的中间结点 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problem…

计算机网络之入门

1.网络的发展 1.1计算机网络定义 计算机网络是以共享资源(硬件、软件和数据等)为目的而连接起来的、在协议控制下,由一台或多台计算机、若干台终端设备、数据传输设备等组成的系统之集合。 这些计算机系统应当具有独立自治的能力&#xff…

关于导入springcloud项目一些jar加载不进去的问题处理

IntelliJ IDEA的Maven项目有时候通过右边Maven Projects面板的package或者install命令打包的时候,会报错导致打包失败,这是由于这两个命令打包前默认会运行tests测试,若测试失败则打包失败。但是有时候我们打包的时候一些项目配置是针对生产环…

SpringCloud Alibaba Seata2.0基础入门与安装

官网地址:https://seata.apache.org/zh-cn/ GitHub下载地址:https://github.com/apache/incubator-seata/releases 本文这里下载的是seata2.0.0版本。 【1】概述 ① Seata是什么 Simple Extensible Autonomous Transaction Architecture&#xff0c…

【代码】c++几个常用的函数

Hello!大家好,我是学霸小羊,今天讲讲c函数库里面的几个基本函数。 1.sort() sort()是大名鼎鼎的排序函数,以前起码一两个循环的排序,用这个函数一行代码就可以解决。 格式: sort(数组名""开始下标&#…