Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go条形码识别

基于Go语言开发实现条形码识别器

作者:程序员爱钓鱼

在物流、零售、仓储等行业,条形码是最常见的商品标识方式,本文将用 Go 实现一个条形码识别工具,能够从图片中识别出条码并解析内容,希望对大家有所帮助

在物流、零售、仓储等行业,条形码是最常见的商品标识方式。常见的格式有 EAN-13、UPC-A、Code128 等。我们可以用 Go 实现一个条形码识别工具,能够从图片中识别出条码并解析内容。

下面我带你从原理到代码,完整实现一个命令行条形码识别器

功能目标

技术选型

Go 生态里条码识别库不多,我们可以利用成熟的 ZBar 库:

为了避免跨平台问题,这里选 纯 Go 实现的 gozxing,可以直接识别条形码/二维码。

项目结构

barcode-reader/
├── main.go
├── go.mod

完整代码(main.go)

package main

import (
	"flag"
	"fmt"
	"image"
	_ "image/jpeg"
	_ "image/png"
	"os"

	"github.com/makiuchi-d/gozxing"
	"github.com/makiuchi-d/gozxing/multi"
)

func main() {
	input := flag.String("in", "barcode.png", "输入图片文件")
	flag.Parse()

	file, err := os.Open(*input)
	if err != nil {
		fmt.Printf("❌ 打开图片失败: %v\n", err)
		os.Exit(1)
	}
	defer file.Close()

	img, _, err := image.Decode(file)
	if err != nil {
		fmt.Printf("❌ 解码图片失败: %v\n", err)
		os.Exit(1)
	}

	// 将 image 转换为 BinaryBitmap
	source := gozxing.NewLuminanceSourceFromImage(img)
	bmp, _ := gozxing.NewBinaryBitmap(gozxing.NewGlobalHistgramBinarizer(source))

	// 使用 MultiFormatReader 识别多种码制
	reader := multi.NewByQuadrantReader(gozxing.NewMultiFormatReader())

	result, err := reader.Decode(bmp, nil)
	if err != nil {
		fmt.Printf("❌ 未识别到条码: %v\n", err)
		os.Exit(1)
	}

	fmt.Println("✅ 识别成功!")
	fmt.Printf("内容: %s\n", result.String())
	fmt.Printf("格式: %s\n", result.GetBarcodeFormat())
}

使用方法

初始化项目并安装依赖:

go mod init barcode-reader
go get github.com/makiuchi-d/gozxing

编译:

go build -o barcode-reader main.go

执行:

./barcode-reader -in product_barcode.jpg

输出结果示例:

✅ 识别成功!
内容: 6901234567890
格式: EAN_13

实践要点

图片格式:支持 JPEG/PNG,其他格式(如 BMP、TIFF)需额外导入解码器。

清晰度要求:条码识别依赖图像清晰度,模糊、倾斜、曝光过度会影响识别率。

批量识别:可以扩展为支持输入文件夹,对其中所有图片逐个识别。

并发加速:利用 goroutine 并发识别多张图片,加快批处理速度。

扩展功能

总结: 通过 gozxing,我们用 Go 快速实现了一个条形码识别工具,支持常见的条码/二维码格式,适合用于物流、零售、库存管理等场景。

到此这篇关于基于Go语言开发实现条形码识别器的文章就介绍到这了,更多相关Go条形码识别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文