1、OCR Paddle开源地址:PaddlePaddle · GitHub
2、OpenCV开源地址:OpenCV · GitHub
3、示例:
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include <paddle_api.h>
int main() {
// 读取图像
cv::Mat image = cv::imread("test.jpg");
// 初始化Paddle Inference引擎
std::string model_dir = "your/model/directory";
std::string pdmodel_file = model_dir + "/model.pdmodel";
std::string pdiparams_file = model_dir + "/model.pdiparams";
paddle::lite_api::MobileConfig config;
config.set_model_from_file(pdmodel_file, pdiparams_file);
config.set_threads(1); // 设置线程数
config.set_power_mode(paddle::lite_api::LITE_POWER_HIGH); // 设置运行模式
auto predictor = paddle::lite_api::CreatePaddlePredictor(config);
// 图像预处理
cv::cvtColor(image, image, cv::COLOR_BGR2RGB);
cv::resize(image, image, cv::Size(320, 320));
// 将图像转换为PaddleTensor输入格式
paddle::lite_api::Tensor input_tensor;
input_tensor.Resize({1, 3, image.rows, image.cols});
input_tensor.SetData(reinterpret_cast<const float*>(image.data), image.total() * image.elemSize());
// 进行文字识别
paddle::lite_api::Tensor output_tensor;
predictor->Run({input_tensor}, &output_tensor);
// 解析识别结果
std::vector<int64_t> output_shape = output_tensor.shape();
int64_t output_size = std::accumulate(output_shape.begin(), output_shape.end(), 1, std::multiplies<int64_t>());
const float* output_data = output_tensor.data<float>();
// 输出识别结果
for (int i = 0; i < output_size; i++) {
std::cout << "识别结果: " << output_data[i] << std::endl;
}
return 0;
}