Java를 이용한 바이두 AI 신분증 사진 정보 추출

이 가이드에서는 Java를 사용하여 바이두 AI의 신분증 인식 API를 호출하여 이미지에서 정보를 추출하는 방법을 설명합니다.

1. 사전 준비

  • 바이두 AI 계정 생성
  • API Key 및 Secret Key 발급

2. 구현 단계

2.1. 프로젝트 설정

HTTP 통신을 위해 Hutool 라이브러리를 사용합니다. 다음 의존성을 Maven pom.xml 파일에 추가합니다.


<!-- OkHttp 의존성 -->
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>
<!-- Hutool 의존성 -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>
    

2.2. Java 코드 작성

API Key와 Secret Key를 사용하여 인증 토큰을 발급받고, 신분증 이미지 파일을 Base64로 인코딩하여 API에 요청합니다. 추출된 정보는 JSON 형식으로 반환됩니다.


import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject; // Hutool의 JSON 기능 사용 시 대체 가능
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test; // JUnit 5 사용 예시

public class BaiduIdCardOcr {

    // 발급받은 API Key와 Secret Key로 대체해야 합니다.
    private static final String API_KEY = "YOUR_API_KEY";
    private static final String SECRET_KEY = "YOUR_SECRET_KEY";
    private static final String OAUTH_TOKEN_URL = "https://aip.baidubce.com/oauth/2.0/token";
    private static final String ID_CARD_OCR_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard";

    /**
     * API Key와 Secret Key를 사용하여 접근 토큰(Access Token)을 생성합니다.
     */
    private String getAccessToken() throws IOException {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("grant_type", "client_credentials");
        paramMap.put("client_id", API_KEY);
        paramMap.put("client_secret", SECRET_KEY);

        String responseBody = HttpRequest.post(OAUTH_TOKEN_URL)
                .header("Content-Type", "application/x-www-form-urlencoded")
                .form(paramMap)
                .execute()
                .body();

        // fastjson 또는 Hutool의 JSON 기능을 사용하여 파싱합니다.
        JSONObject jsonResponse = JSONObject.parseObject(responseBody);
        return jsonResponse.getString("access_token");
    }

    /**
     * 지정된 경로의 파일을 Base64로 인코딩합니다.
     * @param filePath 파일 경로
     * @param urlEncode URL 인코딩 필요 여부 (application/x-www-form-urlencoded 사용 시 true)
     * @return Base64 인코딩된 문자열 (파일 헤더 제외)
     * @throws IOException 파일 읽기 오류 시 발생
     */
    private String encodeFileToBase64(String filePath, boolean urlEncode) throws IOException {
        byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));
        String base64Encoded = Base64.getEncoder().encodeToString(fileBytes);
        if (urlEncode) {
            return URLEncoder.encode(base64Encoded, "UTF-8");
        }
        return base64Encoded;
    }

    @Test
    void extractIdCardInfo() throws IOException {
        // 신분증 이미지 파일 경로를 지정합니다.
        String imagePath = "C:/path/to/your/idcard.jpg";

        // API 요청 헤더 설정
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/x-www-form-urlencoded");
        headers.put("Accept", "application/json");

        // API 요청 본문 파라미터 설정
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("id_card_side", "front"); // "front" 또는 "back"
        requestBody.put("image", encodeFileToBase64(imagePath, false));

        // 접근 토큰 발급
        String accessToken = getAccessToken();

        // 신분증 인식 API 호출
        String response = HttpRequest.post(ID_CARD_OCR_URL + "?access_token=" + accessToken)
                .addHeaders(headers)
                .form(requestBody)
                .execute()
                .body();

        // 응답 결과 출력 (Map으로 파싱)
        Map<?, ?> resultMap = JSONObject.parseObject(response, Map.class);
        System.out.println("신분증 인식 결과: " + resultMap);
    }
}
    

태그: java Baidu AI OCR 신분증 인식 API 연동

7월 24일 21:21에 게시됨