React components and a hook to perform OCR on images and handwriting using Tesseract.js, Groq Vision, or a custom OCR handler.
Demo: https://hoseinhamzei.github.io/react-ocr/
Install from npm:
npm install @hoseinh/react-ocr
# or
yarn add @hoseinh/react-ocrNote: React and ReactDOM are peer dependencies - ensure your project already depends on React.
import React from "react";
import { CanvasInput, ImageInput } from "@hoseinh/react-ocr";
import "@hoseinh/react-ocr/dist/react-ocr.css";
export default function App() {
return (
<div>
<CanvasInput onDetect={(t) => console.log("canvas:", t)} />
<ImageInput onDetect={(t) => console.log("image:", t)} />
</div>
);
}Note: Import the CSS file to use the minimal default styles. You can omit this import if you prefer to style the components yourself.
For custom UI implementation use useOCR hook directly:
import React from "react";
import { useOCR } from "@hoseinh/react-ocr";
import "@hoseinh/react-ocr/dist/react-ocr.css";
export default function CustomOCRComponent() {
const { performOCR, isOCRPending, detectedText, error } = useOCR({
ocrService: "tesseract",
});
const handleFileUpload = async (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
if (file) {
await performOCR(file);
}
};
return (
<div>
<input type="file" accept="image/*" onChange={handleFileUpload} />
{isOCRPending && <p>Processing...</p>}
{error && <p style={{ color: "red" }}>Error: {error.message}</p>}
{detectedText && <p><strong>Result:</strong> {detectedText}</p>}
</div>
);
}- Tesseract.js - on-device browser OCR (default)
- Groq Vision - cloud-based LLM vision
- Custom - provide a
customOCRHandlerto integrate any backend
See detailed examples in docs/ (imageInput.md, canvasInput.md, useOCR.md).
For information about publishing and build artifacts see package.json and vite.config.ts.