logo

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

English | ็ฎ€ไฝ“ไธญๆ–‡

go-ocr is an OCR library built on Golang + ONNX, focused on providing simple, easy-to-use and extensible text recognition capabilities for the Go ecosystem. It already integrates with PaddleOCR and DdddOCR, so you can quickly implement image text detection and recognition.

Installation

1. Install the Go dependency

go get -u github.com/getcharzp/go-ocr

2. Download the models and dynamic libraries you need

Models and dynamic libraries are hosted in a separate repository (HuggingFace, with a ModelScope mirror for mainland China). There is no need to download everything โ€” download only the files required by the engine you actually use.

Choosing the dynamic library

Pick the onnxruntime dynamic library that matches your runtime platform:

Platform File
Linux lib/onnxruntime_amd64.so
Windows lib/onnxruntime.dll
macOS lib/onnxruntime_amd64.dylib

Quick Start

PaddleOCR

Example code

Calling RunOCR() on the engine performs full detection and recognition, while RunDetect() performs text region detection only.

package main

import (
    ocr "github.com/getcharzp/go-ocr"
    "github.com/getcharzp/go-ocr/paddle"
    "github.com/up-zero/gotool/imageutil"
    "log"
)

func main() {
    // Configure these paths for your environment
    config := paddle.Config{
        OnnxRuntimeLibPath: "./lib/onnxruntime_amd64.so",
        DetModelPath:       "./paddle_weights/det.onnx",
        RecModelPath:       "./paddle_weights/rec.onnx",
        DictPath:           "./paddle_weights/dict.txt",
        // ThreadCount: 4, // (optional) number of parallel recognition sessions, defaults to 1
    }

    // Initialize the engine (the returned value implements the ocr.Engine interface)
    var engine ocr.Engine
    engine, err := paddle.NewEngine(config)
    if err != nil {
        log.Fatalf("failed to create OCR engine: %v\n", err)
    }
    defer engine.Destroy()

    // Open the image
    imagePath := "./test.jpg"
    img, err := imageutil.Open(imagePath)
    if err != nil {
        log.Fatalf("failed to load image: %v\n", err)
    }

    // Run OCR
    results, err := engine.RunOCR(img)
    if err != nil {
        log.Fatalf("failed to run OCR: %v\n", err)
    }
    for _, result := range results {
        log.Printf("result: %v\n", result)
    }
}

Example output

Original image Detection result

DdddOCR

Example code

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("failed to create OCR engine: %v\n", err)
    }
    defer engine.Destroy()

    imagePath := "./captcha_det.png"
    img, err := imageutil.Open(imagePath)
    if err != nil {
        log.Fatalf("failed to load image: %v\n", err)
    }

    boxes, err := engine.Detect(img)
    if err != nil {
        log.Fatalf("failed to run detection: %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)
}

Example output

Original image Detection result

License

MIT

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support