Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit ebdb66a

Browse files
#699 Add ML Kit support (Barcode format input)
1 parent 8ec3732 commit ebdb66a

File tree

5 files changed

+46
-22
lines changed

5 files changed

+46
-22
lines changed

demo/app/images/faces.jpg

131 KB
Loading

demo/app/main-page.xml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,8 @@
133133
<Button row="42" col="0" text="send invitation" tap="{{ sendInvitation }}" class="button button-invites"/>
134134
<Button row="42" col="1" text="get invitation" tap="{{ getInvitation }}" class="button button-invites"/>
135135
136-
<Label row="43" colSpan="2" text="ML Kit" class="subtitle"/>
136+
<Label row="43" colSpan="2" text="ML Kit" class="subtitle"/-->
137137

138-
<Button row="44" col="0" text="recognize text" tap="{{ recognizeText }}" class="button button-mlkit"/>
139-
<Button row="44" col="1" text="scan barcodes" tap="{{ scanBarcode }}" class="button button-mlkit"/-->
140138

141139

142140

@@ -148,6 +146,7 @@
148146
row="2"
149147
colSpan="2"
150148
class="barcodescanner"
149+
formats="QR_CODE, EAN_13"
151150
scanResult="onBarcodesScanResult" />
152151

153152
<!--FirebaseMLKitFaceDetection:MLKitFaceDetection
@@ -168,6 +167,10 @@
168167
<!--<Label row="4" col="1" text="If all above 70%, the image is shown here." textWrap="true" visibility="{{ lastMatch ? 'collapsed' : 'visible' }} " />-->
169168
<!--<Image row="4" col="1" src="{{ lastMatch }}" visibility="{{ lastMatch ? 'visible' : 'collapsed' }} " />-->
170169

170+
<Button row="5" col="0" text="recognize text" tap="{{ recognizeText }}" class="button button-mlkit"/>
171+
<Button row="5" col="1" text="scan barcodes" tap="{{ scanBarcode }}" class="button button-mlkit"/>
172+
<Button row="6" col="0" text="detect faces" tap="{{ detectFaces }}" class="button button-mlkit"/>
173+
171174

172175

173176

demo/app/main-view-model.ts

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import { ImageSource } from "tns-core-modules/image-source";
88

99
import * as firebase from "nativescript-plugin-firebase";
1010

11-
import { MLKitScanBarcodesResult } from "nativescript-plugin-firebase/mlkit/barcodescanning";
11+
import { BarcodeFormat, MLKitScanBarcodesResult } from "nativescript-plugin-firebase/mlkit/barcodescanning";
1212
import { MLKitRecognizeTextResult } from "nativescript-plugin-firebase/mlkit/textrecognition";
13+
import { MLKitDetectFacesResult } from "nativescript-plugin-firebase/mlkit/facedetection";
1314

1415
const firebaseWebApi = require("nativescript-plugin-firebase/app");
1516

