HarmonyOS鸿蒙Next中卡证识别控件CardRecognition支持非平整放置证件的识别
HarmonyOS鸿蒙Next中卡证识别控件CardRecognition支持非平整放置证件的识别 要求卡证识别时,需要卡证放置平整。但实际用户使用时,可能会处于非平整放置的场景。
卡证识别控件CardRecognition非平整放置证件的识别。
3 回复
参考下这个demo:
import { textRecognition } from '@kit.CoreVisionKit';
import { image } from '@kit.ImageKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { picker, fileIo } from '@kit.CoreFileKit';
import { CardRecognition, CallbackParam, CardType } from '@kit.VisionKit'
import fs, { ReadOptions } from '@ohos.file.fs';
import { common } from '@kit.AbilityKit';
import { buffer } from '@kit.ArkTS';
import { router, window } from '@kit.ArkUI';
const TAG: string = 'CardRecognitionPage'
@Entry
@Component
struct Index {
private imageSource: image.ImageSource | undefined = undefined;
@State chooseImage1: PixelMap | undefined = undefined;
@State chooseImage2: PixelMap | undefined = undefined;
@State dataValues: string = '';
@State isShowCard: boolean = false;
build() {
Column() {
Button("index2").onClick(() => {
router.pushUrl({
url:"pages/Index2"
})
})
if (this.isShowCard) {
CardRecognition({
// 此处选择身份证类型作为示例
supportType: CardType.CARD_ID,
callback: (async (params: CallbackParam) => {
this.isShowCard=false;
let file = fs.openSync(params.cardInfo?.back.cardImageUri, fs.OpenMode.READ_ONLY)
let imageSource = image.createImageSource(file.fd)
this.chooseImage1 = await imageSource.createPixelMap()
let file2 = fs.openSync(params.cardInfo?.front.cardImageUri, fs.OpenMode.READ_ONLY)
let imageSource2 = image.createImageSource(file2.fd)
this.chooseImage2 = await imageSource2.createPixelMap()
})
})
}
Image(this.chooseImage1)
.objectFit(ImageFit.Fill)
.height('30%')
Image(this.chooseImage2)
.objectFit(ImageFit.Fill)
.height('30%')
Text(this.dataValues)
.copyOption(CopyOptions.LocalDevice)
.height('15%')
.margin(10)
.width('60%')
Button('选择图片')
.type(ButtonType.Capsule)
.fontColor(Color.White)
.alignSelf(ItemAlign.Center)
.width('80%')
.margin(10)
.onClick(() => {
// 拉起图库,获取图片资源
this.selectImage();
})
Button('开始识别')
.type(ButtonType.Capsule)
.fontColor(Color.White)
.alignSelf(ItemAlign.Center)
.width('80%')
.margin(10)
.onClick(async () => {
this.textRecognitionTest();
})
Button("开始识别").onClick(() => {
this.isShowCard=true
})
Button("保存一个文件").onClick(() => {
this.readWriteFileWithStream();
})
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
context = getContext(this) as common.UIAbilityContext;
filesDir = this.context.filesDir;
async readWriteFileWithStream(): Promise<void> {
// 新建并打开文件
let file = fs.openSync(this.filesDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
// 写入一段内容至文件
let writeLen = fs.writeSync(file.fd, "Try to write str.");
console.info("The length of str is: " + writeLen);
// 从文件读取一段内容
let arrayBuffer = new ArrayBuffer(1024);
let readOptions: ReadOptions = {
offset: 0,
length: arrayBuffer.byteLength
};
let readLen = fs.readSync(file.fd, arrayBuffer, readOptions);
let buf = buffer.from(arrayBuffer, 0, readLen);
console.info("the content of file: " + buf.toString());
// 关闭文件
fs.closeSync(file);
}
private async textRecognitionTest() {
if (!this.chooseImage1) {
return
}
// 调用文本识别接口
let visionInfo: textRecognition.VisionInfo = {
pixelMap: this.chooseImage1
};
let textConfiguration: textRecognition.TextRecognitionConfiguration = {
isDirectionDetectionSupported: false
};
textRecognition.recognizeText(visionInfo, textConfiguration,
(error: BusinessError, data: textRecognition.TextRecognitionResult) => {
// 识别成功,获取对应的结果
if (error.code == 0) {
let recognitionString = JSON.stringify(data);
hilog.info(0x0000, 'testTag', "textRecognition data is " + recognitionString);
// 将结果更新到Text中显示
this.dataValues = JSON.stringify(recognitionString);
}
if (this.chooseImage1 && this.imageSource) {
this.chooseImage1.release();
this.imageSource.release();
}
});
}
private copyFile(uri:string){
fs.open(uri,(err:BusinessError,file:fs.File)=>{
})
}
private async selectImage() {
let uri = await this.openPhoto();
if (uri === undefined) {
hilog.info(0x0000, 'OCRDemo', "uri is undefined");
return
}
this.copyFile(uri)
this.loadImage(uri);
}
private openPhoto(): Promise<string> {
return new Promise<string>((resolve, reject) => {
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select({
MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE, maxSelectNumber: 1
}).then((res: picker.PhotoSelectResult) => {
resolve(res.photoUris[0]);
}).catch((e: BusinessError) => {
hilog.error(0x0000, 'OCRDemo', `get photo image uri failed:${JSON.stringify(e)}`);
resolve('');
})
})
}
private loadImage(name: string) {
setTimeout(async () => {
let f = await fileIo.open(name, fileIo.OpenMode.READ_ONLY);
this.imageSource = image.createImageSource(f.fd);
this.chooseImage1 = await this.imageSource.createPixelMap();
hilog.info(0x0000, 'OCRDemo', `this.chooseImage===${JSON.stringify(this.chooseImage1)}`);
}, 100)
}
}
更多关于HarmonyOS鸿蒙Next中卡证识别控件CardRecognition支持非平整放置证件的识别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,CardRecognition控件支持非平整放置证件的识别功能。该控件通过先进的图像处理技术和机器学习算法,能够有效识别那些放置在非平整表面上的证件,如弯曲、折叠或倾斜的证件。这一功能提升了用户体验,减少了因证件放置不当而导致的识别失败率。CardRecognition控件通过实时分析证件图像的几何形状和特征点,自动调整和校正图像,确保识别的准确性和稳定性。此功能在金融、安防、交通等领域的智能终端设备中具有广泛应用价值。
在HarmonyOS鸿蒙Next中,CardRecognition控件经过优化,支持对非平整放置的证件进行识别。它通过先进的图像处理算法和AI技术,能够有效校正因证件弯曲、倾斜或褶皱导致的图像失真,确保识别的准确性和稳定性。开发者只需简单集成该控件,即可在应用中实现高效、可靠的卡证识别功能,提升用户体验。

