首页 > 其他分享 >前端与AI融合:打造图片识别应用

前端与AI融合:打造图片识别应用

时间:2024-07-04 11:57:20浏览次数:3  
标签:box document const AI 前端 image 识别 模型

前言

在当今的技术环境中,人工智能(AI)与前端开发的融合越来越普遍。其中一个显著的应用是在图像识别中,AI算法可以检测和标记图像中的对象,增强用户体验,并在网站或应用程序上实现创新功能。

下面将给出完成图片识别功能简易代码示例与讲解:

先决条件: 在继续之前,请确保您对HTML、CSS和JavaScript有基本的了解。另外,熟悉与AI和图像处理相关的概念将会有所帮助。

Step1:导入必要的模块

import { pipeline, env } from "https://cdn.jsdelivr.net/npm/@xenova/[email protected]"
env.allowLocalModels = false;

  • 此代码从CDN(内容传送网络)中导入必要的模块。pipelineenv 是从 @xenova/transformers 包中导入的。
  • env.allowLocalModels = false; 将环境变量 allowLocalModels 设置为 false,表示不允许使用本地模型。

Step2:文件上传事件监听器

const fileUpload = document.getElementById('file-upload');
const imageContainer = document.getElementById('image-container')
fileUpload.addEventListener('change', function (e) {
    // 当选择文件时触发的事件监听器
});

  • 此部分代码从HTML文档中选择文件上传输入框和图像容器。
  • 它向文件上传输入框添加了一个事件监听器,当选择文件时触发一个函数。

Step3:FileReader 读取上传的图像

const reader = new FileReader();
reader.onload = function (e2) {
    // 文件读取完成时执行的函数
};
reader.readAsDataURL(file)

  • 当选择文件时,创建了一个 FileReader 对象。
  • 一个 onload 事件监听器被附加到读取器上,当文件读取完成时执行一个函数。
  • readAsDataURL 方法在读取器上被调用,将所选文件的内容读取为数据URL。

Step4:显示上传的图像

javascriptCopy code
const image = document.createElement('img');
image.src = e2.target.result;
imageContainer.appendChild(image)

  • onload 函数内部,创建了一个 <img> 元素。
  • 图像的 src 属性设置为读取文件作为数据URL的结果。
  • 图像元素被追加到HTML文档中的图像容器中。

Step5:启动AI检测

detect(image)

  • 在显示上传的图像后,使用上传的图像作为参数调用 detect 函数。

Step6:使用AI模型进行对象检测

const detector = await pipeline("object-detection", "Xenova/detr-resnet-50")
const output = await detector(image.src, {
    threshold: 0.1,
    percentage: true
})

  • 使用 pipeline 函数从指定的模型("Xenova/detr-resnet-50")实例化一个对象检测模型("object-detection")。
  • 使用 await 等待 detector 对象,确保模型完全加载后再继续。
  • 然后使用 detector 对象在上传的图像上执行对象检测。
  • output 包含对象检测任务的结果。

Step7:渲染检测到的框

output.forEach(renderBox)

  • 对输出中检测到的每个对象,调用 renderBox 函数以渲染边界框。

Step8:渲染边界框

function renderBox({ box, label }) {
    // 渲染边界框的函数
}

  • renderBox 函数接受一个具有 box(边界框的坐标)和 label(检测到的对象的标签)的对象。
  • 在函数内部,创建一个 <div> 元素来表示边界框。
  • 应用 CSS 样式来根据检测到的对象的坐标来定位和样式化边界框。
  • 创建一个 <span> 元素来在边界框内显示检测到的对象的标签。

完整代码

<!--
    * @func 文件上传和对象检测功能
    * @desc 实现了图片上传功能,并利用Transformer模型进行对象检测,并在图片上标记检测到的对象
    * @author [Your Name]
    * @data 2024-04-17
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>nlp之图片识别,两种语言</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/[email protected]"
    // 允许本地模型
    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)
    })

    // 获取状态信息元素
    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 } = 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);
    }
  </script>
</body>

</html>


效果图

还需要调整参数,加强精确度

image.png

总结

