使用label-studio对OCR数据进行预标注

news2025/1/13 9:50:58

导读

label-studio作为一款数据标注工具相信大家都不陌生,对于需要进行web数据标注协同来说应该是必备工具了,标注的数据类型很全涉及AI的各个任务(图像、语音、NLP、视频等),还支持自定义涉及模版。

然而,我们在标注数据的过程中,通常为了提高标注人员的工作效率,都会进行预标注。所谓的预标注就是给标注人员提供一个先验的标注结果,在使用label-studio进行预标注的时候有两种方法:

  1. 导入一个带预标注信息的json文件
  2. 使用label-studio-backend提供一个模型服务,进行在线预标注,如果模型的处理速度较慢,建议用第一种

这里我们介绍的也是使用第一种的预标注

新建OCR标注任务

1. 创建任务

在这里插入图片描述

2. 填写任务信息

  • ProJect Name:项目名称
  • Description:项目的描述
    在这里插入图片描述

3. 选择OCR任务

在这里插入图片描述

4. 通过直接使用code来设置标注任务

<View>
  <Image name="image" value="$image_url"/>

  <Labels name="label" toName="image">
    <Label value="Text" background="green"/>
    
  <Label value="hard" background="#f20202"/></Labels>

  <Rectangle name="bbox" toName="image" strokeWidth="3"/>
  <Polygon name="poly" toName="image" strokeWidth="3"/>

  <TextArea name="transcription" toName="image" editable="true" perRegion="true" required="true" maxSubmissions="1" rows="5" placeholder="Recognized Text" displayMode="region-list"/>
</View>

在这里插入图片描述

设置图片访问方式

因为在进行OCR数据标注的时候,我们需要去访问图片,而label studio针对图片的访问方式提供了两种方法,第一种就是使用label studio自带的Cloud Storage,第二种就是通过图片链接去访问,相对来说第二种方式会更加的灵活

1. 通过Cloud Storage设置图片数据

使用这种方式添加数据的时候,需要在启动label studio的时候添加两个环境变量

export LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
export LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/datasets/ocr/datasets

这里的LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT表示添加的数据必须要放在这个路径的下面,否则无法加载数据

点击项目–> Settings—> Cloud Strorage–> Source Cloud Stroage —> Add Source Stroage,然后添加一下图片存放的目录即可,如果增加了新的图片到目录下,点一下Sync Storage就会自动更新同步,使用这种方式的弊端也非常的明显就是数据需要和label studio放在同一台服务器上
在这里插入图片描述

2. 使用文件服务器

关于文件服务器大家可以使用python自带的http服务,或者是nginx,对于图片这两者都可以,如果是标注的视频最好使用nginx进行替代,不然再标注的时候无法快进

  • python自带的http服务
    使用Python自带的文件服务非常的方便,一行命令即可。执行完成之后就会将该目录下的文件映射到http服务上,通过http://127.0.0.1:端口号进行访问
python -m http.server 端口号
  • nginx搭建文件服务器

Ubuntu安装nginx,sudo apt-get install nginx,CentOS安装nginx,sudo yum install nginx,配置文件如下

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root  /datasets/ocr;#需要映射的数据存放目录
            autoindex on;
        }
        access_log  /logs/nginx/access/80-access.log;
        error_log  /logs/nginx/error/80-error.log;
    }
}

启动nginx,sudo nginx即可,就可以通过http://10.0.7.84访问文件

OCR预标注json文件的制作

1. 文本框box的数值转换

  • x:文本框左上角点的x值
  • y:文本框左上角点的y值
  • width:文本框的宽
  • height:文本框的高
  • rotation:文本矩形框的旋转角度

注意:label sutdio支持的文本框位置信息和我们预测的box的格式有区别,具体的转换方法如下

box = ocr_info["box"]
box_width = math.sqrt((box[0][0] - box[1][0]) ** 2 + (box[0][1] - box[1][1]) ** 2)
box_width = round(box_width / image_width * 100,2)
box_height = math.sqrt((box[0][0] - box[3][0]) ** 2 + (box[0][1] - box[3][1]) ** 2)
box_height = round(box_height / image_height * 100,2)
if box[1][0] != box[0][0]:
    rotation = round(np.arctan((box[1][1] - box[0][1]) / (box[1][0] - box[0][0])) / np.pi * 180,2)
    if rotation < 0:
        rotation += 360
