150 lines
4.5 KiB
Go
150 lines
4.5 KiB
Go
|
package ocr
|
||
|
|
||
|
import (
|
||
|
"encoding/xml"
|
||
|
"go.digitalcircle.com.br/open/replaycli-go/api"
|
||
|
)
|
||
|
|
||
|
type AltoString struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
ID string `xml:"ID,attr"`
|
||
|
HPOS int `xml:"HPOS,attr"`
|
||
|
VPOS int `xml:"VPOS,attr"`
|
||
|
WIDTH int `xml:"WIDTH,attr"`
|
||
|
HEIGHT int `xml:"HEIGHT,attr"`
|
||
|
WC float64 `xml:"WC,attr"`
|
||
|
CONTENT string `xml:"CONTENT,attr"`
|
||
|
}
|
||
|
type AltoSP struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
WIDTH int `xml:"WIDTH,attr"`
|
||
|
VPOS int `xml:"VPOS,attr"`
|
||
|
HPOS int `xml:"HPOS,attr"`
|
||
|
}
|
||
|
type AltoTextLine struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
ID string `xml:"ID,attr"`
|
||
|
HPOS string `xml:"HPOS,attr"`
|
||
|
VPOS string `xml:"VPOS,attr"`
|
||
|
WIDTH string `xml:"WIDTH,attr"`
|
||
|
HEIGHT string `xml:"HEIGHT,attr"`
|
||
|
String []AltoString `xml:"String"`
|
||
|
SP []AltoSP `xml:"SP"`
|
||
|
}
|
||
|
type AltoTextBlock struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
ID string `xml:"ID,attr"`
|
||
|
HPOS int `xml:"HPOS,attr"`
|
||
|
VPOS int `xml:"VPOS,attr"`
|
||
|
WIDTH int `xml:"WIDTH,attr"`
|
||
|
HEIGHT int `xml:"HEIGHT,attr"`
|
||
|
TextLine []AltoTextLine `xml:"TextLine"`
|
||
|
}
|
||
|
type AltoComposedBlock struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
ID string `xml:"ID,attr"`
|
||
|
HPOS int `xml:"HPOS,attr"`
|
||
|
VPOS int `xml:"VPOS,attr"`
|
||
|
WIDTH int `xml:"WIDTH,attr"`
|
||
|
HEIGHT int `xml:"HEIGHT,attr"`
|
||
|
TextBlock []AltoTextBlock `xml:"TextBlock"`
|
||
|
}
|
||
|
type AltoPrintSpace struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
HPOS int `xml:"HPOS,attr"`
|
||
|
VPOS int `xml:"VPOS,attr"`
|
||
|
WIDTH int `xml:"WIDTH,attr"`
|
||
|
HEIGHT int `xml:"HEIGHT,attr"`
|
||
|
ComposedBlock []AltoComposedBlock `xml:"ComposedBlock"`
|
||
|
}
|
||
|
type AltoPage struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
WIDTH int `xml:"WIDTH,attr"`
|
||
|
HEIGHT int `xml:"HEIGHT,attr"`
|
||
|
PHYSICALIMGNR string `xml:"PHYSICAL_IMG_NR,attr"`
|
||
|
ID string `xml:"ID,attr"`
|
||
|
PrintSpace AltoPrintSpace `xml:"PrintSpace"`
|
||
|
}
|
||
|
type AltoDescription struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
MeasurementUnit string `xml:"MeasurementUnit"`
|
||
|
SourceImageInformation struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
FileName string `xml:"fileName"`
|
||
|
} `xml:"sourceImageInformation"`
|
||
|
OCRProcessing struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
ID string `xml:"ID,attr"`
|
||
|
OcrProcessingStep struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
ProcessingSoftware struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
SoftwareName string `xml:"softwareName"`
|
||
|
} `xml:"processingSoftware"`
|
||
|
} `xml:"ocrProcessingStep"`
|
||
|
} `xml:"OCRProcessing"`
|
||
|
}
|
||
|
type AltoLayout struct {
|
||
|
Text string `xml:",chardata"`
|
||
|
Page AltoPage `xml:"Page"`
|
||
|
}
|
||
|
type Alto struct {
|
||
|
XMLName xml.Name `xml:"alto"`
|
||
|
Text string `xml:",chardata"`
|
||
|
Xmlns string `xml:"xmlns,attr"`
|
||
|
Xlink string `xml:"xlink,attr"`
|
||
|
Xsi string `xml:"xsi,attr"`
|
||
|
SchemaLocation string `xml:"schemaLocation,attr"`
|
||
|
Description AltoDescription `xml:"Description"`
|
||
|
Layout AltoLayout `xml:"Layout"`
|
||
|
}
|
||
|
|
||
|
func (a Alto) Strings() []AltoString {
|
||
|
ret := make([]AltoString, 0)
|
||
|
for _, v := range a.Layout.Page.PrintSpace.ComposedBlock {
|
||
|
for _, v1 := range v.TextBlock {
|
||
|
for _, v2 := range v1.TextLine {
|
||
|
for _, v3 := range v2.String {
|
||
|
ret = append(ret, v3)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
type Opts struct {
|
||
|
Ver string `json:"ver,omitempty"`
|
||
|
X int `json:"x"`
|
||
|
Y int `json:"y"`
|
||
|
H int `json:"h"`
|
||
|
W int `json:"w"`
|
||
|
Blur float64 `json:"blur"`
|
||
|
Sharpen float64 `json:"sharpen"`
|
||
|
Resizew int `json:"resizew"`
|
||
|
Resizeh int `json:"resizeh"`
|
||
|
Lang string `json:"lang"`
|
||
|
Tempfile string `json:"tempfile"`
|
||
|
Dispid int `json:"d"`
|
||
|
Gray bool `json:"gray"`
|
||
|
Src string `json:"src"`
|
||
|
Bytes []byte `json:"bytes"`
|
||
|
AddRects bool `json:"add_rects"`
|
||
|
}
|
||
|
|
||
|
type Cli struct {
|
||
|
*api.ApiCli
|
||
|
}
|
||
|
|
||
|
func (c *Cli) OCR(opts *Opts) (*Alto, error) {
|
||
|
res := &Alto{}
|
||
|
err := c.HttpCli().JsonPost("/ocr", opts, res)
|
||
|
return res, err
|
||
|
}
|
||
|
|
||
|
func NewCli() *Cli {
|
||
|
ret := &Cli{ApiCli: api.NewApiIPCCli()}
|
||
|
ret.ApiCli.HttpCli().SetBasePath("http://ocr/")
|
||
|
return ret
|
||
|
}
|