这篇文章,我们探讨了将AI对象检测与前端Web开发无缝集成的方法。通过按照所述步骤并利用现成的AI库,开发人员可以为其Web应用程序增加强大的图像识别功能。这种AI和前端技术的融合为在Web上创建智能和交互式用户体验开启了广阔的可能性。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

标签:box,document,const,AI,前端,image,识别,模型
From: https://blog.csdn.net/2401_84494441/article/details/140173748

相关文章

  • 见不得你好的人,是不会劝你做AI副业变现的
    前言今年刚开工不到两周,就收到一朋友发的微信:开年第一周,就接到通知,我们整个事业部要被砍掉,这次,我真的失业了。公司说按照2N来赔,现在市场行情不太好,我都40+了,有合适的工作帮我留意着我想说,你们老板也算是有良心了,正常都是年前就直接一刀切,让你们拿了年终奖,过了带薪年,最后......
  • 点击了解|AI从文字到图像:AIGC如何重塑展陈设计的未来
    AIGC赋能展陈设计一起进入高效创意与无限想象力的新时代随着人工智能生成内容(AIGC)技术的迅速发展,博物馆展陈设计正迎来前所未有的变革。传统的展览设计通常依赖于复杂的软件和专业技能,而AIGC通过文生图技术大幅降低了创作门槛,使得无设计基础的人也能轻松掌握。同时,AIGC还......
  • AI人工智能时代,孩子们何去何从
    今天我讲一个非常非常重要的东西,各位家长直接收藏保存给你孩子看。在人工智能时代,ai时代,我们的孩子还有希望吗?该怎么做才能够立于不败之地?今年高考语文作文也考了人工智能,有些偏远地区的孩子可能看都看不懂题目。什么叫人工智能?很多家长也在听说了什么ChatGPT之类的东西,......
  • AI 绘画变现全攻略:解锁财富新密码
    AIGC,这可是个大家都得了解的词,指的是利用AI工具生成创作内容。这里给您列举了近年全球五十个超热门的AI工具访问量,ChatGPT那可是一骑绝尘,以140亿次的访问量稳坐AI界头把交椅。在众多工具中,除了语言类,占比最多的要数AI绘画工具了。这里面还没算上开源免费能在本地......
  • 前端存储数据
    前端常用的存储数据的方式有2种:本地存储:(localstorage、sessionstorage、cookie)Vuex容器:(state、geeter、mutations、action、modules)   vuex存储在内存;   localstorage(本地存储)则以文件的方式存储在本地,永久保存;   sessionstorage(会话存储),临时保......
  • AI绘画·为电商图优化赋能AI虚拟模特电商图实战StableDiffusion电商图优化教程
    随着科技的不断发展,AI绘画技术逐渐在电商领域展现出其独特的优势。StableDiffusion作为一种先进的AI绘画技术,为电商图优化提供了强有力的支持。本教程将详细介绍如何利用StableDiffusion技术实现AI虚拟模特电商图的优化。StableDiffusion技术概述StableDiffusion是一种基......
  • 基于卷积神经网络的交通标志识别系统(通过TensorFlow构建LeNet-5模型,并使用GTSRB德国交
    完成程序下载点此下载1、资源项目源码均已通过严格测试验证,保证能够正常运行;2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业......
  • 基于心大陆AI大语言模型的多智能体应用
    探索大语言模型背后的力量人工智能技术的快速发展已经推动智能体技术(Agent)从执行简单任务转向更加复杂的智能交互任务。数业智能心大陆智能体,借助大型语言模型,不仅在对话和语言理解方面表现出色,还能利用丰富的知识库和环境反馈做出高效决策。这些智能体在多智能体系统中尤为重要,......
  • 基于卷积神经网络的交通标志识别系统(通过TensorFlow构建LeNet-5模型,并使用GTSRB德国交
    完成程序下载点此下载1、资源项目源码均已通过严格测试验证,保证能够正常运行;2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业......
  • 若依框架前端表格自适应
    1.背景问题描述:如图,若依前端表格高度都是固定写死的,因此会出现底部空一部分,现在希望自适应表格,使得表格一屏展示,且在隐藏查询条件等操作,导致屏幕大小变化时,表格可以同步自适应。 问题现状:很多时候,前端开发都是尽可能本机调整到刚刚好的高度,但不同用户不同电脑分辨率和浏览......