前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >云开发---uniapp云开发云函数练习---整合百度ai图像识别SDK

云开发---uniapp云开发云函数练习---整合百度ai图像识别SDK

原创
作者头像
代码哈士奇
修改于 2021-02-11 10:14:00
修改于 2021-02-11 10:14:00
1.5K0
举报
文章被收录于专栏:dmhsq_csdn_blogdmhsq_csdn_blog

上篇文章https://cloud.tencent.com/developer/article/1786902我们大致了解了下云函数 这篇文章带大家使用云函数来整合百度ai图像识别SDK 也算是云函数的一个小练习 最好看完上个文章再来看这个 就当练习 两个文档需要看 uniCloud https://uniapp.dcloud.io/uniCloud/cf-common 百度ai图像识别SDK文档 https://cloud.baidu.com/doc/IMAGERECOGNITION/s/bk3bcxkdg

将sdk制作成公共模块

创建common目录

如果你没有cloudfunctions 参考上篇文章

在这里插入图片描述
在这里插入图片描述

鼠标右键点击这个文件夹 新建common目录

在这里插入图片描述
在这里插入图片描述

新建公共模块

右键点击common新建公共模块

我在这里起名为hello

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建完成

npm导入百度aip

这个时候 我们可以控制台进入 hello目录

在这里插入图片描述
在这里插入图片描述

根据百度ai开放平台图像识别SDK文档

https://cloud.baidu.com/doc/IMAGERECOGNITION/s/bk3bcxkdg

可得 我们需要 npm install baidu-aip-sdk来安装依赖

在hello目录下安装 执行npm install baidu-aip-sdk 建议使用cmd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再次封装

uniapp文档说 需要使用module.exports导出模块

我们在 /hello/index.js来编写

根据百度ai文档 node引入如下

在这里插入图片描述
在这里插入图片描述

我们结合下

代码语言:txt
AI代码解释
复制
var AipImageClassifyClient = require("baidu-aip-sdk").imageClassify;

// 设置APPID/AK/SK
var APP_ID = "你的 App ID";
var API_KEY = "你的 Api Key";
var SECRET_KEY = "你的 Secret Key";

// 新建一个对象,建议只保存一个对象调用服务接口
var client = new AipImageClassifyClient(APP_ID, API_KEY, SECRET_KEY);
module.exports = client

公共模块完成 右键点击hello文件夹 上传公共模块

编写云函数

按照上篇文章 我们右键单击cloudfunctons新建云函数 这里我起名为usehello

在这里插入图片描述
在这里插入图片描述

右键点击usehello 选择管理公共模块依赖 选择hello 更新依赖

在这里插入图片描述
在这里插入图片描述

代码

代码语言:txt
AI代码解释
复制
'use strict';
let client = require('hello')
exports.main = async (event, context) => {
	return new Promise(function(resolve){
		client.advancedGeneral(event.bas64).then(function(result) {
			resolve(result)
		}).catch(function(err) {
		    // 如果发生网络错误
		    console.log(err);
			return "error"
		});
	})
};

代码解释

event.bas64为接收的base64数据 具体往下看前端测试调用云函数

首先 我们导入公共模块的hello导出的client

在 主函数中编写 这里使用通用物体识别 根据文档

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里我们直接给云函数传送base64数据 当然等会会讲 图片也压缩了(用到了插件)

返回一个Promise对象 如果不使用Promise可以使用回调 但是Promise方便

我们把识别的结果抛出

云函数编写完成 右键点击hello 更新依赖本模块的云函数

小踩坑

如果出现 上传公共模块后 云函数还报错说无依赖的公共模块 需要你上传

修改 云函数目录下的package.json

代码语言:txt
AI代码解释
复制
"dependencies": {
		"hello": "file:..\\common\\hello"
	}

改为

代码语言:txt
AI代码解释
复制
"dependencies": {
		"hello": "file:../common/hello"
	}

操作完成即可

前端测试

我们直接使用 index

在这里插入图片描述
在这里插入图片描述

这里给logo图像加了个点击事件 testOne

使用了别人的压缩插件来压缩图像 插件地址https://ext.dcloud.net.cn/plugin?id=2316

当然如果不想使用别人的压缩插件 可以 通过如下步骤压缩

图片画到canvas上 自行压缩尺寸 最后生成 base64数据

