* Document extractor service * Fixing vendor modules * Addressing PR Review comments * Some small simplifications * Fixing a linter complain * simplifying a bit the code using package variables Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
52 строки
826 B
Go
52 строки
826 B
Go
// +build ocr
|
|
|
|
package docconv
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"sync"
|
|
|
|
"github.com/otiai10/gosseract/v2"
|
|
)
|
|
|
|
var config = struct {
|
|
langs []string
|
|
sync.Mutex
|
|
}{
|
|
langs: []string{"eng"},
|
|
}
|
|
|
|
func SetImageLanguages(l ...string) {
|
|
config.Lock()
|
|
config.langs = l
|
|
config.Unlock()
|
|
}
|
|
|
|
// ConvertImage converts images to text.
|
|
// Requires gosseract.
|
|
func ConvertImage(r io.Reader) (string, map[string]string, error) {
|
|
f, err := NewLocalFile(r)
|
|
if err != nil {
|
|
return "", nil, fmt.Errorf("error creating local file: %v", err)
|
|
}
|
|
defer f.Done()
|
|
|
|
meta := make(map[string]string)
|
|
|
|
client := gosseract.NewClient()
|
|
defer client.Close()
|
|
|
|
config.Lock()
|
|
defer config.Unlock()
|
|
|
|
client.SetLanguage(config.langs...)
|
|
client.SetImage(f.Name())
|
|
text, err := client.Text()
|
|
if err != nil {
|
|
return "", nil, err
|
|
}
|
|
|
|
return text, meta, nil
|
|
}
|