--- license: mit pipeline_tag: image-to-text ---
logo

go-ocr forks go-ocr stars go-ocr pull-requests

go-ocr 是一款基于 Golang + ONNX 构建的 OCR 工具库,专注于为 Go 生态提供简单易用、可扩展的文字识别能力。 目前已完成与 PaddleOCR、DdddOCR 的对接,支持快速实现图像文字检测与识别。 ## 安装 ```shell # 下载包 go get -u github.com/getcharzp/go-ocr # 下载模型 + 动态链接库 git clone https://huggingface.co/getcharzp/go-ocr ``` ## 快速开始 ### PaddleOCR **示例代码** 通过 OCR 引擎的 `RunOCR()` 方法能直接进行完整的检测与识别,也可以通过 `RunDetect()` 与 `RunRecognize()` 分别进行检测与识别。 ```go package main import ( ocr "github.com/getcharzp/go-ocr" "github.com/up-zero/gotool/imageutil" "log" ) func main() { // 按实际情况配置下述路径 config := ocr.Config{ OnnxRuntimeLibPath: "./lib/onnxruntime_amd64.so", DetModelPath: "./paddle_weights/det.onnx", RecModelPath: "./paddle_weights/rec.onnx", DictPath: "./paddle_weights/dict.txt", } // 初始化引擎 var engine ocr.Engine engine, err := ocr.NewPaddleOcrEngine(config) if err != nil { log.Fatalf("创建 OCR 引擎失败: %v\n", err) } defer engine.Destroy() // 打开图像 imagePath := "./test.jpg" img, err := imageutil.Open(imagePath) if err != nil { log.Fatalf("加载图像失败: %v\n", err) } // OCR识别 results, err := engine.RunOCR(img) if err != nil { log.Fatalf("运行 OCR 失败: %v\n", err) } for _, result := range results { log.Printf("识别结果: %v\n", result) } } ``` **示例效果** | 原图 | 检测结果 | |-----------------------------------------------------|----------------------------------------------------| | | | ### DdddOCR **示例代码** ```go package main import ( "github.com/getcharzp/go-ocr/ddddocr" "github.com/up-zero/gotool/imageutil" "image" "image/color" "image/draw" "log" ) func main() { config := ddddocr.Config{ OnnxRuntimeLibPath: "../lib/onnxruntime.dll", DetModelPath: "../ddddocr_weights/common_det.onnx", } engine, err := ddddocr.NewEngine(config) if err != nil { log.Fatalf("创建 OCR 引擎失败: %v\n", err) } defer engine.Destroy() imagePath := "./captcha_det.png" img, err := imageutil.Open(imagePath) if err != nil { log.Fatalf("加载图像失败: %v\n", err) } boxes, err := engine.Detect(img) if err != nil { log.Fatalf("运行检测失败: %v\n", err) } tagImg := image.NewRGBA(img.Bounds()) draw.Draw(tagImg, img.Bounds(), img, image.Point{}, draw.Src) for _, box := range boxes { imageutil.DrawThickRectOutline(tagImg, image.Rectangle{Min: image.Point{X: box.Box[0], Y: box.Box[1]}, Max: image.Point{X: box.Box[2], Y: box.Box[3]}}, color.Black, 2) } imageutil.Save("captcha_det_result.png", tagImg, 100) } ``` **示例效果** | 原图 | 检测结果 | |-------------------------------------------------------------|-------------------------------------------------------------------| | | |