imobile_for_reactnative
Version:
iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
230 lines (199 loc) • 6.19 kB
text/typescript
import EventConst from "imobile_for_reactnative/NativeModule/constains/EventConst"
import { EmitterSubscription } from "react-native"
import {
NativeModules,
NativeEventEmitter,
} from "react-native"
const SAI = NativeModules.SAI
const event = new NativeEventEmitter(SAI)
/** AI模型信息 */
interface AIModelInfo {
/** tflite 格式的ai模型所在绝对路径 */
modelPath: string
/** 模型能识别对象标签文本文件所在绝对路径 */
labelPath: string
/** 指定模型所用的参数 */
param?: {
/** 模型支持的图像输入尺寸 */
inputSize?: number
/** 模式是否量化 */
quantized?: boolean
}
}
/** AI识别信息结果 */
export interface AIDetectInfo {
/** 识别对象名称 */
label: string,
/** 识别对象置信度 */
confidence: number,
/** 识别对象计数 */
countID: number,
}
/** AI识别框风格 */
export interface AIDetectStyle {
/** 是否显示名称 */
isDrawTitle: boolean
/** 是否显示置信度 */
isDrawConfidence: boolean
/** 是否显示识别计数 */
isDrawCount: boolean
/** 线宽度 */
aiStrokeWidth: number
}
/** AI分类信息结果 */
export interface AIClassifyResult {
/** 识别对象名称 */
label: string,
/** 识别对象置信度 */
confidence: number,
}
// ****************************************************************************
// AI 识别,聚合
// ****************************************************************************
/**
* 设置识别模型
* @param model 模型路径,参数等信息
* @returns 是否成功
*/
export async function setAIDetectModel(model: AIModelInfo): Promise<boolean> {
return await SAI.setAIDetectModel(model)
}
/**
* 加载默认识别模型
* @param language 默认模型使用的语言,支持中文(’CN‘)和英文(’OTHER')
* @returns 是否成功
*/
export async function setAIDetectDefaultModel(language: string): Promise<boolean> {
return await SAI.setAIDetectDefaultModel(language)
}
/**
* 开始识别
* @param isPolymerize 是否是聚合模式
* @returns 是否成功
* @throws 许可异常
*/
export async function startAIDetect(isPolymerize: boolean): Promise<boolean> {
return await SAI.startAIDetect(isPolymerize)
}
/**
* 结束识别
* @returns 是否成功
*/
export async function endAIDetect(): Promise<boolean> {
return await SAI.endAIDetect()
}
/**
* 获取当前识别出的结果
* @returns AI识别信息结果数组
*/
export async function getAIDetectInfos(): Promise<AIDetectInfo[]> {
return await SAI.getAIDetectInfos()
}
/**
* 设置识别框的风格
* @param style 识别框风格
* @returns 是否成功
*/
export async function setAIDetectStyle(style: Partial<AIDetectStyle>): Promise<boolean> {
return await SAI.setAIDetectStyle(style)
}
/**
* 获取识别框风格
* @returns 识别框风格
*/
export async function getAIDetectStyle(): Promise<AIDetectStyle | undefined | null> {
return await SAI.getAIDetectStyle()
}
/**
* 设置识别置信度
* @param confidence 识别置信度,范围 0 -1
* @returns 是否成功
*/
export async function setAIDetectConfidence(confidence: number): Promise<boolean> {
return await SAI.setAIDetectConfidence(confidence)
}
/**
* 获取识别置信度
* @returns 识别置信度,范围 0 -1, 失败为 -1
*/
export async function getAIDetectConfidence(): Promise<number> {
return await SAI.getAIDetectConfidence()
}
/**
* 获取当前模型能识别的所有种类的名称
* @returns 当前模型能识别的所有种类的名称
*/
export async function getAIDetectLabels(): Promise<string[]> {
return await SAI.getAIDetectLabels()
}
/**
* 获取当前模型过滤(屏蔽)的识别种类的序号
* @returns 模型过滤(屏蔽)的识别种类的序号
*/
export async function getAIDetectFilter(): Promise<number[]> {
return await SAI.getAIDetectFilter()
}
/**
* 设置是否过滤(屏蔽)某个识别的种类
* @param label 种类名称
* @param enable 是否启用此种类检测,true启用, false屏蔽
* @returns 是否成功
*/
export async function enableAIDetectLabel(label: string, enable: boolean): Promise<boolean> {
return await SAI.enableAIDetectLabel(label,enable)
}
// ****************************************************************************
// 车牌识别
// ****************************************************************************
/**
* 开始车牌识别
* @returns 是否成功
* @throws 许可异常
*/
export async function startCarPlateRead(): Promise<boolean> {
return await SAI.startCarPlateRead()
}
/**
* 结束车牌识别
* @returns 是否成功
*/
export async function endCarPlateRead(): Promise<boolean> {
return await SAI.endCarPlateRead()
}
let carPlateListener: EmitterSubscription | undefined
/**
* 添加车牌识别结果回调
* @param listener 识别回调,空为移除
*/
export function setCarPlateReadListener(listener?: (text: string) => void): void {
carPlateListener?.remove()
carPlateListener = listener && event.addListener(EventConst.AI_CAR_PLATE_READ, listener)
}
// ****************************************************************************
// AI 分类
// ****************************************************************************
/**
* 设置分类模型
* @param model 模型路径,参数等信息
* @returns 是否成功
*/
export async function setAIClassifyModel(model: AIModelInfo): Promise<boolean> {
return await SAI.setAIClassifyModel(model)
}
/**
* 加载默认分类模型
* @param language 默认模型使用的语言,支持中文(’CN‘)和英文(’OTHER')
* @returns 是否成功
*/
export async function setAIClassifyDefaultModel(language: string): Promise<boolean> {
return await SAI.setAIClassifyDefaultModel(language)
}
/**
* 根据图片开始分类
* @param path 要分类的图片路径, 支持绝对路径,或 file:// , content:// 等开头的系统路径
* @returns AI分类信息结果数组
* @throws 许可异常
*/
export async function startAIClassify(path: string): Promise<AIClassifyResult[]> {
return await SAI.startAIClassify(path)
}