本文地址:https://www.cnblogs.com/tujia/p/13862365.html

系列文章:

【0】TensorFlow光速入门-序

【1】TensorFlow光速入门-tensorflow开发基本流程

【2】TensorFlow光速入门-数据预处理(得到数据集)

【3】TensorFlow光速入门-训练及评估

【4】TensorFlow光速入门-保存模型及加载模型并使用

【5】TensorFlow光速入门-图片分类完整代码

【6】TensorFlow光速入门-python模型转换为tfjs模型并使用

【7】TensorFlow光速入门-总结

一、模型转换

python模型转换tfjs模型,需要用到先安装 tensorflowjs_converter 工具

 pip install tensorflowjs

安装成功后,可以用python脚本或shell命令转换,下面是shell的例子:

tensorflowjs_converter /tf/saved_model/wnw /tf/saved_model_js/wnw

注:记得提前创建好 saved_model_js 目录。转换成功成,会得到 model.json 及 n个 .bin 文件,例如:group1-shard1of2.bin、group1-shard2of2.bin等等

转换命令的详细参数,请看:

tensorflowjs_converter --help

二、在浏览器中使用

先准备好模型文件及dict.txt 文件(注:dict.txt 需要自己创建,内容为图片分类,一行一个分类)

     

基础html元素

<input type="file" class="custom-file-input" id="file" accept="image/*" capture="camera">

<input class="form-control" id="result" readonly="readonly">

<img src="" id="pic">

引入tfjs

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.6.0/dist/tf.min.js"></script>

加载模型

const MODEL_URL = '/static/models/wnw/model.json';

let model = null;
tf.loadGraphModel(MODEL_URL).then((value)=>{
model = value;
}, (error)=>{
console.log(error);
});

侦听选择图片及图片预览

let image = document.getElementById('pic');

// 图片预览
document.getElementById('file').addEventListener('change', (ev)=>{
let reader = new FileReader();
reader.addEventListener('load', (e)=>{
image.src = e.target.result;
});
reader.readAsDataURL(ev.target.files[0]);
});

图片数据转换及预测

// 图片分类
const CLASSIFY = ['非表', '表']; // 图片处理及评估
image.addEventListener('load', ()=>{
// 图片转换成灰度张量数据
let image_tensor = tf.browser.fromPixels(image, 1);
// 三维张量转四维张量
image_tensor = tf.expandDims(image_tensor);
image_tensor = tf.cast(image_tensor, 'float32');
// console.log(image_tensor.shape);
// 图片缩放,转换为模型需要的大小
image_tensor = tf.image.resizeBilinear(image_tensor, [100, 100]);
// console.log(image_tensor.shape);
let predictions = model.predict(image_tensor);
let label = tf.argMax(predictions, 1).dataSync()[0];
result.value = CLASSIFY[label];
});

注:像【4】TensorFlow光速入门-保存模型及加载模型并使用 说的那样,加载模型,然后准备一个和训练集一样格式的数据(数据格式转换、缩放),然后预测就可以了

重点:

tf.browser.fromPixels    base64格式转tensor3D格式

tf.expandDims         tensor3D格式车转tensor4D格式

tf.cast            数值转换,上面例子是int32转float32

tf.image.resizeBilinear            图片缩放

model.predict        模型预测

tf.argMax(predictions, 1).dataSync()[0]     取预测结果的最大值的 key(即分类label)


其他:

官方关于tfjs的使用示例并不完善,甚至是错。各种跳转,又是 MobileNet 又是 ml5 的,其实都不需要,直接用 tf.min.js 就可以了。mobilenet 和 ml5 的用法以后再研究

下面是相当混乱的一些相关文档:

https://tensorflow.google.cn/js/tutorials/conversion/import_keras

https://tensorflow.google.cn/js/tutorials/conversion/import_saved_model

https://github.com/tensorflow/tfjs-converter/blob/master/tfjs-converter/README.md

https://github.com/tensorflow/tfjs-converter/tree/master/tfjs-converter/demo/mobilenet

https://learn.ml5js.org/#/tutorials/hello-ml5?id=demo

本文链接:https://www.cnblogs.com/tujia/p/13862365.html


完。

