鸿蒙项目云捐助第十九讲云捐助百度智能名片识别

server/2024/12/23 5:15:12/

鸿蒙项目云捐助第十九讲云捐助百度智能名片识别

鸿蒙云捐助项目中添加智能元素,这里实现鸿蒙云捐助的名片识别功能,用户只需要上传一张名片,就可以识别出地址和名字,根据地址和名字进行真实信息的确认。

首先找到OCR的名片识别接口,这个接口在百度AI的百度云中。

这里进入到的百度智能云平台的文字识别选项。在文字识别的文档中心中输入“名片”可以找到“名片识别”的接口。接口中可以看到名片识别的文档,如下图所示。

在这个文档中可以得知上传OCR名片的请求地址,在这个地址需要上传base64编码的图片,在上传图片时一定要在百度智能云平台做鉴权,做过鉴权后可以拼接出一个access_token的请求token值,把这个token值放在请求的地址中,使用post方式提交请求并携带base64编码的图片,这里注意一定要携带headers头文件,头文件中指定content-type的值是application/x-www-form-urlencoded。这样才可以获取到名片的地址。

在进行开发工作之前,需要在百度智能云中开通“名片识别”的服务,这里首先需要进入百度智能云文字识别的应用列表页面,如下图所示。

点击左侧的应用列表,可以看到“创建应用”的对话框,这里使用“名片识别”的服务就需要先创建一个应用。如下图所示。

在图示的页面中点击“创建应用”,这里输入应用名称,然后选择免费的文字识别服务,这里“名片识别”是免费的服务,在服务方面选择“名片识别”,如下图所示。

选择“名片识别”服务后,下面还有“应用归属”方面的设置信息,如下图所示。

这里将应用归属设置为“个人”,并且在应用描述中描述此应用的具体作用“这是一个识别卡片的demo应用”。输入信息后,点击下面的“立即创建”按钮完成应用的创建。创建后的效果如下图所示。

完成应用创建后,回到应用列表的页面,可以看到刚才创建的应用,并且能够看到应用的API key和secrent Key,这两个key在开发中都需要使用,如下图所示。

百度智能云的工作准备好后,这里进行鸿蒙功能的开发,在阅读文档时了解实现OCR智能识别需要用post方式上传图片,图片base64编码比较大,只能使用post方式,鸿蒙使用post方式请求数据时,最好的方式是使用模块axios第三方异步模块。这里通过鸿蒙DevEco Studio的Terminal安装axios的模块。

安装成功后,这里可以看到axios安装的版本信息是2.2.4。

这里需要把axios的版本2.2.4放在鸿蒙项目的oh-package.json5文件中。如下图所有所示。

添加axios的版本后,点击左上角的Sync同步一下这个文件。

当这里的符号变成绿色的对号表示同步更新结束,如下图所示。

这里可以在component文件夹建立MyMindSporeObject的组件,在组件中修改标题名称为“名片地址识别”。

这里在布局中加入Image 组件,用来显示从相册中选择的图片,对于相同的地址this.myurl就是从相册中获取的地址,这个地址在最初的时候赋值为空,初始化语句@State myurl:string=""表示的就是初始化的空值。在Image图片组件的下面就是Button按钮,Button按钮的作用是“打开相册”的功能按钮。其功能和布局代码如下图所示。

这里打开相册的onClick事件中首先调用picker模块中的PhotoSelectOption的实际化方法,这是相册选择的选项设置,设置了maxSelectNumber的最大选择图片的数量,然后new实例化picker模块中PhotoViewPicker()的相册选择实例,实例化相册选择后,调用select 方法选择相册中的文件,这里需要await异步,因为相册选择需要等待用户选择图片才可以进行显示,用户选择图片后执行到promise返回的then方法,在then方法中将全局地址myurl记录当前的相册地址,相册选择后返回的数据是一个json数据,在json数据中, photoUris的选项中存储的是文件地址,这里是一个数组,数据的第一项索引为0值。即调用数组的索引0值即可获取相册中选择的图片地址。

接下来布局文件中需要加入“提取名片信息”的功能按钮,也就是进行百度大模型OCR的识别。在识别逻辑中前期需要进行base4编码的转换,这里面还需要在导入模块处加入util工具包的导入。如下图所示。

导入工具包后,这里我们为按钮“提取名片信息”添加onClick事件,事件中调用工具包util的Base64Helper工具进行图片的base64转码。代码如下图所示。

代码在onClick方法中先使用fileIo模块异步打开相册路径this.myurl中的文件,这里打开模式为OpenMode.READ_ONLY只读方式,然后读取的内容需要到缓冲区内,这里就定义一个ArrayBuffer,ArrayBuffer大小指定为配置文件中的常量,这里是4096000,相当于是4M的缓存空间数组,然后通过fileIo模块的readSync异步读取文件到ArrayBuffer的缓存数组中,接下来实例化util模块的Base64Helper工具类,调用encodeToStringSync的方法将读入缓存的图片数据转成base64编码。完成图片的base64转码后就需要调用百度大模型的OCR功能,这里首先获取百度大模型的access_token的token值。

根据文档要求,需要通过http请求htts://api.baidubce.com/oauth/2.0/token?grant_type=client_credentials的地址,这里传入client_id的值,其值就是百度OCR接入应用的api_key,再传入client_secret的值,这个值就是百度OCR接入应用的secrent_key,代码如下图所示。

