当前位置: 首页 > article >正文

label-studio的使用教程(导入本地路径)

文章目录

      • 1. 准备环境
      • 2. 脚本启动
        • 2.1 Windows
        • 2.2 Linux
      • 3. 安装label-studio机器学习后端
        • 3.1 pip安装(推荐)
        • 3.2 GitHub仓库安装
      • 4. 后端配置
        • 4.1 yolo环境
        • 4.2 引入后端模型
        • 4.3 修改脚本
        • 4.4 启动后端
      • 5. 标注工程
        • 5.1 创建工程
        • 5.2 配置图片路径
        • 5.3 配置工程类型标签
        • 5.4 配置模型
        • 5.5 标注
        • 5.6 批注
        • 5.7 导出
      • 6. 重命名文件

1. 准备环境

首先创建一个虚拟环境:

conda create -n label_studio python=3.12
conda activate label_studio

然后使用pip安装label-studio

pip install label-studio

然后可以打开label-studio了:

label-studio start

终端中应该能看到如下的内容:

在这里插入图片描述

并且会自动打开浏览器,并进入到如下的页面(如果没有自动打开,可以自己打开浏览器,然后输入http://localhost:8080进行访问):

在这里插入图片描述

2. 脚本启动

为了每次都能够一键启动,而不是在终端内输入很多条命令,可以将相关的命令封装成脚本。

2.1 Windows

新建一个bat脚本,比如命名为load_label_studio.bat,然后复制一下的一下的内容,并且,必须确保这个脚本中的编码是GB2312!否则将无法启动。

@echo off:: 打印信息
echo 开始启动 label-studio :: 配置区域
set CONDA_ENV=label_studio
set ROOT_DIR=C:\\dl\\datasets:: 激活conda环境
echo.
echo [1/3] 正在激活 Conda 环境 %CONDA_ENV%
call conda activate %CONDA_ENV%:: 检查激活是否成功
if %errorlevel% neq 0 (echo.echo 激活 Conda 环境 %CONDA_ENV% 失败!echo 请检查是否没有创建这个环境pauseexit /b
):: 配置环境变量
echo.
echo [2/3] 配置 label-studio 的环境变量
set LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
set LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=%ROOT_DIR%
set DATA_UPLOAD_MAX_NUMBER_FILES=2000:: 启动 label-studio
echo.
echo [3/3] 启动 label-studio
label-studio start:: 检查是否成功启动
if %errorlevel% neq 0 (echo.echo 启动 label-studio 失败!echo 请检查安装情况,或者是否调用错误!
) else (echo.echo label-studio 运行成功echo 可通过地址直接访问: http://localhost:8080
):: 保持命令行窗口打开
pause

脚本的一些说明:

  1. 脚本中默认你已经在系统设置中配置了conda的环境变量!
  2. 配置区域中的CONDA_ENV是使用label-studio的python环境
  3. 配置区域中的ROOT_DIR是本地文件的默认文件夹
  4. 这里启动的label-studio都是按照默认参数进行启动,如果需要绑定某个ip,指定某个端口,需要修改一下label-studio start
2.2 Linux

暂无待补充

3. 安装label-studio机器学习后端

有两种安装方法,推荐使用第一种。

3.1 pip安装(推荐)
pip install label-studio-ml
3.2 GitHub仓库安装

在合适的目录下打开终端:

conda activate label_studio
git clone https://github.com/heartexlabs/label-studio-ml-backend 
cd label-studio-ml-backend 
pip install -U -e .

但是有可能会出现如下的报错:

Installing collected packages: label-studio-sdk, label-studio-ml━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0/2 [label-studio-sdk]  DEPRECATION: Legacy editable install of label-studio-ml==2.0.1.dev0 from file:///E:/Code/VsCode/python/label-studio-ml-backend-master (setup.py develop) is deprecated. pip 25.3 will enforce this behaviour change. A possible replacement is to add a pyproject.toml or enable --use-pep517, and use setuptools >= 64. If the resulting installation is not behaving as expected, try using --config-settings editable_mode=compat. Please consult the setuptools documentation for more information. Discussion can be found at https://github.com/pypa/pip/issues/11457Running setup.py develop for label-studio-ml
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
label-studio 1.18.0 requires label-studio-sdk==1.0.12, but you have label-studio-sdk 1.0.18.dev0 which is incompatible.

这里我们只需要关注这里要求什么版本的label-studio-sdk,然后再使用pip命令装一下就可以了:

pip install label-studio-sdk==1.0.12

当然,为了使用自己的pt模型,还是需要安装torchonnx等这些,这里以cpu的为例:

conda activate label_studio
pip3 install torch torchvision torchaudio  # https://pytorch.org/get-started/locally/ 直接参考官网的安装方法pip install onnx

4. 后端配置

这里我们需要使用自己已经训练好的yolo模型,所以还需要额外的配置。

4.1 yolo环境

首先需要安装yolo的环境,需要安装ultralytics

conda activate label_studio
pip install ultralytics 
4.2 引入后端模型

首先在合适的位置创建一个目录,专门用来存放backend的相关东西,比如c:\dl\label_studio_backend,那么在这里打开终端,开始进行操作。

conda activate label_studio
label-studio-ml create ml_backend_test1

在这里插入图片描述

发现这里就创建了一个ml_backend_test1的目录,然后我们需要进入这个目录下进行文件的修改。

在这里插入图片描述

将我们的训练好的模型best.pt放到目录中,然后需要对这个model.py进行修改。

4.3 修改脚本

对于model.py进行修改,参考:

from typing import List, Dict, Optional
from label_studio_ml.model import LabelStudioMLBase
from label_studio_ml.response import ModelResponse################## 修改 ##################
# 添加需要的函数
from label_studio_ml.utils import get_image_local_path# 添加yolo需要的依赖
from ultralytics import YOLO# 添加额外处理需要的依赖
import re
import os
from urllib.parse import unquote
from PIL import Imagedef custom_get_local_path(url):"""自定义路径解析函数,兼容Windows特殊格式"""# 1. 尝试官方方法try:from label_studio_ml.utils import get_image_local_pathreturn get_image_local_path(url)except:pass# 2. 手动解析本地文件URLif url.startswith('/data/local-files'):# 提取相对路径部分match = re.search(r'd=(.*?)(?:&|$)', url)if match:relative_path = unquote(match.group(1))base_dir = os.environ.get('LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT', 'c:\\dl\\datasets')# 处理Windows路径分隔符relative_path = relative_path.replace('/', '\\')return os.path.join(base_dir, relative_path)# 3. 处理上传文件路径if url.startswith('/data/upload'):relative_path = url.replace('/data/upload/', '').lstrip('/')base_dir = os.environ.get('LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT', 'c:\\dl\\datasets')return os.path.join(base_dir, relative_path.replace('/', '\\'))return url  # 退回原始URLclass NewModel(LabelStudioMLBase):"""Custom ML Backend model"""def setup(self):"""Configure any parameters of your model here"""self.set("model_version", "0.0.1")################## 修改 ################### 加载我们自己训练好的模型# 注意这里的路径,是要带上文件夹目录的,因为后续python脚本执行的环境将在更上一层目录上!self._model = YOLO('./ml_backend_test1/best.pt')# 使用模型中的标签self._labels = self._model.namesdef predict(self,tasks: List[Dict],context: Optional[Dict] = None,**kwargs) -> ModelResponse:""" Write your inference logic here:param tasks: [Label Studio tasks in JSON format](https://labelstud.io/guide/task_format.html):param context: [Label Studio context in JSON format](https://labelstud.io/guide/ml_create#Implement-prediction-logic):return model_responseModelResponse(predictions=predictions) withpredictions: [Predictions array in JSON format](https://labelstud.io/guide/export.html#Label-Studio-JSON-format-of-annotated-tasks)"""print(f'''\Run prediction on {tasks}Received context: {context}Project ID: {self.project_id}Label config: {self.label_config}Parsed JSON Label config: {self.parsed_label_config}Extra params: {self.extra_params}''')################## 修改 ##################results = []for task in tasks:# 获取图片的本地路径image_path = custom_get_local_path(task['data']['image'])image = Image.open(image_path)img_width, img_height = image.size# 使用YOLO进行推理pred = self._model(image)predictions = []# 解析检测结果for box in pred[0].boxes:x_min, y_min, x_max, y_max = map(float, box.xyxy[0].tolist())label = self._labels[int(box.cls.item())]predictions.append({"from_name": "label","to_name": "image","type": "rectanglelabels","value": {"x": x_min / img_width * 100,"y": y_min / img_height * 100,"width": (x_max - x_min) / img_width * 100,"height": (y_max - y_min) / img_height * 100,"rectanglelabels": [label]},"score": float(box.conf.item())})results.append({"result": predictions})return results# return ModelResponse(predictions=[])def fit(self, event, data, **kwargs):"""This method is called each time an annotation is created or updatedYou can run your logic here to update the model and persist it to the cacheIt is not recommended to perform long-running operations here, as it will block the main threadInstead, consider running a separate process or a thread (like RQ worker) to perform the training:param event: event type can be ('ANNOTATION_CREATED', 'ANNOTATION_UPDATED', 'START_TRAINING'):param data: the payload received from the event (check [Webhook event reference](https://labelstud.io/guide/webhook_reference.html))"""# use cache to retrieve the data from the previous fit() runsold_data = self.get('my_data')old_model_version = self.get('model_version')print(f'Old data: {old_data}')print(f'Old model version: {old_model_version}')# store new data to the cacheself.set('my_data', 'my_new_data_value')self.set('model_version', 'my_new_model_version')print(f'New data: {self.get("my_data")}')print(f'New model version: {self.get("model_version")}')print('fit() completed successfully.')

注意

这个脚本里面写了读取环境变量:

base_dir = os.environ.get('LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT', 'c:\\dl\\datasets')

所以,要么将这个环境变量直接写入系统,要么就记得对应修改路径……

4.4 启动后端

完成上述工作之后,就可以启动后端了。

还是需要进入到前面创建的backend的目录中去,比如本文中的c:\dl\label_studio_backend,然后在这里打开终端,然后操作:

conda activate label_studio
label-studio-ml start ml_backend_test1 -p 9090

启动成功的画面如下:

在这里插入图片描述

后面就可以在label-studio上创建工程进行标注了。

5. 标注工程

初始时候没有账号,可以在上述的页面下创建一个账号,就是需要一个邮箱和一个密码,也不需要做什么验证什么的,创建成功后会自动登录,然后就能进入到页面了。

在这里插入图片描述

如果需要进行一些账号上的配置,可以点击右上角的头像,然后进行配置。

5.1 创建工程

这里直接点击中间的Create Project来创建一个标注的工程,打开后开始填写:

在这里插入图片描述

其余的配置暂时不用管,后续再进入到工程中进行配置。

创建完成之后我们就可以点击进入到test1的工程中去了,显示如下的画面:

在这里插入图片描述

5.2 配置图片路径

上述图片中,点击右上角的Settings进入到如下的配置页面:

在这里插入图片描述

首先我们配置本地的图片位置,左侧的tab页选择Cloud Storage,然后进入到Add Source Storage

在这里插入图片描述

按照如下的示例进行配置:

在这里插入图片描述

说明:

  1. Storage Type要选择 Local files
  2. Storage Title要和后面的path对应的名字要相同
  3. Absolute local path必须是一个绝对路径,并且要到图片的根目录上,并且要和前面脚本中配置set ROOT_DIR=C:\\dl\\datasets对应上,必须是这个目录下的子目录
  4. File Filter Regex来进行正则化过滤,有啥类型就按照正则化的方式写好
  5. 必须打开Treat every bucket object as a source file
  6. 然后点击Check Connection来验证一下填写有没有问题,如果出现了Successfully connected!就说明可以了,然后点击Add Storage来完成即可

然后需要在如下的页面上点击Sync Storage ,然后看到Status的状态是Conpleted,如果状态不是这个,那么一定是有什么步骤错了,需要再检查一下!

在这里插入图片描述

5.3 配置工程类型标签

然后来配置工程的类型和标签。

进入到Labeling Interface中的Browser Templates

在这里插入图片描述

进入之后选择Object Detection with Boarding Boxes

在这里插入图片描述

通过在红色框中填写对应的标签,然后点击下方的Add,就可以添加一个label了,全部填写完成之后,点击下方的Save即可。

在这里插入图片描述

5.4 配置模型

点击左侧tab的Model进行模型的相关配置。

在这里插入图片描述

然后填写:

在这里插入图片描述

  1. 这里的Name随便写,随便取个名字
  2. Backend URL就是填写前面我们4.4 启动后端最终打印的地址,如果你的后端和label-studio是放在不同的机器上,就得注意ip了!
  3. 然后点击Validate and Save就可以完成。如果有报错,需要检查一下model.py是不是写错了……

然后就可以看到:

在这里插入图片描述

5.5 标注

回到工程的首页,我们现在就可以看到类似如下的显示了:

在这里插入图片描述

这个时候我们选择需要进行标注的文件,可以一个个勾选自己需要进行标注的文件,也可以直接全选,然后可以看到你现在有多少个任务了。

在这里插入图片描述

然后我们就可以点击点击进行处理了。

在这里插入图片描述

如果运行成功,则可以看到:

在这里插入图片描述

5.6 批注

导出之前必须Annotate才行,所以随便找一行,然后点击对应Annotated by列的空白处。(不得不说,真的是神奇的操作逻辑,非常的反人类反直觉)

或者,直接点击上面的Label All Tasks也能进入批注页面,然后两个稍微有一些不同。

在这里插入图片描述

然后得到如下的画面:

在这里插入图片描述

可以直接点击右下角的Submit直接确认批注当前图片。如果要修改,点击图片中的框图进行操作。

非常难用的是 无法全选然后Submit,非常反人类反直觉

5.7 导出

导出之前必须确认你想要导出的图片已经被标注了!!!!否则导出的文件都是空的……

点击右上角的Export进行导出。

在这里插入图片描述

然后选择需要的格式:

在这里插入图片描述

最后到最下方,进行导出:

在这里插入图片描述

选择只导出标签的那个,会很快,如果图片和标签一起导出,等待的时间还是漫长的,尤其是数据越多越长……

导出之后的图片名称还会被修改……类似:

在这里插入图片描述

6. 重命名文件

像我这样特别方案改的乱七八糟的名字,就直接使用一个脚本全部重命名了。

from pathlib import Path
import shutil# 指定图片目录
img_path = Path("image/")
lab_old = Path("old/")
lab_path = Path("label")# 定义支持的图片扩展名(可扩展)
image_extensions = {".jpg", ".jpeg", ".png", ".bmp", ".gif"}# 计数器,用于生成新文件名
counter = 10000001# 遍历目录下的所有文件(不递归子目录)
for file in img_path.iterdir():if file.is_file() and file.suffix.lower() in image_extensions:# 构建新文件名new_file = img_path / f"image_{counter:08d}{file.suffix}"old_label = lab_old / f"{file.stem}.txt"new_label = lab_path / f"image_{counter:08d}.txt"# 防止文件已存在if new_file.exists():print(f"⚠️ 跳过:文件 {new_file.name} 已存在")continue# 重命名文件try:file.rename(new_file)shutil.copy(old_label, new_label)print(f"✅ 重命名:{file.name} -> {new_file.name}")counter += 1except Exception as e:print(f"❌ 重命名失败:{file.name} -> {new_file.name},错误:{e}")

调整一下目录的名字即可。

相关文章:

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...