从零实现label-studio和SAM进行半自动标注以及踩坑日志

这里写目录标题

    • 引言
    • 什么是半自动标注
    • conda环境创建与启动
    • playground下载
    • pytorch下载(Linux服务端和Win10客户端)
    • SAM安装和预训练权重添加
      • SAM相关库安装
      • 问题1
    • 安装 Label-Studio 和 label-studio-ml-backend
      • 问题2:TypeError: 'numpy._DTypeMeta' object is not subscriptable
    • 服务端配置和启动
      • linux配置和启动
      • windows配置和启动
    • 客户端启动
      • vit-h模型后端配置
      • 账户注册报错500
    • 创建项目和使用
      • 项目名称和描述
      • 加载数据
      • 设置
      • 注意事项
      • 添加SAM模型
      • 出现问题
    • 简单标注实例
    • 半自动标注
      • 问题:self.value报错
      • 注意事项1
      • 注意事项2
    • 导出结果

引言

深度学习中很多数据需要打标签,例如我现在就需要得到图像的二值掩码图像,比如下边,我想要得到一张掩码去标识图片上的缺陷区域,自已标是很困难的且费时费力

在这里插入图片描述

什么是半自动标注

·半自动标注·就是通过将SAM集成到label-studio中,然后在给数据打标的时候还是人工进行操作,但是只需要在图像上点一下就会自动识别并且打好标注了。其实其他文章,如基于 SAM 的半自动标注新方法,手把手教会你!,这里已经讲解相对是比较详细了,但是还是存在一些坑,这里再总结一下,其中下文很多东西都来自基于 SAM 的半自动标注新方法,手把手教会你!,

conda环境创建与启动

首先创建一个python3.9的环境,其他python版本肯定是可以的,但是很可能跟下文的配置出现兼容问题,这种很坑

conda create -n rtmdet-sam python=3.9 -y

conda最好配置下清华源然后再创建环境,同样下文会用到pip的环境,可以在下载的时候配置临时清华源或者永久的清华源,以下给出了他们的配置,需要自取

#conda删除之前的镜像源,恢复默认状态
conda config --remove-key channels

#conda添加镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

#显示检索路径
conda config --set show_channel_urls yes

#显示镜像通道
conda config --show channels
# pip临时使用清华源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

# pip永久配置清华源
pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

环境启动

conda activate rtmdet-sam

playground下载

playground是运行的环境,需要在playgroundlabel-anything目录下进行运行label-studio,首先到github下载,我是直接到仓库下载然后下载zip文件的,使用git拉取也行

https://github.com/open-mmlab/playground

点击zip下载
在这里插入图片描述
然后解压出来就行
在这里插入图片描述

pytorch下载(Linux服务端和Win10客户端)

首先在的版本信息如下,我用的是GPU

torch===1.10.1+cu113
torchvision===0.11.2+cu113
torchaudio===0.10.1+cu113

如果是cpu的,直接通过以下下载,如果pip配置了清华源,那下载还是很快的。但是使用cpu进行推理是要慢一点的

pip3 install torch torchvision torchaudio

如果用的是gpu,可以继续看这里,我直接在国内的镜像源中通过whl文件安装pytorch,地址如下

https://download.pytorch.org/whl/torch_stable.html

这里有个小技巧,就是直接搜索cu113就可以找到了,然后去找对应上边的版本,如果你是windows的话,要选带win的那个文件下载,linux的话要选带类inux的,如下边的cp39表示用的是python3.9,就是我们的版本,amd64就是显卡信息了,看个人电脑配置了,如果不知道就选amd64的,一般都是这个
在这里插入图片描述
下载完毕以后,就可以直接通过pip进行安装了,如下,这里注意的是,应该先安装torch的whl,然后再试torchaudio和torchvision

# 首先切换到你放whl文件的目录
cd /path/pkg
# 然后通过pip进行安装,后边这么长一串,其实打torch-,然后按键盘上的tab键就会自动补全了
pip install torch-1.10.0+cu113-cp39-cp39-linux_x86_64.whl

安装完毕后通过pip list看一下,就是这样了
在这里插入图片描述
在这里插入图片描述
我是使用的局域网的服务器以及本地的win10进行实现的,所以上述配置需要在远程服务器以及本地的win10都弄一遍,如果是同一个设备就不需要

