Node.js에서 LINE BRAIN OCR API 사용 #linebrain #ood2019

요 전날 LINE DEVDAY에서 beta 공개되어 있던 LINE BRAIN COR API를 Node.js에서 이용해 보겠습니다.

Node.js에서 이미지를 multipart / form-data로 POST하는 메모 (axios 사용)

LINE BRAIN & LINE BRAIN COR API



LINE BRAIN이란 企業がチャットボット・OCR・音声認識・音声合成・画像認識などの AI技術をより簡単に利用できる、各種サービスの総称 같습니다. AI가 점점 민주화되어 기쁩니다.

공식 사이트에서 인용 htps //w w.ぃねb 라이안. 아이/

LINE BRAIN OCR API는 LINE BRAIN의 서비스군 중 하나라는 이미지군요.




더러운 글자도 읽어 줬어.



실제로 DEMO 페이지에서 시험해 보면, 필기의 상당히 더러운 글자라도 제대로 읽어 주었습니다.
GCP등에서도 OCR은 있다고 생각합니다만, 그 근처의 정밀도의 차이는 나는 비교하지 않기 때문에 잘 모릅니다.


instagram htps //w w. Ins g et al. 이 m/p/B57Yq7 jj2/

OCR API는 여전히 베타 버전



2019/12/12 시점에서는 아직 베타판으로, 베타판의 엔드포인트는
https://ocr-devday19.linebrain.ai/v1/

되어 있습니다. URL에서 알 수 있듯이 LINE DEVDAY 2019에 참가한 사람에게만 공개된 듯한 분위기입니다. 이용 요금 등도 현시점에서는 모릅니다. (이미 어딘가에서 공개되었을 수도 있습니다)

문서 화면은 이런 분위기입니다. 문서의 URL은 비공개일지도 모르기 때문에 올려놓지 말아 둡니다.



Detection 및 Recognition



크게 나누면 이 두 가지 기능이 되어 있는 것 같고,
  • Detection - 문자 영역의 검출만을 실시합니다.
  • Recognition - 문자 인식만 수행합니다. 혹은, 문자 영역의 검출과 인식을 순서에 실시합니다.

  • CURL로 시도 (로컬 파일)



    Recognition을 사용해 보았습니다.
    다음과 같은 명령으로 결과가 반환됩니다.

    여기서 쓰고 있는 서비스 ID의 PMqTDgBsucfsyvi7pJEsbIxMIUeNQWDg 는 문서에 써 있는 샘플 예이므로, 이대로 써도 사용할 수 없습니다. LINE DEV DAY 2019로 등록한 사람은 메일로 서비스 ID가 도착하고 있다고 생각합니다.
    curl -X POST https://ocr-devday19.linebrain.ai/v1/recognition \
                        -H 'X-ClovaOCR-Service-ID: PMqTDgBsucfsyvi7pJEsbIxMIUeNQWDg' \
                        -H "Content-Type: multipart/form-data" \
                        -F "image=@./image.png" \
                        -F "entrance=detection" \
                        -F "language=jp" \
                        -F "segments=false" \
    

    CURL에서 시도했지만 이미지 URL 지정이 잘못되었습니다.



    문서에 있는 샘플 요청을 보면 이런 느낌으로 이미지 URL 지정에서도 사용할 수 있을 것 같았습니다.
    curl -X POST https://ocr-devday19.linebrain.ai/v1/recognition \
         -H 'X-ClovaOCR-Service-ID: PMqTDgBsucfsyvi7pJEsbIxMIUeNQWDg' \
         -H "Content-Type: application/json" \
         -d '{
               "imageURL":["https://xxxx/images/ocr_sample.jpg"],
               "entrance":"detection",
               "scaling":false,
               "segments":false
             }'
    

    단, Gyazo에 올린 이미지 URL을 지정하면
    errorConnection reset by peer
    

    등의 에러가 나오거나, 에러가 나왔을 때의 메세지로부터 어디에 문제가 있는지의 판단이 붙기 어려운 사촌이 현시점이었습니다.

    급급의 원인은 불명하고, 시간이 있으면 재조사합니다만, 우선 로컬 파일을 던져 봅니다.

    Node.js에서 다루기



    그래서 실제 응용 프로그램에 내장하기 쉽도록 Node.js에서 다루어 보겠습니다.

    환경과 준비 등



    여기에서 쓴 내용을 그대로 사용할 수 있습니다.

    Node.js에서 이미지를 multipart / form-data로 POST하는 메모 (axios 사용)

    axios를 준비합시다.

    코드



    post.js
    'use strict';
    
    const fs = require('fs');
    const axios = require('axios');
    const FormData = require('form-data');
    
    const OCR_SERVICE_URL = `https://ocr-devday19.linebrain.ai/v1/recognition`;
    const OCR_SERVICE_ID = `PMqTDgBsucfsyvi7pJEsbIxMIUeNQWDg`; //サービスID
    const IMAGE_PATH = `./public/image.png`; // 画像パス
    const file = fs.createReadStream(IMAGE_PATH);
    
    const form = new FormData();
    form.append('image', file);
    form.append('entrance', 'detection');
    
    const config = {
        headers: {
            'X-ClovaOCR-Service-ID': OCR_SERVICE_ID,
            ...form.getHeaders(),
        }
    }
    
    axios.post(OCR_SERVICE_URL, form, config)
        .then(res => console.log(res.data)) //成功時
        .catch(err => console.log(err)); //失敗時
    

    덧붙여서, entrance를 detection으로 하지 않으면 괜찮은 문자가 추출되지 않았습니다.

    실행 결과


    $ node post.js
    {
      words: [
        {
          boundingBox: [Array],
          text: '斎場御獄',
          confidence: 0.6916899085044861,
          lineBreak: false,
          segments: [Array]
        }
      ]
    }
    

    원래 이미지는 여기입니다. 斎場御獄라는 문자가 추출되었습니다.


    instagram htps //w w. Ins g et al. 이 m/p/B57Yq7 jj2/

    소감



    쓰기는 비교적 직관적인 API로 알기 쉬운 생각이 들었습니다.

    타사의 OCR계의 API와 비교해 어떤가, 어딘가의 누군가가 검증해 주면 다행입니다.

    이미지 URL에서 OCR API로 던지고 싶은 문제는 어딘가에서 ...

    좋은 웹페이지 즐겨찾기