UNPKG

@bigin/ns-firebase

Version:
117 lines (116 loc) 3.44 kB
import { ImageSource } from '@nativescript/core'; import { MLKitTextRecognition as MLKitTextRecognitionBase } from './textrecognition-common'; export class MLKitTextRecognition extends MLKitTextRecognitionBase { createDetector() { const firVision = FIRVision.vision(); return firVision.onDeviceTextRecognizer(); } createSuccessListener() { return (visionText, error) => { if (error !== null) { console.log(error.localizedDescription); } else if (visionText !== null) { this.notify({ eventName: MLKitTextRecognition.scanResultEvent, object: this, value: getResult(visionText), }); } }; } rotateRecording() { return true; } } function getResult(visionText) { if (visionText === null) { return {}; } const result = { text: visionText.text, blocks: [], ios: visionText, }; for (let i = 0, l = visionText.blocks.count; i < l; i++) { const feature = visionText.blocks.objectAtIndex(i); const resultFeature = { text: feature.text, confidence: feature.confidence, bounds: feature.frame, lines: [], }; const addLineToResult = (line) => { const resultLine = { text: feature.text, confidence: line.confidence, bounds: line.frame, elements: [], }; for (let a = 0, m = line.elements.count; a < m; a++) { const element = line.elements.objectAtIndex(a); resultLine.elements.push({ text: element.text, bounds: element.frame, }); } resultFeature.lines.push(resultLine); }; if (feature instanceof FIRVisionTextBlock) { const textBlock = feature; for (let j = 0, k = textBlock.lines.count; j < k; j++) { addLineToResult(textBlock.lines.objectAtIndex(j)); } } if (feature instanceof FIRVisionTextLine) { addLineToResult(feature); } result.blocks.push(resultFeature); } return result; } export function recognizeTextOnDevice(options) { return new Promise((resolve, reject) => { try { const firVision = FIRVision.vision(); const textDetector = firVision.onDeviceTextRecognizer(); textDetector.processImageCompletion(getImage(options), (visionText, error) => { if (error !== null) { reject(error.localizedDescription); } else { resolve(getResult(visionText)); } }); } catch (ex) { console.log('Error in firebase.mlkit.recognizeTextOnDevice: ' + ex); reject(ex); } }); } export function recognizeTextCloud(options) { return new Promise((resolve, reject) => { try { const fIRVisionCloudDetectorOptions = FIRVisionCloudTextRecognizerOptions.new(); fIRVisionCloudDetectorOptions.modelType = 0; const firVision = FIRVision.vision(); const textDetector = firVision.cloudTextRecognizerWithOptions(fIRVisionCloudDetectorOptions); textDetector.processImageCompletion(getImage(options), (visionText, error) => { console.log('>>> recognizeTextCloud error? ' + error + ', visionText? ' + visionText); if (error !== null) { reject(error.localizedDescription); } else if (visionText !== null) { resolve(getResult(visionText)); } else { reject("Unknown error :'("); } }); } catch (ex) { console.log('Error in firebase.mlkit.recognizeTextCloud: ' + ex); reject(ex); } }); } function getImage(options) { const image = options.image instanceof ImageSource ? options.image.ios : options.image.imageSource.ios; return FIRVisionImage.alloc().initWithImage(image); } //# sourceMappingURL=index.ios.js.map