木棉花:基于harmonyos的ai图像识别应用开发(ets)(代码片段)

开源基础软件社区官方 开源基础软件社区官方     2022-12-03     572

关键词:

前言

原本打算在九联开发板上搭配摄像头开发,去实现拍照并对图片进行AI识别的应用开发,但是遇到了点问题(见正文,也欢迎大家评论区解答)。 不过基于HarmonyOS的AI图像识别案例可以正常运作,于是作此文章作为小分享O(∩_∩)O。

概述

本案例是通过网络请求连接到百度云,调用百度云AI图像识别的API,再将结果返回至应用显示。百度云文档 举例效果图:

正文

一、创建项目

项目选择HarmonyOS的Empty Ability模板,API选择8,语言选择ets。

二、添加权限及导入模块

1、在config.json文件中添加权限

  "reqPermissions": [
      
        "name": "ohos.permission.INTERNET"
      
    ]

2、在index.ets文件中导入模块,第一个是资源管理模块,第二个是网络模块。

import resourceManager from @ohos.resourceManager;
import http from @ohos.net.http;

三、创建网络请求并根据百度云API传参

该API调用前需要获取access_token,具体方法见其文档(注意的是创建应用后要去开启图像识别的服务)

1、定义变量

  @State access_token: string = Hello World
  @State Base64Str: string = Hello World
  @State result_description: string = description
  @State result_keyword: string = keyword
  @State result_root: string = root
  @State result_image: string = image

并上传要识别的图片到项目中,此案例中使用的是一张莲藕的图片。

2、编写函数获取access_token

GetAccessToken() 
    let httpRequest = http.createHttp();
    httpRequest.request(
//自行替换AK和SK
      "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】",
      
        method: http.RequestMethod.POST,
        connectTimeout: 60000,
        readTimeout: 60000,
      , (err, data) => 
      if (!err) 
        let obj = JSON.parse(data.result.toString());
        this.access_token=obj.access_token
        console.info(Result1: + data.result);
        console.info(Result1_token: + this.access_token);
       else 
        console.info(Result1_error: + JSON.stringify(err));
        httpRequest.destroy();
      
    )
  

3、编写函数编码图片并去掉编码头

resourceManager.getResourceManager 此API只适用于FA模型,stage模型不适用。(所以在标准系统相机开发模型为stage时,不能用此方法对图片编码)

//base64编码
GetBase64()
    let that = this
    resourceManager.getResourceManager((error, mgr) => 
      if (error != null) 
        console.log("ResourceManager error is " + error)
       else 
        mgr.getMediaBase64($r(app.media.lianou).id, (error, value) => 
          if (error != null) 
            console.log("base64_error is " + error)
           else 
            console.info(base64_result: + value)
            that.Base64Str = that.getCaption(value)
            console.info(base64Str: + this.Base64Str)
          
        );
      
    );
  
//去掉编码头
  getCaption(obj) 
    var index = obj.lastIndexOf("\\,");
    obj = obj.substring(index + 1, obj.length);
    return obj;
  

4、编写函数调用图像识别API

注:这里 header:Content-Type: application/x-www-form-urlencoded 才能传image参数到百度云。HTTP请求头字段,默认Content-Type: application/json 。笔者将能在harmonyOS模拟器上跑起来的同样代码复制到一个新建的openHarmony项目中,但是会报错:缺参。通过后台调试发现能接收url的参数access_token和header参数,当header为默认类型时能接收到extraData里的参数,但当header为application/x-www-form-urlencoded时,无法收到extraData里的参数,所以初步认为是笔者所用OH系统版本的网络请求库不支持application/x-www-form-urlencoded传参。

  AI_request() 
    let httpRequest = http.createHttp();
    httpRequest.request(
      "https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general?access_token="+ this.access_token,
      
        method: http.RequestMethod.POST,
        header: 
          Content-Type: application/x-www-form-urlencoded
        ,
        extraData: 
          image: this.Base64Str,
          baike_num: 1
        ,
        connectTimeout: 60000,
        readTimeout: 60000,
      , (err, data) => 
      if (!err) 
        let obj = JSON.parse(data.result.toString());
        this.result_description = obj.result[0].baike_info.description;
        this.result_keyword = obj.result[0].keyword;
        this.result_image = obj.result[0].baike_info.image_url;
        this.result_root = obj.result[0].root;
   
        console.info(Result_description: + this.result_description)
        console.info(Result_keyword: + this.result_keyword)
        console.info(Result_root: + this.result_root)
        console.info(Result_image: + this.result_image)
       else 
        console.info(Result2_error: + JSON.stringify(err));
        httpRequest.destroy();
      
    )
  

