当前位置: 首页 > wzjs >正文

企业网上申报系统巩义网站优化技巧

企业网上申报系统,巩义网站优化技巧,做签名的网站,简单建站的网站EMO了几天 我浪费了几天的生命,去研究PP-OCR的模型微调、从训练模型导出预测模型,结果一个坑接着一个坑,没有善终。 找了好多资料,得到一些负面信息,比如说飞浆的团队修复问题不及时啦,代码仓库有好多年不…

EMO了几天

我浪费了几天的生命,去研究PP-OCR的模型微调、从训练模型导出预测模型,结果一个坑接着一个坑,没有善终。
找了好多资料,得到一些负面信息,比如说飞浆的团队修复问题不及时啦,代码仓库有好多年不更新啦,为了KPI而搞开源啦等等。
今天想着还是先把安卓端部署过程记录下来吧,忘掉那些不开心吧。

安卓端部署简介

如果直接用官方提供的模型去跑,其实还是挺香的,OCR是飞浆框架下最厉害的库了。
安卓部署官方也有demo的(当然是几年前的),PaddleOCR–deploy下去找,我也放到csdn下载了。

例子中使用的PP-OCRv2的模型,想想现在都PP-OCRv4了,是不是心中着急?

PaddleLite

想要在安卓端部署,需要飞浆下的另一个重要的库,PaddleLite。
Paddle Lite 是百度飞桨(PaddlePaddle)生态中的端侧推理引擎,专注于在移动设备、嵌入式设备和边缘计算场景中实现高效的深度学习模型部署。其核心目标是通过轻量化、高性能的优化技术,降低模型运行时的资源消耗,同时支持多种硬件平台和操作系统。
Demo中使用的是2.10版本,目录结构如下:

OpenCV

OpenCV的作用自然在负责图像处理部分。在安卓平台,它的用途还真是广泛的不得了。
Demo中使用的是4.2.0,目录结构如下:

PaddleOCR的模型和字典

模型文件和字典是程序运行后下载的,如下图:

App源码简介

代码结构依然是Java层+Native层。

Java代码

上层的业务逻辑,以及通过JNI调用Native层代码。结构如下:

Java层与Native层沟通仅仅用了三个方法,它们在OCRPredictorNative类中:

    protected native long init(String detModelPath, String recModelPath, String clsModelPath, int useOpencl, int threadNum, String cpuMode);protected native float[] forward(long pointer, Bitmap originalImage,int max_size_len, int run_det, int run_cls, int run_rec);protected native void release(long pointer);

Native层代码

源码结构如下图:

JNI的实现在native.cpp中,重点看forward方法的实现,OCR的处理逻辑及返回结果都在这里了。

extern "C" JNIEXPORT jfloatArray JNICALL
Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_forward(JNIEnv *env, jobject thiz, jlong java_pointer, jobject original_image,jint j_max_size_len, jint j_run_det, jint j_run_cls, jint j_run_rec) {LOGI("begin to run native forward");if (java_pointer == 0) {LOGE("JAVA pointer is NULL");return cpp_array_to_jfloatarray(env, nullptr, 0);}cv::Mat origin = bitmap_to_cv_mat(env, original_image);if (origin.size == 0) {LOGE("origin bitmap cannot convert to CV Mat");return cpp_array_to_jfloatarray(env, nullptr, 0);}int max_size_len = j_max_size_len;int run_det = j_run_det;int run_cls = j_run_cls;int run_rec = j_run_rec;ppredictor::OCR_PPredictor *ppredictor =(ppredictor::OCR_PPredictor *)java_pointer;std::vector<int64_t> dims_arr;std::vector<ppredictor::OCRPredictResult> results =ppredictor->infer_ocr(origin, max_size_len, run_det, run_cls, run_rec);LOGI("infer_ocr finished with boxes %ld", results.size());// 这里将std::vector<ppredictor::OCRPredictResult> 序列化成// float数组,传输到java层再反序列化std::vector<float> float_arr;for (const ppredictor::OCRPredictResult &r : results) {float_arr.push_back(r.points.size());float_arr.push_back(r.word_index.size());float_arr.push_back(r.score);// add det pointfor (const std::vector<int> &point : r.points) {float_arr.push_back(point.at(0));float_arr.push_back(point.at(1));}// add rec word idxfor (int index : r.word_index) {float_arr.push_back(index);}// add cls resultfloat_arr.push_back(r.cls_label);float_arr.push_back(r.cls_score);}return cpp_array_to_jfloatarray(env, float_arr.data(), float_arr.size());
}

运行结果

http://www.dtcms.com/wzjs/821059.html

相关文章:

  • 凤城市网站建设cms wordpress 区别
  • IT男网站建设周杰伦做的广告网站
  • 有没有做gif的专门网站wordpress主题logo
  • 淘宝网站建设策划案合肥网站建设需要多
  • 设计专业考研平面素材网站软装设计公司加盟
  • 深圳二维码网站建设淘宝客网站html
  • 网站跳出率计算做网站引入字体
  • 商用营销型网站建设python在线编程网址
  • 家电网站源码wordpress 防篡改
  • 新吴区建设局网站宁波高新区建设局网站
  • 网站开发技术支持互站源码交易平台
  • 做图素材网站开通会员哪个好3d动画制作软件手机版
  • 广州品牌网站建设 优美wordpress图像居中
  • 怎么做外贸企业网站哈尔滨网站建设托管公司
  • 公司网站建设费怎么写分录快速备份wordpress
  • 网站设计流程电话wordpress建站课程
  • 做律师网站推广优化哪家好温州市建设小学学校网站
  • 自己创业网站开发淘宝新店怎么快速做起来
  • 网站后台无法上传附件网络营销的特点有
  • wordpress学院主题东莞外贸优化公司
  • 管理系统网站凡科教育
  • 企业官方网站案例wordpress导入用户数据库
  • 提供网站建设设计wordpress食谱主题
  • 南康做网站附近找装修公司
  • 生物科技公司网站模板cn域名注册流程
  • 交互式网站是什么资源下载wordpress
  • 云南微网站建设网站运营刚做时的工作内容
  • 手机网站字体大小自适应wordpress怎么改后台
  • 请输入您网站的icp备案信息个人网页设计思路流程内容
  • 网站的运营模式烟台住房和城乡建设厅网站