본문 바로가기
Extension

서버 없이 이미지에서 텍스트를 추출 tesseract js

by curious week 2025. 3. 24.

Tesseract.js

Tesseract.js는 브라우저에서 돌아가는 순수 JavaScript OCR(광학 문자 인식) 라이브러리입니다.
이미지에서 텍스트를 추출할 수 있으며, 별도의 서버 없이 클라이언트만으로 동작해요.


특징

작동 환경 브라우저 또는 Node.js 모두 지원
언어 지원 영어, 한글 포함 다국어 (학습 파일 필요)
동작 방식 이미지 → WebAssembly → 텍스트 추출
의존성 Web Worker + WASM 파일
설치 방식 npm install tesseract.js 또는 CDN/로컬 로드 가능
오픈소스 무료, MIT 라이선스

기본 사용법 (v6 기준)

import { createWorker } from 'tesseract.js';

const worker = await createWorker();
await worker.reinitialize('eng'); // 언어 초기화
const { data } = await worker.recognize(imageData); // base64 or 이미지 URL
console.log(data.text);
await worker.terminate();

주요 메서드

createWorker() 새로운 워커(작업자) 생성
reinitialize(lang) 사용할 언어 설정 (v6부터 통합됨)
recognize(image) 이미지에서 텍스트 추출
terminate() 워커 종료 (리소스 정리)

이미지 형식

  • data:image/png;base64,...
  • URL (public image)
  • Blob 또는 File

지원 언어 예시

영어 eng
한글 kor
일본어 jpn
중국어 chi_sim
다국어 혼합 'eng+kor' 등 조합 가능

주의할 점

📛 Web Worker 제한 크롬 확장 popup, background 등 제한 있음 content script 또는 fetch API 대체
🧩 WASM 경로 문제 경로 명시 안 하면 작동 실패 corePath, workerPath 설정 필요
📉 인식률 문제 흐릿하거나 배경색 강할 경우 실패 해상도/명도 개선 필요

언제 사용하면 좋을까?

서버 없이 OCR 하고 싶을 때 ✅ 매우 적합 로컬에서 처리 가능
확장 프로그램에서 직접 인식 ⚠️ 조건부 manifest/CSP/WASM 이슈 고려 필요
대규모 OCR 처리 ❌ 부적합 서버 OCR API 추천 (Google Vision 등)

오류 및 해결 코드

// 오류
const worker = await createWorker();
await worker.loadLanguage('eng');
await worker.initialize('eng');
// 해결
const worker = await createWorker();
await worker.reinitialize('eng');

//또는 (확실하지는 않지만 일단 타입오류는 발생하지 않음)
const worker = await createWorker('eng');

// 오류
importScripts("https://cdn.jsdelivr.net/npm/tesseract.js@v6.0.0/dist/worker.min.js");

크롬 확장 보안(CSP)에 의해 Manifest V3에서는 **service_worker (background script)**나 **importScripts()**를 사용해서
외부 CDN 스크립트를 불러오는 것이 금지

크롬 확장에서 사용 불가해서 일단은 Google Cloud Vision API를 사용해야겠다.