Package Exports
- @zhanziyang/expo-text-extractor
- @zhanziyang/expo-text-extractor/build/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@zhanziyang/expo-text-extractor) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Expo Text Extractor
Fork Notice: This is a fork of pchalupa/expo-text-extractor with added multi-language support for Chinese, Japanese, Korean, and Devanagari scripts.
Expo Text Extractor is a library that enables text recognition (OCR) using Google ML Kit on Android and Apple Vision on iOS.
Platform Compatibility
| Android Device | Android Emulator | iOS Device | iOS Simulator | Web |
|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ❌ |
Supported Languages
The library supports multiple scripts and languages:
| Script | Languages | Android | iOS |
|---|---|---|---|
| Latin | English, Spanish, French, German, Italian, etc. | ✅ | ✅ |
| Chinese | Simplified Chinese, Traditional Chinese | ✅ | ✅ |
| Japanese | Japanese (Hiragana, Katakana, Kanji) | ✅ | ✅ |
| Korean | Korean (Hangul) | ✅ | ✅ |
| Devanagari | Hindi, Sanskrit, Marathi, Nepali, etc. | ✅ | ✅ |
Demo
Installation
To get started, install the library:
npx expo install @zhanziyang/expo-text-extractorOr with npm/yarn:
npm install @zhanziyang/expo-text-extractor
# or
yarn add @zhanziyang/expo-text-extractorEnsure your project is running Expo SDK 52+.
API Documentation
Check the example app for more details.
isSupported
A boolean value indicating whether the current device supports text extraction.
import { isSupported } from '@zhanziyang/expo-text-extractor';
if (isSupported) {
console.log('Text extraction is supported on this device.');
}extractTextFromImage(uri, options?)
Extracts text from an image and returns the recognized text as an array.
import { extractTextFromImage, TextRecognitionScript } from '@zhanziyang/expo-text-extractor';
// Basic usage (Latin script by default)
const texts = await extractTextFromImage('file:///path/to/image.jpg');
// With a specific script (Android)
const chineseTexts = await extractTextFromImage('file:///path/to/image.jpg', {
script: TextRecognitionScript.CHINESE,
});
// With specific languages (iOS)
const japaneseTexts = await extractTextFromImage('file:///path/to/image.jpg', {
languages: ['ja-JP', 'en-US'],
});Parameters
| Parameter | Type | Description |
|---|---|---|
uri |
string |
The URI of the image to extract text from. |
options |
RecognitionOptions |
Optional. Recognition options (see below). |
Recognition Options
| Property | Type | Platform | Default | Description |
|---|---|---|---|---|
script |
TextRecognitionScript |
Android | LATIN |
The script type to use for recognition. |
languages |
string[] |
iOS | - | Array of BCP-47 language codes (e.g., 'en-US', 'zh-Hans', 'ja-JP'). |
automaticallyDetectsLanguage |
boolean |
iOS 16+ | false |
Automatically detect language without specifying languages. |
usesLanguageCorrection |
boolean |
iOS | true |
Apply language correction to improve recognition accuracy. |
customWords |
string[] |
iOS | - | Custom words (proper nouns, technical terms) to help with recognition. |
minimumTextHeight |
number |
iOS | ~0.03 | Minimum text height as fraction of image height (0-1). Lower values detect smaller text. |
recognitionLevel |
RecognitionLevel |
iOS | ACCURATE |
Recognition level: ACCURATE (slower, better) or FAST (faster, less accurate). |
TextRecognitionScript Enum (Android)
| Value | Description |
|---|---|
LATIN |
Latin script - English, Spanish, French, German, Italian, etc. |
CHINESE |
Chinese script - Simplified and Traditional Chinese |
DEVANAGARI |
Devanagari script - Hindi, Sanskrit, Marathi, Nepali, etc. |
JAPANESE |
Japanese script - Hiragana, Katakana, Kanji |
KOREAN |
Korean script - Hangul |
RecognitionLevel Enum (iOS)
| Value | Description |
|---|---|
ACCURATE |
Slower but more accurate recognition (default). |
FAST |
Faster but less accurate recognition. |
getSupportedLanguages()
Returns the list of supported languages on the current platform.
import { getSupportedLanguages } from '@zhanziyang/expo-text-extractor';
const languages = await getSupportedLanguages();
console.log(languages);
// iOS: ['en-US', 'fr-FR', 'de-DE', 'zh-Hans', 'zh-Hant', 'ja-JP', 'ko-KR', ...]
// Android: ['latin', 'chinese', 'devanagari', 'japanese', 'korean']Platform-Specific Notes
Android (ML Kit)
- Each script requires a separate ML Kit model that is downloaded on-demand by Google Play Services.
- The first recognition request for a new script may be slower as the model downloads.
- All script models are included by default. If you want to reduce app size, you can create a custom build configuration.
iOS (Vision)
- The Vision framework automatically detects the script in most cases.
- Use the
languagesoption for best results when you know the expected language(s). - Call
getSupportedLanguages()to get the full list of available languages for the device. - Language support may vary by iOS version. Korean support was added in iOS 16.
Examples
Recognizing Chinese Text
import { extractTextFromImage, TextRecognitionScript } from '@zhanziyang/expo-text-extractor';
const recognizeChineseText = async (imageUri: string) => {
const texts = await extractTextFromImage(imageUri, {
script: TextRecognitionScript.CHINESE,
// On iOS, you can also specify:
// languages: ['zh-Hans', 'zh-Hant'],
});
return texts.join('\n');
};Recognizing Japanese Text
import { extractTextFromImage, TextRecognitionScript } from '@zhanziyang/expo-text-extractor';
const recognizeJapaneseText = async (imageUri: string) => {
const texts = await extractTextFromImage(imageUri, {
script: TextRecognitionScript.JAPANESE,
// On iOS:
// languages: ['ja-JP'],
});
return texts.join('\n');
};Recognizing Korean Text
import { extractTextFromImage, TextRecognitionScript } from '@zhanziyang/expo-text-extractor';
const recognizeKoreanText = async (imageUri: string) => {
const texts = await extractTextFromImage(imageUri, {
script: TextRecognitionScript.KOREAN,
// On iOS:
// languages: ['ko-KR'],
});
return texts.join('\n');
};Multi-language Recognition (iOS)
On iOS, you can specify multiple preferred languages:
import { extractTextFromImage } from '@zhanziyang/expo-text-extractor';
const recognizeMultiLanguage = async (imageUri: string) => {
const texts = await extractTextFromImage(imageUri, {
// Recognize Japanese with English as fallback
languages: ['ja-JP', 'en-US'],
});
return texts.join('\n');
};Advanced iOS Options
Use all available iOS Vision options for fine-tuned recognition:
import { extractTextFromImage, RecognitionLevel } from '@zhanziyang/expo-text-extractor';
const advancedRecognition = async (imageUri: string) => {
const texts = await extractTextFromImage(imageUri, {
// Specify preferred languages
languages: ['en-US'],
// Or let iOS auto-detect (iOS 16+)
automaticallyDetectsLanguage: true,
// Enable language correction for better accuracy
usesLanguageCorrection: true,
// Add custom words for better recognition of proper nouns
customWords: ['iPhone', 'MacBook', 'AirPods', 'WWDC'],
// Ignore very small text (5% of image height)
minimumTextHeight: 0.05,
// Use accurate mode (default) or fast mode
recognitionLevel: RecognitionLevel.ACCURATE,
});
return texts.join('\n');
};Fast Recognition Mode (iOS)
For real-time processing or when speed is critical:
import { extractTextFromImage, RecognitionLevel } from '@zhanziyang/expo-text-extractor';
const fastRecognition = async (imageUri: string) => {
const texts = await extractTextFromImage(imageUri, {
recognitionLevel: RecognitionLevel.FAST,
usesLanguageCorrection: false, // Disable for extra speed
});
return texts.join('\n');
};Credits
This project is a fork of expo-text-extractor by pchalupa. Original work © pchalupa.
License
MIT