【SH】微信小程序调用EasyDL零门槛AI开发平台的图像分类研发笔记

文章目录

  • 微信小程序字符串
    • 字符串模板
    • 字符串拼接
  • 上传图片
    • 编写JS代码
    • 编写wxml代码
    • 编写wxss代码
  • GET请求测试
    • 编写测试代码
    • 域名不合法问题
  • GET和POST请求测试
    • 编写JS代码
    • 编写wxml代码
    • 编写wxss代码
  • 效果展示

微信小程序字符串

字符串模板

这是ES6引入的特性,允许你通过反引号(`)创建模板字符串,并在其中嵌入变量或表达式。

let name = 'Alice';
let age = 25;
let message = `My name is ${name} and I am ${age} years old.`;
console.log(message);  // 输出: My name is Alice and I am 25 years old.

字符串拼接

通过加号(+)将多个字符串和变量拼接在一起。

let name = 'Alice';
let age = 25;
let message = 'My name is ' + name + ' and I am ' + age + ' years old.';
console.log(message);  // 输出: My name is Alice and I am 25 years old.

上传图片

图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 注意请去掉头部

媒体 / 图片 / wx.chooseImage(弃用)
媒体 / 视频 / wx.chooseMedia
文件 / FileSystemManager / FileSystemManager.readFile

编写JS代码

// index.js
Page({/*** 页面的初始数据*/data: {imagePaths: [], // 用于存储图片路径的数组imageBase64: '', // 用于存储图片转换成的Base64编码},// 按钮点击事件处理函数chooseAndUploadImage: async function () {try {//刷新数据this.setData({imagePaths: [],imageBase64:'',imageClassification:{}});// 图片上传const getImageInfo = await this.uploadImage();console.log('图片上传成功', getImageInfo.tempFiles);this.setData({imagePaths: [getImageInfo.tempFiles[0].tempFilePath]});// 编码转换const getBase64 = await this.convertToBase64(getImageInfo.tempFiles[0].tempFilePath);console.log('转换Base64编码成功!');// console.log('编码转换成功', getBase64.data);this.setData({imageBase64: getBase64.data});// console.log('页面Base64编码参数值:', this.data.imageBase64);} catch (error) {// 处理错误console.error('图片上传操作失败:', error);// 可以给用户一个错误提示// wx.showToast({ title: '请求失败', icon: 'none' });}},uploadImage: function () {return new Promise((resolve, reject) => {// 选择图片wx.chooseMedia({count: 1, // 允许选择的图片数量mediaType: ['image'], // 文件类型sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机sizeType: ['original', 'compressed'], // 是否压缩所选文件,基础库2.25.0前仅对 mediaType 为 image 时有效,2.25.0及以后对全量 mediaType 有效 camera: 'back', // 仅在 sourceType 为 camera 时生效,使用前置或后置摄像头success(res) {resolve(res)// 上传成功后的回调// console.log('上传成功', res.tempFiles); // 这里可以处理服务器返回的数据// console.log(res.tempFiles[0].tempFilePath)// console.log(res.tempFiles[0].size)},fail(err) {reject(err);// 选择图片失败后的回调console.error('选择图片失败', err);}});});},// 图片转base64编码函数convertToBase64: function (filePath) {return new Promise((resolve, reject) => {const fs = wx.getFileSystemManager();fs.readFile({filePath: filePath,encoding: 'base64',success(res) {// const base64Data = 'data:image/png;base64,' + res.data; // 注意:这里假设图片是png格式,你需要根据实际情况修改MIME类型resolve(res);},fail(err) {reject(err);}});});}
})

编写wxml代码

<!--pages/index/index.wxml-->
<view class="disease"><button bindtap="chooseAndUploadImage">选择图片</button><block wx:if="{{imagePaths.length > 0}}"><!-- <image src="{{imagePaths[0]}}" mode="widthFix" style="width: 100%;"></image> --><image class="fixed-image" src="{{imagePaths[0]}}" mode="aspectFit"></image></block><block wx:else><text>没有选择图片</text></block>
</view>

编写wxss代码

/* 疾病图片样式 */
.disease {text-align: center;padding: 20px;
}.fixed-image {width: 100%; /* 宽度设为100% */height: 300px; /* 你可以根据需要调整高度 */object-fit: cover; /* 确保图片按比例缩放并填充容器 */display: block; /* 移除图片下方的默认间隙 */margin: 0 auto; /* 居中显示 */
}

GET请求测试

编写测试代码

在页面的JS文件中写入如下代码:

// 假设这是一个页面(page)的 JS 文件
Page({data: {responseData: {}  // 用于存储服务器返回的响应数据},// 按钮点击事件,触发 POST 请求handleButtonClick: function() {wx.request({url: 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=替换为你的API_KEY&client_secret=替换为你的SECRET_KEY',  // 请求的 URLmethod: 'GET',  // 指定请求方法为 GETheader: {  // 根据服务器要求设置请求头'content-type': 'application/json'},success: (res) => {// 请求成功时执行的回调函数console.log('请求成功', res.data);this.setData({responseData: res.data  // 将响应数据存储在页面的 data 中});},fail: (error) => {// 请求失败时执行的回调函数console.error('请求失败', error);}});}
});

在 WXML 文件中添加一个按钮:

<!-- 假设这是页面的 WXML 文件 -->
<view><button bindtap="handleButtonClick">发送 POST 请求</button><view><!-- 显示服务器返回的响应数据 --><text>{{responseData['refresh_token']}}</text></view>
</view>

域名不合法问题

域名问题
解决方案
请参考文档:基础能力 / 网络 / 使用说明
网页登录微信小程序管理后台,【管理->开发管理->服务器域名->修改】,添加域名即可。
在这里插入图片描述
微信开发者工具,【详情->项目配置->域名信息】,显示新增的域名说明添加成功。
项目配置

GET和POST请求测试

GET请求的返参作为POST请求的入参

编写JS代码

// index.js
Page({/*** 页面的初始数据*/data: {apiKey: '替换成你的',secretKey: '替换成你的',accessToken: '', // 用于存储服务器返回的access_token值imagePaths: [], // 用于存储图片路径的数组imageBase64: '', // 用于存储图片转换成的Base64编码imageClassification: {} // 用于存储图像分类结果},// 假设这是某个事件处理函数,比如按钮点击事件handleButtonClick: async function () {try {// 判断图片转换编码是否为空,为空就直接返回if (this.data.imageBase64 === '') {console.log('imageBase64 为空');return 0} else {console.log('执行其他操作');// 执行其他操作}// 发起GET请求const getResult = await this.getAccessToken();console.log('AccessToken请求成功!', getResult.data);this.setData({accessToken: getResult.data.access_token});console.log('AccessToken参数值:', this.data.accessToken);// // 从GET请求的响应中提取需要的数据// const neededData = getResult.data.access_token; // 假设someKey是你需要的字段// 使用GET请求的返回值作为POST请求的参数const postResult = await this.postImageClassification();// 处理POST请求的响应console.log('疾病诊断POST请求成功!', postResult.data);this.setData({imageClassification: postResult.data.results});console.log('疾病诊断结果:', this.data.imageClassification);} catch (error) {// 处理错误console.error('疾病诊断请求失败:', error);// 可以给用户一个错误提示// wx.showToast({ title: '请求失败', icon: 'none' });}},// 封装GET请求的函数getAccessToken: function () {return new Promise((resolve, reject) => {wx.request({url: `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${this.data.apiKey}&client_secret=${this.data.secretKey}`, // GET请求的URLmethod: 'GET',success: (res) => {if (res.statusCode === 200) {resolve(res); // 解析Promise为成功状态,并传递响应数据} else {reject(new Error(`GET请求失败,状态码:${res.statusCode}`)); // 解析Promise为失败状态,并传递错误信息}},fail: (err) => {reject(err); // 网络错误或其他错误时解析Promise为失败状态}});});},// 封装POST请求的函数postImageClassification: function () {return new Promise((resolve, reject) => {wx.request({url: `https://aip.baidubce.com/rpc/2.0/ai_custom/v1/classification/pifubingzhenduan?access_token=${this.data.accessToken}`, // POST请求的URLmethod: 'POST',data: {image: this.data.imageBase64 // 将GET请求的返回值作为POST请求的参数},header: {'content-type': 'application/json' // 根据需要设置请求头},success: (res) => {if (res.statusCode === 200) {resolve(res); // 解析Promise为成功状态,并传递响应数据} else {reject(new Error(`POST请求失败,状态码:${res.statusCode}`)); // 解析Promise为失败状态,并传递错误信息}},fail: (err) => {reject(err); // 网络错误或其他错误时解析Promise为失败状态}});});}
})

