我们正在使用 Vision 库扫描 GS1 条形码。
库无法识别iOS 16版本中的特殊字符“GS”
"GS" --> 组分隔符 (ASCII 29)
我们在旧版本上不会遇到这样的问题。例如 iOS 15.6 或更低版本。我在下面上传了一个 GS1 条形码示例图片。
扫描后我们应该得到:{GS}10BF50001A{GS}21003032{GS}1122012722VD020
我们在 iOS 16 上得到的是:10BF50001A210030321122012722VD020
我还发布了一个关于我们如何使用该库的示例代码。我们没有更改代码,该错误仅出现在 iOS 16 版本中。我们想知道是否引入了错误。
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
return
}
let imageRequestHandler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: .right)
do {
try imageRequestHandler.perform([detectBarcodeRequest])
} catch {
logger.error(tag: TAG, "barcode error: \(error)")
}
}
private lazy var detectBarcodeRequest = VNDetectBarcodesRequest { [weak self] request, error in
guard error == nil else {
self?.logger.error(tag: self?.TAG, "barcode error: \(error)")
return
}
self?.processVNRequest(request)
}
private func processVNRequest(_ request: VNRequest) {
guard let barcodes = request.results else {
return
}
for barcode in barcodes {
guard let potentialBarcode = barcode as? VNBarcodeObservation else {
return
}
guard let payload = potentialBarcode.payloadStringValue else {
return
}
prepareToNotifyDetectionEvent(payload)
}
}
提前谢谢你。
我们遇到了同样的问题,在我们将测试设备更新到 iOS 16.0.2 之后,我们的应用程序停止正确读取二维条码(二维码和数据矩阵)。在 iOS 15 上,检测编码数据中用于读取不同 GS1 元素的 FNC1 字符没有问题。更新后,应用程序无法正确检测FNC1字符以及其他问题,导致工作流程中断。
今天,我们安装了iOS 16.1 beta 3,我确认该应用程序按预期正常运行,并且扫描仪能够成功检测到FNC1字符。一切恢复正常。
您可以在 Apple Beta 软件计划中注册您的设备以获取最新的公开测试版,例如我们测试过的 iOS 16.1 beta 3。
报名链接:
所提供图像中消息的内部二维码编码无效。
其中包含的消息编码为
[ECI][BYTE]{GS}10BF40001A{GS}21003032{GS}1122012722VD020
,其中[ECI]
是ECI Mode指示符,[BYTE]
引入了一个Byte Mode段,{GS}
是Group Separator character (ASCII 29)。
图像发出 ECI 信号,立即切换到字节模式,然后编码文字 GS 字符。这根本不是如何编码包含 GS1 应用程序标识符语法数据的 QR 码符号:
GS1 QR 代码比特流必须以明确的 FNC1 模式指示符开头,该指示符在消息中表示“FNC1 位于第一位”。这与给定图像中存在的ECI 模式指示器不兼容。
编码的其余部分在技术上是正确的,但非常不寻常,因为它使用字节模式编码而不是典型的字母数字模式。
还请注意,用于终止未预定义为固定长度的 AI 的规范分隔符是 FNC1 非数据字符而不是 GS 数据字符,尽管 GS 仍然是允许的。当 FNC1 模式生效时,FNC1 分隔符在字母数字模式下被编码为“%”(文字“%”数据字符被转义为“%%”),在字节模式下被编码为 GS 字符。
图像编码器应该是固定的,因为不会期望对指示的符号成功解码。
图书馆如何理解以下正确编码的符号?
上述符号的内部编码为
[FNC1][ALPHA]10BF40001A%21003032%1122012722VD020
,其中[FNC1]
为FNC1模式指示符,[ALPHA]
引入字母数字模式段。 (请注意,原始符号中的 GS 数据字符已正确编码为“%”,代表 FNC1 非数据字符。)