使用tf2的saved_model进行推理

2023-10-31

import tensorflow as tf
import cv2
from PIL import Image
import numpy as np
import colorsys
import os
import matplotlib.pyplot as plt


def resize_image(image, size):
    """ 等比例resize """
    iw, ih  = image.size
    w, h    = size

    scale   = min(w/iw, h/ih)
    nw      = int(iw*scale)
    nh      = int(ih*scale)

    image   = image.resize((nw,nh), Image.BICUBIC)
    new_image = Image.new('RGB', size, (128,128,128))
    new_image.paste(image, ((w-nw)//2, (h-nh)//2))

    return new_image, nw, nh


def preprocess_input(image):
    image = image / 127.5 - 1
    return image


input_shape = (512,512) # 与训练的时候一致
num_classes = 2 # 类别+1

def preProcessing(filepath):
    inputs = cv2.imread(filepath)
    old_img = Image.open(filepath)
    h,w = inputs.shape[0],inputs.shape[1]
    # print(f'初始图像size: {h},{w}')

    """ 数据预处理 """
    image_data, nw, nh  = resize_image(old_img, (input_shape[1], input_shape[0]))
    image_data  = np.expand_dims(preprocess_input(np.array(image_data, np.float32)), 0)

    return old_img,(h,w),(nw,nh),image_data


def postProcessing():
    """ 对预测结果进行后处理 """
    # resize回图像原始的大小
    pr = cv2.resize(pr_arrays, (w, h), interpolation = cv2.INTER_LINEAR)
    pr = pr.argmax(axis=-1) # 取出每一个像素点的种类
    seg_img = np.zeros((np.shape(pr)[0], np.shape(pr)[1], 3))

    if num_classes <= 21:
        colors = [ (0, 0, 0), (128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128), (0, 128, 128), 
                        (128, 128, 128), (64, 0, 0), (192, 0, 0), (64, 128, 0), (192, 128, 0), (64, 0, 128), (192, 0, 128), 
                        (64, 128, 128), (192, 128, 128), (0, 64, 0), (128, 64, 0), (0, 192, 0), (128, 192, 0), (0, 64, 128), 
                        (128, 64, 12)]
    else:
        hsv_tuples = [(x / num_classes, 1., 1.) for x in range(num_classes)]
        colors = list(map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples))
        colors = list(map(lambda x: (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255)), colors))


    for c in range(num_classes):
        seg_img[:,:,0] += ((pr[:,: ] == c )*(colors[c][0] )).astype('uint8')
        seg_img[:,:,1] += ((pr[:,: ] == c )*(colors[c][1] )).astype('uint8')
        seg_img[:,:,2] += ((pr[:,: ] == c )*(colors[c][2] )).astype('uint8')

    resultImage = Image.fromarray(np.uint8(seg_img))
    image = Image.blend(old_img,resultImage,0.5)

    return image

def saveAndShow(image):
    savename = os.path.basename(filepath)[:-4]+"httpResult.jpg"
    savePath = 'servingOut/'
    if not os.path.exists(savePath):
        os.mkdir(savePath)

    image.save(savePath+savename)

    plt.title(os.path.basename(filepath))
    plt.imshow(image)
    plt.show()

if __name__ == '__main__':
    mymodel = tf.saved_model.load("test/1")
    while True:
        try:
            filepath = input('请输入待预测图像路径(输入c退出): ')
            if filepath == 'c':
                break        
            old_img,(h,w),(nw,nh),image_data = preProcessing(filepath=filepath)            
            pr = mymodel(image_data)[0]
            pr_arrays = pr.numpy()
            image = postProcessing()
            saveAndShow(image)
        except Exception as e:
            print(e)
            continue
    

是在httpClient.py(参考文章)的基础上改的,主要是导入模型和输入data进行推理:

mymodel = tf.saved_model.load("test/1")
pr = mymodel(image_data)[0]

这个pr目前是tensor类型,需要转成numpy,然后才可以进行后处理

pr_arrays = pr.numpy()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用tf2的saved_model进行推理 的相关文章

