基于AI识别数据的Vue.js图像框选标注

在数字化时代,图像识别技术的应用越来越广泛,尤其是在车牌识别、人脸识别等领域。本文将介绍如何使用Vue.js框架和JavaScript创建一个交互式组件,该组件不仅允许用户在图片上绘制多个区域,加载文字,还提供了清空功能。这种技术可以与AI识别技术相结合,实现在图片上框出识别的区域和文字标注,例如识别车牌号码等。

技术栈简介

为了实现这一功能,我们将使用以下技术:

  1. Vue.js:一个渐进式的JavaScript框架,用于构建用户界面。
  2. HTML5 Canvas:HTML5提供的一个元素,允许通过JavaScript在网页上绘制图形。
  3. JavaScript:用于实现交互逻辑和处理用户输入。

实现步骤

1. 创建Vue组件

首先,我们需要创建一个Vue组件,它将包含图片和用于绘制的画布。

<template><div><div style="margin-bottom: 10px"><el-button type="primary" @click="initVideo">开始识别</el-button><el-button type="primary" @click="clearCanvas">清空画布</el-button></div><div class="imageContainer"><img  id="img" src="../../assets/img/vehicle.png" alt=""><div ref="drawArea" class="draw-area"><!-- Canvas将被useDraw函数动态创建并添加到DOM中 --></div></div></div>
</template>

2. 引入绘制逻辑

我们将使用一个自定义的JavaScript模块 autoDraw.js,它封装了绘制逻辑。这个模块提供了初始化画布、绘制图形和文字、清除画布等功能,可去资源库下载完整文件。

import autoDraw from "../../util/autoDraw.js";

3. 初始化和控制绘制

在Vue组件的 methods 中,我们定义了 initDrawclearCanvas 方法来初始化画布和清除绘制。

