当前位置: 首页 > article >正文

鸿蒙人脸识别

鸿蒙人脸识别

参考文档

鸿蒙原生提供用于实现人脸识别的API。感觉能够实现一些好玩的效果。

请添加图片描述

private detectFace(img: PixelMap) {
  // 调用人脸检测接口
  faceDetector.init();
  let visionInfo: faceDetector.VisionInfo = {
    pixelMap: img,
  };
  faceDetector.detect(visionInfo)
    .then((data: faceDetector.Face[]) => {
      if (data.length === 0) {
      } else {
        let faceString = JSON.stringify(data);
        hilog.info(0x0000, 'faceDetectorSample', "faceString data is " + faceString);
        promptAction.showDialog({
          message: `识别到信息  ${faceString}`
        })
      }
    })
    .catch((error: BusinessError) => {
      hilog.error(0x0000, 'faceDetectorSample', `Face detection failed. Code: ${error.code}, message: ${error.message}`);
    });
  faceDetector.release();
}

示例代码

import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { image } from '@kit.ImageKit';
import { fileIo } from '@kit.CoreFileKit';
import { faceDetector } from '@kit.CoreVisionKit';
import { promptAction } from '@kit.ArkUI';

const TAG: string = "index";

@Entry
@Component
struct Index {
  @State chooseImage: image.PixelMap | null = null
  @State segImage: image.PixelMap | null = null

  private openPhoto(): Promise<Array<string>> {
    return new Promise<Array<string>>((resolve, reject) => {
      let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
      PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
      PhotoSelectOptions.maxSelectNumber = 1;
      let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
      hilog.info(0x0000, TAG, 'PhotoViewPicker.select successfully, PhotoSelectResult uri: ');
      photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => {
        hilog.info(0x0000, TAG, `PhotoViewPicker.select successfully, PhotoSelectResult uri: ${PhotoSelectResult.photoUris}`);
        resolve(PhotoSelectResult.photoUris)
      }).catch((err: BusinessError) => {
        hilog.error(0x0000, TAG, `PhotoViewPicker.select failed with errCode: ${err.code}, errMessage: ${err.message}`);
        reject();
      });
    })
  }

  private async loadImage(path: string) {
    let imageSource: image.ImageSource | undefined = undefined
    let fileSource = await fileIo.open(path, fileIo.OpenMode.READ_ONLY)
    imageSource = image.createImageSource(fileSource.fd)
    this.chooseImage = await imageSource.createPixelMap()
    hilog.info(0x0000, TAG, `this.chooseImage===${this.chooseImage}`);
  }

  private detectFace(img: PixelMap) {
    // 调用人脸检测接口
    faceDetector.init();
    let visionInfo: faceDetector.VisionInfo = {
      pixelMap: img,
    };
    faceDetector.detect(visionInfo)
      .then((data: faceDetector.Face[]) => {
        if (data.length === 0) {
        } else {
          let faceString = JSON.stringify(data);
          hilog.info(0x0000, 'faceDetectorSample', "faceString data is " + faceString);
          promptAction.showDialog({
            message: `识别到信息  ${faceString}`
          })
        }
      })
      .catch((error: BusinessError) => {
        hilog.error(0x0000, 'faceDetectorSample', `Face detection failed. Code: ${error.code}, message: ${error.message}`);
      });
    faceDetector.release();
  }

  build() {
    Column() {
      Image(this.chooseImage)
        .objectFit(ImageFit.Contain)
        .width('100%')
        .height('40%')

      Row() {
        Image(this.segImage)
          .objectFit(ImageFit.Contain)
          .width('100%')
          .height('100%')
      }
      .width('100%')
      .height('40%')

      Blank()

      Row() {
        Text('选择图片')
          .height(50)
          .width(140)
          .borderRadius(25)
          .textAlign(TextAlign.Center)
          .backgroundColor(Color.Orange)
          .onClick(async () => {
            let urls = await this.openPhoto()
            if (urls.length > 0) {
              let url = urls[0]
              this.loadImage(url)
            }
          })

        Text('人脸识别')
          .height(50)
          .width(140)
          .borderRadius(25)
          .textAlign(TextAlign.Center)
          .backgroundColor(Color.Orange)
          .onClick(async () => {
            if (this.chooseImage) {
              this.detectFace(this.chooseImage)
            }
          })
      }
    }
    .height('100%')
    .width('100%')
  }
}

后记

最近利用这些知识上架了两个应用

小鱼证件照,免费便捷的证件照生成工具。

请添加图片描述

小鱼抽签。出门之前占卜吉凶,总会有好事发生。

第1签 锤离成道

天开地辟结良缘,日吉时良万事全,若得此签非小可,人行中正帝王宜

上上签

子宫

此卦盘古初开天地之象,诸事皆吉也

快使用鸿蒙next版本扫一扫体验一下吧~

请添加图片描述


http://www.kler.cn/a/449547.html

相关文章:

  • 绕组识别标签规范
  • 掌握命令行参数的艺术:Python的`argparse`库
  • 递归查询全量分页数据问题
  • Qt笔记:网络编程UDP
  • 如何实现圆形头像功能
  • dockerfile文档编写(3):构建失败后清理缓存(删除容器和镜像相关命令)
  • RISC-V架构的压缩指令集介绍
  • 【Quartz】任务调度
  • Qt C++ 下网络通信与文件发送的实现
  • 黑马商城项目—服务注册、服务发现
  • C++ STL CookBook
  • 拥有人类情感的AI:未来还是幻想?
  • 蓝桥杯刷题——day9
  • AI可信论坛亮点:合合信息分享视觉内容安全技术前沿
  • K8S中的PV、PVC介绍和使用
  • 探秘 DNS 服务器:揭开域名解析的神秘面纱
  • 【已解决】【大数据综合案例】上| Hive与MongoDB配置
  • 【CSS in Depth 2 精译_086】14.3:CSS 剪切路径(clip-path)的用法
  • 探索人工智能及机器学习如何赋能IP代理
  • HTML5 Web IndexedDB 数据库
  • 【chkdsk】chkdsk 按下停止键的后果
  • WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)
  • 直流电机驱动电路分享(HIP4082)
  • 《开启微服务之旅:Spring Boot Web开发举例》(二)
  • C++ 中的字面量类型定义
  • Redis数据对象