AI+前端技术的结合(实现图片识别功能)

     随着人工智能技术的不断发展,AI在前端设计页面中的应用变得越来越普遍。比如:在电商平台上,可以利用对象检测技术实现商品的自动识别和分类;人脸识别;车辆检测;图片识别等等......其中一个显著的应用是在图像识别中,AI算法可以检测和标记图像中的对象,增强用户体验,并在网站或应用程序上实现创新功能。

技术原理

     在demo中,我们将使用 JavaScript 和 Transformers 库来实现图像对象检测的功能。图像对象检测是计算机视觉领域中的重要任务,它可以识别图像中的不同对象并标注它们的位置。我们将使用一个预训练的对象检测模型,将其集成到网页中,通过上传图片来进行对象检测,并在图片上绘制边界框以标识检测到的对象。

<!--* 本demo实现的功能:* 实现了图片上传功能,利用Transformer模型进行对象检测,并在图片上标记检测到的对象
-->
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>图片识别</title><!-- CSS 样式 --><style>.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;}</style>
</head><body><!-- 页面主体内容 --><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><!-- JavaScript 代码 --><script type="module">// 导入transformers nlp任务的pipeline和env对象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) {// FileReader 读取上传的图像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)// 启动AI检测detect(image)}reader.readAsDataURL(file)})// 获取状态信息元素const status = document.getElementById('status');// 检测图片的AI任务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)}// 渲染检测框函数function renderBox({ box, label }) {const { xmax, xmin, ymax, ymin } = boxconst 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);}</script>
</body></html>

效果图

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

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

相关文章

数据结构_优先级队列(堆)

目录 一、优先级队列 1.1 堆 1.2 PriorityQueue接口 二、模拟实现优先级队列 2.1 初始化 2.2 创建大根堆 (向下调整) 2.3 堆的插入 2.4 堆的删除 2.5 堆排序 总结 一、优先级队列 优先级队列是一种特殊的队列&#xff0c;其出队顺序与入队顺序无关&#xff0c;而与优…

易支付宝塔一键部署项目 懒人专用包 制作

宝塔一键部署说明 https://www.bt.cn/bbs/thread-33063-1-1.html 1. auto_install.json {"php_ext":"fileinfo","chmod":[],"success_url":"install/?step3&jump1","php_versions":"80","db…

利用机器学习弄懂机器学习!

第一个问题&#xff1a;什么是机器学习&#xff1f; 机器学习是人工智能的一个子领域&#xff0c;它使计算机系统能够从经验中学习并改进其性能&#xff08;和人一样&#xff0c;人也是从经验当中&#xff0c;实现自己的不断地学习和提升&#xff09;。简单来说&#xff0c;机…

架构师指南:现代 Datalake 参考架构

这篇文章的缩写版本于 2024 年 3 月 26 日出现在 The New Stack 上。 旨在最大化其数据资产的企业正在采用可扩展、灵活和统一的数据存储和分析方法。这一趋势是由企业架构师推动的&#xff0c;他们的任务是制定符合不断变化的业务需求的基础设施。现代数据湖体系结构通过将数…

逻辑地址 线性地址 物理地址 Linux kernel 内存管理设计

linux kernel 2.6以后的MM&#xff0c;受到了兼容 risc arch cpu 的 MM 的启发&#xff0c;新的 MM 架构对 x86 上任务切换的效率上也有明显提高。 新的MM架构&#xff0c;GDT 不再随着进程的创建与结束而创建和删除 新的表项。 TSS段 也只有一个&#xff0c;进程切换时&…

深度学习入门2—— 神经网络的组成和3层神经网络的实现

由上一章结尾&#xff0c;我们知道神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数。接下来会介绍神经网络的概要&#xff0c;然后再结合手写数字识别案例进行介绍。 1.神经网络概要 1.1从感知机到神经网 我们可以用图来表示神经网络&#xff0c;我们把最…

