VNRecognizeTextRequest在iOS 15系统下无法识别文本问题求解
iOS15 VNRecognizeTextRequest accurate模式报错解决方案
该报错根因为iOS15对VNRecognizeTextRequest的.accurate识别模式新增了宽高比校验,当传入的图像或候选文本块的宽高比超出系统支持范围时就会触发错误,iOS15之前的系统无该校验逻辑,因此原有代码可正常运行。
可通过以下方案在保留.accurate高精度的前提下解决问题:
- 裁剪有效识别区域:不要直接传入全帧采集的CVPixelBuffer,先根据业务场景裁剪出实际需要识别的感兴趣区域,将裁剪后的图像宽高比控制在1:10 ~ 10:1区间内,即可避开宽高比校验报错,该操作不会损失识别精度。
- 为极端比例图像添加填充:如果必须识别全帧内容,可先对宽高比极端的图像添加白色/透明填充边距,将整体图像的宽高比调整到支持的区间后再传入识别请求,识别完成后将识别结果的坐标映射回原图像即可。
- 补全图像方向参数:初始化
VNImageRequestHandler时明确传入与摄像头采集方向匹配的orientation参数,iOS15之后.accurate模式会严格基于方向参数计算图像宽高比,方向错误会导致系统计算出无效的宽高比触发报错,示例代码如下:
// 摄像头默认采集方向为.right,需根据实际的屏幕方向调整对应枚举值 let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: .right, options: [:])
- 优化识别请求参数:新增
minimumTextHeight参数过滤掉高度过小的无效文本块,减少系统生成极端宽高比候选文本的概率:
// 按图像高度的占比设置,可根据实际识别场景调整 request.minimumTextHeight = 0.03
如果识别场景以带空格的数字为主,还可以将数字组合提前加入customWords列表,进一步提升识别准确率:
request.customWords = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] request.usesLanguageCorrection = true // 开启后会优先匹配customWords内的内容,数字识别场景下不会产生负面影响
内容的提问来源于stack exchange,提问作者Ivan Androsenko
相关产品推荐
相关产品推荐

