首页 > 其他分享 >鸿蒙项目实战(五):识别本地图片

鸿蒙项目实战(五):识别本地图片

时间:2024-11-18 23:18:53浏览次数:1  
标签:实战 鸿蒙 kit 识码 error import 识别 options 图片

基本概念

图片识码能力支持对图库中的码图进行扫描识别,并获取信息

场景介绍

图片识码能力支持对图库中的条形码、二维码、MULTIFUNCTIONAL CODE进行识别,并获得码类型、码值、码位置信息

该能力可用于一图单码和一图多码的识别,比如条形码、付款码等

使用示例

1、导入图片识码接口和相关接口模块

import { scanCore, scanBarcode, detectBarcode } from '@kit.ScanKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

2、调用detectBarcode.decode接口解析码图。

  • 通过Promise回调函数得到扫码结果,InputImage对象中uri参数推荐通过picker方式获取
// 导入图片识码需要的日志和picker模块
import { scanCore, scanBarcode, detectBarcode } from '@kit.ScanKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct MainPage {
  pageInfo: NavPathStack = new NavPathStack()
  // 选择并识别本地图片内容
  chooseLocalPicAndScan(){
    // 定义识码参数options
    let options: scanBarcode.ScanOptions = {
      scanTypes: [scanCore.ScanType.ALL], // 识别的barcode类型
      enableMultiMode: true,
    }
    // 通过picker拉起图库的图片
    let photoOption = new photoAccessHelper.PhotoSelectOptions();
    photoOption.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    photoOption.maxSelectNumber = 1; // 最大选择图片数量
    let photoPicker = new photoAccessHelper.PhotoViewPicker();
    photoPicker.select(photoOption).then((result) => {
      // 定义识码参数inputImage,其中uri为picker选择图片
      let inputImage: detectBarcode.InputImage = { uri: result.photoUris[0] };
      try {
        // 调用图片识码接口
        detectBarcode.decode(inputImage, options).then((result: Array<scanBarcode.ScanResult>) => {
          hilog.info(0x0001, '[Scan Sample]',
            `Succeeded in getting ScanResult by promise with options, result is ${JSON.stringify(result)}`);
        }).catch((error: BusinessError) => {
          hilog.error(0x0001, '[Scan Sample]',
            `Failed to get ScanResult by promise with options. Code: ${error.code}, message: ${error.message}`);
        });
      } catch (error) {
        hilog.error(0x0001, '[Scan Sample]',
          `Failed to detectBarcode. Code: ${error.code}, message: ${error.message}`);
      }
    })
  }
  build() {
    Navigation(this.pageInfo) {
      Column() {
        Button('识别本地图片')
          .onClick(()=>{
              this.chooseLocalPicAndScan()
          })
          .margin(10)
      }
      .width('100%')
    }
    .height('100%')
  }
}
  • 通过Callback回调函数得到扫码结果,InputImage对象中uri参数推荐通过picker方式获取
// 启动页
// 导入图片识码需要的日志和picker模块
import { scanCore, scanBarcode, detectBarcode } from '@kit.ScanKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct MainPage {
  pageInfo: NavPathStack = new NavPathStack()

  // 选择并识别本地图片内容
  chooseLocalPicAndScan() {
    // 定义识码参数options
    let options: scanBarcode.ScanOptions = {
      scanTypes: [scanCore.ScanType.ALL],
      enableMultiMode: true,
      enableAlbum: true
    }
    // 通过选择模式拉起photoPicker界面,用户可以选择一个图片
    let photoOption = new photoAccessHelper.PhotoSelectOptions();
    photoOption.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    photoOption.maxSelectNumber = 1;
    let photoPicker = new photoAccessHelper.PhotoViewPicker();
    photoPicker.select(photoOption).then((result) => {
      // 定义识码参数inputImage,其中uri为picker选择图片
      let inputImage: detectBarcode.InputImage = { uri: result.photoUris[0] };
      try {
        // 调用图片识码接口
        detectBarcode.decode(inputImage, options,
          (error: BusinessError, result: Array<scanBarcode.ScanResult>) => {
            if (error && error.code) {
              hilog.error(0x0001, '[Scan Sample]',
                `Failed to get ScanResult by callback with options. Code: ${error.code}, message: ${error.message}`);
              return;
            }
            hilog.info(0x0001, '[Scan Sample]',
              `Succeeded in getting ScanResult by callback with options, result is ${JSON.stringify(result)}`);
          });
      } catch (error) {
        hilog.error(0x0001, '[Scan Sample]',
          `Failed to detectBarcode. Code: ${error.code}, message: ${error.message}`);
      }
    })
  }


  build() {
    Navigation(this.pageInfo) {
      Column() {
        Text('首页')
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button('跳转第一页')
          .onClick(() => {
            this.pageInfo.pushPathByName("FirstPage", null)
          })
          .margin({ top: 100 })
        Button('跳转第二页')
          .onClick(() => {
            this.pageInfo.pushPathByName("SecondPage", null)
          })
          .margin(10)
        Button('识别本地图片')
          .onClick(() => {
            this.chooseLocalPicAndScan()
          })
          .margin(10)
      }
      .width('100%')
    }
    .height('100%')
  }
}

