代码解读复制代码# GIT_REPOSITORY https://github.com/LDOUBLEV/AutoLog.git
GIT_REPOSITORY git@github.com:LDOUBLEV/AutoLog.git
写的有点啰嗦拼拼字符串只能说能跑c++
代码解读复制代码__declspec(dllexport) char* VectorResult(char* image_dir);
char* VectorResult(char* image_dir) {
std::vector<cv::String> cv_all_img_names;
cv::glob(image_dir, cv_all_img_names);
std::vector<cv::Mat> img_list;
for (int i = 0; i < cv_all_img_names.size(); ++i) {
cv::Mat img = cv::imread(cv_all_img_names[i], cv::IMREAD_COLOR);
if (!img.data) {
std::cerr << "[ERROR] image read failed! image path: "
<< cv_all_img_names[i] << std::endl;
continue;
}
std::cerr << cv_all_img_names[i] << std::endl;
img_list.push_back(img);
}
//这里可以获取到所有结果
std::vector<std::vector<OCRPredictResult>> ocr_results = ocr.ocr(img_list, FLAGS_det, FLAGS_rec, FLAGS_cls);
int size = ocr_results[0].size();
std::string result;
std::cout << size << std::endl;
//OCRPredictResult* data = new OCRPredictResult [size];
for (size_t i = 0; i < size; ++i) {
std::string ret_str = (std::to_string(i)).append("|").append(ocr_results[0][i].text).append("|").append(std::to_string(ocr_results[0][i].score)).append("|").append(std::to_string(ocr_results[0][i].cls_label)).append("|").append(std::to_string(ocr_results[0][i].cls_score));
//data[i] = ocr_results[0][i];
for (auto j = 0; j != ocr_results[0][i].box.size(); ++j) {
std::cout << ocr_results[0][i].box[j][0] <<" "<< ocr_results[0][i].box[j][1] << std::endl;
ret_str.append("|").append(std::to_string(ocr_results[0][i].box[j][0])).append("|").append(std::to_string(ocr_results[0][i].box[j][1]));
}
//ret_str.append(";");
result.append(ret_str.append("\r\n"));
}
//OCRRESUTL sv = { size, data };
char* result2 = new char[result.size() + 1];
strcpy(result2, result.c_str());
return result2;
}
代码解读复制代码@Override
protected List<String> getFieldOrder() {
return Arrays.asList("box", "text", "score", "cls_score", "cls_label");
}
4. 对象反序列化read/useMemory基类是protect类型的需要覆盖下,AI给的是直接调用方法的。typescript
代码解读复制代码@Override
public void read() {
super.read();
}
@Override
public void useMemory(Pointer p) {
super.useMemory(p);
}
paddleocr主要是这个日志包,下面是路径。
读光表格分为有线和无线,如果用python的可以试下。网上应该是作者出了个onnx的版本,这个导出的模型没有默认长和宽这个需要注意下,另外模型转onnx后运算处理逻辑还是太复杂了(主要一些数学函数处理)java没有这方面的类库不好处理也试着用AI翻译下但还是放弃了。