SAM安装和预训练权重添加

既然用到SAM,那肯定是需要源代码了,我这里同样是自己下载的,通过git也可以,地址如下,这里注意的是,你只需要在你的服务端,就是你运行模型的机器上下载并安装,我这里就是用的远程的linux服务器的,所以下载到远程的服务器中

https://github.com/facebookresearch/segment-anything

同样点击zip下载,然后下载即可
在这里插入图片描述
解压出来
在这里插入图片描述
然后通过pip安装

# 切换到SAM解压的目录,这里的地址打开应该长得像上图一样
cd /home/chen/label_studio/pkg/segment-anything-main
# 直接通过以下命令安装
pip install -e .

安装完毕以后就可以下载预训练的权重,就是别人训练好的模型,上边安装的仅仅是源代码,没有预训练的权重也是没用的,预训练的权重有三个,如下,我是直接下载的,下边三个地址,表示不同权重,直接粘贴到浏览器就会下载了。其中里边带的vit_bvit_lvit_h就代表不同的模型了

https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth

https://dl.fbaipublicfiles.com/segment_anything/sam_vit_l_0b3195.pth

https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth

我就下了一个示例,如下
在这里插入图片描述

SAM相关库安装

pip install opencv-python pycocotools matplotlib onnxruntime onnx

问题1

上述SAM相关库安装是来自前文提到的文章的,但是还差一个库,就是timm,直接安装即可

pip install timm

安装 Label-Studio 和 label-studio-ml-backend

这里呢Label-Studio 就是客户端,就是你实际看到,用来打标的,label-studio-ml-backend就是服务端,。大概流程就是服务器通过label-studio-ml-backend启动后端服务,后端服务就加载模型,当用户在客户端操作的时候,就会向服务端发一张你操作的图像,然后服务端就会通过SAM对你操作的图像进行分割,然后返回给你,你就可以看到标注好的图像了。

首先呢,你只需要在服务端安装label-studio-ml-backend,我这里就是linux服务器了,然后只需要在客户端安装Label-Studio ,我这里就是我自己的win10,安装命令如下

pip install label-studio==1.7.3
pip install label-studio-ml==1.0.9

问题2:TypeError: ‘numpy._DTypeMeta’ object is not subscriptable

这里会有个问题,如果就是你客户端服务端都在同一个机器,后续可能会存在numpy的兼容问题,就是上述安装的opencv-python的需要的numpy版本和你labeo-studio的冲突了,这里只需要更新一下numpy就行了

# 先卸载
pip uninstall numpy

# 再通过conda安装,这里最好用conda安装
conda install numpy

服务端配置和启动

上述基本就差不多了,然后就先需要启动服务端,服务端启动需要先切换到playgroundlabel-anything目录,当然可以做映射这些环境配置,这里就不整了,然后通过以下命令启动

# 切换到你自己的
cd path/to/playground/label_anything

linux配置和启动

然后linux服务端就使用以下命令进行启动,参数可以才考下标配置

label-studio-ml start sam --port 8003 --with sam_config=vit_b sam_checkpoint_file=./sam_vit_b_01ec64.pth out_mask=True  out_poly=True device=cuda:3

参数说明

  • –port 8003:就是设置端口,随便设,不冲突就行了
  • sam_config=vit_b,就是你用的哪个模型,跟权重要对应
  • sam_checkpoint_file=./sam_vit_b_01ec64.pth,这里权重中vit_b要跟上边配置的模型一一对应,这里填的是你权重的路径,我是省事直接放到同目录下了,也可以放其他地方,地址对就行
  • out_mask=True,表示输出的是掩码,这里设置成True,那么在你打标的时候,后端就会给你返回掩码,什么是掩码呢?如下图,就是对整个模区域都给你标出来了,然后操作的时候,就是可以整体拖动的,这就是我想要的在这里插入图片描述
  • out_poly=True,这个就是多边形的注释,如下图如果设置为True就会同时得到多边形标注,打过标的应该都知道这种,就是一堆的点,可以任意拖拽上边的点,所有点组合成闭合的形状,拖到你想要的形状,而掩码就是只能整体拖动的在这里插入图片描述
  • out_bbox=True,这里就是会返回一个举行的框,里边就是标识的物体了
  • device=cuda:3,这里就表示使用cuda了,后边就是用哪个卡了,如果是cpu就改成 device=cpu

