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

一、知识点简介 

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

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

二、准备工作

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

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

Spring Boot + 百度 OCR 图片文字识别功能_第1张图片

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

Spring Boot + 百度 OCR 图片文字识别功能_第2张图片

三、搭建项目

项目框架

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

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


        
            com.baidu.aip
            java-sdk
            4.15.1
        

代码编写

静态类

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 options = new HashMap(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 图片文字识别功能_第3张图片

测试图片:

Spring Boot + 百度 OCR 图片文字识别功能_第4张图片

 

源码

代码已发布至Gitee

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

你可能感兴趣的:(springboot)