【6】TensorFlow光速入门-python模型转换为tfjs模型并使用的更多相关文章

  1. 【4】TensorFlow光速入门-保存模型及加载模型并使用

    本文地址:https://www.cnblogs.com/tujia/p/13862360.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  2. 【0】TensorFlow光速入门-序

    本文地址:https://www.cnblogs.com/tujia/p/13863181.html 序言: 对于我这么一个技术渣渣来说,想学习TensorFlow机器学习,实在是太难了: 百度&qu ...

  3. 【1】TensorFlow光速入门-tensorflow开发基本流程

    本文地址:https://www.cnblogs.com/tujia/p/13862339.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  4. 【2】TensorFlow光速入门-数据预处理(得到数据集)

    本文地址:https://www.cnblogs.com/tujia/p/13862351.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  5. 【3】TensorFlow光速入门-训练及评估

    本文地址:https://www.cnblogs.com/tujia/p/13862357.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  6. 【5】TensorFlow光速入门-图片分类完整代码

    本文地址:https://www.cnblogs.com/tujia/p/13862364.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  7. ER图/模型转换为关系模型

    ER图中的主要成分是实体类型和联系类型,转换规则就是如何把实体类型.联系类型转换成关系模式. 1. 二元联系转换 规则1.1(实体类型的转换):将每个实体类型转换成一个关系模式,实体的属性即为关系模式 ...

  8. Tensorflow object detection API 搭建物体识别模型(二)

    二.数据准备 1)下载图片 图片来源于ImageNet中的鲤鱼分类,下载地址:https://pan.baidu.com/s/1Ry0ywIXVInGxeHi3uu608g 提取码: wib3 在桌面 ...

  9. 千行代码入门Python

    这个是从网上找到的一份快速入门python的极简教程,大概一千行左右,个人觉得不错,特此收藏以备后用. # _*_ coding: utf-8 _*_ """类型和运算- ...

随机推荐

  1. day56:django:csrf_token&文件上传

    目录 1.csrf介绍 2.django实现csrf_token认证 3.django实现文件上传 csrf介绍 什么是csrf? csrf:跨站请求伪造.攻击者通过HTTP请求将数据传送到服务器,从 ...

  2. ZooKeeper学习(一)了解ZooKeeper

    一.什么是ZooKeeper ZooKeeper主要服务于分布式系统,可以用ZooKeeper来做:统一配置管理.统一命名服务.分布式锁.集群管理. 使用分布式系统就无法避免对节点管理的问题(需要实时 ...

  3. 实用向—总结一些唯一ID生成方式

    在日常的项目开发中,我们经常会遇到需要生成唯一ID的业务场景,不同的业务对唯一ID的生成方式与要求都会不尽相同,一是生成方式多种多样,如UUID.雪花算法.数据库递增等:其次业务要求上也各有不同,有的 ...

  4. Spring系列之事务的控制 注解实现+xml实现+事务的隔离等级

    Spring系列之事务的控制 注解实现+xml实现 在前面我写过一篇关于事务的文章,大家可以先去看看那一篇再看这一篇,学习起来会更加得心应手 链接:https://blog.csdn.net/pjh8 ...

  5. SpringBoot2.3中@Async实现异步

    启动加上@EnableAsync ,需要执行异步方法上加入@Async. 在方法上加上@Async之后 底层使用多线程技术. 不使用异步 先关代码: package com.yiyang.myfirs ...

  6. 初识 Istio - 服务网格管理工具

    What is a service mesh(服务网格)? 微服务在国内流行已经多年了,大多数公司选择了基于容器化技术( Docker )以及容器编排管理平台 ( Kubernetes )落地微服务 ...

  7. 【网络协议】TCP/IP:数据链路层

    物理层负责把计算机中的0.1数字信号转换为具体传输媒介的物理信号(电压的高低.电波的强弱.光的闪灭) 数据链路层协议定义了(通过通信介质互连的设备间的)数据传输规范 (常见的通信介质有同轴电缆.双绞线 ...

  8. E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    Linux下sudo apt-get install 安装时报错: 解决办法 1.   终端输入 ps  -aux ,列出进程.找到含有apt'-get或者wget的进程,      直接sudo k ...

  9. 【漏洞复现】Office远程代码执行漏洞(CVE-2017-11882)

    昨晚看到的有复现的文章,一直到今天才去自己复现了一遍,还是例行记录一下. POC: https://github.com/Ridter/CVE-2017-11882/ 一.简单的生成弹计算器的doc文 ...

  10. 【代码审计】PHP代码审计---基础记录

    PHP伪协议 PHP伪协议事实上是其支持的协议与封装协议,支持的种类有以下12种. * file:// - 访问本地文件系统 * http:// - 访问 HTTP(s) 网址 * ftp:// - ...