react-native-executorch
Version:
An easy way to run AI models in React Native with ExecuTorch
50 lines (49 loc) • 1.64 kB
JavaScript
;
import { useCallback, useEffect, useState } from 'react';
import { OCRController } from '../../controllers/OCRController';
/**
* React hook for managing an OCR instance.
* @category Hooks
* @param OCRProps - Configuration object containing `model` sources and optional `preventLoad` flag.
* @returns Ready to use OCR model.
*/
export const useOCR = ({
model,
preventLoad = false
}) => {
const [isReady, setIsReady] = useState(false);
const [isGenerating, setIsGenerating] = useState(false);
const [downloadProgress, setDownloadProgress] = useState(0);
const [error, setError] = useState(null);
const [runOnFrame, setRunOnFrame] = useState(null);
const [controller] = useState(() => new OCRController({
isReadyCallback: setIsReady,
isGeneratingCallback: setIsGenerating,
errorCallback: setError
}));
useEffect(() => {
setDownloadProgress(0);
setError(null);
if (preventLoad) return;
controller.load(model.detectorSource, model.recognizerSource, model.language, setDownloadProgress).then(() => {
const worklet = controller.runOnFrame;
if (worklet) setRunOnFrame(() => worklet);
});
return () => {
setRunOnFrame(null);
if (controller.isReady) {
controller.delete();
}
};
}, [controller, model.modelName, model.detectorSource, model.recognizerSource, model.language, preventLoad]);
const forward = useCallback(imageSource => controller.forward(imageSource), [controller]);
return {
error,
isReady,
isGenerating,
forward,
downloadProgress,
runOnFrame
};
};
//# sourceMappingURL=useOCR.js.map