File size: 1,349 Bytes
5d4ecd8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package examples

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

func TestPaddleOcr(t *testing.T) {
	start := time.Now()
	config := ocr.Config{
		OnnxRuntimeLibPath: "../lib/onnxruntime.dll",
		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.png"
	img, err := imageutil.Open(imagePath)
	if err != nil {
		log.Fatalf("加载图像失败: %v\n", err)
	}

	// 检测
	boxes, err := engine.RunDetect(img)
	if err != nil {
		log.Fatalf("运行检测失败: %v\n", err)
	}
	t.Logf("检测完成, 耗时:%v\n", time.Since(start))

	// 绘制检测区域
	detImage := ocr.DrawBoxes(img, boxes)
	imageutil.Save("det.png", detImage, 100)

	// 识别
	for _, box := range boxes {
		start2 := time.Now()
		result, err := engine.RunRecognize(img, box)
		if err != nil {
			log.Fatalf("运行识别失败: %v\n", err)
		}
		t.Logf("识别结果: %v, 耗时:%v\n", result, time.Since(start2))
	}

	t.Logf("测试完成,共识别 %d 个文本框, 耗时: %v\n", len(boxes), time.Since(start))
}