ml5.js人工智能编程入门教程(5): 图像风格转换以及ml5.js总结

2023-11-09 21:20

本文主要是介绍ml5.js人工智能编程入门教程(5): 图像风格转换以及ml5.js总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上节课,我们通过自定义的神经网络,从头训练实现了曲线拟合的例子。

今天我们要来学用ml5.js来做一个风格迁移的例子。风格迁移是将一类风格应用到一张图片上,改变这张图片的风格。风格迁移的原理是通过从一类风格的图片通过卷积网络训练抽取出风格,再将目标图像抽取出来的内容数据混合在一起,这就形成了带特定风格的图像。所以风格迁移主要有两个步骤,一是在一种特定样式上训练模型,二是将此样式应用于另一张图像。
和其它许多神经网络模型一样,ml5已经将相对成熟的神经网络移植过来,用别人已经训练好的模型数据,可以直接在浏览器里面运行。

观看本教程的视频:https://www.bilibili.com/video/BV1az4y1Z742?p=5


一、开始一段代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset=utf-8 /><script src='js/ml5.min.js'></script>
</head>
<body><input type='file' id='file' style='width: 200px; height: 100px; border: dashed'/><br/><img id='image1' style='border: solid 1px grey; min-width: 200px; min-height: 200px;' /><img id='image2' style='border: solid 1px grey; min-width: 200px; min-height: 200px;' /><br/><input type='button' value='转换' onclick='transfer()'/><div id='result'></div><script>
let fileElem = document.getElementById('file');fileElem.addEventListener('change', fileChanged, false);function fileChanged(evt) {let file = evt.target.files[0];if(!file) return;var reader = new FileReader();reader.onload = function(e) {document.getElementById('image1').setAttribute('src', e.target.result);}reader.readAsDataURL(file);
}log('加载中...');
// let styler = ml5.styleTransfer('data/model/style-transfer/wave', function() {
let styler = ml5.styleTransfer('data/model/style-transfer/udnie', function() {log('加载成功...');
})function transfer() {log('转换中...');let inImg = document.getElementById('image1');let outImg = document.getElementById('image2');setTimeout(function() {styler.transfer(inImg, function(err, result) {outImg.setAttribute('src', result.src);})log('');}, 10);
}function log(c) {document.getElementById('result').innerHTML = c;
}</script>
</body>
</html>

我们先来看看页面上的UI元素:

    <input type='file' id='file' style='width: 200px; height: 100px; border: dashed'/><br/><img id='image1' style='border: solid 1px grey; min-width: 200px; min-height: 200px;' /><img id='image2' style='border: solid 1px grey; min-width: 200px; min-height: 200px;' /><br/><input type='button' value='转换' onclick='transfer()'/><div id='result'></div>

页面上两个<img/>元素,分别用来显示被转换的图片和转换后的结果。

页面上有一个文件选择器,当用户选择了文件,我们将文件的内容读出来显示到img元素中,注意这个过程都是在浏览器里面完成,文件并没有传送到服务器。这里FileReader.readAsDataURL()就是将文件内容读成dataUrl的格式,这种格式是二进制文件进行base64编码,让内容可以在html里面使用。

DataURL的定义:
data:[<mediatype>][;base64],<data>

DataURL的一个例子:
data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==


二、原理

let styler = ml5.styleTransfer('data/model/style-transfer/udnie', function() {log('加载成功...');
})

进行风格转换,我们需要通过ml5.styleTransfer()生成一个styleTransfer对象,这个方法有两个参数:

  • 参数一:模型地址。这是一个路径,ml5会自动在这个路径下面找需要的内容。这个路径下面需要有一个manifest.json清单文件,用来表示数据文件的位置,然后就是这些数据文件。
    在这里插入图片描述

  • 参数二:初始化结果的回调函数

要开始风格转换,代码如下:

styler.transfer(inImg, function(err, result) {outImg.setAttribute('src', result.src);
})

styler就是我们刚才创建的styleTransfer对象,styler.transfer()两个参数,一个是输入图片的元素,一个是执行结果的回调函数,在回调里面我们直接将转移的结果result显示到另一个页面元素里面。

因为styler.transfer()是一个同步方法,调用过后页面的线程就被阻塞,状态内容并没有刷新到页面上。我们就用setTimeout先更新状态,再来开始转换过程。


三、如何训练自己的风格

当然我么也可以训练自己的风格,训练风格需要更强的计算能力和内存,所以在浏览器里面就不太合适,具体的操作步骤可以参见官方的教程。
https://blog.paperspace.com/creating-your-own-style-transfer-mirror/


四、ml5.js总结

ml5.js基于tensorflow.js为我们提供了一个在浏览器里面运行的深度学习神经网络的库,这个库使用相对简单,也不需要特殊的计算机与配置。适合初学者体验和入门。它也实现了许多成熟的网络,可以实现一些有用的功能,有的可以实现图像分类,有的可以识别人体的姿态,有的可以生成草图,有的可以检测人脸,还可以声音识别,文本分段等等。。。
具体的例子可以在下面这些网址找到:

https://ml5js.org/community/
https://examples.ml5js.org/
https://ml4a.github.io/demos/

好了,ml5.js系列的入门介绍就告一段落。如果大家有任何意见,建议,idea,或者在编码过程中遇到任何问题,欢迎在下边留言,我看到会一一回复各位。谢谢大家!

这篇关于ml5.js人工智能编程入门教程(5): 图像风格转换以及ml5.js总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378481

相关文章

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.