@nativescript/mlkit-core
February 22, 2023 ยท View on GitHub
A plugin that provides a UI component to access the different functionalities of Google's ML Kit SDK.
Contents
Installation
npm install @nativescript/mlkit-core
Use @nativescript/mlkit-core
The usage of @nativescript/mlkit-core has the following flow:
-
Registering and adding MLKitView to your markup.
-
Setting the
detectionTypeand listening to thedetectionevent.
To access all the vision APIs at once, set the detectionType property to 'all' and identify them in the detection event's handler.
To access a specific API, Barcode scanning for example, set the detectionType property to the API name ('barcode' for Barcode scanning), AND import that API's NativeScript plugin(@nativescript/mlkit-barcode-scanning).
- Check if ML Kit is supported
To verify if ML Kit is supported on the device, call the static
isAvailable()method on MLKitView class.
if(MLKitView.isAvailable()){
}
- Request for permission to access the device camera by calling
requestCameraPermission():
mlKitView.requestCameraPermission().then(()=>{
})
The following are examples of registering and using MLKitView in the different JS flavors.
Core
-
Register MLKitView by adding
xmlns:ui="@nativescript/mlkit-core"to the Page element. -
Use the
uiprefix to accessMLKitViewfrom the plugin.
<ui:MLKitView
cameraPosition="back"
detectionType="all"
detection="onDetection"
/>
Angular
- In Angular, register the
MLKitViewby addingMLKitModuleto theNgModuleof the component where you want to useMLKitView.
import { MLKitModule } from '@nativescript/mlkit-core/angular';
@NgModule({
imports: [
MLKitModule
],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
- Use
MLKitViewin markup.
<MLKitView
cameraPosition="back"
detectionType="all"
(detection)="onDetection($event)"
></MLKitView>
Vue
- To use MLKitView, register it in the
app.tsby passing it to theusemethod of the app instance.
import { createApp } from 'nativescript-vue'
import MLKit from '@nativescript/mlkit-core/vue'
import Home from './components/Home.vue';
const app = createApp(Home)
app.use(MLKit)
- Use
MLKitViewin markup.
<MLKitView
cameraPosition="back"
detectionType="all"
@detection="onDetection"
/>
Vision APIs optional modules
Important: Detection works only for optional modules installed
Barcode Scanning
npm i @nativescript/mlkit-barcode-scanning
import { DetectionType, DetectionEvent } from '@nativescript/mlkit-core';
import { BarcodeResult } from '@nativescript/mlkit-barcode-scanning';
onDetection(event: DetectionEvent){
if(event.type === DetectionType.Barcode){
const barcode: BarcodeResult[] = event.data;
}
}
For more details, see @nativescript/mlkit-barcode-scanning
Face Detection
npm install @nativescript/mlkit-face-detection
import { DetectionType, DetectionEvent } from '@nativescript/mlkit-core';
import { FaceResult } from '@nativescript/mlkit-face-detection';
onDetection(event: DetectionEvent){
if(event.type === DetectionType.Face){
const faces: FaceResult[] = event.data;
}
}
For more details, see @nativescript/mlkit-face-detection
Image Labeling
npm install @nativescript/mlkit-image-labeling
import { DetectionType, DetectionEvent } from '@nativescript/mlkit-core';
import { ImageLabelingResult } from '@nativescript/mlkit-image-labeling';
onDetection(event: DetectionEvent){
if(event.type === DetectionType.Image){
const labels: ImageLabelingResult[] = event.data;
}
}
For more details, see nativescript/mlkit-image-labeling
Object Detection
npm install @nativescript/mlkit-object-detection
import { DetectionType, DetectionEvent } from '@nativescript/mlkit-core';
import { ObjectResult } from '@nativescript/mlkit-object-detection'
onDetection(event: DetectionEvent){
if(event.type === DetectionType.Object){
const objects: ObjectResult[] = event.data;
}
}
For more details, see @nativescript/mlkit-object-detection
Pose Detection
npm install @nativescript/mlkit-pose-detection
import { DetectionType, DetectionEvent } from '@nativescript/mlkit-core';
import { PoseResult } from '@nativescript/mlkit-pose-detection';
onDetection(event: DetectionEvent){
if(event.type === DetectionType.Pose){
const poses: PoseResult = event.data;
}
}
For more details, see @nativescript/mlkit-pose-detection
Text Recognition
npm install @nativescript/mlkit-text-recognition
import { DetectionType, DetectionEvent } from '@nativescript/mlkit-core';
import { TextResult } from '@nativescript/mlkit-text-recognition';
onDetection(event: DetectionEvent){
if(event.type === DetectionType.Text){
const text: TextResult = event.data;
}
}
For more details, see @nativescript/mlkit-text-recognition
API
detectWithStillImage()
import { DetectionType, detectWithStillImage } from "@nativescript/mlkit-core";
async processStill(args) {
try {
result: { [key: string]: any } = await detectWithStillImage(image: ImageSource, options)
} catch (e) {
console.log(e);
}
}
Detects barcode, pose, etc from a still image instead of using the camera.
image: The image to detect the object fromoptions: An optional StillImageDetectionOptions object parameter specifying the detection characteristics.
MLKitView class
The MLKitView class provides the camera view for detection.
It has the following members.
Properties
| Property | Type |
|---|---|
detectionEvent | string |
cameraPosition | CameraPosition |
detectionType | DetectionType |
barcodeFormats | BarcodeFormats |
faceDetectionPerformanceMode | FaceDetectionPerformanceMode |
faceDetectionTrackingEnabled | boolean |
faceDetectionMinFaceSize | number |
imageLabelerConfidenceThreshold | number |
objectDetectionMultiple | boolean |
objectDetectionClassify | boolean |
torchOn | boolean |
pause | boolean |
processEveryNthFrame | number |
readonly latestImage? | ImageSource |
retrieveLatestImage | boolean |
Methods
| Method | Returns | Description |
|---|---|---|
isAvailable() | boolean | A static method to check if the device supports ML Kit. |
stopPreview() | void | |
startPreview() | void | |
toggleCamera() | void | |
requestCameraPermission() | Promise<void> | |
hasCameraPermission() | boolean | |
on() | void |
StillImageDetectionOptions interface
interface StillImageDetectionOptions {
detectorType: DetectionType;
barcodeScanning?: {
barcodeFormat?: [BarcodeFormats];
};
faceDetection?: {
faceTracking?: boolean;
minimumFaceSize: ?number;
detectionMode?: 'fast' | 'accurate';
landmarkMode?: 'all' | 'none';
contourMode?: 'all' | 'none';
classificationMode?: 'all' | 'none';
};
imageLabeling?: {
confidenceThreshold?: number;
};
objectDetection?: {
multiple: boolean;
classification: boolean;
};
selfieSegmentation?: {
enableRawSizeMask?: boolean;
smoothingRatio?: number;
};
}
Enums
DetectionType
export enum DetectionType {
Barcode = 'barcode',
DigitalInk = 'digitalInk',
Face = 'face',
Image = 'image',
Object = 'object',
Pose = 'pose',
Text = 'text',
All = 'all',
Selfie = 'selfie',
None = 'none',
}
CameraPosition
export enum CameraPosition {
FRONT = 'front',
BACK = 'back',
}
BarcodeFormats
export enum BarcodeFormats {
ALL = 'all',
CODE_128 = 'code_128',
CODE_39 = 'code_39',
CODE_93 = 'code_93',
CODABAR = 'codabar',
DATA_MATRIX = 'data_matrix',
EAN_13 = 'ean_13',
EAN_8 = 'ean_8',
ITF = 'itf',
QR_CODE = 'qr_code',
UPC_A = 'upc_a',
UPC_E = 'upc_e',
PDF417 = 'pdf417',
AZTEC = 'aztec',
UNKOWN = 'unknown',
}
FaceDetectionPerformanceMode
export enum FaceDetectionPerformanceMode {
Fast = 'fast',
Accurate = 'accurate',
}
License
Apache License Version 2.0