注意:上边的out_xxx这些,你设置了什么,在一次预测就会返回设置了的,例如你同时设置了out_mask=True和out_poly=True,那么就会一次性得到两种标注,这个就看你个人需求了

windows配置和启动

如果你是windows环境,就可以用以下,上边配置环境变量,就一行行弄到提示符就行了

cd path/to/playground/label_anything

# 首先配置环境变量
$env:sam_config = "vit_b"
$env:sam_checkpoint_file = ".\sam_vit_b_01ec64.pth"
$env:out_mask = "True"
$env:out_bbox = "True"
$env:device = "cuda:0"

# 配置
label-studio-ml start sam --port 8003 --with sam_config=$env:sam_config sam_checkpoint_file=$env:sam_checkpoint_file out_mask=$env:out_mask out_bbox=$env:out_bbox  device=$env:device

启动成功后就是下边这样,启动成功就可以看到地址的
在这里插入图片描述

客户端启动

客户端启动的时候还是需要切换到playground下的label_anything目录,注意:如果客户端和服务端在同一台机器,那只需要重新再开一个命令行界面就行了

# 切换到playground环境中
cd path/to/playground/label_anything
# 启动
label-studio start

vit-h模型后端配置

如果使用vit-h进行预测,这里可以根据刚才的命名可以看到,就需要进行超时重建连接,因为像vit-h这种模型预测时间长,服务端如果太久没回应,客户端就会报错 那么linux客户端就需要设置

export ML_TIMEOUT_SETUP=40

windows客户端

# 配置环境变量
$env:ML_TIMEOUT_SETUP = "40"

# 设置
set ML_TIMEOUT_SETUP=ML_TIMEOUT_SETUP

客户端启动后就会在默认浏览器中自动打开一个界面,然后就注册一下,然后登录就行了
在这里插入图片描述

账户注册报错500

如果是严格按照上述版本,那在版本上时不会出现问题的(目前),如果存在问题就是防火墙的问题
在这里插入图片描述

尝试输入刚才启动的后端的地址到浏览器中,如果出现以下界面说明是正常的,如果是一直在转,说明没连通,尝试关闭服务端防火墙看下能不能连通,一般都是防火墙的策略问题
在这里插入图片描述

创建项目和使用

创建账户后,首次会让你创建项目,其实就是创建你标注的任务
在这里插入图片描述

项目名称和描述

在这里插入图片描述

加载数据

点一下上传的图标或者是点upload就会跳转到本地
在这里插入图片描述
多选你想要标注的图像,然后确定
在这里插入图片描述
然后就可以保存了,至于隔壁的labelung setup,这里可以自行配置,这是什么,看完下文知道了
在这里插入图片描述
可以看到图像列表了
在这里插入图片描述

设置

setting
在这里插入图片描述
首先是进行标签配置,点击labeling interface,右边就是可以看到使用xml进行配置的区域了
在这里插入图片描述
这里给出官方的示例配置,包含4种标标注方式,分别是点标注方式,就是在目标上点一个点,矩形标注方式,就是拖拉鼠标出现矩形进行标注,然后是多边形标注方式,就是可以打多个点,然后绕成一个闭合多边形进行标注,最后就是掩码标注了

<View>
  <Image name="image" value="$image" zoom="true"/>
  <KeyPointLabels name="KeyPointLabels" toName="image">
    <Label value="cat" smart="true" background="#e51515" showInline="true"/>
    <Label value="person" smart="true" background="#412cdd" showInline="true"/>
  </KeyPointLabels>
  <RectangleLabels name="RectangleLabels" toName="image">
  	<Label value="cat" background="#FF0000"/>
  	<Label value="person" background="#0d14d3"/>
  </RectangleLabels>
  <PolygonLabels name="PolygonLabels" toName="image">
  	<Label value="cat" background="#FF0000"/>
  	<Label value="person" background="#0d14d3"/>
  </PolygonLabels>
  <BrushLabels name="BrushLabels" toName="image">
  	<Label value="cat" background="#FF0000"/>
  	<Label value="person" background="#0d14d3"/>
  </BrushLabels>
