react-native-vision-camera-ocr-plus
Version:
React Native Vision Camera plugin for on-device text recognition (OCR) and translation using ML Kit. Maintained fork of react-native-vision-camera-text-recognition
250 lines (185 loc) โข 7.28 kB
Markdown
# ๐ท react-native-vision-camera-ocr-plus
[](https://github.com/jamenamcinteer/react-native-vision-camera-ocr-plus/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/react-native-vision-camera-ocr-plus)
A **React Native Vision Camera** frame processor for **on-device text recognition (OCR)** and **translation** using **ML Kit**.
โจ Actively maintained fork of [`react-native-vision-camera-text-recognition`](https://www.npmjs.com/package/react-native-vision-camera-text-recognition), with modern improvements, bug fixes, and support for the latest Vision Camera and React Native versions.
## ๐ Why Use This Fork?
The original packages are **no longer actively maintained**.
This fork provides:
- โ
Ongoing maintenance and compatibility with **React Native 0.76+** and **Vision Camera v4+**
- ๐ง **Translation support** (not just OCR) powered by ML Kit
- ๐ **Improved stability and error handling**
- ๐ **Faster processing** and frame optimization
- ๐ฆ **TypeScript definitions** included
- ๐งฉ Consistent API that works seamlessly with modern React Native projects
## ๐ Features
- ๐งฉ Simple drop-in API
- โก Fast, accurate on-device OCR
- ๐ฑ Works on **Android** and **iOS**
- ๐ Built-in translation via ML Kit
- ๐ธ Recognize text from live camera or static photos
- ๐ช Written in **Kotlin** and **Swift**
- ๐ง Compatible with `react-native-vision-camera` and `react-native-worklets-core`
- ๐ฅ Compatible with Firebase
## ๐ป Installation
> **Peer dependencies:**
> You must have `react-native-vision-camera` and `react-native-worklets-core` installed.
```bash
npm install react-native-vision-camera-ocr-plus
# or
yarn add react-native-vision-camera-ocr-plus
```
### ๐ฅ Firebase Compatibility
If you have Firebase in your project, you will need to set your iOS Deployment Target to at least 16.0.
## ๐ Migration
| Previous Package | Replacement | Notes |
|------------------|-------------|-------|
| `react-native-vision-camera-text-recognition` | โ
`react-native-vision-camera-ocr-plus` | Drop-in replacement with fixes and updates |
| `vision-camera-ocr` | โ
`react-native-vision-camera-ocr-plus` | Actively maintained alternative |
## ๐ก Usage
๐ See the [example app](https://github.com/jamenamcinteer/react-native-vision-camera-ocr-plus/tree/main/example) for a working demo.
### ๐ Live Text Recognition
```jsx
import React, { useState } from 'react';
import { StyleSheet } from 'react-native';
import { useCameraDevice } from 'react-native-vision-camera';
import { Camera } from 'react-native-vision-camera-ocr-plus';
export default function App() {
const [data, setData] = useState(null);
const device = useCameraDevice('back');
return (
<>
{!!device && (
<Camera
style={StyleSheet.absoluteFill}
device={device}
isActive
mode="recognize"
options={{ language: 'latin' }}
callback={(result) => setData(result)}
/>
)}
</>
);
}
```
### ๐ Translate Text in Real Time
```jsx
import React, { useState } from 'react';
import { StyleSheet } from 'react-native';
import { useCameraDevice } from 'react-native-vision-camera';
import { Camera } from 'react-native-vision-camera-ocr-plus';
export default function App() {
const [data, setData] = useState(null);
const device = useCameraDevice('back');
return (
<>
{!!device && (
<Camera
style={StyleSheet.absoluteFill}
device={device}
isActive
mode="translate"
options={{ from: 'en', to: 'de' }}
callback={(result) => setData(result)}
/>
)}
</>
);
}
```
### โ๏ธ Using a Frame Processor
```jsx
import React from 'react';
import { StyleSheet } from 'react-native';
import { Camera, useCameraDevice, useFrameProcessor } from 'react-native-vision-camera';
import { useTextRecognition } from 'react-native-vision-camera-ocr-plus';
export default function App() {
const device = useCameraDevice('back');
const { scanText } = useTextRecognition({ language: 'latin' });
const frameProcessor = useFrameProcessor((frame) => {
'worklet';
const data = scanText(frame);
console.log('Detected text:', data);
}, []);
return (
<>
{!!device && (
<Camera
style={StyleSheet.absoluteFill}
device={device}
isActive
frameProcessor={frameProcessor}
mode="recognize"
/>
)}
</>
);
}
```
## โ๏ธ Options
| Option | Type | Values | Default |
|:-------|:-----|:--------|:---------|
| `language` | `string` | `latin`, `chinese`, `devanagari`, `japanese`, `korean` | `latin` |
| `mode` | `string` | `recognize`, `translate` | `recognize` |
| `from`, `to` | `string` | See [Supported Languages](#-supported-languages) | `en`, `de` |
## ๐ผ Recognize Text from a Photo
```js
import { PhotoRecognizer } from 'react-native-vision-camera-ocr-plus';
const result = await PhotoRecognizer({
uri: asset.uri,
orientation: 'portrait',
});
console.log(result);
```
> โ ๏ธ **Note (iOS only):**
> The `orientation` option is available only on iOS and is recommended when using photos captured via the camera.
| Property | Type | Values | Required | Default | Platform |
|:----------|:------|:--------|:----------|:----------|:-----------|
| `uri` | `string` | โ | โ
Yes | โ | Android, iOS |
| `orientation` | `string` | `portrait`, `portraitUpsideDown`, `landscapeLeft`, `landscapeRight` | โ No | `portrait` | iOS only |
## ๐งน Remove Unused Translation Models
```js
import { RemoveLanguageModel } from 'react-native-vision-camera-ocr-plus';
await RemoveLanguageModel('en');
```
## ๐ Supported Languages
| Language | Code | Flag |
|:----------|:------|:------|
| Afrikaans | `af` | ๐ฟ๐ฆ |
| Arabic | `ar` | ๐ธ๐ฆ |
| Bengali | `bn` | ๐ง๐ฉ |
| Chinese | `zh` | ๐จ๐ณ |
| English | `en` | ๐บ๐ธ๐ฌ๐ง |
| French | `fr` | ๐ซ๐ท |
| German | `de` | ๐ฉ๐ช |
| Hindi | `hi` | ๐ฎ๐ณ |
| Japanese | `ja` | ๐ฏ๐ต |
| Korean | `ko` | ๐ฐ๐ท |
| Portuguese | `pt` | ๐ต๐น |
| Russian | `ru` | ๐ท๐บ |
| Spanish | `es` | ๐ช๐ธ |
| ...and [many more](https://github.com/jamenamcinteer/react-native-vision-camera-ocr-plus/blob/next-release/src/types.ts). |
## ๐ง Contributing
Contributions, feature requests, and bug reports are always welcome!
Please open an [issue](https://github.com/jamenamcinteer/react-native-vision-camera-ocr-plus/issues) or [pull request](https://github.com/jamenamcinteer/react-native-vision-camera-ocr-plus/pulls).
## โ Support the Project
If this library helps you build awesome apps, consider supporting future maintenance and development ๐
- [๐ Sponsor on GitHub](https://github.com/sponsors/jamenamcinteer)
Your support helps keep the package updated and open source โค๏ธ
## ๐ License
MIT ยฉ [Jamena McInteer](https://github.com/jamenamcinteer)