文章目录
1. 项目概述
随着环保意识的增强,垃圾分类已成为现代城市生活的重要组成部分。本文详细介绍一个基于微信小程序的垃圾分类应用开发过程,该应用包含用户模块、搜索模块、拍照识别模块、考试模块和个人中心五大核心功能模块。
2. 功能模块思维导导图
3. 配置天聚数行API
首先需要注册天聚数行开发者账号,获取API Key ,天聚数行官网地址: https://www.tianapi.com/
4. 创建小程序项目
使用微信开发者工具创建一个新项目,选择JavaScript或TypeScript作为开发语言,这里不展开细说
5. 技术架构
- 前端:微信小程序原生框架(WXML/WXSS/JS)
- 网络模块: wx.request API(网络请求)
- 图片识别:天聚数行图像识别API
- 搜索服务:天聚数行数据查询API
6. 核心功能实现
1. 搜索实现
/**
* 搜索
*/
async search() {
const message = this.data.keyword.trim();
if (!message) {
wx.showToast({
title: '请输入关键字~',
icon: 'error'
})
return;
}
const prams = {
key: 'xxxxxxxxxxxxx',
word: this.data.keyword
}
const res = await http.get("https://apis.tianapi.com/lajifenlei/index", prams)
//将数据转化一下
const typeMap = {
0: '可回收',
1: '有害',
2: '厨余(湿)',
3: '其他(干)'
};
const processedData = res.data.result.list.map(item => ({
...item,
typestr: typeMap[item.type] || '未知类型'
}))
this.setData({
list: processedData
})
}
提示
:接口所需要的key ,请在天聚数行后台申请即可:https://www.tianapi.com/
2.拍照识别
/**
* 拍照识别
*/
pictureSelectorHandle() {
let _that = this;
wx.showActionSheet({
itemList: ['从相册选取'],
success(res) {
wx.chooseMedia({
count: 1,
mediaType: ['image'],
sourceType: ['album'],
camera: 'back',
success(res) {
console.log(res)
const tempFilePath = res.tempFiles[0].tempFilePath
//读取文件为 Base64
wx.getFileSystemManager().readFile({
filePath: tempFilePath,
encoding: 'base64',
success(res) {
const base64Data = 'data:image/png;base64,' + res.data;
//图像识别
const prams = {
key: 'xxxxxxxxx',
img: base64Data
}
http.post("https://apis.tianapi.com/imglajifenlei/index", prams).then(res => {
if (res.data.result.list.length > 0) {
wx.navigateTo({
url: '/pages/discern/discern?result=' + encodeURIComponent(JSON.stringify(res.data.result.list[0]))+"&tempFilePath="+tempFilePath,
})
}else{
}
})
},
fail(err) {
console.error('读取失败', err);
}
});
}
})
},
fail(res) {
}
})
}
提示:
这里需要注意,图片识别时,请求参数支持xxx.png或者图片base64两种形式
const tempFilePath = res.tempFiles[0].tempFilePath
可以直接获取xxxxx.png图片,但在接口调用时无法识别,所以最终将图片转base64格式上传,可以用 wx.getFileSystemManager().readFile
来将图片转base64
3. 答题模块
答题模块UI布局有点复杂,有开始答题,和选择下一题,最终还有显示结果的页面
/**
*开始答题
*/
async onStartClickHandle() {
//判断是否登录
const user = wx.getStorageSync('user')
if (!user) {
wx.showModal({
title: '温馨提示',
content: '系统检测到您未登录,请先登录~',
complete: (res) => {
if (res.confirm) {
wx.navigateTo({
url: '/pages/login/login',
})
}
}
})
return;
}
//获取题目
this.next()
},
/**
* 获取题目
*/
async next() {
const prams = {
key: 'xxxxxxxxxxxxxx'
}
const res = await http.get('https://apis.tianapi.com/anslajifenlei/index', prams, { isLoading: false })
if (res.data.code === 200) {
setTimeout(() => {
this.setData({
isStart: false,
isSubject: true,
isResult: false,
subject: res.data.result,
})
}, 100)
} else {
wx.showToast({
title: res.data.msg,
icon: 'error'
})
}
},
/**
* 选项答案
*/
onSelectedClickHandle(options) {
//选择答案
const result = options.currentTarget.dataset.type;
//选择答案后进行下一题,并记录当前题目+选择答案
this.data.subjectList.push({
...this.data.subject,
result: result,
username: wx.getStorageSync('user').username
})
this.setData({
count: this.data.count + 1,
})
if (this.data.count == 11) {
this.setData({
isStart: false,
isSubject: false,
isResult: true,
})
// 计算答错几道+答对几道
let correctCount = 0;
let errorCount = 0;
this.data.subjectList.forEach(item => {
item.type == item.result ? correctCount++ : errorCount++;
})
//分数 =正确答题数*分数 1题=10分 (这里可以自定义分数)
let score = correctCount * 10;
this.setData({
correctCount: correctCount,
errorCount: errorCount,
scoreNum: score
})
//保存本次答题历史记录
wx.setStorageSync('results', this.data.subjectList)
return;
}
//获取下一题
this.next();
},
7. 项目优势与特点
- 识别能力:通过天聚数行API实现高达95%的垃圾分类识别准确率
- 快速响应:搜索接口平均响应时间<500ms
- 成本效益:相比自建AI识别系统,使用第三方API节省约70%开发成本
8. 经验总结
通过本项目实践,我们得出以下关键经验:
- 第三方API能显著降低AI功能开发门槛
- 天聚数行API在垃圾分类领域表现出色
- 成熟的API服务,保证了应用的稳定性
- 该应用不仅帮助用户正确分类垃圾,还通过考试模块增强了用户的环保知识,具有很好的社会价值和教育意义。
9. 项目效果截图