You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 15下VNRecognizeTextRequest文本识别结果顺序异常问题咨询

iOS 15 VNRecognizeTextRequest 文本识别结果顺序异常解决方案

首先明确:该问题是iOS 15.0 ~ 15.4版本Vision框架的原生系统级Bug,苹果已在iOS 15.5及后续系统版本中完成修复,非应用代码实现问题。

可选用的兼容方案如下:

方案1:系统版本适配

  • 针对用户群体,可引导iOS 15版本低于15.5的用户升级系统,升级后识别结果顺序与iOS 14完全一致,无需修改应用代码。

方案2:手动对识别结果做坐标排序(兼容所有系统版本)

由于Vision框架返回的每个文本识别结果都附带原始坐标信息,可通过boundingBox属性自行对行顺序做校正,逻辑如下:

  • Vision框架的坐标系原点在左下角,所以Y轴坐标越大,代表文本行在原图中的位置越靠上
  • 先按Y轴坐标从大到小排序,区分上下行
  • 若两个识别结果的Y轴坐标差小于设定阈值(推荐取行高的1/3,常规场景用0.03即可),判定为同一行内容,再按X轴坐标从小到大排序
  • 最后按排序后的结果拼接文本即可

Swift代码示例:

func getSortedText(from observations: [VNRecognizedTextObservation]) -> String {
    let sortedObservations = observations.sorted { obsA, obsB in
        let yA = obsA.boundingBox.origin.y
        let yB = obsB.boundingBox.origin.y
        let lineHeightThreshold = 0.03
        if abs(yA - yB) < lineHeightThreshold {
            // 同一行从左到右排序
            return obsA.boundingBox.origin.x < obsB.boundingBox.origin.x
        } else {
            // 不同行从上到下排序
            return yA > yB
        }
    }
    return sortedObservations.compactMap {
        $0.topCandidates(1).first?.string
    }.joined(separator: "\n")
}

该方案兼容所有iOS版本,对多语言、复杂排版场景的排序校正效果稳定,性能损耗可忽略不计。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:36:02