基于TexIn API实现文字识别

在本文中,我将讲述如何使用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)
}
相关推荐
陈唐其travel7 分钟前
如何搭建自己的gitlab私有仓库
后端
雷渊11 分钟前
深入分析dubbo的优雅停机
后端
Whbbit199911 分钟前
hono 集成 Better Auth
javascript·后端
雷渊24 分钟前
聊一聊Dubbo中的泛化调用
后端
雷渊39 分钟前
深入分析RPC和HTTP的区别
后端
极客智谷1 小时前
Spring AI应用系列——基于DashScope平台自主Model配置的Chat应用
人工智能·后端
用户4099322502121 小时前
FastAPI数据库连接池配置与监控
后端·ai编程·trae
嘻嘻嘻嘻嘻嘻ys1 小时前
《Spring Boot 3响应式架构实战:R2DBC驱动的高并发数据持久化革命》
前端·后端
小镇cxy1 小时前
Java开发,实践MCP
后端
木昜先生1 小时前
知识点:深入理解 JVM 内存管理与垃圾回收
java·jvm·后端