ml5.js人工智能编程入门教程(1): ml5.js介绍 实现图像分类

2023-11-09 21:20

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

ml5.js 是基于tensorflow.js的深度学习框架,它安装简便,API简单易懂,直接在浏览器里面运行,适合作为深度学习的入门以及非人工智能专业的深度学习的工具。

本系列课程将以一个个实际的例子,带领大家编写ml5.js的深度学习代码,亲自动手进入人工智能的世界。

在学习本系列教程过程中,请大家一定要:写代码,自己写代码,自己写有趣的代码!!!

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


一、ml5.js介绍

ml5.js是一个javascript实现的,能在浏览器里面运行的机器学习框架,它封装了tensorflow.js的API,给开发者提供一个更简单的使用环境,降低了机器学习编码的成本。

tensorflow是google开发出的一套开源机器学习平台,tensorflow.js是tensorflow在javascript中的实现,而ml5.js的底层调用的正式tensorflow.js的API。

ml5.js over tensorflow.js

虽然ml5和tensorflow.js在浏览器里面运行受到了内存,存储空间等诸多限制,但是他们又都可以使用机器的GPU,大大提高了运算的效率,所以对于一些不需要大量训练的机器学习任务,ml5是一个的选项。

ml5最大的特点是简单易用,对于初学者和想体验机器学习的开发人员更是不错的选择;本系列教程面向程序开发人员,并不需要特别的高等数学知识,我将以程序员更习惯的方式,教大家跟着一个个的例子编写代码,希望以此能带领大家进入机器学习的世界。熟悉ml5的使用一些常用神经网络的用法。
在这里插入图片描述
要学习本教程,你需要有一些javascript和html5的基础知识。


二、实现图像分类器

首先,我们来实现一个像分类功能的功能,我为大家准备的在线编程的网页(https://chn.ai/ml5.html),这个页面集成了ml5.js的库以及需要的模型数据数据,这样大家不需要自己搭建环境就可以开始学习了。我们打开网址就直接开始编程。

这个页面分为两个部分,左边是一个代码编辑器,可以编写html和javascript代码,点击上方的“运行”,在页面右边就可以看到结果。

在这里插入图片描述

<!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='image' style='min-width: 200px; min-height: 200px; border: solid 1px grey' /> <br/>
<input type='button' value='分类' onclick='classify()' /> <br/><br/>
<div id='result'></div><script>
document.getElementById('file').addEventListener('change', fileChanged, false);function fileChanged(evt)     {var file = evt.target.files[0];if(!file) return;var reader = new FileReader();reader.onload = function(e) {document.getElementById('image').setAttribute('src', e.target.result);}reader.readAsDataURL(file);
}var modelLoaded = false;
var classifier = ml5.imageClassifier('MobileNet', function() {// console.log('model loaded');document.getElementById('result').innerHTML = 'model loaded';modelLoaded = true;
});function classify() {if(!modelLoaded) return;classifier.classify(document.getElementById('image'), function(err, result) {document.getElementById('result').innerHTML = JSON.stringify(result);})
}
</script></body>
</html>

上面大部分都是在处理UI相关的代码,主要功能是有一个文件选择器元素,一个用来显示图片的img元素,当用户选择文件(或者将文件拖动到文件选择器)的时候,文件并不像往常那样上传到服务器,而是采用FileReader将文件内容在浏览器端直接读出来并直接显示img里面。

var reader = new FileReader();     
reader.onload = function(e) {document.getElementById('image').setAttribute('src', e.target.result);
}
reader.readAsDataURL(file);

由于ml5.js是完全在浏览器里面运行的,所以我们不需要将图片上传到服务器,只需要将图片的内容放到img里面让ml5.js能访问到。这里图片内容读出来是以dataUrl的方式例如:

<img src="data:image/png,%89PNG%0D%0A..." />

真正起作用分类图像的是ml5的imageClassifier对象:

var classifier = ml5.imageClassifier('MobileNet', callback);

在初始化imageClassifier对象的时候有2个参数,第一个是字符串‘mobileNet’,第二个则是回调函数。第一个参数是让ml5初始化一个叫‘mobileNet’的模型,这是一个卷积神经网络模型,卷积神经网络注重像素位置之间的关系,所以它更擅长处理图像。

除了神经网络的模型的结构,还需要加载模型里面各个神经节点的权重,一个单纯的神经网络结构好像新生儿的大脑,没有学习和训练什么都不会做;而神经节点权重则是网络训练后的结果,当这些节点赋予了不同的权重,才使得模型能输出正确的结果。

我们在初始化ml5模型的时候,系统会自动从网络上下载对应的网络模型的结构和权重数据,这就是为什么我们短短几行代码就可以实现一个图像分类的功能。真正起作用的是这个mobilenet网络结构与训练结果,这些都有人做好并放在服务器上。我们初始化ml5分类器的时候,就从相应位置下载这些数据并在浏览器的内存里面重建这个网络。

除了mobilenet,ml5还支持其他模型甚至包括用户自己训练的模型。mobileNet相对其他分类网络模型,运行开销比较低,适合在mobile device(移动设备)上运行。关于图像分类器classifier更详细的用法,我们还可以参阅ml5的文档。


下面一章,我们将自己训练一个神经网络并用来分类物体。

好了,如果大家有任何意见,建议,idea,或者在编码过程中遇到任何问题,欢迎在下边留言,我看到会一一回复各位。谢谢大家!




这篇关于ml5.js人工智能编程入门教程(1): ml5.js介绍 实现图像分类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/fribbler/article/details/108728011
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/378480

相关文章

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu