1-s2.0-S0031320324008811-讲解

要彻底吃透这篇论文,我们需要从领域基础→核心概念→论文逻辑层层拆解,每个知识点都讲清"为什么出现(前因)→是什么(原理)→解决了什么问题(后果)",全程用例子落地,避免抽象。

一、领域前置知识:先搞懂"手写文本识别(HTR)"到底在做什么?

在讲论文之前,必须先明确HTR的定位、挑战,以及为什么需要"语言模型(LM)"------这是理解全文的基石。

1.1 基础概念:OCR与HTR的区别

很多人会把HTR和OCR混为一谈,先明确两者的关系:

  • OCR(光学字符识别):广义概念,指把"图像中的文本"(印刷体、手写体)转成可编辑的文字,比如扫描纸质文档里的印刷字。
  • HTR(手写文本识别) :OCR的一个细分领域,专门处理手写文本(比如你的笔记本、平板上的手写笔记)。

为什么HTR比印刷体OCR难?

  • 手写风格差异大:每个人写字的连笔、大小、倾斜度都不同(比如你写的"暑"和你同学写的"暑"可能视觉上差异很大);
  • 序列识别难题:HTR不是认单个字符(比如认"暑"),而是认"字符序列"(比如"暑假作业"),需要处理"字符连笔""漏写/多写"等问题(比如"暑假"写成"暑价",视觉像但语言上不合理)。

1.2 HTR的核心挑战:"视觉模糊"与"语言规律"的矛盾

HTR的流程本质是"图像特征提取→序列解码":

  1. 第一步(视觉端):把手写图像/轨迹转成"视觉特征"(比如每一行像素的纹理、笔的运动轨迹);
  2. 第二步(解码端):把视觉特征转成文本序列。

但这里有个核心矛盾:

  • 视觉端容易出错:比如"考"和"暑"视觉上很像(都有"耂"字头),手写连笔后更难区分;"的"和"白"也可能因笔画潦草认错;
  • 语言端有规律:虽然视觉像,但"暑假"是常用词,"考假"不是;"我的书"合理,"我白书"不合理。

这就引出了语言模型(LM)的作用:作为"后处理工具",用语言规律纠正视觉端的错误------相当于给HTR加了个"语文老师",帮它改"语病"。

二、语言模型(LM)前置知识:从"规则型"到"端到端型"的演变

论文的核心是改进LM,所以必须先讲清楚LM的两种主流类型,以及它们各自的"前世今生"(为什么出现,为什么不够用)。

2.1 什么是语言模型(LM)?

简单说:LM是"学习语言规律的模型",能判断"一串字符是否符合语言习惯"。

比如:

  • 输入"今__天",LM能判断空白处填"天"("今天")比填"狗"("今狗天")更合理;
  • 输入"考__",LM能判断填"试"("考试")或"察"("考察")合理,填"假"("考假")不合理。

LM的核心能力:捕捉"字符/词语之间的依赖关系"(比如"暑"后面大概率跟"假""期",不跟"狗""猫")。

2.2 第一代LM:规则型语言模型(论文里的"Rule-based LM")

2.2.1 前因:早期HTR精度低,需要语言规律补漏

早期HTR的视觉识别能力很弱,经常认错字,于是研究者想到:用"人工设计的规则"把语言规律融入HTR,比如:

  • 统计型规则:统计"每个字符后面接什么字符的概率"(比如"暑"后接"假"的概率是0.8,接"狗"的概率是0.001),这就是"n-gram LM";
  • 神经网络规则:用简单的神经网络(比如LSTM)学字符依赖,比统计型更灵活。

2.2.2 原理:"多轮计算+规则筛选"

规则型LM的工作流程很"笨":

  1. HTR先输出多个"候选文本"(比如把"暑假"识别成"考假""暑价""暑假"三个候选);
  2. LM对每个候选计算"语言合理性概率"(比如"暑假"概率0.9,"考假"概率0.05);
  3. 选概率最高的候选作为最终结果。

2.2.3 后果:精度还行,但速度极慢(论文要解决的第一个痛点)

为什么慢?因为要对每个候选文本反复计算概率。比如HTR输出100个候选,LM就要算100次概率,每次都要查统计表或跑神经网络,导致推理速度只有"每秒2-5条"(FPS=2-5)------你用平板手写一句话,要等半秒才出结果,根本不实用。

2.3 第二代LM:端到端语言模型(论文里的"End-to-end LM")

2.3.1 前因:为了解决规则型LM的"慢"

研究者发现:规则型LM的"多轮候选计算"是速度瓶颈,能不能让LM和HTR"一起训、一起推理",单次计算就出结果?于是端到端LM诞生了。

2.3.2 原理:"和HTR绑定训练,单次前向推理"

端到端LM的核心是"与HTR共训":

  1. 训练时,HTR输出的"视觉特征"直接传给LM,两者用同一个损失函数(比如CTC损失)优化;
  2. 推理时,HTR的输出不用生成候选,直接传给LM,LM单次计算就输出优化后的文本------速度大幅提升,能到"每秒几百到上千条"(FPS=1000+)。

2.3.3 后果:速度快了,但"强耦合"(论文要解决的第二个痛点)

"强耦合"是关键问题,得用例子讲清楚:

  • 假设你用"CTC-based HTR"(一种HTR模型)和LM共训,LM会"记住"这个HTR输出的视觉特征模式(比如这个HTR提取的"暑"的特征是"上宽下窄");
  • 如果你换个"注意力-based HTR"(另一种HTR模型),它提取的"暑"的特征是"左密右疏",和之前的模式完全不同,之前训好的LM就没法用了------必须重新和新HTR共训一次,也就是"定制训练"。

这就像:你买了个"专属充电器",只能充你的手机,换个手机就用不了,得再买一个------开发成本高,没法普及。

三、HTR模型分类前置知识:为什么论文要适配3种HTR?

论文里的EGO-LM要适配"CTC-based、注意力-based、分割-based"3种HTR,这三种不是凭空出现的,而是HTR技术的"进化路线",理解它们的演变逻辑,才能懂EGO-LM的"通用性"有多重要。

3.1 第一代HTR:分割-based(基于分割)

3.1.1 前因:早期最简单的思路------"拆成单个字符再认"

就像你认"暑假"这个词,先把它拆成"暑"和"假"两个字,分别认出来再拼起来。

3.1.2 原理:"先分割,再识别"

  1. 分割:把手写文本行"切"成单个字符的图像(比如把"我爱中国"切成"我""爱""中""国"4个小图像);
  2. 识别:用字符分类模型(比如CNN)认每个小图像,最后拼接成文本。

3.1.3 后果:精度低、成本高,逐渐被淘汰

  • 分割难:手写连笔严重时,根本切不准(比如"牛奶"连笔后,分不清哪里是"牛"的结束、"奶"的开始);
  • 标注成本高:要人工标注"每个字符的分割位置",比如1万条文本,每条都要画分割线,耗时耗力。

3.2 第二代HTR:CTC-based(基于连接主义时序分类)

3.2.1 前因:解决"分割难+对齐难"

分割-based的核心问题是"必须先切准字符",但HTR的"输入序列"(图像特征序列,比如长度100)和"输出序列"(文本序列,比如长度4)长度不一样,没法直接对齐------CTC就是为解决这个"对齐难题"而生的。

3.2.2 关键前置概念:CTC的"对齐魔法"

CTC的核心是引入"空白字符(Blank)"和"去重规则",让长度不同的输入和输出能对齐。举个例子:

  • 输入:HTR提取的图像特征序列(长度10,比如每一步对应图像的一列像素);
  • 输出:文本"暑假"(长度2);
  • CTC的处理过程:
    1. 模型给每个输入步预测一个"字符或空白",比如输出序列是"空→暑→暑→空→假→假→空→空→暑→空";
    2. 去重+删空白:去掉重复字符和空白,得到"暑→假",也就是"暑假"。

这样一来,不管输入序列多长,都能通过CTC映射成短的文本序列,不用再人工分割字符------分割-free的HTR诞生了!

3.2.3 后果:成为HTR主流,但有"局部依赖"缺陷

CTC的优点是快、不用分割,但缺点是"只看局部特征":比如认"暑"的时候,只关注当前输入步的特征,没法结合"假"的特征来判断(比如"暑"后面接"假"更合理,CTC不懂这个,只能靠LM补)。

3.3 第三代HTR:注意力-based(基于注意力机制)

3.3.1 前因:解决CTC的"局部依赖"问题

研究者想:能不能让模型在认某个字符时,"主动关注图像里对应的区域"?比如认"暑"时,注意力集中在图像里"暑"的位置;认"假"时,注意力移到"假"的位置------这就是注意力机制的思路。

3.3.2 原理:"动态对齐,关注重点"

以"暑假"为例:

  1. HTR先把图像转成"全局特征图"(比如10×10的特征矩阵);
  2. 输出"暑"时,注意力权重集中在特征图里"暑"的区域(比如左上角4×4),其他区域权重低;
  3. 输出"假"时,注意力权重移到"假"的区域(比如右上角4×4);
  4. 靠这种动态对齐,直接输出文本序列。

3.3.3 后果:精度比CTC高,但输出格式不兼容

注意力-based的优点是对齐更精准,尤其对连笔文本,精度比CTC高。但缺点是输出格式和CTC完全不同

  • CTC输出"带空白的概率序列"(比如每个步对应"字符/空白"的概率);
  • 注意力-based输出"不带空白的文本概率"(比如每个步对应一个字符的概率,没有空白)。

这就导致:为CTC设计的LM,没法直接用在注意力-based HTR上------论文的"伪CTC模块"就是为解决这个兼容问题。

四、论文核心概念:EGO-LM如何解决"慢、耦合、不兼容"三大问题?

论文提出的EGO-LM(高效、通用、即插即用LM),本质是用三个核心设计,分别解决前面提到的三大痛点。每个设计都要讲清"前因(为什么要做)→原理(怎么做)→后果(解决了什么)"。

4.1 核心设计1:视觉受限代理任务(解决"端到端LM强耦合"问题)

4.1.1 前因:端到端LM为什么会"过度依赖视觉"?

前面说过,端到端LM和HTR共训时,HTR在训练集上精度极高(比如99%),LM会"偷懒":既然HTR的视觉特征这么准,我直接跟着视觉特征走就行了,不用学语言规律------导致LM变成"视觉特征的附庸",换个HTR就用不了。

比如:HTR把"暑假"认成"暑价"(视觉像),LM因为学的是HTR的视觉特征,也会跟着输出"暑价",而不会纠正成"暑假"------因为它没学好"暑假"这个语言规律。

4.1.2 原理:"故意让HTR认不准,逼LM学语言"

这个任务的核心是"制造视觉模糊,但语言合规的数据",让LM只能靠语言规律判断。具体分3步:

  1. 合成"语言合规但视觉退化"的数据
    • 先找符合语言规律的文本(比如"今天天气好,适合去公园");
    • 把文本对应的手写轨迹"故意破坏":参考"掩码自编码器(MAE)",随机删除笔画的连续点(比如"今"的撇画删50%,"天"的横画删70%),退化到"肉眼都认不出"(如图3,退化后的"风要从插人直有死向"根本看不清,但原文是符合语言规律的);
  2. 用退化数据训一个"弱HTR"
    • 这个HTR在退化数据上精度很低(比如50%),输出的"概率序列"里几乎没有有效视觉信息(比如它也分不清"暑"和"考",只能给出模糊的概率);
  3. 用弱HTR的输出训LM
    • LM拿到的输入是"视觉信息稀缺,但语言合规"的概率序列,只能靠"语言规律"来优化输出(比如"暑"后面接"假"的概率高,所以即使HTR给的"暑"概率低,LM也会把结果纠正为"暑假")。

4.1.3 关键区分:和"数据增强"的区别

很多人会把这个任务和"数据增强"搞混,必须说清:

对比维度 视觉受限代理任务 数据增强
目标 让LM学语言规律 让HTR学更鲁棒的视觉特征
退化程度 极重(肉眼认不出,HTR精度低) 轻(HTR仍能认准,只是增加多样性)
服务对象 语言模型(LM) 手写识别模型(HTR)

4.1.4 后果:实现"即插即用(Out-of-the-box)"

LM不再依赖HTR的视觉特征,而是掌握了通用的语言规律------不管换什么HTR(CTC/注意力/分割),只要输入"字符概率序列",LM就能用,不用重新训练。

比如:用退化数据训好的LM,既能接CTC-based HTR,也能接注意力-based HTR,甚至能接分割-based HTR------真正实现"拿过来就用"。

4.2 核心设计2:伪CTC序列构建模块(解决"LM不兼容多类HTR"问题)

4.2.1 前因:不同HTR的输出格式不统一

EGO-LM原本是为CTC-based HTR设计的,输入需要"带空白的概率序列"。但注意力-based和分割-based HTR的输出格式完全不同:

  • 注意力-based输出"不带空白的字符概率"(比如每个步对应一个字符的概率,没有空白);
  • 分割-based输出"字符概率+位置置信度"(比如每个特征点对应"是不是字符"的置信度,和"是哪个字符"的概率)。

如果不做格式转换,LM根本没法读这些输出------伪CTC模块就是"格式转换器"。

4.2.2 原理:把不同HTR的输出,统一转成"带空白的CTC序列"

针对三种HTR,转换逻辑不同,举例子说明:

(1)对CTC-based HTR:直接"抄作业"

CTC本身输出的就是"带空白的概率序列",所以伪CTC模块不用改,直接把HTR的输出传给LM------这叫"恒等映射"。

(2)对注意力-based HTR:"插入空白,补全长度"

假设注意力-based HTR输出"暑假"的概率序列(长度2,每个步对应一个字符的概率):

  • 步骤1:初始化一个"全空白序列"(长度10,比如),空白概率=1,字符概率=0;
  • 步骤2:每隔k个位置(论文里k=3),插入注意力的输出:
    • 第1个注意力步("暑"的概率)插入到序列第1位:该位置空白概率=0,"暑"的概率=0.9,其他字符概率=0.1;
    • 第2个注意力步("假"的概率)插入到序列第4位:该位置空白概率=0,"假"的概率=0.8,其他字符概率=0.2;
  • 步骤3:最终得到"带空白的CTC序列"(长度10),LM能直接用。
(3)对分割-based HTR:"结合置信度,生成空白"

分割-based HTR输出两个东西:

  • ( P_{cls} ):每个特征点对应"是哪个字符"的概率(比如"暑"的概率0.7,"假"的概率0.2);
  • ( p_{loc} ):每个特征点对应"是不是字符"的置信度(比如0.9表示"这里有字符",0.1表示"这里是空白")。

转换逻辑:

  • 空白概率 = 1 - ( p_{loc} )(置信度低→大概率是空白);
  • 字符概率 = ( p_{loc} \times P_{cls} )(置信度高→字符概率更可信);
  • 把"空白概率+字符概率"拼接,就是CTC序列。

比如:某个特征点( p_{loc}=0.1 ),( P_{cls} )中"暑"=0.7,则空白概率=0.9,"暑"的概率=0.1×0.7=0.07------这个步会被识别为空白。

4.2.3 后果:实现"通用性"

EGO-LM能适配所有三种主流HTR模型,不用为每种HTR单独设计LM------这是之前的端到端LM做不到的。

4.3 核心设计3:无训练迭代 refinement(解决"精度与成本平衡"问题)

4.3.1 前因:想进一步提升精度,又不想增加训练成本

EGO-LM已经能即插即用,但研究者发现:第一次输出的结果还能再优化------比如HTR输出"考假",LM第一次改成"暑假",但如果能结合HTR的"视觉置信度"(比如HTR对"考"的置信度只有0.3,对"暑"的置信度有0.6)和LM的"语言概率"("暑假"的概率0.9),结果会更准。

但重新训练LM会增加成本,所以需要"无训练"的优化方法------不用额外数据,不用调参数,直接在推理时迭代优化。

4.3.2 原理:"HTR和LM概率融合,反复迭代"

核心是"加权融合概率,再喂给LM重新优化",分2步:

  1. 概率融合 :把HTR的输出(( \hat{P}{net} ))和LM的当前输出(( P {lm}^t )),按固定权重相乘:

    \\tilde{P}*f\^{t+1} = (\\hat{P}* {net})\^\\alpha \\odot (P_{lm}^t)^\\beta

    • ( \alpha )和( \beta )是权重(论文里都设为0.6,不用调);
    • ( \odot )是"元素相乘"(比如HTR对"暑"的概率0.6,LM对"暑"的概率0.9,融合后是0.6^0.6 × 0.9^0.6 ≈ 0.76);
  2. 归一化与迭代:把融合后的概率归一化(确保每个步的概率和为1),再传给LM,得到新的输出(( P_{lm}^{t+1} ));
  3. 重复上述步骤3次(论文验证3次效果最好),最终输出结果。

4.3.3 例子:从"考假"到"暑假"的迭代优化

  • 初始:HTR输出"考假"("考"概率0.5,"假"概率0.8),LM第一次优化成"暑假"("暑"概率0.7,"假"概率0.9);
  • 融合:( \hat{P}{net} )(考0.5,暑0.3,假0.8)和( P{lm}^0 )(考0.1,暑0.7,假0.9)融合,得到"暑"的概率≈0.3^0.6 × 0.7^0.6 ≈ 0.48,"假"≈0.8^0.6 × 0.9^0.6 ≈ 0.85;
  • 迭代1次:LM用融合后的概率,输出"暑假"("暑"概率0.8,"假"概率0.9);
  • 迭代3次:"暑"概率稳定在0.9,"假"概率0.95------结果更准。

4.3.4 后果:精度提升,成本不变

不用额外训练,不用加参数,仅靠推理时的几次迭代,就能让精度再提升1-2个百分点(比如AR从96.5%升到97.8%),同时保持高速度(迭代3次后FPS仍有114,比规则型LM快162倍)。

4.4 核心补充:DCOH-120K数据集(解决"现有数据集语料单一"问题)

4.4.1 前因:现有HTR数据集"太死板"

论文之前的主流数据集(比如CASIA-OLHWDB、ICDAR2013)有三个大问题:

  1. 语料单一:几乎都是新闻文章(比如"新华社报道......""政府工作报告......"),缺乏日常对话、论坛评论、电子书等生活化语料;
  2. 无压力信息:用"专用笔+纸"收集,没有手写时的压力数据(比如你用平板写"点"时按得重,笔画会变粗,压力数据能帮助识别连笔);
  3. 场景不真实:没有覆盖"电子设备手写"场景(比如平板、手机上的手写),而现在很多HTR应用都在电子设备上。

这些问题导致:在现有数据集上训好的LM,到了真实场景(比如识别你的平板手写笔记"下饭是湘菜的最高评价")就不准------因为它没学过"下饭""湘菜"这些生活化词汇。

4.4.2 原理:用平板收集"多样化、带压力的手写数据"

DCOH-120K(多样语料在线手写数据集)的核心特点:

  1. 语料多样
    • 中文:83,142条,来自新闻、论坛评论、日常对话(比如"仿佛回到无所事事的暑假");
    • 英文:39,398条,来自维基百科、电子书(比如"Biographers James G. Randall and Richard Current");
  2. 带压力信息:用平板+手写笔收集,能记录每个笔画的压力变化(比如写"横"时压力从0.3升到0.8,再降到0.2);
  3. 高采样率:比现有数据集采样更密集(比如每秒采样100次,现有数据集可能只采样50次),能更精准还原手写轨迹。

4.4.3 后果:让LM学更通用的语言规律

用DCOH-120K训出来的LM,不仅能处理新闻文本,还能处理日常对话、电子书等真实场景的文本------泛化性大幅提升。比如:能正确识别"下饭是湘菜的最高评价",而不是改成"下班是香菜的最高评价"(现有数据集训的LM可能会犯这个错)。

五、实验相关概念:如何判断EGO-LM真的好用?

论文用大量实验验证EGO-LM的性能,里面涉及几个关键评估概念,必须理解这些概念,才能看懂实验结果。

5.1 评估指标:AR和CR(判断"识别准不准")

HTR的核心错误有三种:

  • deletion(删除错误):漏认字符,比如"暑假"认成"暑";
  • insertion(插入错误):多认字符,比如"暑假"认成"暑假假";
  • substitution(替换错误):认错字符,比如"暑假"认成"考假"。

AR和CR就是基于这三种错误设计的,公式不用记,理解含义即可:

  • AR(Accurate Rate,准确率) :最严格的指标,减去所有三种错误(删除+插入+替换);
    • 比如100个字符,删了2个,插了1个,换了3个,AR=(100-2-1-3)/100=94%;
  • CR(Correct Rate,正确率) :只减去删除和替换,不减去插入;
    • 同上例,CR=(100-2-3)/100=95%。

为什么用两个指标?因为插入错误有时是"冗余错误"(比如多写一个"的"),对语义影响小,CR能反映"核心字符的识别正确率",AR能反映"整体序列的准确性"。

5.2 消融实验(判断"每个设计是否有用")

消融实验的本质是"控制变量法":去掉某个设计,看性能是否下降------如果下降,说明这个设计有用。

论文里的消融实验验证了两个核心设计:

  1. 去掉"视觉受限代理任务":AR从97.67%降到96.06%(降1.61%)→ 证明这个任务能让LM学语言规律;
  2. 去掉"无训练迭代refinement":AR从97.67%降到97.23%(降0.44%)→ 证明迭代能进一步提升精度。

通过消融实验,研究者证明:EGO-LM的性能提升,不是靠"模型变大"或"参数增多",而是靠这两个核心设计。

5.3 泛化性实验(判断"EGO-LM是否真的通用")

泛化性指"换个数据集/场景,模型还能用"。论文做了两个泛化性实验:

  1. 用"ICDAR2013数据集训的EGO-LM",直接用在"DCOH-Chinese数据集"上:AR提升2.7%;
  2. 用"DCOH-Chinese数据集训的EGO-LM",直接用在"ICDAR2013数据集"上:AR提升1.1%。

结果说明:EGO-LM的语言规律是通用的,不用针对每个数据集重新训练------进一步验证"即插即用"能力。

5.4 SOTA对比(判断"EGO-LM是否比现有方法好")

SOTA(State-of-the-art)指"当前领域最好的方法"。论文把EGO-LM和两种SOTA方法对比:

  1. 对比"规则型SOTA(Liu et al. [10])":
    • 精度:EGO-LM的AR(97.89%)和规则型(97.94%)几乎持平;
    • 速度:EGO-LM(114 FPS)比规则型(0.7 FPS)快162倍;
    • 存储:EGO-LM(125 MB)比规则型(100 MB)略大,但远小于另一种规则型(7690 MB);
  2. 对比"端到端SOTA(Peng et al. [11])":
    • 精度:EGO-LM的AR(97.89%)比端到端SOTA(96.82%)高1.07%;
    • 速度:EGO-LM(114 FPS)比端到端SOTA(1144 FPS)慢,但仍保持实用速度;

结论:EGO-LM在"精度、速度、通用性"三者间取得了最好的平衡------比规则型快,比端到端准,还能即插即用。

六、论文逻辑链:从"问题"到"解决方案"的完整闭环

最后,把所有知识点串成一条逻辑链,你就能彻底理解这篇论文的价值:

  1. 问题提出:现有LM有两大痛点------规则型慢,端到端型强耦合;现有HTR数据集语料单一,HTR模型格式不兼容;
  2. 解决方案 :提出EGO-LM,用三个核心设计解决问题:
    • 视觉受限代理任务:解决强耦合,实现即插即用;
    • 伪CTC模块:解决格式不兼容,实现通用性;
    • 无训练迭代refinement:提升精度,不增成本;
    • 补充DCOH-120K数据集:解决语料单一,提升泛化性;
  3. 实验验证:在4个数据集、3种HTR模型上验证,证明EGO-LM比现有方法更快、更准、更通用;
  4. 结论与展望:EGO-LM是首个"高效、通用、即插即用"的HTR-LM,未来可结合大语言模型(LLM)进一步提升性能,支持更多语言和场景。

通过这个逻辑链,你能清晰看到:论文的每个设计都不是凭空想的,而是精准针对现有技术的痛点;每个实验都不是随便做的,而是为了验证设计的有效性。这就是优秀学术论文的"问题-方案-验证"闭环。

相关推荐
Swift社区4 天前
使用 MetricKit 监控应用性能
ios·swiftui·swift
快手技术4 天前
KwaiDesign:为快手多元业务打造统一、高效的设计与开发体系
swiftui·arkui·weui
初级代码游戏4 天前
iOS开发 SwiftUI 6 :List
ios·swiftui·swift
东坡肘子6 天前
AT 的人生未必比 MT 更好 -- 肘子的 Swift 周报 #118
人工智能·swiftui·swift
初级代码游戏10 天前
iOS开发 SwiftUI 5 : 文本输入 密码输入 多行输入
ios·swiftui·swift
东坡肘子13 天前
2026:当 AI 隐入工作流,你准备好了吗? -- 肘子的 Swift 周报 #117
人工智能·swiftui·swift
__WanG16 天前
如何申请 Family Controls 权限
ios·swiftui·权限·应用时间管理
初级代码游戏18 天前
iOS开发 SwiftUI 2 : Image
ios·swiftui·swift