export default {data() {return {list:[{name:"粤A·0932L 蓝牌",graphCoordinateList: [{ x: 0.29, y: 0.51 },{ x: 0.375, y: 0.52 },{ x: 0.373, y: 0.59 },{ x: 0.29, y: 0.58 }],},{name:"粤A·G33385 绿牌",graphCoordinateList: [{ x: 0.71, y: 0.56 },{ x: 0.81, y: 0.57 },{ x: 0.81, y: 0.64 },{ x: 0.709, y: 0.63 }], }],drawInstances: [], // 保存useDraw的实例};},mounted(){},methods: {// 加载画布initDraw(regionData) {console.log(regionData,'进入');const drawArea = this.$refs.drawArea;const img = document.getElementById('img'); // 获取图片元素// 获取图片的宽度和高度const imgWidth = img.offsetWidth;const imgHeight = img.offsetHeight;const options = {canvasStyle: {lineWidth: 5,strokeStyle: "red",fillStyle: "rgba(255, 0, 0, 0)",},// x和y是图片上的相对坐标,坐标值的范围从 0 到 1,其中 (0,0) 代表图片左上角,(1,1) 代表图片右下角。initPoints: regionData.graphCoordinateList.map(point => {// 将比例值转换为像素坐标return {x: point.x * imgWidth,y: point.y * imgHeight};}),onComplete: (points) => {console.log("绘图完成,坐标点:", points);},onClear: () => {console.log("画布已清空");},};// 初始化useDraw,并保存实例引用const drawInstance = autoDraw();drawInstance.init(drawArea, options);// 绘制区域名称const textX = regionData.graphCoordinateList[0].x * imgWidth - 10;const textY = regionData.graphCoordinateList[0].y * imgHeight - 10;drawInstance.drawText(textX, textY, regionData.name, "red", "24px Arial");// 保存实例this.drawInstances.push(drawInstance);},// 获取数据判断是否加载画布initVideo() {this.$nextTick(res=>{console.log(this.list,'图片区域数据');if(this.list.length > 0){// 如果有值则渲染区域出来this.list.forEach((regionData) => {this.initDraw(regionData);});}})},// 清空画布clearCanvas(){this.drawInstances.forEach(instance => {instance.onClear();});this.drawInstances = []; // 清空实例数组}},// 在组件销毁前清理资源beforeDestroy() {},
};

4. 样式设置

最后,我们需要为图片容器和画布设置样式,以确保它们正确显示。

<style lang="scss" scoped>.imageContainer {position: relative;width: 100%;max-width: 100%; /* 根据图片尺寸调整 */height: 700px;img{width: 100%;height: 100%;}.draw-area {width: 100%;height: 100%;position: absolute;top: 0;left: 0;}}
</style>

结论

通过上述步骤,我们成功地在Vue.js应用中实现了一个交互式的图片框选和文字标注组件。该组件可以根据AI识别数据在图片上进行区域框选和文字标注,适用于车牌识别等场景。这种技术可以应用于教育、游戏、图像编辑等多个领域,为用户提供更加丰富和个性化的体验。

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

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

相关文章

外包干了2个月,技术明显退步

回望过去&#xff0c;我是一名普通的本科生&#xff0c;于2019年通过校招有幸加入了南京某知名软件公司。那时的我&#xff0c;满怀着对未来的憧憬和热情&#xff0c;投入到了功能测试的岗位中。日复一日&#xff0c;年复一年&#xff0c;转眼间&#xff0c;我已经在这个岗位上…

常用shell指令

这些指令通常在adb shell环境中使用&#xff0c;或者通过其他方式&#xff08;如SSH&#xff09;直接在设备的shell中使用。 文件操作命令 ls&#xff1a;列出目录的内容 ls /sdcard cd&#xff1a;改变目录 cd /sdcard/Download pwd&#xff1a;打印当前工作目录 pwd cat&…

CV2通过一组轮廓点扣取图片

代码如下&#xff1a; import cv2 import numpy as np# 读取原始图像 original_image cv2.imread(img.png)# 定义一组轮廓点&#xff08;这里只是示例&#xff0c;你需要根据实际情况替换&#xff09; points np.array([[50, 100], [100, 200], [200, 150], [200, 50], [160…

负载均衡服务器攻击怎么解决最有效?

负载均衡服务器攻击怎么解决最有效&#xff1f;常见的有效解决方法包括&#xff1a;使用SYNCookie机制、限制ICMP包速率、基于源IP的连接速率限制、检测并丢弃异常IP包、配置访问控制列表&#xff08;ACL&#xff09;、设置虚拟服务器/服务器连接数量限制、设置HTTP并发请求限制…

【景观生态学实验】实验二 景观类型分类

实验目的 1.掌握ArcGIS软件的基本操作&#xff1a;通过课堂理论学习与实验课的实际动手操作&#xff0c;学习并熟练掌握如何利用ArcGIS软件对遥感影像进行一些较为基础的数据处理与分析工作&#xff0c;具体包括波段合成、图像镶嵌、图像裁剪与图像分类等&#xff1b; 2.熟悉…

基于STM32设计的养殖场环境监测系统(华为云IOT)

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】需求总结 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 二、部署华为云物联网平台2.1 物联网平台介绍2.2 开通物联网服务2.3 创建产品&#x…

微信小程序-获取头像和昵称

一.获取头像 1.将button组件open-type的值设置为chooseAvatar 2.通过bindchooseavatar事件回调获取到头像信息的临时路径 wxml文件代码&#xff1a; <view> <button class"btn" open-type"chooseAvatar" bindchooseavatar"chooseavatar&qu…

生成式人工智能

这个接龙的生成就是概率式的&#xff0c;下一个接龙的字是有概率的 本身就是在做文字接龙的游戏&#xff0c;不会搜索网上的资料

Zig语言通用代码生成器:逻辑,冒烟测试版发布

#1024程序员节 | 征文# Zig语言通用代码生成器&#xff1a;逻辑&#xff0c;冒烟测试版发布 Zig语言是一种新的系统编程语言&#xff0c;其生态位类同与C&#xff0c;是前一段时间大热的rust语言的竞品。它某种意义上的确非常像rust&#xff0c;尤其是在开发过程中无穷无尽抛错…

【哈工大_操作系统理论】L282930 生磁盘的使用从生磁盘到文件文件使用磁盘的实现

L4.3 生磁盘的使用 1、认识磁盘 选择磁道旋转扇区数据读写 哪一个柱面 C哪一个磁头 H哪一个扇区 S 2、第一层抽象&#xff1a;盘块号block 发送盘块号block&#xff0c;磁盘驱动根据 block 计算出 cyl、head、sec&#xff08;CHS&#xff09; 磁盘访问时间主要是寻道时间…

精准布局:探索CSS中的盒子固定定位的魅力

一、概念 固定定位使元素相对于浏览器窗口进行定位&#xff0c;无论网页如何滚动&#xff0c;固定定位的元素也会保持在相同的位置&#xff0c;设置固定定位的元素脱离文档流。 二、语法结构 <style>选择器{/* fixed 固定定位 */position: fixed;}</style> 与绝…

LeetCode练习-删除链表的第n个结节

大家好&#xff0c;依旧是你们的萧萧啊。 今天我们来练习一个经典的链表问题&#xff1a;删除链表的第n个节点。在这篇文章中&#xff0c;我们将深入分析这个问题&#xff0c;并给出一个有效的解决方案。 问题描述 给定一个链表&#xff0c;要求删除链表的倒数第n个节点&…

WRB Hidden Gap,WRB隐藏缺口,MetaTrader 免费公式!(指标教程)

WRB Hidden Gap MetaTrader 指标用于检测和标记宽范围的柱体&#xff08;非常长的柱体&#xff09;或宽范围的烛身&#xff08;具有非常长实体的阴阳烛&#xff09;。此指标可以识别WRB中的隐藏跳空&#xff0c;并区分显示已填补和未填补的隐藏跳空&#xff0c;方便用户一眼识别…

GEE数据集:1984-2022 年间加拿大 6.5 亿公顷森林生态系统的年度优势树种(也称主要树种)地图

目录 简介 数据集说明 空间信息 变量 代码 代码链接 下载链接 引用 许可 网址推荐 0代码在线构建地图应用 机器学习 简介 加拿大长期树种&#xff08;1984-2022 年&#xff09;∥在该数据集中&#xff0c;我们利用空间分辨率为 30 米的 Landsat 时间序列图像&…

etl-查询错误log日志和oracle删除数据表空间

查看weblogic日志的目录 建立连接ssh root192.168.30.1xx 密码hygd123 找到下面路径中的文件 cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bapp-logs 查看log日志 tail -f -n 400 Adminservers.log oracle删除表空间&#xff08;切换到dba用户…

家庭宽带的ip地址是固定的吗?宽带ip地址怎么修改‌

在家庭网络环境中&#xff0c;IP地址的分配和管理是用户常关注的问题。本文将探讨家庭宽带IP地址的固定性&#xff0c;并介绍如何修改宽带IP地址&#xff0c;以满足用户的不同需求。 一、家庭宽带的IP地址是否固定? 关于家庭宽带的IP地址是否固定&#xff0c;答案并非一概而论…

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式&#xff1a;RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上&#xff0c;后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用&#xff0c;但是通常会将两者结合使用。 一、持久化 1.1、什么…

【Android】使用 Compose 自定义 View 实现从 0 ~ 1 仿 EChat 柱状图

目录 前言DrawScopeDrawScope Api 绘制柱状图绘制 X 轴绘制 Y 轴绘制柱状背景绘制柱状前景完整代码最终效果 存在的问题 前言 本文讲的是使用 compose 去自定义 View &#xff0c;如果您未曾通过继承 View 的方式去实现自定义 View&#xff0c;那么&#xff0c;我建议在观看本…

监控-08-skywalking监控告警

文章目录 前言一、准备二、配置skywalking2.1 修改alarm-settings.yml2.2 重启skywalking 三、收到告警邮件总结 前言 skywalking根据监控规则&#xff0c;通过webhook调后端微服务接口&#xff0c;从而发送告警邮件。 一、准备 根据上几章内容&#xff0c;保证skywalking能监…

离散数学实验二c语言(输出关系矩阵,输出矩阵性质,输出自反闭包,对称闭包,传递闭包,判断矩阵是否为等价关系,相容关系,偏序关系)

离散数学实验二 一、算法描述&#xff0c;算法思想 &#xff08;一&#xff09;相关数据结构 typedef struct Set *S; //存放集合 struct Set {int size; //集合的元素个数char *A; //存放该集合的元素 }; Set存放有限集合A&#xff0c;该集合的元素个数为size&#xff0…