如何在Web页面中集成AI图像识别功能

前言

在信息时代,Web 页面成为我们与世界交互的重要窗口。AI 技术的迅猛发展,特别是图像识别技术,为 Web 页面带来了革命性的变化。通过在 Web 页面上实现图像识别,我们即将迈入一个更加智能与便捷的时代。这种技术不仅使网页能够理解图像内容,还为用户提供了前所未有的互动体验。本文将带你一步步实现这一功能,揭开 AI 赋能 Web 页面的神秘面纱。

具体步骤

HTML 部分

首先,我们需要创建一个简单的 HTML 框架来实现文件上传和显示图片。我们可以通过 Emmet 语法快速生成以下代码:

main.container>label.custom-file-upload>input#file-upload+div#image-container+p#status

生成的 HTML 代码如下:

<main class="container"><label for="file-upload" class="custom-file-upload"><input type="file" accept="image/*" id="file-upload">上传图片</label><div id="image-container"></div><p id="status"></p>
</main>

在这段代码中,我们使用了 main 标签而不是 div,因为 main 更具语义化,表示页面的主体内容。label 标签用于关联文件上传输入框,input 标签的 type 属性为 file,并且通过 accept 属性限制只接收图像文件。

JavaScript 部分

JavaScript 部分是实现图像识别功能的核心。我们将分三步来实现这一功能。

第一步:引入库并处理文件输入

我们首先需要引入远程的 transformers 库,并禁止使用本地模型:

import { pipeline, env } from "https://cdn.jsdelivr.net/npm/@xenova/transformers@2.6.0";
env.allowLocalModels = false;

接下来,我们添加事件监听器以处理文件输入:

const fileUpload = document.getElementById('file-upload');
const imageContainer = document.getElementById('image-container');fileUpload.addEventListener('change', function (e) {const file = e.target.files[0];const reader = new FileReader();reader.onload = function (e2) {const image = document.createElement('img');image.src = e2.target.result;imageContainer.appendChild(image);detect(image);}reader.readAsDataURL(file);
});

在这段代码中,当用户选择文件时,会触发 change 事件,通过 FileReader 对象读取文件,并在页面上显示图片。

第二步:AI 对象检测

为了实现对象检测,我们需要创建一个检测器并处理图像:

const status = document.getElementById('status');const detect = async (image) => {status.textContent = "分析中...请稍等一会";const detector = await pipeline("object-detection", "Xenova/detr-resnet-50");const output = await detector(image.src, {threshold: 0.1,percentage: true});output.forEach(renderBox);
}

在这段代码中,我们通过异步函数 detect 调用对象检测模型,并在页面上显示“分析中”的提示信息。

第三步:渲染检测结果

最后,我们需要在图像上绘制检测到的对象边界框并显示标签:

function renderBox({ box, label }) {const { xmax, xmin, ymax, ymin } = box;const boxElement = document.createElement("div");boxElement.className = "bounding-box";Object.assign(boxElement.style, {borderColor: '#123123',borderWidth: '1px',borderStyle: 'solid',left: 100 * xmin + '%',top: 100 * ymin + '%',width: 100 * (xmax - xmin) + "%",height: 100 * (ymax - ymin) + "%"});const labelElement = document.createElement('span');labelElement.textContent = label;labelElement.className = "bounding-box-label";labelElement.style.backgroundColor = '#000000';boxElement.appendChild(labelElement);imageContainer.appendChild(boxElement);
}

在这段代码中,我们创建了一个 div 元素作为边界框,并将其添加到图像上。同时,我们还创建了一个 span 元素用于显示检测到的对象标签。

CSS 部分

为了使页面更美观,我们需要添加一些基本的 CSS 样式:

.container {margin: 40px auto;width: max(50vw, 400px);display: flex;flex-direction: column;align-items: center;
}.custom-file-upload {display: flex;align-items: center;cursor: pointer;gap: 10px;border: 2px solid black;padding: 8px 16px;border-radius: 6px;
}#file-upload {display: none;
}#image-container {width: 100%;margin-top: 20px;position: relative;
}#image-container>img {width: 100%;
}.bounding-box {position: absolute;box-sizing: border-box;
}.bounding-box-label {position: absolute;color: white;font-size: 12px;
}

我们详细介绍了如何使用 HTML、JavaScript 和 CSS 实现在 Web 页面上进行 AI 图像识别。我们分步骤实现了文件读取、AI 分析和结果渲染。希望这些内容能为你的项目提供帮助,助你迈向更加智能化的未来。通过灵活的封装和模块化思想,我们可以轻松实现复杂的功能,并提升 Web 页面的互动性和智能化水平。