编写wxml代码

<!-- 诊断 -->
<view class="diagnosis"><button bindtap="handleButtonClick">疾病诊断</button><view class="table"><block wx:for="{{imageClassification}}" wx:key="index"><view class="table-row"><view class="table-cell">{{item.name}}</view> <view class="table-cell">{{item.score}}</view></view></block></view>
</view>

编写wxss代码

/* 诊断样式 */
.diagnosis {padding: 20px;
}.table {display: flex;flex-direction: column;width: 100%;
}.table-row {display: flex;justify-content: space-between;width: 100%;margin-bottom: 10px; /* 根据需要调整行间距 */
}.table-cell {flex: 1; /* 使两列平分宽度 */padding: 10px; /* 根据需要调整单元格内边距 */box-sizing: border-box; /* 确保内边距不影响总宽度 */border: 1px solid #ddd; /* 可选:添加边框 */text-align: center; /* 可选:文本居中 */
}

效果展示

界面效果

界面效果
识别效果

识别效果

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

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

相关文章

[小白系列]Ubuntu安装教程-安装prometheus和Grafana

Docker安装prometheus 拉取镜像 docker pull prom/prometheus 配置文件prometheus.yml 在/data/prometheus/建立prometheus.yml配置文件。&#xff08;/data/prometheus/可根据自己需要调整&#xff09; global:scrape_interval: 15s # By default, scrape targets ev…

