Tesseract OCR는 Tesseract 4의 고급 신경망(LSTM) 기반 광학 문자 인식 엔진을 통합한 Flutter/Dart 패키지입니다. 100개 이상의 언어에서 정확한 텍스트 추출이 가능하며, 완전한 UTF-8 지원을 제공합니다. 줄 단위 인식을 위해 설계되어 Android 및 iOS 플랫폼에서 강력한 문서 스캔과 텍스트 탐지가 필요한 모바일 애플리케이션에 적합합니다.
사용 사례
문서 스캔
이미지에서 텍스트 추출
다국어 텍스트 인식
모바일 OCR 애플리케이션
이미지 기반 데이터 입력
주요 기능
신경망(LSTM) 기반 엔진
100개 이상의 언어를 지원
유니코드 (UTF-8) 텍스트 출력
안드로이드 및 iOS 호환성
라인 인식의 높은 정확도
적합한 대상
OCR 기능을 구축하는 개발자
다국어 텍스트 추출이 필요한 앱
모바일 문서 처리 도구
이미지에서 텍스트로 변환하는 프로젝트
고려 사항
네이티브 플랫폼 설정이 필요합니다
대규모 모델 파일은 앱 크기를 증가시킬 수 있습니다
성능은 이미지 품질에 따라 달라집니다
정적 이미지 입력에 제한됨
모델 업데이트는 수동 통합이 필요합니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
Tesseract OCR for Flutter
A Flutter plugin that provides Optical Character Recognition (OCR) capabilities using Tesseract (v4.x) and Apple Vision (iOS).
iOS:SwiftyTesseract (with support for v4.0.1 via custom CocoaPods) and Apple's Vision framework.
Sponsor
Thanks to ZikZak AI for sponsoring this project!
ZikZak AI is an AI-Powered Price Comparison app that you scan barcodes, and discover amazing savings instantly. Your personal shopping assistant that never sleeps.
Features
Perform OCR on images to extract text.
Support for multiple OCR engines: Tesseract (iOS/Android), Apple Vision (iOS).
Includes a custom CocoaPods setup to enable using SwiftyTesseract 4.0.1 on iOS.
Getting Started
1. Add Dependency
Add tesseract_ocr to your pubspec.yaml:
dependencies:tesseract_ocr:^<latest_version># Replace <latest_version> with the current version
Then run flutter pub get.
2. Add Trained Data (Required for Tesseract Engine)
For the Tesseract engine to work, you need to include language trained data files (.traineddata) and a configuration file (tessdata_config.json) in your Flutter app's assets.
Create assets and assets/tessdata folders in the root of your Flutter project.
Download Trained Data: Get the necessary .traineddata files for the languages you need from the Tesseract tessdata, tessdata_best, or tessdata_fast repositories. Place them inside your assets/tessdata folder. For English, you'll typically need eng.traineddata.
Create tessdata_config.json: Create a file named tessdata_config.json directly inside your assets folder (not in assets/tessdata). This file should list all the .traineddata files present in your assets/tessdata folder.
Example assets/tessdata_config.json:
{"files":["eng.traineddata","fas.traineddata","urd.traineddata"// Add all other .traineddata filenames here]}
Declare Assets in pubspec.yaml: Add your assets and assets/tessdata directories to the assets section of your pubspec.yaml:
The plugin will automatically copy these trained data files to the application's documents directory on the first run if they are not already present.
Note on Asset Loading Issues: If you encounter asset loading errors or "Data path must not be null!" errors, ensure your setup follows these exact requirements:
The tessdata files are not properly loaded from assets
The tessdata_config.json file is missing or incorrectly formatted
Asset paths in pubspec.yaml are not correctly configured
Solution: Follow the exact directory structure and configuration shown above.
"Unable to load asset" Error
This happens when Flutter cannot find the specified asset files.
Solution:
Verify file names match exactly between tessdata_config.json and actual files
Ensure proper asset declarations in pubspec.yaml
Try running flutter clean and flutter pub get
Path Duplication Issues (M1 Macs)
Some users on M1 Macs may see paths like assets/tessdata/assets/tessdata/file.traineddata.
Solution: The plugin automatically handles this, but ensure you're using the latest version.
iOS Specific Setup (SwiftyTesseract 4.0.1 via Custom CocoaPods)
SwiftyTesseract 4.0.x uses Swift Package Manager and removed CocoaPods support. To allow this plugin to use SwiftyTesseract 4.0.1 via CocoaPods, a custom setup is provided.
Important: This requires manual steps in your iOS project.
Download libtesseract.xcframework: SwiftyTesseract 4.0.1 depends on libtesseract version 0.2.0, which is also not available on CocoaPods. You need to download the pre-built binary framework. Get libtesseract.xcframework.zip for version 0.2.0 from the libtesseract GitHub Releases page.
Extract and Place libtesseract.xcframework: Unzip the downloaded file. Place the resulting libtesseract.xcframework folder directly into your Flutter app's ios directory (the same directory where your main Podfile is located).
Your app's ios directory structure should look like this:
your_flutter_app/ios/
├── Runner.xcodeproj
├── Runner.xcworkspace
├── Podfile <-- Your main Podfile
├── libtesseract.xcframework <-- Place the extracted folder here
└── ... (other iOS files)
Configure Your App's Podfile: In your Flutter app's ios/Podfile, you need to reference the custom podspecs provided within the tesseract_ocr plugin using the :path option.
Locate your target 'Runner' block and add the following lines:
# In your main Flutter app's Podfile (e.g., your_flutter_app/ios/Podfile)
# ... other Podfile content ...
target 'Runner' do
use_frameworks!
use_modular_headers!
# This line should already be here if you added the plugin via pubspec.yaml
pod 'tesseract_ocr', :path => '../.symlinks/plugins/tesseract_ocr/'
# Add the custom SwiftyTesseract401 and libtesseract pods
# These paths are relative from YOUR app's ios directory to the plugin's ios directory
# Adjust the '../../.symlinks/plugins/tesseract_ocr/ios' path if necessary
pod 'SwiftyTesseract401', :path => '../../.symlinks/plugins/tesseract_ocr/ios'
pod 'libtesseract', :path => '../../.symlinks/plugins/tesseract_ocr/ios'
# flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) # Keep this line
end
# ... other Podfile content (e.g., post_install hook) ...
Note: The :path value ../../.symlinks/plugins/tesseract_ocr/ios is the standard path from your app's ios directory to a plugin's ios directory when using Flutter. If your project structure is different, you may need to adjust this path.
Install Pods: Navigate to your ios directory in the terminal and run pod install:
cd your_flutter_app/ios
pod install
Android SDK Support
The plugin is configured to compile against the latest Android SDK (API 35) and has a minimum SDK version of 16, providing broad compatibility.
To perform OCR, use the TesseractOcr.extractText method. You can pass an optional OCRConfig object to specify the engine and other options.
Future<void> _performOcr(String imagePath) async {
try {
// Default usage (uses OCREngine.defaultEngine, language 'eng')// String extractedText = await TesseractOcr.extractText(imagePath);// Example: Using Tesseract engine with a specific languagefinal tesseractConfig = OCRConfig(
language: 'eng', // Must match a .traineddata file in assets/tessdata
engine: OCREngine.tesseract,
// Optional Tesseract options:// options: {// TesseractConfig.preserveInterwordSpaces: '1',// TesseractConfig.pageSegMode: PageSegmentationMode.autoOsd,// TesseractConfig.debugFile: '/path/to/debug.log', // Example option// },
);
String extractedTextTesseract = awaitTesseractOcr.extractText(
imagePath,
config: tesseractConfig,
);
print('Extracted Text (Tesseract): $extractedTextTesseract');
// Example: Using Apple Vision engine (iOS only)final visionConfig = OCRConfig(
engine: OCREngine.vision,
language: 'eng', // Vision engine may also use language hint
);
// Check if running on iOS before using Visionif (Platform.isIOS) {
String extractedTextVision = awaitTesseractOcr.extractText(
imagePath,
config: visionConfig,
);
print('Extracted Text (Vision): $extractedTextVision');
}
} catch (e) {
print('Error performing OCR: $e');
}
}
OCRConfig
The OCRConfig class allows detailed configuration of the OCR process:
language (String): The language code (e.g., 'eng', 'fas'). Required for the Tesseract engine, usually corresponds to the .traineddata file prefix. Can be used as a hint for the Vision engine. Defaults to 'eng'.
engine (OCREngine): The OCR engine to use (OCREngine.vision, OCREngine.tesseract, or OCREngine.defaultEngine). Defaults to OCREngine.defaultEngine (Vision on iOS, Tesseract on Android).
tessDataPath (String?): Internal Use. The plugin automatically handles loading tessdata from assets; you typically don't need to set this.
options (Map<String, dynamic>?): A map of additional configuration options.
For the Tesseract engine, these are passed directly to the Tesseract API. Use keys from TesseractConfig or any valid Tesseract configuration variable name (e.g., 'preserve_interword_spaces', 'tessedit_pageseg_mode'). Values should be strings.
For the Vision engine (iOS), limited options might be supported depending on the native implementation (currently, primarily language hint via language).
See ocr_engine_config.dart for the OCREngine, TesseractConfig, and PageSegmentationMode enums and classes.
Example
Check the example directory for a complete Flutter app demonstrating how to use the plugin, select images, choose the OCR engine, and display results.