上位机图像处理和嵌入式模块部署(mcu之静态库生成和使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多同学做了很长时间的mcu和keil开发&#xff0c;都认为keil工程中必须包含所有的源代码&#xff0c;其实这是不对的。如果有一些代码我们不希望别…

IKVM.net调用Jar包实现SM4解密

近期&#xff0c;我深入学习了如何使用IKVM.net来调用Jar包&#xff0c;这次的学习经历让我对Java与.NET之间的互操作性有了更深刻的理解。IKVM.net作为一款强大的工具&#xff0c;为我们打通了Java与.NET之间的桥梁&#xff0c;使得在.NET环境中调用Java库变得简单而高效。 在…

红队内网攻防渗透:内网渗透之内网对抗:信息收集篇自动项目本机导出外部打点域内通讯PillagerBloodHound

红队内网攻防渗透 1. 内网自动化信息收集1.1 本机凭据收集类1.1.1、HackBrowserData 快速获取浏览器的账户密码1.1.2、Searchall 快速搜索服务器中的有关敏感信息还有浏览器的账户密码1.1.3、Pillager 适用于后渗透期间的信息收集工具,可以收集目标机器上敏感信息1.2 对外打点…

密码(6)

一、[NCTF 2019]Keyboard——键盘密码 1.题目&#xff1a; ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee 2.解题&#xff1a; 这些字母是26键盘上的第一行&#xff0c;每个字母对应上…

redis类型解析汇总

redis类型解析汇总 介绍数据类型简介主要数据类型&#xff1a;衍生类型&#xff1a; 字符串&#xff08;String&#xff09;底层设计原理图例设计优势字符串使用方法设置字符串值获取字符串值获取和设置部分字符串获取字符串长度追加字符串设置新值并返回旧值递增/递减同时设置…

通过 WireGuard 组建虚拟局域网 实现多个局域网全互联

本文后半部分代码框较多,欢迎点击原文链接获得更佳的阅读体验。 前言 上一篇关于 WireGuard 的文章通过 Docker 安装 wg-easy 的形式来使用 WireGuard,但 wg-easy 的功能比较有限,并不能发挥出 WireGuard 的全部功力。 如果只是想要出门在外连随时随地的连回家里的局域网,…

067、Python 高阶函数的编写:优质冒泡排序

以下写了个简单的冒泡排序函数&#xff1a; def bubble_sort(items: list) -> list:for i in range(1, len(items)):swapped Falsefor j in range(0, len(items) - 1):if items[j] > items[j 1]:items[j], items[j 1] items[j 1], items[j]swapped Trueif not swa…

UCOS高频面试题及参考答案(2万字长文)

目录 UCOS-II/UCOS-III的基本特点和适用场景 UCOS-II与UCOS-III的主要区别 UCOS的任务状态 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()函数 UCOS-III任务调度过程 时间片轮转调度与UCOS-II 创建UCOS任务的步骤 使用UCOS信号量进行任务同步 信号量与互斥量的区别 UCOS中…

[数据集][目标检测]棉花叶子害虫检测数据集VOC+YOLO格式571张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;595 标注数量(xml文件个数)&#xff1a;595 标注数量(txt文件个数)&#xff1a;595 标注类别…

Linux驱动调试——使用DEVICE_ATTR实现cat、echo指令调试驱动

在平常做一些驱动调试的时候&#xff0c;每次都写应用去调试相对较麻烦&#xff0c;有一个非常便捷的操作方法就是使用device_attr&#xff0c;只需要执行shell指令例如echo和cat就可以看到效果&#xff0c;不需要再单独写一个测试demo。 看网上很多博客在这一块的使用上写的都…

FENDI CLUB精酿啤酒与小麦的不解之缘

FENDI CLUB精酿啤酒与小麦之间这种联系体现在啤酒的酿造原料、口感特色以及文化内涵等多个方面。以下是关于这两者之间关系的详细分析&#xff1a; 一、酿造原料的紧密联系 小麦作为关键原料&#xff1a;FENDI CLUB精酿啤酒在酿造过程中&#xff0c;小麦是不可或缺的原料之一…

Mybatis 系列全解(1)——全网免费最细最全,手把手教,学完就可做项目!

Mybatis 系列全解&#xff08;1&#xff09; 1. 第一个小程序2. CURD 增删改查3. 模糊查询4. 配置解析4.1 核心配置文件4.2 环境配置4.3 属性4.4 类型别名4.5 设置4.6 映射器 mappers 1. 第一个小程序 1&#xff09;创建一个数据库&#xff0c;一个表&#xff0c;填入一些数据…

OpenAI项目爆改GLM——以基于llama_index的pdf阅读助手

最近在做大模型agent构建&#xff0c;看了许多不错的开源项目&#xff0c;但是clone下来就是一整个不能用&#xff0c;因为github上开源的项目基本都是基于openai做的。而如果想要转成国内大模型backbone&#xff0c;需要修改的地方挺多的。 现在以一个简单的pdf reader agent…

【Qt】QList<QVariantMap>中数据修改

1. 问题 QList<QVariantMap> 类型中&#xff0c;修改QVariantMap中的值。 2. 代码 //有效代码1QVariantMap itemMap itemList.at(0);itemMap.insert("title", "test");itemList.replace(0, itemMap);//有效代码 2itemList.operator [](0).insert(…