[大数据]Hudi编译集成

1. Hudi概述 1.1 Hudi简介 What is Apache Hudi Apache Hudi is the next generation streaming data lake platform. Apache Hudi brings core warehouse and database functionality directly to a data lake. Hudi provides tables, transactions, efficient upserts/dele…

windows下 mysql开启 binlog日志

一、查看是否开启 binlog -- 方式一 show binary logs;-- 方式二 show VARIABLES like log_bin 说明没有开启 方式一 &#xff1a;you are not using binary logging 方式二&#xff1a;log_bin off 二、编辑 my.ini 配置文件 默认安装地点位于&#xff1a;C:\ProgramDat…

Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

Android 逆向/反编译/Hook修改应用行为 基础实现

前言&#xff1a;本文通过一个简单的情景案例实现安卓逆向的基本操作 一、情景描述 本文通过一个简单的情景案例来实现安卓逆向的基本操作。在这个案例中所使用的项目程序是我自己的Demo程序&#xff0c;不会造成任何的财产侵害&#xff0c;本文仅作为日常记录及案例分享。实…

IDEA创建Spring Boot项目配置阿里云Spring Initializr Server URL【详细教程-轻松学会】

1.首先打开idea选择新建项目 2.选择Spring Boot框架(就是选择Spring Initializr这个) 3.点击中间界面Server URL后面的三个点更换为阿里云的Server URL Idea中默认的Server URL地址&#xff1a;https://start.spring.io/ 修改为阿里云Server URL地址&#xff1a;https://star…

基于MATLAB的信号处理工具:信号分析器

信号&#xff08;或时间序列&#xff09;是与特定时间相关的一系列数字或测量值&#xff0c;不同的行业和学科将这一与时间相关的数字序列称为信号或时间序列。生物医学或电气工程师会将其称为信号&#xff0c;而统计学家或金融定量分析师会使用时间序列这一术语。例如&#xf…

Plugin - 插件开发03_Spring Boot动态插件化与热加载

文章目录 Pre方案概览使用插件的好处流程CodePlugin 定义Plugin 实现Plugin 使用方动态加载插件类加载器注册与卸载插件配置文件启动类测试验证 小结 Pre 插件 - 通过SPI方式实现插件管理 插件 - 一份配置&#xff0c;离插件机制只有一步之遥 插件 - 插件机制触手可及 Plug…