四、编写UI界面调用函数

因为图片编码需要点时间,为了避免传参时出现错误,于是添加了一个延迟函数。

 build() 
    Column( space: 10 ) 
      Button(AI识别)
        .onClick(() => 
          this.GetBase64()
          this.GetAccessToken()
          setTimeout(()=>
            this.AI_request()
          ,1400)
        )
      Image(this.result_image)
        .width(150)
        .height(150)

      Row( space: 20 ) 
        Text(this.result_keyword)
          .fontSize(20)
          .width(150)
          .height(35)
          .textAlign(TextAlign.Start)
        .margin(15)
        Text(this.result_root)
          .fontSize(20)
          .textAlign(TextAlign.Start)
          .width(150)
          .height(35)
          .margin(15)
      .width(100%)
      .height(35)

      Text(this.result_description)
        .fontSize(20)
        .textAlign(TextAlign.Start)
        .width(90%)
        .height(250)
    
    .width(100%)
    .height(100%)

  

结语

以上就是本次的小分享啦!❀❀

更多资料请关注我们的项目 : Awesome-Harmony_木棉花

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com/#bkwz

浅析基于视频图像的智能分析网关ai算法及场景应用

目前在视频监控领域应用较为广泛的AI技术有:智能检测与分析技术(人脸检测与识别、物体识别、行为识别、目标追踪等)、图像及视频处理技术(视频图像处理、视频结构化等)。在场景上,视频监控... 查看详情

起步harmonyos生态的入门学习路线及资源

...学们提供一点学习的建议。  深圳大学HarmonyOS校园组织木棉花可以作为我们对标学习的对象,他们在Gitee页面整理的资源,可以作为我们学习的最近参考,见[链接]  HarmonyOS开发有南向北向之分。上北下南,南... 查看详情

python视觉识别--opencv开闭操作\分水岭算法(九)

参考技术A闭操作:1、图像形态学的重要操作之一,基于膨胀与腐蚀操作组合形成的2、主要是应用在二值图像分析中,灰度图像也可以3、开操作=膨胀+腐蚀,输入图像+结构元素开操作:1、图像形态学的重要操作之一,基于膨胀... 查看详情

各类场景应用中涉及的ai算法汇总

参考技术A整理了各类场景应用中AI算法一、图像CV内容安全,目标检测,图像识别,智能视觉生产,图像搜索,图像分割,物体检测,图像分类,图像标签,名人识别,概念识别,场景识别,物体识别,场景分析,智能相册,内... 查看详情

图像识别|ai在医学上的应用

参考:登上《Cell》封面的AI医疗影像诊断系统:机器之心专访UCSD张康教授IdentifyingMedicalDiagnosesandTreatableDiseasesbyImage-BasedDeepLearning 2018-2-22Cell读《IdentifyingMedicalDiagnosesandTreatableDiseasesbyImage-BasedDeepLear 查看详情

浅析ai人脸识别/车辆识别智能分析网关的深度学习算法及应用场景

...化、网格化。人工智能技术则可以弥补人类的不足,基于计算机视觉的图像分析处理技术,可以检测与识别出视频中的重要细节与潜在的危险等 查看详情

ai人脸检测/行为识别智能分析网关8大智慧应用场景分析

