forked from nuveo/nuance
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnuance.go
124 lines (97 loc) · 2.58 KB
/
nuance.go
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package nuance
/*
#cgo CPPFLAGS: -I /usr/local/include/nuance-omnipage-csdk-19.2
#cgo LDFLAGS: -L /usr/local/lib/nuance-omnipage-csdk-lib64-19.2 -lrecapiplus -lkernelapi -lrecpdf -Wl,-rpath-link,/usr/local/lib/nuance-omnipage-csdk-lib64-19.2,-rpath,/usr/local/lib/nuance-omnipage-csdk-lib64-19.2
#include <KernelApi.h>
#include "nuancec.h"
*/
import "C"
import (
"errors"
"fmt"
"unsafe"
)
type nuance struct {
nuancePtr C.nuancePtr
}
func New() (n nuance) {
n.nuancePtr = C.nuanceNew()
return
}
func (n *nuance) Free() {
C.nuanceFree(unsafe.Pointer(n.nuancePtr))
}
func (n *nuance) Init(company string, product string) (err error) {
errBuff := make([]byte, 1024)
if C.nuanceInit(
unsafe.Pointer(n.nuancePtr),
C.CString(company),
C.CString(product),
(*C.char)(unsafe.Pointer(&errBuff[0])),
C.int(len(errBuff))) != 0 {
err = errors.New(string(errBuff))
return
}
err = nil
return
}
func (n *nuance) SetLicense(licenseFile string, oemCode string) (err error) {
errBuff := make([]byte, 1024)
if C.nuanceSetLicense(
unsafe.Pointer(n.nuancePtr),
C.CString(licenseFile),
C.CString(oemCode),
(*C.char)(unsafe.Pointer(&errBuff[0])),
C.int(len(errBuff))) != 0 {
err = errors.New(string(errBuff))
return
}
err = nil
return
}
func (n *nuance) Quit() {
C.nuanceQuit(unsafe.Pointer(n.nuancePtr))
}
func (n *nuance) LoadFormTemplateLibrary(templateFile string) (err error) {
errBuff := make([]byte, 1024)
if C.nuanceLoadFormTemplateLibrary(
unsafe.Pointer(n.nuancePtr),
C.CString(templateFile),
(*C.char)(unsafe.Pointer(&errBuff[0])),
C.int(len(errBuff))) != 0 {
err = errors.New(string(errBuff))
return
}
err = nil
return
}
func (n *nuance) OCRImgWithTemplate(imgFile string) (ret map[string]string, err error) {
errBuff := make([]byte, 1024)
ret = make(map[string]string)
if C.nuancePreprocessImgWithTemplate(
unsafe.Pointer(n.nuancePtr),
C.CString(imgFile),
(*C.char)(unsafe.Pointer(&errBuff[0])),
C.int(len(errBuff))) != 0 {
err = errors.New(string(errBuff))
return
}
zoneCount := int(C.nuanceGetZoneCount(unsafe.Pointer(n.nuancePtr)))
fmt.Println("zoneCount:", zoneCount)
for i := 0; i < zoneCount; i++ {
zoneName := make([]byte, 256)
zoneText := make([]byte, 256)
C.nuanceGetZoneData(
unsafe.Pointer(n.nuancePtr),
C.int(i),
(*C.char)(unsafe.Pointer(&zoneName[0])),
C.int(256),
(*C.char)(unsafe.Pointer(&zoneText[0])),
C.int(256))
ret[string(zoneName)] = string(zoneText)
//fmt.Printf("%s: [%s]\n", string(zoneName), string(zoneText))
}
C.nuanceFreeImgWithTemplate(unsafe.Pointer(n.nuancePtr))
err = nil
return
}