else:
    rotation = 0
x = round(box[0][0] / image_width * 100,2)
y = round(box[0][1] / image_height * 100,2)

2. label studio支持的数据格式

下面展示了一个文本框的json格式,如果有多张图片按照下面的格式进行添加即可

[{
	"predictions": [{
		"result": [{
			"value": {
				"labels": ["Text"],
				"x": 36.78,
				"y": 66.83,
				"width": 26.67,
				"height": 2.5,
				"rotation": 0.0
			},
			"id": "490b7582",
			"from_name": "label",
			"to_name": "image",
			"type": "labels",
			"origin": "manual"
		}],
		"model_version": "PPOCR"
	}],
	"data": {
		"image_url": "http://102.20.27.81:8000/images/65e6999f0000000001028c02.jpg"
	}
}]

预标注的json数据导入

1. 点击标注任务然后再点击import

在这里插入图片描述

2. 上传json文件,点击Upload Files

在这里插入图片描述

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

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

相关文章

【简单讲解下Fine-tuning BERT,什么是Fine-tuning BERT?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

<Python><ffmpeg>基于python使用PyQt5构建GUI实例:音频格式转换程序(MP3/aac/wma/flac)(优化版2)

前言 本文是基于python语言使用pyqt5来构建的GUI,功能是使用ffmpeg来对音频文件进行格式转换,如mp3、aac、wma、flac等音乐格式。 UI示例: 环境配置 系统:windows 平台:visual studio code 语言:python 库:pyqt5、ffmpeg 概述 本文是建立在之前的博文的基础上的优化版…

Linux多进程和多线程(二)-进程间通信-管道用法

进程间通信 关于多进程的通信管道无名管道(匿名管道)创建无名管道示例:创建子进程,父进程通过管道向子进程发送消息无名管道(匿名管道) 的特点 有名管道(命名管道) 创建有名管道需要调⽤ mkfifo() 函数示例:创建两个没有关联关系的进程,通过有名管道通信 注意: 缺点优点 关于判…

烧结刚玉砂轮片 磨具用晶谷低温陶瓷结合剂玻璃粉

晶谷CBN 砂轮磨具用低温陶瓷结合剂玻璃粉的一些特点如下&#xff1a; - 软化点&#xff1a;通常为450~650度&#xff1b; - 膨胀系数&#xff1a;50~12010-7&#xff1b; - 粒径&#xff1a;300~3000目&#xff08;可按要求订做&#xff09;&#xff1b; - 外观颜色&#xff…

6. 较全的Open3D点云数据处理(python)

注意&#xff1a;以下内容来自博客爆肝5万字❤️Open3D 点云数据处理基础&#xff08;Python版&#xff09;_python 点云 焊缝-CSDN博客&#xff0c;这篇博客写的全且详细&#xff0c;在这里是为了记笔记方便查看&#xff0c;并非抄袭。 1.点云的读写 代码如下&#xff1a; …

使用Perplexity打造产品的27种方式

ChatGPT和Perplexity等聊天机器人正迅速成为产品经理的首选助手。以下是一份全面的指南&#xff0c;介绍PM如何在日常工作中使用Perplexity&#xff0c;该指南基于300多份回复和30次电话后的总结。 理解并制定增长战略&#xff1a;例如&#xff0c;解释增长会计的基本原理&…

什么是 Elasticsearch 数据预热?

引言&#xff1a;在现代的信息检索和数据分析领域&#xff0c;Elasticsearch 已经成为一个广泛应用的分布式搜索和分析引擎。作为开源项目的一部分&#xff0c;Elasticsearch 提供了强大的实时搜索和分析能力&#xff0c;使得处理大规模数据变得更加高效和可靠。然而&#xff0…

MySQL高级-MVCC-undo log 版本链

文章目录 1、undo log2、undo log 版本链2.1、然后&#xff0c;有四个并发事务同时在访问这张表。2.1.1、修改id为30记录&#xff0c;age改为32.1.2、修改id为30记录&#xff0c;name改为A32.1.3、修改id为30记录&#xff0c;age改为10 2.2、总结 1、undo log 回滚日志&#xf…