这里就通过http.createHttp()方法建立http请求,并在请求地址中将百度OCR应用的api_key和secret_key传入,获取百度OCR应用的access_token值。请求成功后打印token代码如下图所示。

这里打印结果为百度Access Token接口返回的JSON数据中result中的access_token值,使用这个值继续请求百度OCR端口,并上传OCR图片的base64编码值。这里再次发送请求使用axios的模块,首先导入模块,代码如下图所示。

继续请求需要使用axios的post方法进行请求。根据百度文档,必须具备的参数如下图所示。

这里还要读取一个axios中post的源码,了解一下post的参数,如下图所示。

在源码中指出,这里post方法第一个参数请求数据的类型,第二个参数是返回数据的类型,第三个是设置。根据百度的上传要求,需要定义一个上传的接口,把base64的image定义成接口,如下图所示。

在使用axios的post方法还需要设置输出类型,这里根据一切皆对象,把输出类型设置为object。如下图所示。

这里调用axios.post方法第一个输入参数为接口MyImage,第二个参数是返回的类型,总体是AxiosResponse,其中的元素类型是object对象,第三个参数这里设置为null。这里把百度接口的参数放在post的方法中,如下图所示。

这里的newurl就是百度OCR识别的地址,params参数中加入image的base64编码图片,headers中指明请求的头文件。其返回结果是Promise,因此可以用then方法来接收返回值。如下图所示。

这里接收内容并转化成JSON数据输出。代码完成后,需要在main_pages中添加该页面组件,这样页面组件就可以进行预览,如下图所示在main_pages中加入页面的代码。

加入页面后点击右上角的“Sync Now”直到显示对号为止。如下图所示。

对于应用,需要模拟器启动后显示该页面进行调试。这里通过修改EntryAbility调整启动页面,如下图所示。

启动模拟器,运行后点击按钮进行数据解析,显示结果如下图所示。

这里解析之后可以通过设置全局变量获取名片中的地址,姓名和电话,代码如下图所示。

在OCR解析名片成功后,分别获取名片中的地址,电话和姓名,代码如下图所示。

这里运行后,点击解析可以看到解析后的名片内容

至此完成鸿蒙云捐助项目的OCR名片识别,后续还会带来华为云开发技术及大模型的精彩,欢迎关注。


http://www.ppmy.cn/server/152411.html

相关文章

Dapper

Dapper 简介 Dapper 是一个轻量级的 ORM(对象关系映射)库,由 Stack Overflow 团队开发并维护。它旨在提供高效的数据库访问,同时保持代码的简洁性和性能。Dapper 的核心功能是将 SQL 查询结果自动映射到 C# 对象,而不…

Java web的发展历史

目录 前言: 一.Model I和Model II 1.Model I开发模式 ​编辑 2.Model II开发模式 二. MVC模式 前言: 该篇文章主要介绍了Java web的发展历史,以及MVC相关内容 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是&#xff…

uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点

兼容H5、安卓App、微信小程序 实现逻辑&#xff1a;给默认选中节点的所有子节点添加一个disabled属性&#xff0c;以此禁用子节点。 /components/sonTreeNode/sonTreeNode.vue 封装成组件 <template><view><view :class"[item,item.is_level1?pL1:item…

Linux docker-20.10.9安装

Linux Docker20.10.9安装 解压文件 tar -xvf docker-20.10.9.tgz 给docker执行文件赋予可执行权限 chmod 755 -R docker/复制docker到/usr/bin/目录下,使docker命令可以执行 cp docker/* /usr/bin/将Docker注册为service&#xff0c;创建docker.service文件 vim /etc/syst…

SQL注入的那些面试题总结

一、知识储备类 1.SQL与NoSQL的区别&#xff1f; SQL&#xff1a;关系型数据库 NoSQL&#xff1a;非关系型数据库 存储方式&#xff1a;SQL具有特定的结构表&#xff0c;NoSQL存储方式灵活 性能&#xff1a;NoSQL较优于SQL 数据类型&#xff1a;SQL适用结构化数据&#xff0c;…

在 Spark 上实现 Graph Embedding

在 Spark 上实现 Graph Embedding 主要涉及利用大规模图数据来训练模型&#xff0c;以学习节点的低维表示&#xff08;嵌入&#xff09;。这些嵌入能够捕捉和反映图中的节点间关系&#xff0c;如社交网络的朋友关系或者物品之间的相似性。在 Spark 上进行这一任务&#xff0c;可…

在 Spring Boot 3 中实现基于角色的访问控制

基于角色的访问控制 (RBAC) 是一种有价值的访问控制模型,可增强安全性、简化访问管理并提高效率。它在管理资源访问对安全和运营至关重要的复杂环境中尤其有益。 我们将做什么 我们有一个包含公共路由和受限路由的 Web API。受限路由需要数据库中用户的有效 JWT。 现在用户…

智慧商城:点击“加入购物车”判断是否登录来进行跳转到登录页登录并回跳 + 发请求渲染加入购物车数量的角标

点击“加入购物车”判断是否登录来进行跳转到登录页登录并回跳 按需引入需要的 Dialog 组件并进行全局注册 Vue.use( )仅仅在Vue组件的上下文中起作用&#xff0c;所以在Vue组件中通过 this.$ 来使用 在 js 文件中则还要导入&#xff0c;然后直接使用&#xff0c;并不需要 this…