当前位置: 首页 > news >正文

基于C#实现照片条形码识别

一、技术选型对比

库名称 支持格式 识别速度 准确率 开源协议
ZXing.NET QR/Code128/EAN13等30+格式 中等 MIT
ZBar QR/Code128等主流格式 极高 LGPL
TencentOCR 通用条码+文字识别 极高 闭源

二、核心实现方案(ZXing.NET)

1. 环境配置

Install-Package ZXing.Net
Install-Package ZXing.Net.Bindings.SkiaSharp  # 图像处理增强

2. 基础识别代码

using ZXing;
using ZXing.Common;
using SkiaSharp;public class BarcodeScanner
{public string Scan(string imagePath){using var bitmap = SKBitmap.Decode(imagePath);var luminanceSource = new SKBitmapLuminanceSource(bitmap);var reader = new BarcodeReader{AutoRotate = true,TryHarder = true,Options = new DecodingOptions{PossibleFormats = new[] { BarcodeFormat.CODE_128, BarcodeFormat.EAN_13 },CharacterSet = "UTF-8",PureBarcode = false}};var result = reader.Decode(luminanceSource);return result?.Text ?? "未识别到条码";}
}

三、图像预处理优化

1. 灰度化与二值化

public static SKBitmap Preprocess(SKBitmap src)
{var dst = new SKBitmap(src.Width, src.Height);using var canvas = new SKCanvas(dst);// 转换为灰度图canvas.DrawBitmap(src, 0, 0, new SKPaint{ColorFilter = SKColorFilter.CreateColorMatrix(new float[]{0.299f, 0.587f, 0.114f, 0, 0,0.299f, 0.587f, 0.114f, 0, 0,0.299f, 0.587f, 0.114f, 0, 0,0,      0,      0,      1, 0})});// 自适应阈值二值化var threshold = new AdaptiveThreshold(0.5f, 5);canvas.DrawBitmap(dst, 0, 0, threshold);return dst;
}

2. 图像增强

public static SKBitmap Enhance(SKBitmap src)
{using var filter = new SKImageFilter.Shadow(SKRect.MakeXYWH(0,0,0,0), 3, 3, 0.5f);return SKBitmap.Decode(src.Encode(SKEncodedImageFormat.Png, 100), filter);
}

参考项目 C# 根据照片识别条形码 www.youwenfan.com/contentcng/49545.html

四、高级功能实现

1. 批量识别

public List<string> BatchScan(IEnumerable<string> paths)
{var results = new ConcurrentBag<string>();Parallel.ForEach(paths, path => {var scanner = new BarcodeScanner();var result = scanner.Scan(path);if (!string.IsNullOrEmpty(result)) results.Add($"{Path.GetFileName(path)}: {result}");});return results.ToList();
}

2. 实时摄像头扫描

public class CameraScanner : IDisposable
{private VideoCaptureDevice _capture;private BarcodeReader _reader;public event Action<string> CodeDetected;public CameraScanner(){_reader = new BarcodeReader{AutoRotate = true,TryHarder = true};_capture = new VideoCaptureDevice(GetBestDevice());_capture.FrameCaptured += OnFrameCaptured;}private void OnFrameCaptured(object sender, FrameEventArgs e){var frame = e.Frame;var result = _reader.Decode(frame);if (result != null) CodeDetected?.Invoke(result.Text);}private static VideoCaptureDevice GetBestDevice(){var devices = CaptureDeviceManager.GetDeviceList(DeviceType.VideoCapture);return devices.FirstOrDefault(d => d.MonikerString.Contains("USB")) ?? devices;}public void Start() => _capture.Start();public void Stop() => _capture.Stop();public void Dispose() => _capture?.Dispose();
}

五、常见问题解决方案

1. 中文乱码

// 生成时指定编码
var options = new QrCodeEncodingOptions
{CharacterSet = "UTF-8",ErrorCorrection = ErrorCorrectionLevel.H
};

2. 低质量图片识别

// 图像预处理流水线
var processed = image.Resize(800, 600)       // 统一尺寸.Contrast(1.2f)         // 增强对比度.Despeckle(3)           // 去噪.ToBitmap();

3. 多码同图识别

var results = reader.DecodeMultiple(bitmap);
foreach (var result in results)
{Console.WriteLine($"类型:{result.BarcodeFormat}, 内容:{result.Text}");
}

六、部署建议

  1. 硬件要求

    • 最低配置:i5-8代+8GB内存+USB3.0接口
    • 推荐配置:i7-12代+16GB内存+独立显卡
  2. 依赖项管理

    <!-- NuGet依赖 -->
    <PackageReference Include="ZXing.Net" Version="0.16.9" />
    <PackageReference Include="SkiaSharp" Version="2.88.4" />
    
  3. 安装包制作

    • 使用MSIX打包工具
    • 包含.NET运行时6.0
    • 添加设备驱动签名
http://www.gsyq.cn/news/707.html

相关文章:

  • 虚拟内存不足怎么解决?虚拟内存不足的原因及解决方法
  • Tekla门钢边柱节点源码
  • 由于裁剪的图片较小
  • 周总结报告6
  • ubuntu22.04安装cuda11.8+python3.12+pytorch2.6.0
  • 自己改造的一个ES的Reindex开源工具
  • CF1379
  • 备战软考4
  • P11364 [NOIP2024] 树上查询
  • pb9新建“项目”选项卡中文说明
  • 场论笔记(一)哈密顿算子的总结
  • PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
  • IronOCR 2025.9 重磅发布:内存优化突破,TIFF文档处理内存占用可降低98%!
  • 81、核对两个表格或者核对两个表格中的其中一例数据
  • Linux内核空间与用户空间详解
  • Stable Diffusion 入门:不用本地部署也能轻松上手体验
  • 我的linux之路
  • 前端-支付宝小游戏开发接入指南
  • 打折代码
  • pb9对象中文说明
  • AIGEO重塑商业新规则
  • MySQL常见存储引擎
  • 【URP】UnityHLSL顶点片元语义详解
  • 跨网文件交换系统案例分享:金融、半导体制造、医院统统都有!
  • 尚硅谷后台管理系统
  • 第二届人工智能与自然语言处理国际学术会议(AINLP 2025)
  • 80、颜色求和
  • 纷享销客重磅亮相SCEE2025西南渠道生态峰会
  • 供应商图纸协同怎么做?安全与效率并行的实践方案!
  • 综述-human parsing