插入 PlugLink 的巧妙之处

在实现上述功能时,我们可以利用 PlugLink 来管理和部署我们的 AI 插件。PlugLink 作为一个开放的插件平台,能够让开发者轻松创建、管理和共享插件,从而提升开发效率和代码复用性。例如,我们可以将上面的图像识别功能打包成一个 PlugLink 插件,通过 PlugLink 平台进行分发和管理。

PlugLink 的插件开发标准方法非常简单,按照 PlugLink 提供的示例代码和开发文档,可以快速将现有的功能打包成插件。并且,PlugLink 支持多种插件的无缝集成和自动化工作流,让你的 Web 应用更具灵活性和扩展性。

目前发布了开源版和应用版,开源版下载地址:
Github地址:https://github.com/zhengqia/PlugLink
Gitcode地址:https://gitcode.com/zhengiqa8/PlugLink/overview
Gitee地址:https://gitee.com/xinyizq/PlugLink

应用版下载地址:
链接:https://pan.baidu.com/s/19tinAQNFDxs-041Zn7YwcQ?pwd=PLUG
提取码:PLUG

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/18914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024广东省赛 C.DFS序

题目 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long long const int maxn 1e6 5, inf 1e9, maxm 4e4 …

代码助手之-百度Comate智能体验

简介 越来越多的厂商提供了智能代码助手&#xff0c;百度也不例外。Baidu Comate&#xff08;智能代码助手&#xff09;是基于文心大模型&#xff0c;Comate取自Coding Mate&#xff0c;寓意大家的AI编码伙伴。Comate融合了百度内部多年积累的编程现场大数据和外部开源代码和知…

如何顺利通过软考中级系统集成项目管理工程师?

中级资格的软考专业包括"信息系统"&#xff0c;属于软考的中级级别。熟悉软考的人都知道&#xff0c;软考分为初级、中级和高级三个级别&#xff0c;涵盖计算机软件、计算机网络、计算机应用技术、信息系统和信息服务五个专业&#xff0c;共设立了27个资格。本文将详…

全程曝光 计算机领域顶会投稿后会经历哪些关键环节?

会议之眼 快讯 亲爱的计算机领域大牛们&#xff0c;当你挥洒汗水&#xff0c;精心打磨一篇科研论文&#xff0c;终于怀着激动的心情投稿至顶会——&#xff08;如&#xff08;ACM MM 、ACL、AAAI&#xff09;时&#xff0c;你是否想知道接下来这篇论文会经历怎样的旅程&#x…

产业园物业满意度调研如何抽样

本文由群狼调研&#xff08;长沙商圈选址调查&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。在进行产业园物业满意度调研时&#xff0c;可以采用以下抽样方法&#xff1a; 群体抽样&#xff1a;从产业园内的不同群体中随机选择样本。例如&#xff0c;可以根据不…

Mybatis进阶——动态SQL(1)

目录 一、 <if> 标签 二、<trim> 标签 三、<where> 标签 四、<set> 标签 五、<foreach> 标签 六、<include> 标签 动态SQL 是Mybatis的强大特性之一&#xff0c;能够完成不同条件下的不同SQL拼接&#xff0c;可以参考官方文档&#…

pyQt处理任务等待动画

写了一个显示Qt正在处理内容的等待动画&#xff0c;任务另开一个线程执行&#xff0c;执行完后自动关闭动画 from PyQt5 import QtCore, QtWidgets from PyQt5.QtWidgets import QApplication, QMessageBox, QDialog, QVBoxLayout from PyQt5.QtCore import pyqtSignal, QTime…

理解消息队列:队列与主题的区别

理解消息队列:队列与主题的区别 如果你研究过多种消息队列产品,可能会发现每种消息队列都有自己的一套消息模型,像队列(Queue)、主题(Topic)或分区(Partition)这些名词概念在不同的消息队列模型中含义各异。这是因为没有统一的标准。尽管曾有国际组织尝试制定过消息相…

springboot 作为客户端接收服务端的 tcp 长连接数据,并实现自定义结束符,解决 粘包 半包 问题

博主最近的项目对接了部分硬件设备&#xff0c;其中有的设备只支持tcp长连接方式传输数据&#xff0c;博主项目系统平台作为客户端发起tcp请求到设备&#xff0c;设备接收到请求后作为服务端保持连接并持续发送数据到系统平台。 1.依赖引入 连接使用了netty&#xff0c;如果项…

