在本文中,我将讲述如何使用Go语言调用TextIn API实现名片识别和文档转换。
TextIn是合合信息旗下智能文字识别产品,专注智能文字识别16年,为扫描全能王、名片全能王提供OCR能力,是集智能文字识别技术、产品、服务于一身的OCR服务产品,识别精确度很高。
官方网站: www.textin.com/
名片识别
使用名片识别技术,实现可对客户名片关键信息的结构化识别和录入,可应用于金融机构征信评估场景,满足征信评估环节录入客户基本信息、联系方式及职业信息等内容的需求,有效提升信息录入效率,降低用户输入成本,控制业务风险。
我们将使用HTTP网络请求,直接调用TextIN的API,具体的参数和响应在在线文档中。
使用文档:www.textin.com/document/bu...
我们定义如下响应结构体:
go
type CardRecognizeResp struct {
Result struct {
Type string `json:"type"`
ImageAngle int `json:"image_angle"`
RotatedImageWidth int `json:"rotated_image_width"`
RotatedImageHeight int `json:"rotated_image_height"`
ItemList []CardItem `json:"item_list"`
}
Code int
Message string
}
完整代码如下:
go
func cardRecognize(ctx context.Context, appId, secretCode string, buffer *bytes.Buffer) (string, error) {
url := CARD_RECOGNITION_URL // API URL
// 使用POST请求
req, err := http.NewRequest("POST", url, buffer)
if err != nil {
return "", err
}
req.Header.Set("x-ti-app-id", appId)
req.Header.Set("x-ti-secret-code", secretCode)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return "", err
}
defer func() {
_ = resp.Body.Close()
}()
responseData, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
var cardResp CardRecognizeResp
err = sonic.Unmarshal(responseData, &cardResp)
if err != nil {
return "", err
}
resMap := make(map[string]string)
for _, item := range cardResp.Result.ItemList {
if len(item.Value) == 0 || item.Key == "crop_image" {
continue
}
resMap[item.Key] = item.Value
}
result, err := sonic.Marshal(resMap)
if err != nil {
return "", err
}
return string(result), nil
}
文档转换
这里演示PDF和WORD的互相转换
TextIN提供PDF/Word/Excel/PPT及图片多种格式的高精度转换,高保真输出,并支持自定义水印等功能,提升文件处理效率。可用于教育文件处理、办公文档处理等场景
完整代码如下:
go
func convertWordToPDF(appId, secretCode string, buffer *bytes.Buffer) ([]byte, error) {
url := WORD2PDF_URL
req, err := http.NewRequest("POST", url, buffer)
if err != nil {
return nil, fmt.Errorf("failed to create request: %v", err)
}
req.Header.Set("x-ti-app-id", appId)
req.Header.Set("x-ti-secret-code", secretCode)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, fmt.Errorf("failed to send request: %v", err)
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
responseData, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("failed to read response: %v", err)
}
var textInResp ConvertResp
err = sonic.Unmarshal(responseData, &textInResp)
if err != nil {
return nil, err
}
return utils.Base64Decode(textInResp.Result)
}
func convertPDFToWord(appId, secretCode string, buffer *bytes.Buffer) ([]byte, error) {
url := PDF2WORD_URL
req, err := http.NewRequest("POST", url, buffer)
if err != nil {
return nil, fmt.Errorf("failed to create request: %v", err)
}
req.Header.Set("x-ti-app-id", appId)
req.Header.Set("x-ti-secret-code", secretCode)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, fmt.Errorf("failed to send request: %v", err)
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
responseData, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("failed to read response: %v", err)
}
var textInResp ConvertResp
err = sonic.Unmarshal(responseData, &textInResp)
if err != nil {
return nil, err
}
return utils.Base64Decode(textInResp.Result)
}