</View>

黏贴上去就是这样
在这里插入图片描述
然后在code隔壁有个visual按钮,就是进行可视化的,这就是刚才设置的标签的可视化了,这里可以根据你自己数据想要什么标签去设置,这个跟后边的导出有关了
在这里插入图片描述

注意事项

刚才配置仅仅是一个完整例子,这里注意的是KeyPointLabels 是必须的,如果不配置将会报错,这是因为SAM的原因。然后其他的标注方式是根据你启动后端的时候,配置了什么就必须添加什么,例如启动后端时设置了out_poly=true,那你这里就必须放上多边形的标注标签配置其他也一样
然后搞定后记得保存
在这里插入图片描述
然后会跳出去

添加SAM模型

这一步就是关联预训练模型了。继续点击setting,机会回到设置中,然后点击Machin learning,然后点击Add Model
在这里插入图片描述
然后再里边进行填入信息,并开启交互
在这里插入图片描述

出现问题

下边的valiade and save,可能会出现问题,在这个界面下方会显示一段英文
Successfully connected to http://172.31.234.201:8003/ but it doesn't look like a valid ML backend. Reason: 500 Server Error: INTERNAL SERVER ERROR for url: http://172.31.234.201:8003/setup. Check the ML backend server console logs to check the status. There might be something wrong with your model or it might be incompatible with the current labeling configuration.
意思是连上了,但是出问题了,后边说可能是版本问题,这个就不要被迷惑了
在这里插入图片描述
解决这个问题,需要查看你的服务端
在这里插入图片描述我这里可以看到,说找不到包了,那就安装吧

pip install segment_anything_hq

上述中,出现这个错误,都是服务端出现问题了,去看下就行了

成功就是下边那样了
在这里插入图片描述

简单标注实例

然后就可以打标了,打标有两个入口,一个是直接在项目外边点击label就可以了,或者点击项目,然后点击label All Tasks
在这里插入图片描述
在这里插入图片描述
可以看到加载的图像以及右边的工具栏,工具栏中把鼠标放过去就可以看到是什么类型的标注了,事实上就是上边的4种
在这里插入图片描述
底部是4种标签,每一行表示不同的标注方式,他们排序方式就是上边通过xml的方式
在这里插入图片描述
点击不同行的标签就可以直接选择对应的标注方式,比如刚才第一个是关键点的标注方式,并且我想要cat这个标签,那就可以点击第一行的cat
在这里插入图片描述
左侧就显示我们打的标签,然后右侧栏可以对标签进行一些简单控制,如下图描述的
在这里插入图片描述

半自动标注

上述是简单的使用案例,但是我们需要时自动标注的,首先打开Auyo-Annotation,同时勾选Auto accept annotation suggestion
在这里插入图片描述
9a36791dc0787f151.png)

问题:self.value报错

可能会遇到该问题,这里忘记具体问题了,即SAM在预测图像的时候,后端报错self.value不合法,这是源代码中mmdetection.py存在的问题,该文件路径是playground-main\label_anything\sam,具体路径取决于你的playground。这是在SAM在获取图像的时候的错,打开mmdetection.py,如下
在这里插入图片描述
里边的键值改成"image"就行了,这可以通过打印task['data']看到,其实task['data']是一个键值对,其中键值"image"存储图像的地址
在这里插入图片描述

注意事项1

右边紫色的是smart工具,必须开启,也就是亮起来,并且必须跟你标签选的是一样,比如我现在是选的第一行的关键点相关的标签,右边的smart工具就必须是关键点的,如下边亮起来的三个点就是关键点配置的
在这里插入图片描述
这个时候,只需要在目标区域点一下然后稍等一下就可以了,等多久就看你服务器的推理速度了,还有传输的速度了,如下图,可以看到,他自动就给我标了,并且多了两个标签,为啥是两个呢,因为我只配置了out_mask=true和out_poly=true,所以它就会得到两个
在这里插入图片描述
这是直接通过关键点进行标注的,smart工具还有其他的,如矩形检测,同理矩形检测必须是矩形标注的,只能选择矩形标注标签
在这里插入图片描述
打出来的标没问题就可以点右上角的Sbumit进行提交,有问题就可以用点击左边那些标注,这里就是左栏里边那些标注去更改一下

