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
60 lines (58 loc) • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Camera = void 0;
exports.useTextRecognition = useTextRecognition;
exports.useTranslate = useTranslate;
var _react = _interopRequireWildcard(require("react"));
var _reactNativeVisionCamera = require("react-native-vision-camera");
var _scanText = require("./scanText");
var _reactNativeWorkletsCore = require("react-native-worklets-core");
var _translateText = require("./translateText");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
const Camera = exports.Camera = /*#__PURE__*/(0, _react.forwardRef)(function Camera(props, ref) {
const {
device,
callback,
options,
mode,
...p
} = props;
let plugin;
if (mode === 'translate') {
// eslint-disable-next-line react-hooks/rules-of-hooks
const {
translate
} = useTranslate(options);
plugin = translate;
} else {
// eslint-disable-next-line react-hooks/rules-of-hooks
const {
scanText
} = useTextRecognition(options);
plugin = scanText;
}
const runOnJS = (0, _reactNativeWorkletsCore.useRunOnJS)(data => {
callback(data);
}, [options]);
const frameProcessor = (0, _reactNativeVisionCamera.useFrameProcessor)(frame => {
'worklet';
const data = plugin(frame);
runOnJS(data);
}, []);
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !!device && /*#__PURE__*/_react.default.createElement(_reactNativeVisionCamera.Camera, _extends({
pixelFormat: "yuv",
ref: ref,
frameProcessor: frameProcessor,
device: device
}, p)));
});
function useTextRecognition(options) {
return (0, _react.useMemo)(() => (0, _scanText.createTextRecognitionPlugin)(options), [options]);
}
function useTranslate(options) {
return (0, _react.useMemo)(() => (0, _translateText.createTranslatorPlugin)(options), [options]);
}
//# sourceMappingURL=Camera.js.map