基于AI计算机视觉技术的智能安防风险预警监测系统设计,以AI视频智能识别与分析能力为核心,结合AI边缘计算硬件设备(智能分析网关)与EasyCVR视频融合管理平台,通过对场景中的监控视频图像进行智能识... 查看详情

浅析基于ai智能识别技术的明厨亮灶智能化监管方案

以云计算、大数据、人工智能为代表的新兴技术,不断驱动着视频监控与视频应用等各领域业务层面的创新,同时AI计算机视觉技术的深度应用,也将成为各行各业有效的AI+视频监控解决方案。目前在视频监控领域... 查看详情

浅析ai智能分析网关的车辆/车牌识别技术的研发及应用场景

车牌识别技术是计算机视频图像识别技术在车辆牌照识别中的一种应用,它融合了ORC识别、云计算等多种技术,可将运动中的汽车牌照从复杂的背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字... 查看详情

基于百度云的ai接口调用

基于百度云的AI接口调用人工智能(ArtificialIntelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。  人工智能是计算机科学的一个分支,它企图了解... 查看详情

基于百度ocr提取图像中的文本(代码片段)

从图片或者扫描版的pdf文件中提取出文本信息的需求在日常工作和学习中经常遇到。扫描版的pdf文件可以使用adobeacrobat将文本数据提取出来,不过adobeacrobat安装文件较大且收费。部分网站也提供在线OCR服务,这些网站在不注册的... 查看详情

基于百度ocr提取图像中的文本(代码片段)

从图片或者扫描版的pdf文件中提取出文本信息的需求在日常工作和学习中经常遇到。扫描版的pdf文件可以使用adobeacrobat将文本数据提取出来,不过adobeacrobat安装文件较大且收费。部分网站也提供在线OCR服务,这些网站在不注册的... 查看详情

百度ai基于node语音识别音频文件类型转换

项目简介源代码移步:https://github.com/xuess/ai-baidu-node本项目主要功能为,本地音频语音识别和文件类型转换(利用fluent-ffmpeg)config.js里面的应用Id,请替换成自己在百度应用里申请的。出于测试方便,我就不删除了。1.工程依赖安装... 查看详情

实战!轻松搭建图像分类ai服务(代码片段)

...「说」、「动」、「理解」、「分辨」和「思考」。AI在图像识别和文本处理方面的效果尤为突出,且已经应用到人类的生活中,例如人脸识别、对话、车牌识别、城市智慧大脑项目中的目标检测和目标分类等。接下来,我们将... 查看详情

内置ai算法的智能分析网关,如何将智能识别技术应用到生活场景中?

...I视频识别技术是计算机视觉中增长最快的领域之一,基于AI算法对视频内容进行检测分析,通过提取视频中的关键信息进行标记或者相关处理,并形成相应事件的处理和告警。基于AI的视频智能分析是视频监控行业讨... 查看详情

nb-iot/lora超低功耗摄像头拍照抄表仪器终端的使用方法(基于ai视频图像分析ocr识别技术)

一、设备安装时的注意事项:1、不要完全固定牢设备,要将设备激活后,通过提供的账号网址查看设备拍照后的位置,及数字是否清晰来判断设备安装是否成功。2、设备确认好位置后,可以在微信群中联系我... 查看详情

ai视频识别涉及哪些技术?多场景应用让视频监控更智能

...I视频识别技术是计算机视觉中增长最快的领域之一,基于AI算法对视频内容进行检测分析,通过提取视频中的关键信息,进行标记或者相关处理,并形成相应事件的处理和告警。一、AI视频分析技术的优势基于AI的... 查看详情

基于ai边缘智能网关的工业质检应用

成品质量检验是工业生产最后必不可少的环节,随着我国工业化的蓬勃发展,工业产品日益迈向高端化、精密化,对于工业产品的质量检验要求和投入成本也在不断提高,产品质检涉及到比以往更多维度、更多零... 查看详情