您现在的位置是:首页 >技术交流 >uniapp打包为apk 接入百度OCR识别功能,利用ocr识别车牌号码(小程序与APP 都可用,亲测)。网站首页技术交流

uniapp打包为apk 接入百度OCR识别功能,利用ocr识别车牌号码(小程序与APP 都可用,亲测)。

taoyaoyao3 2026-03-31 12:01:06
简介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);
        }
    };

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。