鸿蒙(API 12 Beta3版)【识别本地图片】

news2024/11/17 14:23:53

基本概念

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

场景介绍

图片识码能力支持对图库中的条形码、二维码、MULTIFUNCTIONAL CODE进行识别,并获得码类型、码值、码位置信息。该能力可用于一图单码和一图多码的识别,比如条形码、付款码等。

业务流程

1

  1. 用户向开发者的应用发起图片识码请求。
  2. 应用通过调用Scan Kit的decode接口启动图片识码。
  3. Scan Kit通过回调返回图片识码结果。
  4. 应用向用户返回扫码结果。

接口说明

接口返回值有两种返回形式:Callback和Promise回调。下表中为启动图片识码Callback和Promise形式接口,Callback和Promise只是返回值方式不一样,功能相同。

接口名描述
[decode](inputImage: [InputImage], options?: scanBarcode.[ScanOptions]): Promise<Array<scanBarcode.[ScanResult]>>启动图片识码,通过InputImage传入图片信息,通过ScanOptions进行识码参数设置(options为可选参数),使用Promise异步回调返回识码结果。
[decode](inputImage: InputImage, options: scanBarcode.ScanOptions, callback: AsyncCallback<Array<scanBarcode.ScanResult>>): void启动图片识码,通过InputImage传入图片信息,通过ScanOptions进行识码参数设置,使用Callback异步回调返回识码结果。
[decode](inputImage: InputImage, callback: AsyncCallback<Array<scanBarcode.ScanResult>>): void启动图片识码,通过InputImage传入图片信息,使用Callback异步回调返回识码结果。

开发步骤

图片识码接口支持识别图库中的条形码,二维码以及MULTIFUNCTIONAL CODE,并返回图片中码图的值,类型以及码的位置信息(码图最小外接矩形左上角和右下角的坐标)。

以下示例为调用图片识码的detectBarcode.decode接口获取码图信息。

  1. 导入图片识码接口和相关接口模块,该接口提供了图片识码参数和方法,导入方法如下。
// 导入图片识码需要的日志和picker模块
import { scanCore, scanBarcode, detectBarcode } from '@kit.ScanKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
  1. 调用detectBarcode.decode接口解析码图。
  • 通过Promise回调函数得到扫码结果,InputImage对象中uri参数推荐通过[picker]方式获取。
@Entry
@Component
struct DetectPage {
  build() {
    Column() {
      Button('Promise with options')
        .backgroundColor('#0D9FFB')
        .fontSize(20)
        .fontColor('#FFFFFF')
        .fontWeight(FontWeight.Normal)
        .align(Alignment.Center)
        .type(ButtonType.Capsule)
        .width('90%')
        .height(40)
        .margin({ top: 5, bottom: 5 })
        .onClick(() => {
          // 定义识码参数options
          let options: scanBarcode.ScanOptions = {
            scanTypes: [scanCore.ScanType.ALL],
            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] }
            // 调用图片识码接口
            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}`);
            });
          })
        });
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
  }
}
  • 通过Callback回调函数得到扫码结果,InputImage对象中uri参数推荐通过[picker]方式获取。
@Entry
@Component
struct DetectPage {
  build() {
    Column() {
      Button('Callback with options')
        .backgroundColor('#0D9FFB')
        .fontSize(20)
        .fontColor('#FFFFFF')
        .fontWeight(FontWeight.Normal)
        .align(Alignment.Center)
        .type(ButtonType.Capsule)
        .width('90%')
        .height(40)
        .margin({ top: 5, bottom: 5 })
        .onClick(() => {
          // 定义识码参数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] }
            // 调用图片识码接口
            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)}`);
            });
          })
        });
    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
  }
}

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2088890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HarmonyOS】模仿个人中心头像图片,调用系统相机拍照,从系统相册选择图片和圆形裁剪显示 (二)

【HarmonyOS】模仿个人中心头像图片&#xff0c;调用系统相机拍照&#xff0c;从系统相册选择图片和圆形裁剪显示 &#xff08;二&#xff09; Demo效果展示&#xff1a; 方案思路&#xff1a; 1.修改调用相机的方式&#xff0c;使用cameraKit进行相机的调用&#xff0c;拍照…

怎么扫描试卷去除笔迹?建议试试这样做

怎么扫描试卷去除笔迹&#xff1f;在现代教育和办公环境中&#xff0c;电子版试卷的管理和使用变得越来越普遍。然而&#xff0c;手写答案和批注常常使得电子版试卷难以恢复到原始的空白状态。为了满足这一需求&#xff0c;市场上涌现出许多能够扫描试卷并去除笔迹的技术和工具…

巧用 HTML 列表:<ul>、<ol>、<dl>的实用指南

目录 无序列表 容器级标签 有序列表 定义列表 一个dt配很多dd 每一个dl里面只有一个dt和dd 一个dl配多个dt 多级列表 无序列表 <ul>标签用于定义无序列表。无序列表的特点是各个列表项之间没有特定的顺序&#xff0c;通常以小圆点作为先导符号。所有主流浏览器…

模拟+思维(时间规划烧饼)

前言&#xff1a;这个题目就是我们小时候学的的活动规划烧饼&#xff0c;我们要先算出我们最大耗时是多少&#xff0c;然后再对我们的活动进行规划 题目地址 我们这个题目还要求算出k&#xff08;执行次数&#xff09;我的做法是写两遍代码&#xff0c;其实也可以存起来&#x…

“重启就能解决一切问题”,iPhone重启方法大揭秘

随着iPhone不断更新换代&#xff0c;其设计与操作方式也在不断进化。从最初的实体Home键到如今的全面屏设计&#xff0c;iPhone的操作逻辑也随之发生了改变。 对于那些习惯了传统安卓手机操作的用户来说&#xff0c;iPhone的重启方式可能会显得有些不同寻常。下面我们就来一起…

