目录
1. 识别精度远超本地开源 PaddleOCR/Tesseract
✅ 优先使用本地 PaddleOCR(你的 Qt 票据项目最优)
云平台 OCR(云端 API OCR)完整讲解
一、什么是云平台 OCR
各大云厂商(百度智能云、阿里云、腾讯云、华为云、谷歌云等)托管在云端服务器的 OCR 识别服务,开发者不用本地部署任何模型、推理库,仅通过 HTTP/HTTPS 网络接口上传图片,云端完成全部文字检测 + 识别,返回结构化文字、坐标、置信度 JSON 结果。 你代码里本地跑的 PaddleOCR/Tesseract 是离线本地 OCR;云 OCR 是在线联网调用方案。
国内主流厂商
- 百度智能云 OCR(中文识别最强,PP-OCR 云端大模型)
- 阿里云通用文字识别
- 腾讯云 OCR
- 华为云通用文字识别
二、完整调用流程(C++/Qt 工程通用)
标准四步调用逻辑
- 开通服务,获取鉴权密钥 控制台创建应用,拿到
APP_ID / AK(AccessKey) / SK(SecretKey),用于接口身份校验,防止非法调用。 - 图片预处理编码 本地
cv::Mat图片转为 Base64 字符串,或上传公网图片 URL;二进制图片通过 POST 请求传给云端。 - 发起网络 HTTPS 请求 C++ 依赖
libcurl发送 POST,带鉴权参数、图片数据、业务参数(是否返回坐标、是否识别手写)。 - 云端处理 + 返回 JSON 云端超大 GPU 集群执行高精度大模型推理,返回:每行文字、文字四点坐标、识别分数、行列信息;本地用
jsoncpp解析结果,拼接文本(和你ImageProcess后处理逻辑一致)。
百度云 C++ 极简调用示例(适配你的 Qt 项目)
cpp
运行
#include <curl/curl.h>
#include <json/json.h>
#include <string>
// 回调:接收云端返回数据
size_t WriteCallback(void *contents, size_t size, size_t nmemb, std::string *s)
{
size_t newLength = size * nmemb;
try {
s->append((char*)contents, newLength);
} catch(std::bad_alloc &e) {
return 0;
}
return newLength;
}
// Mat转Base64工具函数
std::string MatToBase64(const cv::Mat& img);
// 云端OCR识别
std::string CloudOCR(const cv::Mat& img)
{
// 1. 基础鉴权信息
std::string ak = "你的AK";
std::string sk = "你的SK";
std::string token_url = "https://aip.baidubce.com/oauth/2.0/token";
std::string ocr_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic";
// 2. 获取access_token(有效期30天,可缓存不用每次请求)
std::string token_post = "grant_type=client_credentials&client_id="+ak+"&client_secret="+sk;
CURL* curl = curl_easy_init();
std::string token_res;
curl_easy_setopt(curl, CURLOPT_URL, token_url.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, token_post.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &token_res);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
// 解析token
Json::Reader reader;
Json::Value token_json;
reader.parse(token_res, token_json);
std::string access_token = token_json["access_token"].asString();
// 3. 图片转base64,组装请求参数
std::string img_base64 = MatToBase64(img);
std::string post_data = "image=" + img_base64;
std::string full_url = ocr_url + "?access_token=" + access_token;
// 4. 正式调用OCR接口
std:

413

被折叠的 条评论
为什么被折叠?



