import {NativeModules} from 'react-native';
import type {CapturedResultFilter, CaptureVisionRouter} from '../cvr'
import {EnumCapturedResultItemType} from '../core'
import type { CrossVerificationCriteria } from './CrossVerificationCriteria';
// @ts-ignore Check whether __turboModuleProxy exists, it may not
const isTurboModuleEnabled = global.__turboModuleProxy != null;
const DynamsoftMultiCrossFilterModule = isTurboModuleEnabled ?
require("./NativeDynamsoftMultiCrossFilterModule").default :
NativeModules.DynamsoftMultiCrossFilterModule;
/**
* The MultiFrameResultCrossFilter class offers a set of API functions designed for managing and filtering results from multiple image frames,
* typically used in consecutive frames of a streaming video.
*
* @see {@link CapturedResultFilter}
* @see {@link CaptureVisionRouter.addFilter}
* */
export class MultiFrameResultCrossFilter implements CapturedResultFilter {
private filterId = "";
constructor() {
this.filterId = DynamsoftMultiCrossFilterModule.createInstance()
}
/**@internal*/
_getFilterId(): string {
return this.filterId;
}
destroy() {
DynamsoftMultiCrossFilterModule.destroy(this.filterId)
}
/**
* Enables or disables the verification of specific result item types.
*
Code Snippet:
*
* ```
* let filter = new MultiFrameResultCrossFilter();
* filter.enableResultCrossVerification(EnumCapturedResultItemType.CRIT_BARCODE | EnumCapturedResultItemType.CRIT_TEXT_LINE, true); //enable
* //...
* filter.enableResultCrossVerification(EnumCapturedResultItemType.CRIT_BARCODE | EnumCapturedResultItemType.CRIT_TEXT_LINE, false); //disable
* ```
*
* @param resultItemTypes - Specifies one or multiple specific result item types.
* @param enable - Boolean to toggle verification on or off.
* @see {@link EnumCapturedResultItemType}
* */
enableResultCrossVerification(resultItemTypes: EnumCapturedResultItemType | number, enable: boolean) {
DynamsoftMultiCrossFilterModule.enableResultCrossVerification(this.filterId, resultItemTypes, enable)
}
/**
* Checks if verification is active for a given result item type.
* @param type - Specifies one specific result item type.
* @return Promise - A promise that resolves a boolean indicating the status of verification for the specified type.
* */
isResultCrossVerificationEnabled(type: EnumCapturedResultItemType | number): Promise {
return DynamsoftMultiCrossFilterModule.isResultCrossVerificationEnabled(this.filterId, type);
}
/**
* Enables or disables the deduplication process for one or multiple specific result item types.
* Code Snippet:
*
* ```
* let filter = new MultiFrameResultCrossFilter();
* filter.enableResultDeduplication(EnumCapturedResultItemType.CRIT_BARCODE | EnumCapturedResultItemType.CRIT_TEXT_LINE, true); //enable
* //...
* filter.enableResultDeduplication(EnumCapturedResultItemType.CRIT_BARCODE | EnumCapturedResultItemType.CRIT_TEXT_LINE, false); //disable
* ```
*
* @param resultItemTypes - Specifies one or multiple specific result item types.
* @param enable - Boolean to toggle deduplication on or off.
* @see {@link EnumCapturedResultItemType}
* */
enableResultDeduplication(resultItemTypes: EnumCapturedResultItemType | number, enable: boolean) {
DynamsoftMultiCrossFilterModule.enableResultDeduplication(this.filterId, resultItemTypes, enable);
}
/**
* Checks if deduplication is active for a given result item type.
* @param type - Specifies one specific result item type.
* @return Promise - A promise that resolves a boolean indicating the deduplication status for the specified type.
* */
isResultDeduplicationEnabled(type: EnumCapturedResultItemType | number): Promise {
return DynamsoftMultiCrossFilterModule.isResultDeduplicationEnabled(this.filterId, type);
}
/**
* Sets the interval during which duplicates are disregarded for one or multiple specific result item types.
*
* @param types Specifies one or multiple specific result item types.
* @param time Time in milliseconds during which duplicates are disregarded.
* */
setDuplicateForgetTime(types: EnumCapturedResultItemType | number, time: number) {
DynamsoftMultiCrossFilterModule.setDuplicateForgetTime(this.filterId, types, time);
}
/**
* Gets the interval during which duplicates are disregarded for a given result item type.
* @param type Specifies one specific result item type.
* @return Promise - A promise that resolves the maximum overlapping frames count for a given result item type.
* */
getDuplicateForgetTime(type: EnumCapturedResultItemType | number): Promise {
return DynamsoftMultiCrossFilterModule.getDuplicateForgetTime(this.filterId, type);
}
/**
* Enables or disables the to-the-latest overlapping feature of one or multiple specific result item types.
* Code Snippet:
*
* ```
* let filter = new MultiFrameResultCrossFilter();
* filter.enableLatestOverlapping(EnumCapturedResultItemType.CRIT_BARCODE | EnumCapturedResultItemType.CRIT_TEXT_LINE, true); //enable
* //...
* filter.enableLatestOverlapping(EnumCapturedResultItemType.CRIT_BARCODE | EnumCapturedResultItemType.CRIT_TEXT_LINE, false); //disable
* ```
*
* @param resultItemTypes - Specifies one or multiple specific result item types.
* @param enable - Boolean to toggle to-the-latest overlapping on or off.
* @see {@link EnumCapturedResultItemType}
* */
enableLatestOverlapping(resultItemTypes: EnumCapturedResultItemType | number, enable: boolean) {
return DynamsoftMultiCrossFilterModule.enableLatestOverlapping(this.filterId, resultItemTypes, enable);
}
/**
* Checks if to-the-latest overlapping is active for a given result item type.
* @param type - Specifies one specific result item type.
* @return Promise - A promise that resolves a boolean indicating the to-the-latest overlapping status for the specified type.
* */
isLatestOverlappingEnabled(type: EnumCapturedResultItemType | number): Promise {
return DynamsoftMultiCrossFilterModule.isLatestOverlappingEnabled(this.filterId, type)
}
/**
* Set the maximum overlapping frames count for one or multiple specific result item types.
* You can set it higher if:
* - You capture device is stationary or moving stably.
* - You want to further improve the read-rate.
*
* @param types Specifies one or multiple specific result item types.
* @param maxOverlappingFrames The maximum overlapping frame count for the overlapping.
* */
setMaxOverlappingFrames(types: EnumCapturedResultItemType | number, maxOverlappingFrames: number) {
DynamsoftMultiCrossFilterModule.setMaxOverlappingFrames(this.filterId, types, maxOverlappingFrames);
}
/**
* Get the maximum overlapping frames count for a given result item type.
*
* @param type Specifies a result item type.
* @return {Promise} A promise that resolves the maximum overlapping frame count for the overlapping..
* */
getMaxOverlappingFrames(type: EnumCapturedResultItemType | number): Promise {
return DynamsoftMultiCrossFilterModule.getMaxOverlappingFrames(this.filterId, type);
}
/**
* Set the criteria for cross-verification of one or multiple specific result item types.
*
* @param types Specifies one or multiple specific result item types.
* @param criteria The criteria for cross-verification, including parameters such as frameWindow and minConsistentFrames.
* @see {@link CrossVerificationCriteria}
* */
setResultCrossVerificationCriteria(types: EnumCapturedResultItemType | number, criteria: CrossVerificationCriteria) {
DynamsoftMultiCrossFilterModule.setResultCrossVerificationCriteria(this.filterId, types, criteria);
}
/**
* Get the criteria for cross-verification of a given result item type.
*
* @param type Specifies a result item type.
* @return {Promise} A promise that resolves the criteria for cross-verification, including parameters such as frameWindow and minConsistentFrames.
* @see {@link CrossVerificationCriteria}
* */
getResultCrossVerificationCriteria(type: EnumCapturedResultItemType | number): Promise {
return DynamsoftMultiCrossFilterModule.getResultCrossVerificationCriteria(this.filterId, type);
}
}