@@ -2,6 +2,7 @@ import { ImageSource } from "tns-core-modules/image-source";
22import { MLKitOptions } from "../" ;
33import { MLKitRecognizeTextOptions , MLKitRecognizeTextResult } from "./" ;
44import { MLKitTextRecognition as MLKitTextRecognitionBase } from "./textrecognition-common" ;
5+ import { MLKitRecognizeTextResultFeature } from "./index" ;
56
67export class MLKitTextRecognition extends MLKitTextRecognitionBase {
78 protected createDetector ( ) : any {
@@ -13,46 +14,14 @@ export class MLKitTextRecognition extends MLKitTextRecognitionBase {
1314 return ( features : NSArray < FIRVisionText > , error : NSError ) => {
1415 if ( error !== null ) {
1516 console . log ( error . localizedDescription ) ;
16-
1717 } else if ( features !== null && features . count > 0 ) {
18- const result = < MLKitRecognizeTextResult > {
19- features : [ ]
20- } ;
21-
22- for ( let i = 0 , l = features . count ; i < l ; i ++ ) {
23- const feature : FIRVisionText = features . objectAtIndex ( i ) ;
24- // Note that fetching these details works, but there's currently no added value
25- /*
26- if (feature instanceof FIRVisionTextBlock) {
27- const textBlock = <FIRVisionTextBlock>feature;
28- for (let j = 0, k = textBlock.lines.count; j < k; j++) {
29- const textBlockLine: FIRVisionTextLine = textBlock.lines.objectAtIndex(j);
30- for (let a = 0, m = textBlockLine.elements.count; a < m; a++) {
31- const element: FIRVisionTextElement = textBlockLine.elements.objectAtIndex(a);
32- console.log("FIRVisionTextBlock text: " + element.text);
33- }
34- }
35- }
36- if (feature instanceof FIRVisionTextLine) {
37- for (let a = 0, m = feature.elements.count; a < m; a++) {
38- const element: FIRVisionTextElement = feature.elements.objectAtIndex(a);
39- console.log("FIRVisionTextLine text: " + element.text);
40- }
41- }
42- */
43- result . features . push ( {
44- text : feature . text ,
45- // corners: this.getCorners(<any>feature.cornerPoints)
46- } ) ;
47- }
48-
4918 this . notify ( {
5019 eventName : MLKitTextRecognition . scanResultEvent ,
5120 object : this ,
52- value : result
21+ value : getResult ( features )
5322 } ) ;
5423 }
55- }
24+ } ;
5625 }
5726
5827 protected rotateRecording ( ) : boolean {
@@ -70,6 +39,46 @@ export class MLKitTextRecognition extends MLKitTextRecognitionBase {
7039 */
7140}
7241
42+ function getResult ( features : NSArray < FIRVisionText > ) : MLKitRecognizeTextResult {
43+ const result = < MLKitRecognizeTextResult > {
44+ features : [ ]
45+ } ;
46+
47+ for ( let i = 0 , l = features . count ; i < l ; i ++ ) {
48+ const feature = features . objectAtIndex ( i ) ;
49+ const resultFeature = < MLKitRecognizeTextResultFeature > {
50+ text : feature . text ,
51+ elements : [ ]
52+ } ;
53+
54+ const addLineToResult = ( line : FIRVisionTextLine ) : void => {
55+ for ( let a = 0 , m = line . elements . count ; a < m ; a ++ ) {
56+ const element : FIRVisionTextElement = line . elements . objectAtIndex ( a ) ;
57+ const bounds = element . frame ;
58+ resultFeature . elements . push ( {
59+ text : element . text ,
60+ bounds : bounds ,
61+ } ) ;
62+ }
63+ } ;
64+
65+ if ( feature instanceof FIRVisionTextBlock ) {
66+ const textBlock = < FIRVisionTextBlock > feature ;
67+ for ( let j = 0 , k = textBlock . lines . count ; j < k ; j ++ ) {
68+ addLineToResult ( textBlock . lines . objectAtIndex ( j ) ) ;
69+ }
70+ }
71+
72+ if ( feature instanceof FIRVisionTextLine ) {
73+ addLineToResult ( feature ) ;
74+ }
75+
76+ console . log ( ">>> resulting resultFeature: " + JSON . stringify ( resultFeature ) ) ;
77+ result . features . push ( resultFeature ) ;
78+ }
79+ return result ;
80+ }
81+
7382export function recognizeText ( options : MLKitRecognizeTextOptions ) : Promise < MLKitRecognizeTextResult > {
7483 return new Promise ( ( resolve , reject ) => {
7584 try {
@@ -79,20 +88,8 @@ export function recognizeText(options: MLKitRecognizeTextOptions): Promise<MLKit
7988 textDetector . detectInImageCompletion ( getImage ( options ) , ( features : NSArray < FIRVisionText > , error : NSError ) => {
8089 if ( error !== null ) {
8190 reject ( error . localizedDescription ) ;
82-
8391 } else if ( features !== null ) {
84- const result = < MLKitRecognizeTextResult > {
85- features : [ ]
86- } ;
87-
88- for ( let i = 0 , l = features . count ; i < l ; i ++ ) {
89- const feature : FIRVisionText = features . objectAtIndex ( i ) ;
90- result . features . push ( {
91- text : feature . text ,
92- // corners: <any>feature.cornerPoints
93- } ) ;
94- }
95- resolve ( result ) ;
92+ resolve ( getResult ( features ) ) ;
9693 }
9794 } ) ;
9895 } catch ( ex ) {
0 commit comments