PrivId C# SDK如何获取控制台打印的条码识别结果字符串
问题场景
使用PrivID C# SDK实现驾驶证条码提取功能,当前实现代码如下:
var isvalid = privid_fhe_face1.is_valid( Image.Load(imagePath), (int)privid_fhe_face.nContextEnum.IdBarcodeRGB); isvalid.OutputResults( imagePath, out_filder + "barcode" + isvalid.result + ".bmp");
运行上述代码后,条码识别结果仅直接打印到控制台,未找到对应接口获取条码的字符串结果,无法在应用内开展后续逻辑处理,需要可行的条码结果获取方法。
可行解决方法
- 优先读取识别结果实例的公开属性:
OutputResults方法本身只负责结果打印和标注图输出,不会返回结构化识别内容,识别完成后的条码字符串默认存储在isvalid实例的公开属性中:- 通用正式版SDK对应属性为
isvalid.barcode_text,部分历史旧版本命名为isvalid.barcodeResult,直接读取该string类型属性即可拿到完整解析后的条码字符串,无需依赖控制台输出。 - 读取前可通过
isvalid.result字段判断识别状态:值为1时代表条码识别校验通过,此时读取到的条码内容有效性更高。
- 通用正式版SDK对应属性为
- 若使用的是二次封装版本、未暴露上述条码属性,可通过重定向控制台输出做兜底捕获:在识别逻辑执行前将控制台输出重定向到内存流,识别完成后恢复控制台输出,从捕获的文本中提取条码内容即可,示例代码:
// 暂存原有控制台输出流,重定向到内存写入器 var originalConsoleOut = Console.Out; using var stringWriter = new StringWriter(); Console.SetOut(stringWriter); // 执行原有条码识别逻辑 var isvalid = privid_fhe_face1.is_valid( Image.Load(imagePath), (int)privid_fhe_face.nContextEnum.IdBarcodeRGB); isvalid.OutputResults( imagePath, out_filder + "barcode" + isvalid.result + ".bmp"); // 恢复控制台输出,提取捕获的识别文本 Console.SetOut(originalConsoleOut); string rawRecognitionOutput = stringWriter.ToString(); // 按实际打印的格式从rawRecognitionOutput中匹配提取条码字符串即可
注意:重定向控制台的方案仅作为兼容兜底方案使用,优先选择直接读取实例属性的方式,稳定性更高,也不需要额外做文本匹配处理。
内容的提问来源于stack exchange,提问作者Leen
相关产品推荐
相关产品推荐