@@ -406,7 +407,6 @@ export class HelloWorldModel extends Observable {
406407
image: img
407408
}).then(
408409
(result: MLKitRecognizeTextResult) => {
409-
console.log("ML Kit result: " + JSON.stringify(result));
410410
alert({
411411
title: `Result from ${path}:`,
412412
message: JSON.stringify(result.features),
@@ -426,10 +426,10 @@ export class HelloWorldModel extends Observable {
426426
img.fromFile(path)
427427
.then(() => {
428428
firebase.mlkit.barcodescanning.scanBarcodes({
429-
image: img
429+
image: img,
430+
formats: [BarcodeFormat.QR_CODE, BarcodeFormat.EAN_13]
430431
}).then(
431432
(result: MLKitScanBarcodesResult) => {
432-
console.log("ML Kit result: " + JSON.stringify(result));
433433
alert({
434434
title: `Result from ${path}:`,
435435
message: JSON.stringify(result.barcodes),
@@ -443,6 +443,28 @@ export class HelloWorldModel extends Observable {
443443
.catch(err => console.log("Error in scanBarcode: " + err));
444444
}
445445

446+
public detectFaces(): void {
447+
const path = "~/images/faces.jpg";
448+
const img = new ImageSource();
449+
img.fromFile(path)
450+
.then(() => {
451+
firebase.mlkit.facedetection.detectFaces({
452+
image: img
453+
}).then(
454+
(result: MLKitDetectFacesResult) => {
455+
alert({
456+
title: `Result from ${path}:`,
457+
message: JSON.stringify(result.faces),
458+
okButtonText: "OK"
459+
});
460+
}, errorMessage => {
461+
console.log("ML Kit error: " + errorMessage);
462+
}
463+
);
464+
})
465+
.catch(err => console.log("Error in detectFaces: " + err));
466+
}
467+
446468
public doSetAnalyticsUserProperty(): void {
447469
firebase.analytics.setUserProperty({
448470
key: "origin", // note that this needs to be preregistered, see https://support.google.com/firebase/answer/6317519?hl=en&ref_topic=6317489#create-property

src/mlkit/barcodescanning/index.android.ts

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,18 @@ import { BarcodeFormat, MLKitBarcodeScanner as MLKitBarcodeScannerBase } from ".
55

66
declare const com: any;
77

8+
export { BarcodeFormat };
9+
810
export class MLKitBarcodeScanner extends MLKitBarcodeScannerBase {
911

1012
protected createDetector(): any {
11-
return getBarcodeDetector();
13+
let formats: Array<BarcodeFormat>;
14+
if (this.formats) {
15+
formats = [];
16+
const requestedFormats = this.formats.split(",");
17+
requestedFormats.forEach(format => formats.push(BarcodeFormat[format.trim().toUpperCase()]))
18+
}
19+
return getBarcodeDetector(formats);
1220
}
1321

1422
protected createSuccessListener(): any {
@@ -43,21 +51,10 @@ export class MLKitBarcodeScanner extends MLKitBarcodeScannerBase {
4351
}
4452

4553
function getBarcodeDetector(formats?: Array<BarcodeFormat>): any {
46-
if (formats) {
47-
const nativeFormats: Array<any> = [];
48-
formats.forEach(format => {
49-
format === BarcodeFormat.AZTEC && nativeFormats.push(com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode.FORMAT_AZTEC);
50-
format === BarcodeFormat.CODABAR && nativeFormats.push(com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode.FORMAT_CODABAR);
51-
format === BarcodeFormat.QR_CODE && nativeFormats.push(com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode.FORMAT_QR_CODE);
52-
// TODO other formats..
53-
});
54-
55-
console.log("formats: " + JSON.stringify(formats));
56-
console.log("nativeFormats: " + JSON.stringify(nativeFormats));
57-
54+
if (formats && formats.length > 0) {
5855
const firebaseVisionBarcodeDetectorOptions =
5956
new com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions.Builder()
60-
.setBarcodeFormats(nativeFormats)
57+
.setBarcodeFormats(formats[0], formats) // the seconds argument is a varargs.. let's make it easy and just do it like this
6158
.build();
6259
return com.google.firebase.ml.vision.FirebaseVision.getInstance().getVisionBarcodeDetector(firebaseVisionBarcodeDetectorOptions);
6360
} else {
@@ -76,7 +73,7 @@ export function scanBarcodes(options: MLKitScanBarcodesOptions): Promise<MLKitSc
7673
barcodes: []
7774
};
7875

79-
// see https://github.com/firebase/quickstart-android/blob/0f4c86877fc5f771cac95797dffa8bd026dd9dc7/mlkit/app/src/main/java/com/google/firebase/samples/apps/mlkit/textrecognition/TextRecognitionProcessor.java#L62
76+
// There are more details available, see https://github.com/firebase/quickstart-android/blob/0f4c86877fc5f771cac95797dffa8bd026dd9dc7/mlkit/app/src/main/java/com/google/firebase/samples/apps/mlkit/textrecognition/TextRecognitionProcessor.java#L62
8077
for (let i = 0; i < barcodes.size(); i++) {
8178
const barcode = barcodes.get(i);
8279
result.barcodes.push({

src/mlkit/barcodescanning/index.ios.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { MLKitCameraView as MLKitBarcodeScannerBase } from "../mlkit-cameraview"
44
import { MLKitScanBarcodesOptions, MLKitScanBarcodesResult } from "./index";
55
import { MLKitOptions } from "../index";
66

7+
export { BarcodeFormat };
8+
79
export class MLKitBarcodeScanner extends MLKitBarcodeScannerBase {
810

911
protected createDetector(): any {

0 commit comments

Comments
 (0)