页面

代码语言:txt
AI代码解释
复制
<template>
	<view class="content">
		<image class="logo" src="/static/logo.png" @click="testOne"></image>
		<helang-compress ref="helangCompress"></helang-compress>
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
	</view>
</template>

功能

说明

首先我们使用了uni.chooseImage选择一个图片 然后通过插件来压缩图片

然后将图片转换为base64数据 并调用云函数

图片转base64

请求压缩图像得到的临时图像地址 请求得到arraybuffer 通过uni.arrayBufferToBase64转化为base64

代码语言:txt
AI代码解释
复制
uni.request({
	url:resp,
	method:'GET',
	responseType: 'arraybuffer',
	success:function(res){
		let base64s = uni.arrayBufferToBase64(res.data);
	}
}

调用云函数

可以参考文档 https://uniapp.dcloud.io/uniCloud/cf-functions?id=clientcallfunction

我们调用写的usehello云函数 传送base64数据 key:value格式传送数据bas64:base64s

代码语言:txt
AI代码解释
复制
uniCloud.callFunction({
	name:'usehello',
	data: {bas64:base64s}
	}).then(res=>{
		console.log(res.result.result)
	})

得到抛出的结果

效果如下

在这里插入图片描述
在这里插入图片描述

完整功能代码

代码语言:txt
AI代码解释
复制
<script>
	import helangCompress from '@/components/helang-compress/helang-compress';
	export default {
		components: {
			helangCompress
		},
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {

		},
		methods: {
			testOne() {
				let vm = this;
				uni.chooseImage({
					count: 1,
					success: function(resq) {
						let filePath = resq.tempFilePaths[0]
						vm.$refs.helangCompress.compress({
							src: filePath,
							maxSize: 100,
							fileType: 'jpg',
							quality: 0.1,
							minSize: -1 //最小压缩尺寸,图片尺寸小于该时值不压缩,非H5平台有效。若需要忽略该设置,可设置为一个极小的值,比如负数。
						}).then(resp=>{
							uni.request({
								url:resp,
								method:'GET',
								responseType: 'arraybuffer',
								success:function(res){
									let base64s = uni.arrayBufferToBase64(res.data);
									uniCloud.callFunction({
										name:'usehello',
										data: {bas64:base64s}
									}).then(res=>{
										console.log(res.result.result)
									})
								}
							})
						})
					}
				})
			}
		}
	}
</script>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
TypeScript学习(一)
用户1696846
2023/08/25
1380
typescript快速入门
官方文档:https://www.tslang.cn/docs/handbook/typescript-in-5-minutes.html
阿超
2022/08/21
3200
typescript快速入门
TypeScript学习笔记(一)—— TypeScript入门
TypeScript是一种由微软开发的自由和开源的编程语言,它是JavaScript的一个超集,扩展了JavaScript的语法,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。安德斯·海尔斯伯格,C#的首席架构师,工作于TypeScript的开发。
张果
2022/10/04
1.3K0
TypeScript学习笔记(一)—— TypeScript入门
Typescript基础语法
typescript是一个js的超集,个人理解为包装了面向对象编程逻辑的语法糖,所以一般使用typescript的语言来编写代码,然后再使用typescript编译为原生js,这样就可以作为普通js脚本运行了。typescript语法很多地方与java类似,作为java程序员学起来不会很吃力。
歪歪梯
2020/06/19
1.6K0
typescript基础篇(1):helloworld
TypeScript是一种由微软开发的自由和开源的编程语言。作为JavaScript的一个超集,添加了可选的静态类型和基于类的面向对象编程。
一粒小麦
2020/08/07
8200
typescript基础篇(1):helloworld
TypeScript学习(一)
function greeter(person) { return "Hello, " + person; } let user = "Jane User"; document.body.innerHTML = greeter(user);
用户1696846
2021/04/02
2620
【初学者笔记】🐯年要掌握 Typescript
JavaScript 是弱类型语言, 很多错误只有在运行时才会被发现,而 TypeScript 提供了一套静态检测机制, 可以帮助我们在编译时就发现错误。
一尾流莺
2022/12/10
1.3K0
【初学者笔记】🐯年要掌握 Typescript
​ArkTS 语言简介
ArkTS 是鸿蒙生态的应用开发语言。它在保持 TypeScript(简称 TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码健壮性,并实现更好的运行性能。同时,提供了声明式 UI 范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用。
徐建国
2024/11/25
2640
​ArkTS 语言简介
typescript里一些有趣的点
在原生的JS里,null和undefined经常会导致BUG的产生, 在ts里,你又想用null,又担心出错的时候 你可以考虑用联合类型,当某值可能为 number或null,你可以声明它的类型为number | null
liulun
2019/07/02
3990
❤ 就这?TypeScript其实并不难!(建议收藏)❤
🎈 作者:不吃西红柿 🎈 简介:CSDN博客专家🏆、蓝桥签约作者、Python领域优质创作者、信息技术智库公众号创建者✌。技术交流、面试刷题尽管关注咨询我。 ---- 目录 一、什么是 TypeScript? 二、TS和JS的对比 三、TypeScript小课堂 01 TypeScript开发环境的构建 02 开启我们的helloWorld.ts 03 TS变量类型那些事 04 Ts函数 05 函数的三种定义方式 06 变量的作用域,函数划分 07 引用类型的数组 08 引用类型的字符串 09 引用类型的日
不吃西红柿
2022/07/29
1.7K0
❤ 就这?TypeScript其实并不难!(建议收藏)❤
强烈推荐:2020年15道优秀的TypeScript练习题 (上集)
TypeScript是目前不得不学的内容 Ts的东西其实非常非常的多,上到tsconfig的配置,下到写法,内容。 Ts正在疯狂的迭代,进入4.0版本即将,里面的内容非常非常的多,可以说,入门很简单,但是要写精通,真的还是要花很多功夫。 本文一共分上、下集,欢迎你关注我的公众号:【前端巅峰】,前端、后端、源码、架构、算法、面试都有,更有理财,心理学、开源项目等日常分享。 正式开始 第一题,基本interface使用考察,定义一个item接口,符合使用 interface item { name: str
Peter谭金杰
2020/07/21
1.1K0
TypeScript 期中考试现在开始!
相信这段时间来,对 TypeScript 感兴趣的小伙伴们已经把这个神器给系统的学习了一遍了吧。如果计划开始学习但是还没有开始,或者没有找到资料的同学,可以看下我在之前文章中 前端进阶指南 找一下 TypeScript 部分的教程,自行学习。
ssh_晨曦时梦见兮
2020/06/09
6840
TypeScript 期中考试现在开始!
typescript-exercises(五)
此处主要考察Partial<Type>的使用以及Omit<Type, Keys>的使用
阿超
2024/11/01
640
TypeScript学习笔记(二)—— TypeScript基础
JavaScript 的类型分为两种:原始数据类型(Primitive data types)和对象类型(Object types)。
张果
2022/10/04
5.2K0
TypeScript学习笔记(二)—— TypeScript基础
typescript-exercises(四)
阿超
2024/10/31
1150
TypeScript 练习题
TypeScript 的学习资料非常多,其中也不乏很多优秀的文章和教程。但是目前为止没有一个我特别满意的。原因有:
lucifer210
2020/09/30
1.3K0
TypeScript 练习题
TypeScript入门教程(一)
本文是TypeScript的入门文章,将分别从下面四点对TypeScript进行介绍:
前端林子
2018/10/14
5.7K0
TypeScript入门教程(一)
声明合并_TypeScript笔记16
TypeScript 里,一条声明可能会创建命名空间、类型或值,比如声明 Class 时会同时创建类型和值:
ayqy贾杰
2019/06/12
1.2K0
TypeScript 安利指南
据了解,目前有相当一部分同学不想去学习ts,毕竟没(xue)时(bu)间(dong)。很不幸两个月前我也是其中的一员。在看到尤大大都用ts写vue3了,蠢蠢欲动的我小心翼翼的踏入了这个深坑。在经历了长达一天的摸爬滚打之后,领悟到了真谛。
WecTeam
2020/01/14
9670
TypeScript 安利指南
一篇朴实的文章带捋完TypeScript基础,方法是正反对比!
最近在抽出点业余时间学习TypeScript,虽然平时也挺忙的,但是还是想分配些时间出来。掘金这篇文章不错,于是分享给大家。
coder_koala
2019/11/09
1.2K0
相关推荐
TypeScript学习(一)
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档