您现在的位置是:首页 >技术交流 >uniapp打包为apk 接入百度OCR识别功能,利用ocr识别车牌号码(小程序与APP 都可用,亲测)。网站首页技术交流
uniapp打包为apk 接入百度OCR识别功能,利用ocr识别车牌号码(小程序与APP 都可用,亲测)。
1、首先注册百度ocr账号,注意要实名,才能获取免费调用额度。网址百度AI开放平台-全球领先的人工智能服务平台
2、在应用列表中创建应用

3、实名认证之后可以看到API调用次数 百度智能云控制台


4、接下来就是写代码了
首先根据API Key 和Secret Key 获取token
5、const getAccessToken = async () => {
try {
const response = await uni.request({
url: 'https://aip.baidubce.com/oauth/2.0/token',
method: 'GET',
data: {
grant_type: 'client_credentials',
client_id: 'zYEnn1E1aozKgYYyJwMVv2uD', // 替换为你自己的API Key
client_secret: 'm8DG1uWgTYFIJwGxQS2Uq9wJ5oDyNSCZ' // 替换为你自己的Secret Key
}
});
console.log('返回的数据--', response.data)
return response.data.access_token;
} catch (error) {
errorMessage.value = '获取 Access Token 失败';
console.error(error);
}
};

6、 调用ocr车辆识别方法,将拍照获取的图片上传
// 识别车牌
const recognizeLicensePlate = async (imgBase64) => {
const accessToken = await getAccessToken();
if (!accessToken) return;
try {
const response = await uni.request({
url: `https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?access_token=${accessToken}`,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: {
image: imgBase64
}
});
console.log('response', response.data)
if (response.data && response.data.words_result) {
plateNumber.value = response.data.words_result.number;
} else {
errorMessage.value = '未能识别到车牌';
}
} catch (error) {
errorMessage.value = '车牌识别请求失败';
console.error(error);
}
};
7、重点来了、亲测小程序和app调用相机的方法不一样
小程序这样写:const takePhoto1 = async () => {
try {
// 选择图片,sourceType 设置为 camera 限制只能拍照
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['camera'],
success: function (res) {
console.log('res---', res.tempFilePaths[0])
//核心代码
uni.getFileSystemManager().readFile({
filePath: res.tempFilePaths[0],
encoding: 'base64', //编码格式
success(ans) {
console.log('图片', ans.data)
// uni.showLoading({ title: '识别中' })
recognizeLicensePlate(ans.data)
}
})
}
})
} catch (error) {
errorMessage.value = '拍照失败';
console.error(error);
}
};
8APP这样写
// 调用相机拍照
const takePhoto = async () => {
try {
// 选择图片,sourceType 设置为 camera 限制只能拍照
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['camera'],
success: function (res) {
console.log('res---', res.tempFilePaths[0]);
// 获取文件信息
uni.getFileInfo({
filePath: res.tempFilePaths[0],
success: (fileInfo) => {
console.log('文件信息:', fileInfo);
// 读取文件内容并转换为 Base64
plus.io.resolveLocalFileSystemURL(res.tempFilePaths[0], (entry) => {
entry.file((file) => {
const reader = new plus.io.FileReader();
reader.onloadend = (event) => {
const base64Data = event.target.result.split(',')[1];
console.log('图片 Base64:', base64Data);
uni.showLoading({
title:'识别中'
})
// 调用识别车牌的函数
recognizeLicensePlate(base64Data);
uni.hideLoading()
};
reader.readAsDataURL(file);
}, (error) => {
console.error('读取文件失败:', error);
errorMessage.value = '读取文件失败';
});
}, (error) => {
console.error('解析文件路径失败:', error);
errorMessage.value = '解析文件路径失败';
});
},
fail: (error) => {
console.error('获取文件信息失败:', error);
errorMessage.value = '获取文件信息失败';
}
});
},
fail: (error) => {
console.error('选择图片失败:', error);
errorMessage.value = '选择图片失败';
}
});
} catch (error) {
errorMessage.value = '拍照失败';
console.error(error);
}
};





QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
U8W/U8W-Mini使用与常见问题解决
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结