运行vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。

报错背景: 重装了win10系统,然后准备安装Vue,这个时候我已经安装好了node.js和npm,输入node -v和npm -v都有正确输出,但是每次输入npm install -g vue/cli 安装的时候,就会报错. 大家安装node.js的时候最好就是默认路径(C:\Program Files\nodejs),别去修改不然很多报错.(个人…

Ubuntu网络管理命令:netstat

安装Ubuntu桌面系统&#xff08;虚拟机&#xff09;_虚拟机安装ubuntu桌面版-CSDN博客 顾名思义&#xff0c;netstat命令不是用来配置网络的&#xff0c;而是用来查看各种网络信息的&#xff0c;包括网络连接、路由表以及网络接口的各种统计数据等。 netstat命令的基本语法如…

3-linux命令行与基本命令

目录 什么是shell linux命令 命令组成 几个简单的命令 linux文件系统导航 什么是shell linux学习路径&#xff1a;学习shell→配置和环境→见任务和主要工具→编写shell脚本 shell是一个接收由键盘输入的命令&#xff0c;并将其传递给操作系统来执行的程序。几乎所有…

Coursera耶鲁大学金融课程:Financial Markets 笔记Week 03

Financial Markets 本文是学习 https://www.coursera.org/learn/financial-markets-global这门课的学习笔记 这门课的老师是耶鲁大学的Robert Shiller https://en.wikipedia.org/wiki/Robert_J._Shiller Robert James Shiller (born March 29, 1946)[4] is an American econom…

cookie 的获取过程

#第一次请求过程 浏览器第一次发送请求时,不会携带任何cookie信息 服务器接收到请求之后&#xff0c;发现请求中没有任何cookie信息 服务器生成和设置一个cookie.并将此cookie设置通过set_cookie的首部字段保存在响应报文中返回给浏 览器 浏览器接收到这个响应报文之后,发现里…

windows 本地ES 7.11.0 版本集群搭建

1.先下载JDK &#xff0c;建议下载JDK11. 2.下载ES Windows安装包 7.11.0下载 3.下载完成后&#xff0c;在本地解压三份&#xff0c;分别取名 node1,node2,node3 4.若启动一直报端口占用&#xff0c;这修改 每个文件夹下bin/elasticsearch.bat文件&#xff0c;没有则跳过 在…

电商平台数据爬取经验分享

一、引言 在电商领域&#xff0c;数据的重要性不言而喻。无论是市场趋势分析、竞争对手研究&#xff0c;还是用户行为洞察&#xff0c;都离不开数据的支持。而数据爬虫作为获取这些数据的重要工具&#xff0c;其技术的掌握和运用对于电商平台来说至关重要。本文将结合个人实际…

Stateflow快速入门系列(-):构造并运行 Stateflow 图

Stateflow 提供了一种图形语言&#xff0c;包括状态转移图、流程图、状态转移表和真值表。您可以使用 Stateflow 来说明 MATLAB 算法和 Simulink 模型如何响应输入信号、事件和基于时间的条件。 Stateflow 使您能够设计和开发监控、任务调度、故障管理、通信协议、用户界面和混…

昇思MindSpore学习笔记7--函数式自动微分

摘要&#xff1a; 介绍了昇思MindSpore神经网络训练反向传播算法中函数式自动微分的使用方法和步骤。包括构造计算函数和神经网络、grad获得微分函数&#xff0c;以及如何处理停止渐变、获取辅助数据等内容。 一、概念要点 神经网络训练主要使用反向传播算法&#xff1a; 准备…

学习平台推荐_菜鸟教程官网

网址&#xff1a; 菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01;菜鸟教程(www.runoob.com)提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python&#xff0c;Java&#xff0c;Ruby&#xff0c;C&#xff0c;PHP , MySQL等各种编程语言的基础知识。 同…

[数据集][目标检测]猪只状态吃喝睡站检测数据集VOC+YOLO格式530张4类别

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

【操作系统期末速成】EP06 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点十四&#xff1a;同步互斥的基本概念2.2 考点十五&#xff1a;实现临界区互斥的基本方法2.3 考点十六&#xff1a;信号量的含义及常用信号量 一、前言&#x1f680;&#x1…