欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot + 百度 OCR 图片文字识别功能

程序员文章站 2022-07-04 16:03:50
...

一、知识点简介 

OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程。 —— OCR文字识别 - 百度百科

本篇功能是基于百度智能云人工智能接口的文字识别实现,数据请求以Spring Boot为框架。

二、准备工作

首先我们进入百度智能云-管理中心(https://console.bce.baidu.com/)创建一个新应用。

创建新应用时,勾选文字识别下的“通用文字识别”系列选项。(如有其他需求,例如身份证识别等请自行勾选)

Spring Boot + 百度 OCR 图片文字识别功能

创建完毕后,我们可以查看App ID、ApI Key以及Secret Key,这些参数用于后续请求操作。

Spring Boot + 百度 OCR 图片文字识别功能

三、搭建项目

项目框架

  • Spring Boot 2.3.2.RELEASE
  • 百度云人体识别接口 Baidu AIP Java Sdk 4.15.1

在Spring Boot的pom.xml文件引入百度云人体识别接口包:

<!-- 百度云人体识别接口 SDK https://mvnrepository.com/artifact/com.baidu.aip/java-sdk -->
        <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.15.1</version>
        </dependency>

代码编写

静态类

SystemConstants

package com.qianlingo.ocr.constants;

/**
 * 系统静态类
 * @author qianlingo
 * @date 2020/8/10
 */
public class SystemConstants {

    /**
     * 百度 app_id
     */
    public static final String APP_ID = "";

    /**
     * 百度 api_key
     */
    public static final String API_KEY = "";

    /**
     * 百度 SECRET_KEY
     */
    public static final String SECRET_KEY = "";

}

服务层 实现类

OcrServiceImpl

package com.qianlingo.ocr.service.impl;

import com.baidu.aip.ocr.AipOcr;
import com.qianlingo.ocr.constants.SystemConstants;
import com.qianlingo.ocr.service.IOcrService;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;

/**
 * ORC - Service 实现类
 *
 * @author qianlingo
 * @date 2020/8/10
 */
@Service
public class OcrServiceImpl implements IOcrService {

    private static final Logger log= LoggerFactory.getLogger(OcrServiceImpl.class);


    /**
     * 请求ocr接口,返回json数据
     * @param multipartFile 文件
     * @return json 字符串数据
     */
    @Override
    public String actionOcr(MultipartFile multipartFile) {
        AipOcr client = new AipOcr(SystemConstants.APP_ID
                , SystemConstants.API_KEY, SystemConstants.SECRET_KEY);
        HashMap<String, String> options = new HashMap<String, String>(4);
        options.put("language_type", "CHN_ENG");
        options.put("detect_direction", "true");
        options.put("detect_language", "true");
        options.put("probability", "true");

        // 参数为二进制数组
        byte[] buf = new byte[0];
        try {
            buf = multipartFile.getBytes();
        } catch (IOException e) {
            e.printStackTrace();
            log.error("获取文件字节数据异常,{}",e.getMessage());
        }
        JSONObject res = client.basicGeneral(buf, options);
        String jsonData = "";
        try {
            jsonData = res.toString(2);
        } catch (JSONException e) {
            log.error("获取json数据异常,{}",e.getMessage());
        }
        return jsonData;
    }
}

视图控制层

OcrController

package com.qianlingo.ocr.controller;

import com.qianlingo.ocr.service.IOcrService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**
 * Ocr Controller
 * @author qianlingo
 * @date 2020/8/10
 */
@RestController
@RequestMapping("/ocr")
public class OcrController {
    @Resource
    private IOcrService iOrcService;

    /**
     * 传入图片文件,进行识别操作
     * @param file  文件数据
     */
    @RequestMapping("/actionOcr")
    @ResponseBody
    public String actionOcr(MultipartFile file){
        return this.iOrcService.actionOcr(file);
    }



}

Postman 接口测试

body标签,选择form-data提交类型,key框选择file类型,选择文件后点击Send请求接口。

Spring Boot + 百度 OCR 图片文字识别功能

测试图片:

Spring Boot + 百度 OCR 图片文字识别功能

 

源码

代码已发布至Gitee

Gitee: https://gitee.com/qianlingooo/study-baidu-ocr

相关标签: springboot