go-ocr 是一款基于 Golang + ONNX 构建的 OCR 工具库,专注于为 Go 生态提供简单易用、可扩展的文字识别能力。
目前已完成与 PaddleOCR、DdddOCR 的对接,支持快速实现图像文字检测与识别。
1paddle_weights/ # PaddleOCR 所需
2ddddocr_weights/ # DdddOCR 所需
3lib/ # onnxruntime 动态链接库(按平台选择)
1package main
2
3import (
4 ocr "github.com/getcharzp/go-ocr"
5 "github.com/getcharzp/go-ocr/paddle"
6 "github.com/up-zero/gotool/imageutil"
7 "log"
8)
9
10func main() {
11 // 按实际情况配置下述路径
12 config := paddle.Config{
13 OnnxRuntimeLibPath: "./lib/onnxruntime_amd64.so",
14 DetModelPath: "./paddle_weights/det.onnx",
15 RecModelPath: "./paddle_weights/rec.onnx",
16 DictPath: "./paddle_weights/dict.txt",
17 // ThreadCount: 4, // (可选) 并行识别 Session 数, 默认 1
18 }
19
20 // 初始化引擎(返回对象实现了 ocr.Engine 接口)
21 var engine ocr.Engine
22 engine, err := paddle.NewEngine(config)
23 if err != nil {
24 log.Fatalf("创建 OCR 引擎失败: %v\n", err)
25 }
26 defer engine.Destroy()
27
28 // 打开图像
29 imagePath := "./test.jpg"
30 img, err := imageutil.Open(imagePath)
31 if err != nil {
32 log.Fatalf("加载图像失败: %v\n", err)
33 }
34
35 // OCR识别
36 results, err := engine.RunOCR(img)
37 if err != nil {
38 log.Fatalf("运行 OCR 失败: %v\n", err)
39 }
40 for _, result := range results {
41 log.Printf("识别结果: %v\n", result)
42 }
43}
1package main
2
3import (
4 "github.com/getcharzp/go-ocr/ddddocr"
5 "github.com/up-zero/gotool/imageutil"
6 "image"
7 "image/color"
8 "image/draw"
9 "log"
10)
11
12func main() {
13 config := ddddocr.Config{
14 OnnxRuntimeLibPath: "../lib/onnxruntime.dll",
15 DetModelPath: "../ddddocr_weights/common_det.onnx",
16 }
17
18 engine, err := ddddocr.NewEngine(config)
19 if err != nil {
20 log.Fatalf("创建 OCR 引擎失败: %v\n", err)
21 }
22 defer engine.Destroy()
23
24 imagePath := "./captcha_det.png"
25 img, err := imageutil.Open(imagePath)
26 if err != nil {
27 log.Fatalf("加载图像失败: %v\n", err)
28 }
29
30 boxes, err := engine.Detect(img)
31 if err != nil {
32 log.Fatalf("运行检测失败: %v\n", err)
33 }
34
35 tagImg := image.NewRGBA(img.Bounds())
36 draw.Draw(tagImg, img.Bounds(), img, image.Point{}, draw.Src)
37
38 for _, box := range boxes {
39 imageutil.DrawThickRectOutline(tagImg, image.Rectangle{Min: image.Point{X: box.Box[0], Y: box.Box[1]},
40 Max: image.Point{X: box.Box[2], Y: box.Box[3]}}, color.Black, 2)
41 }
42 imageutil.Save("captcha_det_result.png", tagImg, 100)
43}