图像文本擦除无痕迹!复旦提出EAFormer:最新场景文本分割新SOTA!(ECCV`24)

文章链接:https://arxiv.org/pdf/2407.17020

git链接:https://hyangyu.github.io/EAFormer/

亮点直击

  • 为了在文本边缘区域实现更好的分割性能,本文提出了边缘感知Transformer(EAFormer),该方法明确预测文本边缘,并利用这些边缘来引导后续的编码器。
  • 针对COCO_TS和MLT_S数据集的注释质量较低的问题,对这些数据集进行了重新标注,以提高EAFormer在这两个数据集上的实验结果的可靠性。
  • 在六个场景文本分割基准上的广泛实验表明,所提出的EAFormer能够达到最先进的性能,尤其在文本边缘区域表现更佳。

场景文本分割旨在从场景图像中裁剪文本,这通常用于帮助生成模型编辑或去除文本。现有的文本分割方法通常涉及各种文本相关的监督以获得更好的性能。然而,大多数方法忽略了文本边缘的重要性,而文本边缘对下游应用至关重要。本文提出了边缘感知Transformer(Edge-Aware Transformers),简称EAFormer,以更准确地分割文本,特别是文本的边缘。

具体而言,首先设计了一个文本边缘提取器,以检测边缘并滤除非文本区域的边缘。然后,提出了一个边缘引导编码器,使模型更加关注文本边缘。最后,采用了一个基于MLP的解码器来预测文本mask。在常用基准上进行了广泛的实验,以验证EAFormer的有效性。实验结果表明,所提出的方法在文本边缘的分割上优于以前的方法。考虑到一些基准数据集(如COCO_TS和MLT_S)的注释不够准确,无法公平评估本文的方法,重新标注了这些数据集。通过实验观察到,当使用更准确的注释进行训练时,本文的方法能够获得更高的性能提升。

方法

本节详细介绍了所提出的EAFormer。首先,介绍EAFormer的提出动机。然后,详细说明EAFormer的每个模块,包括文本边缘提取器、边缘引导编码器和文本分割解码器。最后,介绍了本文方法的损失函数。

动机

不可否认,文本边缘对场景文本分割任务至关重要,尤其是对于其下游任务如文本擦除。准确分割文本边缘可以为文本擦除模型提供更多的背景信息,以填补文本区域。如下图1所示,利用一个预训练的修复模型,输入不同类型的文本mask,以在场景图像中擦除文本。通过实验观察到,文本边界框mask过于粗糙,无法为修复模型提供更多的背景信息。此外,边缘分割不准确的文本mask使得修复模型错误地将属于文本的像素视为背景,导致擦除效果不佳。只有提供具有准确边缘分割的文本mask时,修复模型才能生成令人满意的文本擦除结果。

尽管PGTSNet已经意识到文本边缘的重要性,并使用了二元交叉熵损失来检测文本边缘的像素,但它未能明确地将易于获取的文本边缘信息作为输入信息之一。为了验证其感知文本边缘的能力,对主干网络输出的特征进行了K均值聚类,其中K设置为3,分别代表背景、文本边缘和文本中心。通过下图2中的可视化结果,观察到该方法在感知文本边缘方面仍存在一定的不足。

此外,研究者们发现传统的边缘检测算法可以获得准确的文本边缘,这可能有助于场景文本分割任务。然而,由于传统的边缘检测方法无法区分文本区域和非文本区域,因此大多数边缘都被检测到了非文本区域。如果直接将边缘检测结果作为输入来辅助文本分割,可能会使文本分割模型产生混淆,从而对其性能产生不利影响。

边缘感知Transformer(EAFormer)

如下图3所示,所提出的EAFormer由三个模块组成:文本边缘提取器、边缘引导编码器和文本分割解码器。给定输入的场景文本图像 X ∈ R 3 × H × W X \in \mathbb{R}^{3 \times H \times W} XR3×H×W,文本边缘提取器用于获得文本区域的边缘 E t E_t Et。然后,文本图像 X X X 和检测到的文本边缘 E t E_t Et 被输入到边缘引导编码器中,以提取边缘感知特征。最后,文本分割解码器以编码器生成的特征作为输入,生成相应的文本mask M t M_t Mt

文本边缘提取器。 由于文本边缘对场景文本分割任务至关重要,研究者们提出了一个文本边缘提取器以获得文本区域的边缘。首先,使用传统的边缘检测算法Canny来获取整个输入图像的边缘 E w E_w Ew。如前所述, E w E_w Ew 中的非文本区域的边缘可能对文本分割产生负面影响。因此,在文本边缘提取器中引入了一个轻量级的文本检测模型来执行边缘过滤。具体而言,首先使用类似ResNet的[16] 主干网络提取多级视觉特征 F d = { F 1 d , F 2 d , F 3 d , F 4 d } F^d = \{F^d_1, F^d_2, F^d_3, F^d_4\} Fd={F1d,F2d,F3d,F4d},其中 $F^d_i \in \mathbb{R}^{C_i \times H_i \times W_i} $表示ResNet-like主干网络第 i i i-层的特征(有关文本检测主干网络的更多细节介绍见补充材料)。然后,采用文本检测头来预测文本区域的mask M a M_a Ma,可以表示为

其中, Conv 1 × 1 ( ⋅ ) \text{Conv}_{1 \times 1}(\cdot) Conv1×1() Concat ( ⋅ ) \text{Concat}(\cdot) Concat() 分别表示1 × 1卷积层和拼接操作。借助文本区域的mask $M_a $,可以通过对文本区域mask M a M_a Ma 和检测到的边缘 E w E_w Ew 进行逐像素相乘,过滤掉非文本区域的边缘。因此,文本区域的边缘 E t E_t Et 可以通过以下方式获得:

值得一提的是,在进行乘法操作之前对 E w E_w Ew施加了软argmax操作,因为联合优化文本检测和分割分支可以实现更好的文本检测性能。然后,经过过滤的文本边缘 E t E_t Et 被输入到接下来的边缘引导编码器中,以增强其区分文本边缘周围像素的能力。

边缘引导编码器。 由于SegFormer在语义分割中表现出色,采用它作为边缘引导编码器的基础框架。如前面图3所示,边缘引导编码器由四个阶段组成,过滤后的文本边缘在第一个阶段被合并。每个编码阶段包含三个子模块:重叠补丁embedding、有效自注意力和前馈网络。重叠补丁embedding用于提取每个补丁周围的局部特征。随后,这些特征被输入到自注意力层中,以挖掘像素之间的相关性。基本自注意力层的公式如下:

其中, Q Q Q K K K V V V 是通过对相同特征应用不同的embedding层获得的。为了减少计算成本,遵循 [43] 引入了空间降维操作来处理 K K K V V V。有关空间降维的更多细节见补充材料。最后,对于第 i i i 阶段,使用前馈网络生成输出特征 F i s F^s_i Fis。与此不同的是,在第一个阶段的前馈网络之后额外引入了一个对称交叉注意力层,以融合提取的边缘引导 E t E_t Et。具体而言,对称交叉注意力层包括两个交叉注意力操作,分别在第一个阶段的特征 F 1 s F^s_1 F1s和边缘引导 E t E_t Et 之间进行。一方面, E t E_t Et 被视为查询(Query),以提取边缘感知的视觉信息 F e v F^{ev} Fev,其中 F 1 s F^s_1 F1s 被视为键(Key)和值(Value);另一方面, F 1 s F^s_1 F1s 被用作查询(Query),进一步挖掘有用的文本边缘信息 F t e F^{te} Fte,其中 E t E_t Et 被视为键(Key)和值(Value)。

因此,第一个阶段的最终输出 F ^ 1 s \hat{F}^s_1 F^1s 可以表示为:

其中, SA ( ⋅ ) \text{SA}(\cdot) SA() 代表上述的自注意力操作, ⊕ \oplus 表示逐像素相加。随后, F ^ 1 s \hat{F}^s_1 F^1s和其他阶段的输出被输入到文本分割解码器中。

文本分割解码器。 类似于之前的方法,采用几个MLP层来融合特征并预测最终的文本mask M t M_t Mt。首先,通过相应的MLP层统一四个阶段输出的通道维度。然后,这些特征被上采样到相同的分辨率,并通过一个MLP层进一步融合。最后,融合后的特征用于预测文本mask。假设第 i i i 阶段特征的分辨率为 H i × W i × C i H_i \times W_i \times C_i Hi×Wi×Ci,解码过程可以表示为:

其中, MLP ( C in , C out ) ( ⋅ ) \text{MLP}(\text{C}_{\text{in}}, \text{C}_{\text{out}})(\cdot) MLP(Cin,Cout)()表示MLP中输入特征和输出特征的通道数分别为 C in \text{C}_{\text{in}} Cin C out \text{C}_{\text{out}} Cout Fuse ( ⋅ ) \text{Fuse}(\cdot) Fuse()表示输入特征首先被拼接在一起,然后通过MLP层在通道维度上进行降维。

损失函数

以前的文本分割方法通常引入各种损失函数来提高性能,这可能会带来选择适当超参数的困难。在所提出的EAFormer中,仅使用了两种交叉熵损失:文本检测损失 L det L_{\text{det}} Ldet 和文本分割损失 L seg L_{\text{seg}} Lseg 进行优化,它们可以表示为:

其中, λ \lambda λ 是用于平衡 L det L_{\text{det}} Ldet L seg L_{\text{seg}} Lseg 的超参数; M ^ a \hat{M}_a M^a M ^ t \hat{M}_t M^t 分别是 M a M_a Ma M t M_t Mt 的真实标注。请注意,用于 M a M_a Ma 的边界框级别监督可以从语义级别的标注中获得,这意味着所提出的方法与之前的方法一样,仅需要语义级别的标注。

实验

实施细节

所提出的方法使用PyTorch实现,所有实验都在8个NVIDIA RTX 4090 GPU上进行。采用AdamW优化器,所有实验中的初始学习率设置为 6 × 1 0 − 5 6 \times 10^{-5} 6×105,权重衰减设为0.01。批量大小设置为4。与之前的方法 [32,41,45] 一样,在训练阶段也采用了一些数据增强操作,如随机裁剪和翻转。不同于现有方法使用预训练模型来检测文本区域或识别字符,所提出的EAFormer中的所有模块都是联合训练的。换句话说,训练EAFormer时没有使用额外的数据集。Canny边缘检测的两个阈值分别设置为100和200。为了评估所提出方法的性能,同时使用前景交并比(fgIoU)和前景像素F值。fgIoU的度量标准采用百分比格式,F值采用小数格式。

实验结果

定量比较。 为了全面评估EAFormer,研究者们在英文和双语文本分割数据集上进行了实验。下表2显示了在五个英文文本分割数据集上的实验结果。

与之前的方法相比,EAFormer在大多数基准测试中在前景交并比(fgIoU)和F值上都有明显的提升。例如,在TextSeg数据集上,EAFormer在fgIoU和F值上分别超越了之前的SOTA方法TextFormer 0.64% 和0.6%。尽管原始的COCO_TS和MLT_S数据集有粗糙的注释,所提出的EAFormer仍然能表现出更好的性能,例如在COCO_TS数据集上比 TFT 提升了7.63%的fgIoU。考虑到基于不准确注释的实验结果不够令人信服,重新标注了COCO_TS和MLT_S的训练数据集和测试数据集。基于重新标注的数据集的实验结果显示在下表3中。实验表明,当使用注释更准确的数据集进行训练和测试时,EAFormer仍然能够实现显著的性能提升。与原始数据集的结果相比,重新标注数据集上的性能似乎下降了很多。

以下两个原因可能解释了这一现象:

  1. 数据集中有许多模糊的文本,这确实给模型处理文本边缘带来了挑战;
  2. 重新标注的测试数据集更为准确,评估中没有忽略的区域。

此外,还在双语文本分割数据集BTS上进行了实验,结果显示在下表4中。尽管PGTSNet不公平地引入了一个预训练的文本检测器,EAFormer在fgIoU/F值上仍然能实现1.6%/2.8%的提升,这验证了所提出方法的有效性。由于引入了一个轻量级的文本检测头,不可避免地增加了更多参数。评估了参数数量和推理速度。与之前的SOTA方法TextFormer(85M参数和每张图像0.42秒)相比,所提出的模型有92M参数,平均每张图像需要0.47秒。虽然参数数量略有增加,但本文的方法仍能显著提升性能。

定性比较。 研究者们还通过可视化将EAFormer与之前的方法在分割质量上进行了比较。如图5所示,所提出的EAFormer在文本边缘的表现优于之前的方法,这得益于引入的边缘信息。此外,对于COCO_TS和MLT_S,比较了基于原始和修改后注释的分割结果。尽管上表3表明,当使用重新标注的数据集进行训练和测试时,本文的方法性能有所下降,但下图5中的可视化结果表明,本文的模型在重新标注的数据集上能够实现更好的分割结果。

消融研究

超参数 λ \lambda λ 在训练EAFormer时,使用了两种损失函数进行优化。超参数 λ \lambda λ 用于平衡 L det L_{\text{det}} Ldet L seg L_{\text{seg}} Lseg 的权重,适当的 λ \lambda λ 可能会带来更好的性能。因此,进行了几次实验来选择 λ \lambda λ,范围为 {0.1, 0.5, 1.0, 5.0, 10.0},实验结果见下表5。当 λ \lambda λ 设置为1.0时,EAFormer在TextSeg数据集上达到了最佳性能,相比于基线模型,其fgIoU/F值分别提高了3.47% 和2.3%。表5的结果表明,当 λ \lambda λ 范围在 {0.5, 1.0, 5.0, 10.0} 时,对性能的影响较小。然而,如果 λ \lambda λ 设置为0.1,则EAFormer的性能不佳,这可能是由于过小的 λ \lambda λ 使得文本检测模块难以收敛,从而进一步影响文本分割的性能。因此,在本文中,将 λ \lambda λ 设置为1.0。

边缘过滤和边缘引导。 在所提出的EAFormer中,文本边缘提取器中的边缘过滤和边缘引导编码器中的边缘引导是两个关键组件。为了评估这两种策略的性能提升效果,进行了消融实验,结果见下表6。请注意,当仅使用边缘过滤时,提取的边缘信息与输入图像拼接后输入到基于SegFormer的编码器中。如表6所示,引入边缘过滤可以显著提升性能。然而,如果仅引入边缘引导,本文的方法性能较差。一个可能的原因是非文本区域的边缘引入了更多的干扰信息,导致模型无法有效利用提取的边缘来辅助文本分割。因此,边缘过滤和边缘引导对本文的方法都是必要的,当两者都被采用时,EAFormer能够实现SOTA性能。

讨论

过滤非文本区域的边缘。 在文本边缘提取器模块中,提出了过滤非文本区域边缘信息的方法,以避免这些信息对模型性能的负面影响。在消融实验部分中,可以得知,过滤非文本区域的边缘信息可以明显提高性能。通过可视化(见补充材料),观察到,当所有边缘信息用于辅助分割时,模型会错误地认为具有边缘信息的区域应该被分类为前景。因此,为了给模型提供明确的边缘引导,所提出的方法仅保留文本区域的边缘信息作为输入。

在不同层引入文本边缘。 在边缘引导编码器中,通过对称交叉注意机制仅在第一阶段提取增强的边缘特征信息。众所周知,低层特征对文本边缘信息更为敏感。在下图6中对不同阶段的特征进行聚类结果的可视化,结果表明只有第一阶段的特征关注边缘信息。因此,在早期阶段引入检测到的边缘是合理且有效的。还尝试在其他阶段引入边缘引导进行实验。实验结果表明,检测到的边缘引入的阶段越高,EAFormer的性能提升越小。特别是,当在第三或第四阶段引入检测到的边缘时,EAFormer的性能甚至低于基线。

利用现成的文本检测器。 在文本边缘提取器中,采用了一个轻量级的文本检测器,包括一个基于ResNet的骨干网络和一个MLP解码器。实际上,可以利用一个在文本检测数据集上预训练的现成文本检测器,这可以帮助EAFormer在实际应用中取得更好的性能。由于这可能对之前的方法不公平,只探讨了EAFormer的性能上限。在实验中,使用预训练的DBNet 替换轻量级文本检测器模块,EAFormer在TextSeg上的性能可以达到新的SOTA水平(fgIoU/F值分别为90.16%和95.2%)。

与之前边缘引导方法的区别。 实际上,将边缘信息融入分割中是一个被广泛探索的策略。然而,本文的方法与之前的工作仍有一些区别。首先,BCANet和 BSNet需要边缘监督,而本文的方法直接使用Canny提取边缘。尽管EGCAN也使用Canny,但本文的方法额外引入了边缘过滤以保留有用的边缘信息,这特别为文本分割设计。此外,EGCAN在所有编码器层中融合边缘信息,而本文的方法通过设计的对称交叉注意机制仅在第一层融合边缘信息。

局限性。 为了过滤非文本区域的边缘,引入了一个轻量级的文本检测器,这可能会略微增加可学习参数的数量。此外,仅利用了现成的边缘检测算法Canny来提取文本边缘,而没有使用更先进的深度学习边缘检测方法。引入SOTA边缘检测方法可能会进一步提高本文方法的性能。

结论

本文提出了边缘感知Transformer(Edge-Aware Transformers),称为EAFormer,以解决文本边缘处文本分割不准确的问题。具体而言,采用传统的边缘检测算法Canny来提取边缘。为了避免涉及非文本区域的边缘,引入了一个轻量级文本检测模块,用于过滤掉无用的边缘,以进行文本分割。此外,基于SegFormer,提出了一个边缘引导编码器,以增强其感知文本边缘的能力。考虑到某些数据集的低质量注释可能影响实验结果的可信度,对这些数据集进行了重新标注。在公开可用的基准测试上进行了广泛的实验,SOTA结果验证了EAFormer在文本分割任务中的有效性。

参考文献

[1]EAFormer: Scene Text Segmentation with Edge-Aware Transformers

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

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

相关文章

CPU飙升 怎么定位问题

传统的方法 【top】 查看所有进程占系统CPU的排序,定位是哪个进程搞的鬼。PID那一列就是进程号。 【top -Hp pid】 定位进程中使用 CPU 最高的线程tid 【printf ‘0x%x’ tid】 线程 tid 转化 16 进制,例如printf ‘0x%x’ 11882 得到16进制的 0x2e6a 【jstack…

PX4-Autopolite linux环境下源码编译中遇到的一些问题及相应解决办法

最近在做一个PX4飞控移植的项目,第一次接触到PX4源码,真的是感觉编译起来非常的麻烦,下面我将介绍几个新手比较容易踩坑的点。 (我都踩了ㄒ-ㄒ) 1.PX4源码要用git clone 从github上克隆来,千万不要直接在g…

java SE--集合

1.Collection接口 Collection接口是List,Set,Queue接口的父接口,里面提供了子类的常用方法; List储存的是可以重复的,有序的数据,子类是arrayList(数组结构)和linkedList&#xff…

Mapreduce_Distinct数据去重

MapReduce中数据去重 输入如下的数据,统计其中的地址信息,并对输出的地址信息进行去重 实现方法:Map阶段输出的信息K2为想要去重的内容,利用Reduce阶段的聚合特点,对K2进行聚合,去重。在两阶段中&#xff…

24/8/15算法笔记 强化学习贪婪算法,UCB,汤普森算法

以老虎机为例介绍各算法 import numpy as np#每个老虎机的中奖概率,0-1之间均匀分布 probs np.random.uniform(size10)#生成一个数组,其中的元素是从均匀分布(也称为矩形分布)中随机抽取的。均匀分布意味着每个数出现的概率是相…

微服务架构的未来发展趋势

文章目录 摘要引言当前发展趋势ServerlessService MeshAIOps 未来可能出现的挑战代码示例微服务架构示例 QA环节小结未来展望参考资料 摘要 微服务架构在软件开发中已经成为主流,但随着市场需求和技术环境的快速变化,微服务架构也在不断演进。本文将分析…

如何为 Nextcloud 配置自动数据库备份 - 应用程序

自动数据库备份模块简化了生成数据库计划备份的过程。这些备份可以存储在各种位置,包括本地驱动器、FTP 服务器、SFTP 服务器、Dropbox、Google Drive、OneDrive、NextCloud 和 Amazon S3 云存储。用户还可以选择启用自动删除过期备份的功能。此外,用户可…

MyBatis-Plus 进阶之条件构造器Wrapper和常用接口

目录 1.wrapper 介绍 1.1什么是 wrapper 2.QueryWrapper 2.1测试前的准备 2.2例1:组装查询条件 2.3例2:组装排序条件 2.4例3:组装删除条件 2.5例4:条件的优先级 2.6例5:组装 select 子句 2.7例6:…

[Linux][OS][信号的保存和处理]

目录 信号的处理 1. 在内核中的表示 2. 相关概念 3. 信号集操作函数 4.sigprocmask 5.sigpending 信号的捕捉 重谈地址空间 信号的处理 1. 在内核中的表示 普通信号,多次产生只会记录一次 信号范围 [1,31],每一种信号都要有自己的一种处理方式…

【ElementUI】el-table值相同时合并行

效果图&#xff1a; 大致思路&#xff1a;el-table里添加合并行或列的计算方法span-method <el-table :data"tableList" :span-method"objectSpanMethod"> // 在获取到列表数据tableData后调用此方法 handleTableData(tableData) {let rowSpanArr …

Java JDVC编程

1、Java的数据库编程&#xff1a;JDBC JDBC&#xff08;Java Database Connectivity&#xff09;是Java中用来与数据库进行交互的一种标准API&#xff08;应用程序编程接口&#xff09;。它为开发人员提供了一种统一的方式来访问各种类型的数据库管理系统&#xff08;DBMS&…

【深度学习实践】基于深度学习的图像去雾算法-ChaIR-实践

本文介绍一个去雾算法ChaIR的使用方法&#xff0c;可以完成图像去雾&#xff0c;也可以用于图像去雨、去噪音等任务。本文不涉及论文原理&#xff0c;只包含源代码的跑通和使用。 先展示一下效果&#xff1a; 原图去雾 论文&#xff1a;Exploring the potential of channel …

如何以编程方式解析 XCResult 包的内容

文章目录 介绍查找 XCResult 包分享 XCResult 包 解析 XCResult 包自动解析 XCResult 包的内容 使用 XCResultKit 解析包的内容初始化库获取调用记录 获取测试信息导出屏幕录制 可运行 Demo初始化 Swift Package编写主文件代码解释运行 Demo 结论 介绍 XCResult 包是一个包含运…

ASP.NET在线交流论坛管理系统

ASP.NET在线交流论坛管理系统 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 用户功能有个人信息管理 帖了信息管理 意见反馈信息管理 点赞管理 收藏管理 后台管理员可以进行用户管理 …

数据结构-查找

一、基本术语 二、线性结构 ASL&#xff1a;平均查找长度 1、顺序查找 1.1、代码实现 typedef struct {int* elem;int TableLen; }SSTable;int Search_Seq(SSTable ST, int key) {ST.elem[0] key; //哨兵&#xff0c;使得循环不用判断数组是否会越界int i;for (i ST…

LoadRunner性能指标分析常用监控参数

性能分析&#xff0c;Windows自带一种 &#xff0c;LoadRunner自带一种&#xff0c;2种参数类似 Windows自带入口 运行中搜索&#xff1a;性能监视器 进到&#xff1a;性能-数据收集器-用户定义-右键-新建-数据收集器集 名称自己任意输入&#xff0c;选择手动创建 数据类型根…

Haproxy的配置详解与使用

一、haproxy简介 HAProxy是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。 HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬…

JavaScript基础——函数

函数简介 定义函数 调用函数 函数的参数和返回值 函数参数 1.有形参情况下不传递实参 2.传递数量少于形参个数的实参 3.传递数量等于形参个数的实参 函数返回值 报错Uncaught SyntaxError: Illegal return statement 返回数字和字符串 返回数组、对象和函数 没有返回…

nginx服务部署及其平滑升级

概述 1. 7层负载均衡&#xff08;nginx&#xff09; 1. 停掉4层的环境 systemctl disable --now keepalived.service # 停用之前的4层协议方式2. 源码安装nginx tar zxf nginx-1.22.1.tar.gz 具体方式是源码编译“三部曲” ./configure # 负责检查环境&#xff0c;生成指导…

JAVA实现GB/T 32960.3—2016电动汽车远程服务与管理系统技术规范 第3部分:通信协议及数据格式

完整的TCP服务端解析代码 1.maven依赖 不要的依赖自行删除&#xff0c;懒的删了 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…