ECharts柱状图-阶梯瀑布图,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

C/C++流星雨

系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C/C…

ModelScope-Agent(1): 基于开源大语言模型的可定制Agent系统

目录 简介快速入门 简介 github地址 快速入门 看前两篇&#xff0c;调用千问API和天气API # 选用RolePlay 配置agent from modelscope_agent.agents.role_play import RolePlay # NOQArole_template 你扮演一个天气预报助手&#xff0c;你需要查询相应地区的天气&#x…

【模型对比】ChatGPT vs Kimi vs 文心一言那个更好用?数据详细解析,找出最适合你的AI辅助工具!

在这个人工智能迅猛发展的时代&#xff0c;AI聊天助手已经深入我们的工作与生活。你是否曾在选择使用ChatGPT、Kimi或是百度的文心一言时感到一头雾水&#xff1f;每款AI都有其独特的魅力与优势&#xff0c;那么&#xff0c;究竟哪一款AI聊天助手最适合你呢&#xff1f;本文将带…

微信小程序uni-app+vue3实现局部上下拉刷新和scroll-view动态高度计算

微信小程序uni-appvue3实现局部上下拉刷新和scroll-view动态高度计算 前言 在uni-appvue3项目开发中,经常需要实现列表的局部上下拉刷新功能。由于网上相关教程较少且比较零散,本文将详细介绍如何使用scroll-view组件实现这一功能,包括动态高度计算、下拉刷新、上拉加载等完整…

SQL——DQL分组聚合

分组聚合&#xff1a; 格式&#xff1a; select 聚合函数1(聚合的列),聚合函数2(聚合的列) from 表名 group by 标识列; ###若想方便分辨聚合后数据可在聚合函数前加上标识列&#xff08;以标识列进行分组&#xff09; 常见的聚合函数: sum(列名):求和函数 avg(列名)…

maven打包时出现找不到符号的错误如何解决

在maven打包的时候有时会出现找不到符号的情况&#xff0c;具体原因是由于引用的BaseEntity是framework模块下的实体类&#xff0c;所以需要将framework重新clean再install&#xff0c;成功后再将我们的模块打包就成功了

openGauss开源数据库实战二十一

文章目录 任务二十一 使用JDBC访问openGauss数据库任务目标实施步骤一、准备工作 二、下载并安装JavaSE81 下载JavaSE8安装Java8SE并配置环境变量 三、下载并安装eclipse四、下载并安装openGauss的JDBC驱动包五、使用IDEA编写JDBC测试程序1 使用IDEA的SSH连接虚拟机2 创建项目并…

Git:常用命令

一、查看当前分支 git branch 二、查看所有分支 git branch -a 三、切换到远程分支 git checkout origin/分支名 示例&#xff1a;git checkout origin/dev 四、拉取远程分支代码 git pull origin 分支名 示例&#xff1a;git pull origin dev 五、常用指令 查看暂存区…

运维实战:K8s 上的 Doris 高可用集群最佳实践

今天我们将深入探讨&#xff1a;&#xff1a;如何在 K8s 集群上部署 Compute storage coupled&#xff08;存算耦合&#xff09; 模式的 Doris 高可用集群&#xff1f; 本文&#xff0c;我将为您提供一份全面的实战指南&#xff0c;逐步引导您完成以下关键任务&#xff1a; 配…

在GITHUB上传本地文件指南(详细图文版)

这份笔记简述了如何在GITHUB上上传文件夹的详细策略。 既是对自己未来的一个参考&#xff0c;又希望能给各位读者带来帮助。 详细步骤 打开目标文件夹&#xff08;想要上传的文件夹&#xff09; 右击点击git bash打开 GitHub创立新的仓库后&#xff0c;点击右上方CODE绿色按…

Vue框架入门

Author&#xff1a;Dawn_T17?? 目录 什么是框架 一.Vue 的使用方向 二.Vue 框架的使用场景 &#xff08;TIP&#xff09;MVVM思想 三.Vue入门案例 TIP&#xff1a;插值表达式 四.Vue-指令? &#xff08;1&#xff09;v-bind 和 v-model? ? &#xff08;2&#x…