注意事项2

记得点击右上角的Sbumit进行提交,不然等下导出就没有你现在标的标注了
在这里插入图片描述
全部标注完是这样的
在这里插入图片描述

导出结果

回到项目,然后点击Export就可以导出来
在这里插入图片描述
如下是导出二值掩码
在这里插入图片描述
下载压缩包
在这里插入图片描述
然后就是长这样,具体导出什么就看个人需求了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式软件开发常用工具有哪些?

分享一些嵌入式软件开发常用工具。 1、Keil MDK&#xff1a;这是德国Keil公司开发的基于8051、9051、ARM7、ARM9系列微控制器的嵌入式软件开发工具&#xff0c;它提供了包括C编译器、宏汇编、连接器、库管理器、仿真器等在内的完整开发方案。Keil还提供了丰富的中间件和库函数&…

Verilog 之 initial 模块与always 模块的用法与差异

文章目录 initial语法和用法特点和注意事项用途 always语法和用法特点和注意事项用途 二者差异 initial 在 Verilog 中&#xff0c;initial 块是用来在模拟开始时执行一次性初始化操作的一种建模方式。它通常用于模拟初始条件或进行一次性的初始化设置&#xff0c;而且只会在模…

LINUX入门篇【4】开发篇--开发工具vim的使用

前言&#xff1a; 从这一篇开始&#xff0c;我们将正式进入使用LINUX进行写程序和开发的阶段&#xff0c;可以说&#xff0c;由此开始&#xff0c;我们才开始真正去使用LINUX。 介绍工具&#xff1a; 1.LINUX软件包管理器yum&#xff1a; 1.yum的介绍&#xff1a; 在LINUX…

Sublime Text Mac/Win中文版:代码编辑器的卓越典范

你是否曾为寻找一个功能强大且易于使用的代码编辑器而感到困扰&#xff1f;现在&#xff0c;我要向你介绍一个解决方案——Sublime Text。这款代码编辑器以其高效、灵活和直观的特点&#xff0c;赢得了开发人员的广泛喜爱。让我们深入了解一下Sublime Text的优点。 一、强大的…

易点易动固定资产管理系统:实现全生命周期闭环式管理和快速盘点

固定资产管理对于企业来说至关重要&#xff0c;它涉及到资产的采购、领用、使用、维护和报废等各个环节。然而&#xff0c;传统的固定资产管理方式往往繁琐、耗时&#xff0c;容易导致信息不准确和资源浪费。为了解决这些问题&#xff0c;我们引入易点易动固定资产管理系统&…

【Git企业开发】第六节.配置 Git和标签管理

文章目录 前言一、配置 Git 1.1 忽略特殊文件 1.2 给命令配置别名二、标签管理 2.1 理解标签 2.2 创建标签 2.3 操作标签 总结 前言 一、配置 Git 1.1 忽略特殊文件 在日常开发中&#xff0c;我们有些文件不想或者不应该提交到远端&#xff0c;…

第四章Web服务器(2)

第四章Web服务器(2) 1.基于https协议的静态网站 1.1.概念解释 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。 HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#…

AI 为先的时代,企业如何深度用云?

「又一年云栖&#xff0c;SOFAStack 走向云原生深处。」 SOFAStack 5.0 与蚂蚁集团代码大模型 CodeFuse 全面融合&#xff0c;涵盖设计、研发、测试、运维等领域&#xff0c;提供从领域建模到智能运维的端到端 Copilot 产品解决方案&#xff0c;为企业打造新一代 AI 云原生 Paa…

Python - 利用 OCR 技术提取视频台词、字幕

目录 一.引言 二.视频处理 1.视频样式 2.视频截取 ◆ 裁切降帧 ◆ 处理效果 3.视频分段 三.OCR 处理 1.视频帧处理 2.文本识别结果 3.后续工作与优化 ◆ 识别去重 ◆ 多线程提效 ◆ 片头片尾优化 四.总结 一.引言 视频经常会配套对应的台词或者字幕&#xff0c…