相关文档:

识别本地图片

   

标签:实战,鸿蒙,kit,识码,error,import,识别,options,图片
From: https://www.cnblogs.com/xqxacm/p/18553987

相关文章

  • 工人穿戴工服识别检测系统
    工人穿戴工服识别检测系统通过结合YOLOv5AI视觉算法和现场摄像头,工人穿戴工服识别检测系统为工业生产提供了一种高效、智能的安全监管解决方案。系统的核心在于一个预先构建的工服图像数据库,用户将待检测工服的图片录入该数据库后,YOLOv5模型将学习并识别这些工服的特征。现场的摄......
  • 工作服穿戴识别系统
    工作服穿戴识别系统利用现场装好的监控摄像头24小时对工作场景进行实时监测。工作服穿戴识别系统一旦检测到员工工服穿戴不符合规定的情况,系统能够立即发出警报,提醒相关人员进行处理。通过实时监控和精准报警,工作服穿戴识别系统能够有效规范作业人员的行为。员工知道自己处于监控......
  • odoo17 新增模块教程, 实战案例详细教程
    新增模块python3./odoo-binscaffoldgroup_send./addons会增加一个文件夹配置模块核心在于__manifest__.py#-*-coding:utf-8-*-{'name':"GroupSend",'summary':"Short(1phrase/line)summaryofthemodule'spurpose&qu......
  • Httpclient基础!!!!实战训练!!!!
    1.HttpClient1.1介绍HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient作用:发送HTTP请求接收响应数据为什么要在Java程序中发送Http请求?有......
  • 01MybatisPlus(SpringCloud入门必学!!!!微服务!!项目实战!!深度理解MP用法!!!)
    微服务springCloud,今天第一课就是MybatisPlus!!!大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。        因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的......
  • 大模型实战(二):langchain+Ollama调用本地大模型实现RAG(保姆级)
    文章目录一、任务描述1.环境2.功能二、代码拆解1.导入包2.配置本地模型3.实例化embedding模型4.导入向量化知识库5.加入提示词6.定义查询方法7.问答三、总体代码一、任务描述由于显卡仍然较为昂贵,个人笔记本的硬件条件很难带动大模型,因此我们可以调用一......
  • OpenAI Assistants API 企业级应用实战
    引言OpenAI在2023年底推出的AssistantsAPI为企业级AI应用开发提供了一个强大的新选择。与传统的ChatCompletionsAPI相比,AssistantsAPI提供了更完整的对话管理、文件处理和工具调用能力,特别适合构建复杂的企业应用。核心优势内置的对话线程管理原生的文件处理能......
  • 多模态大模型LLM与AIGC前沿技术实战,基于训练数据和生成算法模型
    多模态大模型LLM与AIGC前沿技术实战,基于训练数据和生成算法模型在当今人工智能领域,多模态大模型LLM(大型语言模型)与AIGC(人工智能生成内容)正以前所未有的发展态势,引领着技术革新的浪潮。它们的强大能力背后,训练数据和生成算法模型起着至关重要的作用,深入探究这两方面并了解其在实......
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】绘制空心圆圈
    Androidjava绘制圆圈自定义CircleViewpackagecom.java.circle;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.view.View;publicclassCircleViewextendsView{privatePaintpaint;......
  • Flutter项目实战(1):通用项目框架搭建
    下面介绍Flutter最基本的通用项目框架搭建,同时实现了一个登录界面图标和登录界面。先看下效果图:使用ScreenUtilInit自适应界面大小;使用Stack支持多个子界面在同一个全屏主界面上选择显示;使用Get插件实现界面之间的跳转和国际化翻译;界面都通过Transform实现了鼠标移动......