随机推荐

  • 小程序跳转小程序

    小程序跳转另一个小程序 js如下 tzxcx function wx navigateToMiniProgram appId wxde8ac0a21135c07d 要打开的小程序 appId path 打开的页面路径 如果为空则打开首页 e
  • linux:ubuntu 22.04如何更换阿里源

    参考 https www cnblogs com liujiaxin2018 p 16373668 html 说明 为什么要换阿里源 因为原先系统自带的源地址无法访问 墙的原因 所以必须换成国内的源 附带可能遇到问题的处理 Ubuntu中
  • 阿里云OSS存储

    目录 一 阿里云OSS存储 二 SDK了解 三 Spring Boot集成OSS 一 阿里云OSS存储 对象存储OSS 为了解决海量数据存储与弹性扩容 我们采用云存储的解决方案 1 开通对象存储OSS服务 1 申请阿里云账号 2 实名认证
  • 自我理解:封装、继承和多态

    一 封装 1 概念 封装就是隐藏对象的属性和实现细节 只对外公开一些操作内部属性的方法 接口 函数 2 目的 增强安全性 简化编程 使用者不必了解具体的实现细节 只需要通过外部接口 就可以对类的内部成员进行操作 class A public
  • avalonJS-源码阅读(三) VMODEL

    2019独角兽企业重金招聘Python工程师标准 gt gt gt avalon dom小结 看过前面三篇文章后 应该会对avalon关于dom的处理有个大体的理念 这里再理一遍 avalon通过手动触发scan函数来遍历dom 然后根据m
  • mybatis学习记录(四)-----MyBatis核心配置文件详解

    目录 MyBatis核心配置文件详解 4 1 environment 4 2 transactionManager 4 3 dataSource 4 4 properties 4 5 mapper MyBatis核心配置文件详解 mybat
  • PLC常用的通信协议有哪些?如何进行协议解析和远程上下载?

    PLC有西门子 三菱 欧姆龙 施耐德 罗克韦尔等国外品牌 也有台达 汇川 信捷等国内品牌 具备不同的协议 给企业的设备通信和远程监控带来困扰 因此 很多企业在选择工业网关都会考虑兼容协议解析功能 以便实现在更多的场景得到应用 提高生产效率降
  • 计算机课代表专业演讲稿,信息课代表演讲稿

    信息课代表演讲稿 由会员分享 可在线阅读 更多相关 信息课代表演讲稿 2页珍藏版 请在人人文库网上搜索 1 信息课代表演讲稿今天 很荣幸走上讲台 和那么多乐意为班级作贡献的同学一道 竞选班委 我为此竞选的是信息课代表 我想 我将用旺盛的精力
  • C++学习 类的分文件实现

    mian cpp测试文件 include
  • 【数据库】NoSQL数据库简介

    基于自己的理解 对几个常见的NoSQL数据库进行一下简单介绍 如有描述错误的 欢迎指正 一 数据库分类 数据库分两大类 SQL数据库和NoSQL数据库 SQL数据库 常用的有 Mysql Oracle MSSQL DB2等 这些大家应该都比
  • $.each()方法的使用

    jQuery中 each 方法的使用 each 是对数组 json和dom结构等的遍历 说一下他的使用方法吧 1 遍历一维数组 var arr1 aa bb cc dd each arr1 function i val 两个参数 第一个参数
  • 【AAAI 2021】多出口架构的知识蒸馏:Harmonized Dense Knowledge Distillation Training for Multi-Exit Architectures

    AAAI 2021 多出口架构的知识蒸馏 Harmonized Dense Knowledge Distillation Training for Multi Exit Architectures 论文地址 主要问题 主要思路 多出口网络
  • Java 面向对象之封装

    目录 1 类和对象 2 单个对象内存图 3 两个对象内存图 4 两个引用指向同一对象内存图 5 成员变量和局部变量 6 private 关键字 7 this 关键字 8 this 内存原理 9 封装 10 构造方法 面向过程编程 POP P
  • sqli-labs-master【Less-11/12/13/14/15/16】

    Less 11 进入Less 11之后 可以看到是全新的关卡 是一个表单的形式 需要我们填入用户名和密码才可以提交 首先我们随便填入一个用户名和密码看页面会回显给我们什么内容 我在这块用户名和密码都输入的是123 可以看到登陆尝试失败 不过
  • java中steam流的使用

    1 数组合并 原始合并 定义俩个集合合并为一个集合 例子 public class 测试 把小王合道 list中 public static void main String args throws Exception final Arra
  • 华为机试——0-1背包问题

    华为机试 0 1背包问题 给定一个数 比如20 然后给定几个数字 如1 3 5 7 8 输出 1 3 5 7 8 0 0 0 1 1 因为5 7 8 20 include
  • Qt实现窗口整体拖拽功能.

    我们都知道 当我们鼠标点击并移动应用程序的上边框时 窗口才会整体移动 但有些窗口 你点击移动其他部分 也可以让窗口跟着鼠标移动 这里就教你如何整体移动窗口 其实实现这样的功能很简单 只需要重写以下的3个鼠标函数即可 c h ifndef C
  • 数据挖掘案例

    图中的左边是SPSS在1999年提出的 跨行业数据挖掘标准流程 在图中定义了数据挖掘的6个步骤 虽然这个图已经提出有10几年了 但是在大数据环境下 这个流程依然适用 1 理解商业问题 这需要大数据科学家和行业专业 以及客户的业务专家一起来明
  • win7系统开机直接进bios 不能正常启动,插u盘可以启动

    朋友的win7系统笔记本电脑出问题了 拿来帮忙看看 现象 开机后直接进bios界面 插个u盘就能正常进硬盘的windows系统 分析 以为是开机启动项不对 进bios界面 选择硬盘优先启动 保存退出 重启后并不能进系统 还是进bios 尝试
  • 使用tf2的saved_model进行推理

    import tensorflow as tf import cv2 from PIL import Image import numpy as np import colorsys import os import matplotlib