Modern C++ 转换构造函数和类型转换函数

在 C/C 中&#xff0c;不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换&#xff08;隐式类型转换&#xff09;&#xff0c;需要用户显式地指明如何转换的称为强制类型转换。 不管是自动类型转换还是强制类型转换&#xff0c;前提必须是编译器知道如何…

温故知新:探究Android UI 绘制刷新流程

一、说明&#xff1a; 基于之前的了解知道ui的绘制最终会走到Android的ViewRootImpl中scheduleTraversals进行发送接收vsync信号绘制&#xff0c;在ViewRootImpl中还会进行主线程检测&#xff0c;也就是我们所谓子线程更新ui会抛出异常。 像我们常用的刷新ui&#xff0c;inval…

华为ipsec vpn双链路主备备份配置案例

配置就是这配置&#xff0c;意外是完成后不通&#xff0c;待以后处理&#xff01; FW_A配置&#xff1a; dhcp enable ip-link check enable ip-link name check_b destination 2.2.2.2 interface GigabitEthernet1/0/0 mode icmp next-hop 202.38.163.2 acl number 3000 rul…

新方向!文心一言X具身智能,用LLM大模型驱动智能小车

具身智能已成为近年来研究的热点领域之一。具身智能强调将智能体与实体环境相结合&#xff0c;通过智能体与环境的交互&#xff0c;来感知和理解世界&#xff0c;最终实现在真实环境中的自主决策和运动控制。 如何基于文心大模型&#xff0c;低成本入门“具身智能”&#xff0…

振南技术干货集:C语言的一些“骚操作”及其深层理解(2)

注解目录 第二章《c语言的一些“操作”及其深层理解》 一、字符串的实质就是指针 &#xff08;如何将 35 转为对应的十六进制字符串”0X23”&#xff1f;&#xff09; 二 、转义符\ &#xff08;打入字符串内部的“奸细”。&#xff09; 三、字符串常量的连接 &#xff…

JAVA基础1:Java概述

1.JAVA语言 语言&#xff1a;人与人交流沟通的表达方式 计算机语言&#xff1a;人与计算机之间进行信息交流沟通的一种特殊语言 JAVA语言是美国Sun公司在1995年推出的计算机语言 JAVA之父&#xff1a;詹姆斯高斯林 2.JAVA语言跨平台原理 跨平台&#xff1a;JAVA程序可以在…

Yolov5 + 界面PyQt5 +.exe文件部署运行

介绍 Yolov5是一种基于深度学习的目标检测算法&#xff0c;PyQt5是一个Python编写的GUI框架&#xff0c;用于创建交互式界面。在部署和运行Yolov5模型时&#xff0c;结合PyQt5可以方便地创建一个用户友好的界面&#xff0c;并将代码打包为.exe文件以供其他人使用。 下面是一个…

学者观察 | 联邦学习与区块链、大模型等新技术的融合与挑战-北京航空航天大学童咏昕

导语 当下&#xff0c;数据已成为经济社会发展中不可或缺的生产要素&#xff0c;正在发挥越来越大的价值。但是在数据使用过程中&#xff0c;由于隐私、合规或者无法完全信任合作方等原因&#xff0c;数据的拥有者并不希望彻底和他方共享数据。为解决原始数据自主可控与数据跨…

新登录接口独立版变现宝升级版知识付费小程序-多领域素材资源知识变现营销系统

源码简介&#xff1a; 资源入口 点击进入 源码亲测无bug&#xff0c;含前后端源码&#xff0c;非线传&#xff0c;修复最新登录接口 梦想贩卖机升级版&#xff0c;变现宝吸取了资源变现类产品的很多优点&#xff0c;摒弃了那些无关紧要的东西&#xff0c;使本产品在运营和变现…

线上SQL超时场景分析-MySQL超时之间隙锁 | 京东物流技术团队

前言 之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景&#xff0c;记录一下。 背景说明 分布式事务消息表&#xff1a;业务上使用消息表的方式&#xff0c;依赖本地事务&#xff0c;实现了一套分布式事务方案 消息表名&#xff1a;mq_messages 数据量&#xff1a;3…

【LeetCode:2300. 咒语和药水的成功对数 | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…