CPU占用率很高,相应很慢排查思路

获取线程状态 通过top -c命令可以动态显示进程及其占用资源的排行榜 可以看到&#xff0c;CPU占用率100%的PID是80972&#xff0c;定位到该进程之后&#xff0c;我们再从线程的dump日志中去定位. 使用top -H -p 80972命令查找到该进程中消耗CPU最多的线程&#xff0c;从下面的…

Apose.Words 常用对象详解

系列文章目录 文章目录 系列文章目录前言一、基础对象1. moveToBookmark 前言 本文介绍 Apose.Words 的常用对象的含义及使用方法。 一、基础对象 1. moveToBookmark 将指针移动到书签位置。 moveToBookmark(String bookmarkName, boolean isStart, boolean isAfter) book…

国产可视化爬虫助力AI大模型训练:精准爬取汉语词典

大语言模型&#xff0c;可以生成流畅对话的会话聊天机器人、通畅起草文章的内容生成器。在炫酷技术的背后&#xff0c;数据、算力、算法&#xff0c;被视作生成式AI的三个核心要素。由此可见&#xff0c;高质量的训练数据对于AI算法的准确性至关重要。 如何获得高质量的训练数…

【方法】如何禁止查看压缩包里的内容?

使用压缩文件&#xff0c;可以让文件更方便存储和传输&#xff0c;那对于重要的文件&#xff0c;如何防止随意查看压缩包的内容呢&#xff1f;我们可以试试以下两个方法。 方法1&#xff1a; 最常见的便是给压缩包设置“打开密码”&#xff0c;这样只有通过密码才能查看文件内…

外汇天眼:PayPoint投资100万英镑,深化与Aperidata开放银行合作

PayPoint今日宣布对Aperidata Ltd进行100万英镑的投资&#xff0c;Aperidata是一家创新的消费者和商业信用报告及开放银行平台。 此交易将使PayPoint集团在两家公司之间现有的商业合作基础上更进一步&#xff0c;为包括政府、地方当局、慈善机构和住房协会在内的多个领域的客户…

uniapp tabBar app页面滚动闪屏的问题

我在做app的时候&#xff0c;调试tabBar页面滚动时莫名其妙的闪屏&#xff0c;其他页面不闪屏&#xff0c;可能跟新建的项目样式有关。 修改方法如下。 在pages.json中 "tabBar": {"selectedColor": "#204AFF","color": "#ccc…

PaddleOCR2.7+Qt5

章节一&#xff1a;Windows 下的 PIP 安装 官网安装教程地址 按照里面的教程去安装 如果使用cuda版本的还要安装tensorrt&#xff0c;不然后面运行demo程序的程序会报如下错。 下载TensorRT 8版本&#xff0c;tensorrt下载地址 章节二&#xff1a;编译源码 进入官网源码地址 下…

c 回调函数

java中有很多回调函数&#xff0c;其与c中的回调函数一样。c的回调函数可以理解为是某一个函数的一个参数。也可以认为是程序为其他编程者开放的一个函数。原程序运行到此处就执行此开放函数操作 #include <stdio.h> #include <stdlib.h> #include <string.h&…

使用@Value无法将配置文件的属性注入

1.错误示例 Value("${aliyun.oss.accessKeyId}") private static String accessKeyId;//用户名 原因分析 在使用Value注解进行属性注入时&#xff0c;不能将属性标记为静态的。因此&#xff0c;你需要将以下四个属性的static关键字去掉。 在使用Value注解时&#x…

通过AWR结合SQLHC对性能变低的SQL进行分析的过程

ESTDB数据库2020/4/29下午16点附近出现业务卡顿现象。 可以发现问题SQL为(SQL_ID fr0nhywcycrsa)。占问题时段数据库资源消耗的52.69%&#xff0c;通过对此SQL语句的执行效率进行分析&#xff0c;我们发现&#xff1a; 对SQL_ID fr0nhywcycrsa?进行分析&#xff0c;可以发现此…

kubernetes-PV与PVC

一、PV和PVC详解 当前&#xff0c;存储的方式和种类有很多&#xff0c;并且各种存储的参数也需要非常专业的技术人员才能够了解。在Kubernetes集群中&#xff0c;放了方便我们的使用和管理&#xff0c;Kubernetes提出了PV和PVC的概念&#xff0c;这样Kubernetes集群的管理人员就…