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

相关文章

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

使用C#实现将RTF转换为PDF

《使用C#实现将RTF转换为PDF》RTF(RichTextFormat)是一种通用的文档格式,允许用户在不同的文字处理软件中保存和交换格式化文本,下面我们就来看看如何使用C#实现将RTF转换为PDF... 目录Spire.Doc for .NET 简介安装 Spire.Doc代码示例处理异常总结RTF(R

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

python3中正则表达式处理函数用法总结

《python3中正则表达式处理函数用法总结》Python中的正则表达式是一个强大的文本处理工具,用于匹配、查找、替换等操作,在Python中正则表达式的操作主要通过内置的re模块来实现,这篇文章主要... 目录前言re.match函数re.search方法re.match 与 re.search的区别检索

OFD格式文件及如何适应Python将PDF转换为OFD格式文件

《OFD格式文件及如何适应Python将PDF转换为OFD格式文件》OFD是中国自主研发的一种固定版式文档格式,主要用于电子公文、档案管理等领域,:本文主要介绍OFD格式文件及如何适应Python... 目录前言什么是OFD格式文档?使用python easyofd库将PDF转换为OFD第一步:安装 eas