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

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定