学习之SQL语句之DCL(数据控制语言)

DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问 权限

滚柱导轨:数控机床高效运行的驱动力

机床制造者最关心的莫过于机床的精度&#xff0c;刚性和使用寿命&#xff0c;对导轨系统的关注甚少。但导轨为机床功能的实现奠定了可靠的基础&#xff0c;各种类型的机床工作部件&#xff0c;都是利用控制轴在指定的导轨上运动。机床设计者根据机床的类型和用途选用各种不同形…

前波士顿咨询Platinion董事总经理陈果加入望繁信科技

“很荣幸邀请果总加盟望繁信科技&#xff01;作为中国互联网可以查到的写作流程挖掘介绍文章第一人&#xff0c;他的先驱性工作为流程挖掘在中国的知识普及和应用创新做出了重要贡献&#xff01;更难能可贵的&#xff0c;是我们和果总在价值观层面高度契合&#xff01;我们非常…

Git学习尚硅谷(001 git介绍)

尚硅谷Git入门到精通全套教程&#xff08;涵盖GitHub\Gitee码云\GitLab&#xff09; 总时长 4:52:00 共45P 此文章包含第1p-第p7的内容 文章目录 git介绍课程介绍git概述 何为版本控制集中式版本控制工具分布式版本控制工具git简史工作机制代码托管中心 git的安装 git介绍 课…

游泳时用什么耳机听歌好?四大实力非凡的高销游泳耳机严选

随着人们健康意识的提升和生活方式的变化&#xff0c;游泳已成为广受欢迎的健身方式之一。在水中畅游的同时&#xff0c;聆听喜爱的音乐可以让整个过程更加愉悦。然而&#xff0c;并非所有的耳机都适合在水下使用&#xff0c;因此选择一款适合游泳的耳机变得尤为重要。 近年来&…

深度探索Unity与C#:编织游戏世界的奇幻篇章

在数字编织的梦幻之境中&#xff0c;Unity游戏引擎与C#编程语言如同双生子&#xff0c;共同编织着游戏世界的奇幻篇章。《Unity游戏开发实战&#xff1a;从零到C#高手》这本书&#xff0c;不仅仅是技术的堆砌&#xff0c;它更像是一位智慧导师&#xff0c;引领着我们深入探索这…

auto的使用场景

auto的两面性 合理使用auto 不仅可以减少代码量, 也会大大提高代码的可读性. 但是事情总有它的两面性 如果滥用auto, 则会让代码失去可读性 推荐写法 这里推荐两种情况下使用auto 一眼就能看出声明变量的初始化类型的时候 比如迭代器的循环, 用例如下 #include <iostre…

ctfhub-web-ssrf-POST请求

这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年 定义&#xff1a;Gopher是Internet上一个非常有名的信息查找系统&#xff0c;它将Internet上的文件组织成某种索引&#xff0c;很方便地将用户从Internet的一处带到另一处。在WWW出现之…

走心机阀芯加工

阀芯加工走心机&#xff0c;是制造业中一个非常关键且高效的技术组合&#xff0c;深知这种技术在精密加工领域的重要性&#xff0c;下面我将从几个方面为您详细介绍阀芯加工走心机的特点和应用。 一、阀芯加工走心机的定义与特点 阀芯加工走心机&#xff0c;是一种结合了数控车…

模板进阶(C++)

一.非类型模板参数 1.使用方法和概念 模板参数分为类型形参与非类型形参。 类型形参:出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参:就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量来使…

CSS线性渐变拼接,一个完整的渐变容器(div),要拆分成多个渐变容器(div),并且保持渐变效果一致

1 需求 一个有渐变背景的div&#xff0c;需要替换成多个渐变背景div拼接&#xff0c;渐变效果需要保持一致&#xff08;不通过一个大的div渐变&#xff0c;其他子的div绝对定位其上并且背景透明来解决&#xff09; 2 分析 主要工作&#xff1a; 计算完整div背景线性渐变时的…

福建聚鼎:装饰画店铺怎么做盈利快

在艺术的殿堂里&#xff0c;装饰画店铺是一扇通往美与创意的门。要想让这扇门快速盈利&#xff0c;我们需要从多个维度出发&#xff0c;打造一个独特且吸引人的艺术空间。 我们要注重产品的独特性。每一幅装饰画都应该是独一无二的艺术品&#xff0c;它们不仅仅是墙面的装饰&am…

Linux——IO模型_多路转接(epoll)

目录 0.往期文章 1.epoll的三个接口 1.epoll_create 2.epoll_ctl 结构体 epoll_event 3.epoll_wait 2. epoll的工作原理&#xff0c;和接口对应 1.理解数据到达主机 2.epoll的工作原理 3.基于epoll的TCP服务器&#xff08;代码) 辅助库 基于TCP的Socket封装 服务器代…

集运系统如何多维度展现企业业务情况?

在集运行业&#xff0c;数据是企业决策的重要依据。为了在竞争中保持优势&#xff0c;企业需要一套高效、灵活且可靠的管理工具来应对市场的快速变化。易境通集运系统以其全面而精细的统计报表功能&#xff0c;成为企业决策优化和业务增长的重要助手。 易境通集运系统https://…

OpenLayers3, 箭头线绘制实现

文章目录 一、前言二、代码实现三、总结 一、前言 本文基于OpenLayers3&#xff0c;实现绘制箭头线的功能。 二、代码实现 <!DOCTYPE html> <html> <head><title>绘制箭头线</title><link href"../../libs/ol3/ol.css" rel"…