PaddleOCR 使用 FastDeploy 服务化部署及postman、java调用服务的方法

这篇具有很好参考价值的文章主要介绍了PaddleOCR 使用 FastDeploy 服务化部署及postman、java调用服务的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

服务化部署

postman调用

java调用

题外话


服务化部署

部署这块大部分按着官方文档来做就差不多

PaddleOCR/deploy/fastdeploy/serving/fastdeploy_serving at dygraph · PaddlePaddle/PaddleOCR · GitHub

提一下两个需要注意的点。

一、如果跟我一样选择的是cpu的版本,那么修改config.pbtxt配置文件时不仅得按官方说的需要修改kind: KIND_GPU为kind: KIND_CPU,还需要把后面的gpus: [0]这块也删掉

instance_group [
  {
    # The number of instances is 1
    count: 1
    # Use GPU, CPU inference option is:KIND_CPU
    kind: KIND_GPU
    # The instance is deployed on the 0th GPU card
    gpus: [0]
  }
]

改为
instance_group [
  {
    # The number of instances is 1
    count: 1
    # Use GPU, CPU inference option is:KIND_CPU
    kind: KIND_CPU
  }
]

二、还是如果跟我一样使用的是cpu的版本,截至目前最新的fastdeploy:1.0.4-cpu-only-21.10版本,它默认的paddle推理引擎是有问题的,识别不出内容,需要更换其它支持cpu的引擎,比如OpenVINO 、ONNXRuntime。在config.pbtxt中做修改

optimization {
  execution_accelerators {
    # GPU推理配置, 配合KIND_GPU使用
    gpu_execution_accelerator : [
      {
        name : "paddle"
        # 设置推理并行计算线程数为4
        parameters { key: "cpu_threads" value: "4" }
        # 开启mkldnn加速,设置为0关闭mkldnn
        parameters { key: "use_mkldnn" value: "1" }
      }
    ]
  }
}
改为(记得把“gpu_execution_accelerator”改为“cpu_execution_accelerator”)
optimization {
  execution_accelerators {
  cpu_execution_accelerator : [ {
    name: "openvino",
    # set cpu threads
    parameters { key: "cpu_threads" value: "4" }
  }]
}}

出来以下信息就差不多是服务已经起来了java调用paddleocr,paddle

postman调用

这块我看文档是一头雾水,看不出怎么用postman和java去调用这个FastDeploy服务。摸索了好久总算调用成功了,赶紧来总结一下。

postman方面

请求路径就是"服务ip:端口/v2/models/pp_ocr/versions/1/infer"

请求体格式如下;outputs是指需要返回什么信息,如果只想要识别文本内容可以只保留{"name": "rec_texts" }。

{
  "inputs": [
    {
      "name": "INPUT",
      "shape": [1, {图片的高度}, {图片的宽度}, 3],
      "datatype": "UINT8",
      "data": {三维数组}    }
  ],
  "outputs": [
    {
      "name": "rec_texts"
    },
    {
      "name": "rec_scores"
    },
    {
      "name": "det_bboxes"
    }
  ]
}

java调用paddleocr,paddle

 这三维数组是图片的rgb信息,获取图片三维数组方法可以用下面的工具类来获取(我找chatgpt要的代码)。

    /**
     * 返回图片的RGB三维数组
     * @param path 图片路径
     * @return
     * @throws IOException
     */
    public static int[][][] readImagePath(String path) throws IOException {
        BufferedImage image = ImageIO.read(new File(path));
        int height = image.getHeight();
        int width = image.getWidth();
        int[][][] rgbArray = new int[height][width][3];
        for (int row = 0; row < height; row++) {
            for (int col = 0; col < width; col++) {
                int pixel = image.getRGB(col, row);
                rgbArray[row][col][0] = (pixel >> 16) & 0xff; // R
                rgbArray[row][col][1] = (pixel >> 8) & 0xff; // G
                rgbArray[row][col][2] = pixel & 0xff; // B
            }
        }
        return rgbArray;
    }

java调用

生成json部分

    /**
     * 生成json对象,懒得搞一堆对应的类了
     * @param imgHeight
     * @param imgWidth
     * @param rgbArray
     * @return
     */
    public static JSONObject generateJson(int imgHeight, int imgWidth, Integer[][][] rgbArray) {
        JSONObject jsonObject = new JSONObject();
        JSONArray inputArray = new JSONArray();
        JSONObject inputObject = new JSONObject();
        JSONArray shapeArray = new JSONArray();
        shapeArray.add(1);
        shapeArray.add(imgHeight);
        shapeArray.add(imgWidth);
        shapeArray.add(3);
        JSONArray dataArray=new JSONArray();
        JSONArray datajsonArray = JSONArray.parseArray(JSONArray.toJSONString(rgbArray));
        dataArray.add(datajsonArray);
        inputObject.put("name", "INPUT");
        inputObject.put("shape", shapeArray);
        inputObject.put("datatype", "UINT8");
        inputObject.put("data", dataArray);
        inputArray.add(inputObject);
        jsonObject.put("inputs", inputArray);
        JSONArray outputArray = new JSONArray();
        JSONObject outputObject1 = new JSONObject();
        outputObject1.put("name", "rec_texts");
        outputArray.add(outputObject1);
        jsonObject.put("outputs", outputArray);
        return jsonObject;
    }

OKHttp发送请求部分

    /**
     * 连接新方式部署的ocr服务
     *
     * @param jsonParamStr
     * @return
     */
    public static String fastDeployConnect(String jsonParamStr) throws IOException {

        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, jsonParamStr);

        Request request = new Request.Builder()
                .url("http://{ip}:{端口}/v2/models/pp_ocr/versions/1/infer")
                .post(body)
                .build();

        try (Response response = HTTP_CLIENT.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                throw new IOException(exMessage);
            }
            String str = response.body().string();

            return str;
        } catch (IOException e) {
            throw e;
        }
    }

题外话

我在使用中发现了这fastdeploy服务有几率传图片识别文字报错 module 'numpy' has no attribute 'astype'。

0904 11:59:10.734353 1515 pb_stub.cc:402] Failed to process the request(s) for model 'det_postprocess_0', message: AttributeError: module 'numpy' has no attribute 'astype'

At:
  /usr/local/lib/python3.8/dist-packages/numpy/__init__.py(284): __getattr__
  /opt/tritonserver/FastDeploy/examples/vision/ocr/PP-OCR/serving/fastdeploy_serving/models/det_postprocess/1/model.py(196): execute

初步排查是models/det_postprocess/1/model.py文件里的execute方法写错代码,我将倒数第二行修改为了倒数第一行,问题暂时解决。如果github有大佬指导更正确的修改方式再回来修改。文章来源地址https://www.toymoban.com/news/detail-718348.html

                for index in range(len(image_list)):
                    if cls_labels[index] == 1 and cls_scores[
                            index] > self.cls_threshold:
                        image_list[index] = cv2.rotate(
                            image_list[index].astype(np.float32), 1)
                        #image_list[index] = np.astype(np.uint8)
						image_list[index] = image_list[index].astype(np.uint8)

到了这里,关于PaddleOCR 使用 FastDeploy 服务化部署及postman、java调用服务的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI架构师必知必会系列:模型部署与服务化、Mass架构设计方案详解和代码实战指南

    作者:禅与计算机程序设计艺术

    2024年02月05日
    浏览(60)
  • 【业务功能篇73】web系统架构演变-单体-集群-垂直化-服务化-微服务化

    1.1 单体架构 单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层。 单体架构只适合在应用初期,且访问量比较下的情况下使用,优点是性价比很高,开发速度快,成本低,但缺点也很明显,这时扩展的首先

    2024年02月11日
    浏览(51)
  • 为什要微服务化?

    从 0 到 1 的堆砌式发展 一个服务承载所有,一个系统涵盖一切,这可能是大多数公司初创时的技术风貌。一切追求快速验证,快速响应,快速实现。 但是,伴随着业务的膨胀发展,相应的技术支撑要求也在不断提升。从最开始的一个简单的服务,不断地添枝加叶,各种各样

    2024年02月08日
    浏览(46)
  • xxl-job服务化

    xxl-job作为服务,之前使用都是每个服务配置信息,采用方法的形式,xxl-job作为服务的话,只需要进行配置 配置信息 xxl-job创建任务 xxl-job相关输入 clientClass 实现类 clientMethod 调用的方法 加参数,比如用户为张三,年龄18 ,\\\"name\\\":\\\"张三\\\",\\\"age\\\":18 JobHandler:CommonXxlJobHandler 任务参数:

    2024年02月06日
    浏览(42)
  • 为什么要将应用微服务化?

    其实在十多年前,“架构师”并不是一个需求很大的职业,一来那时还没有“全民App”级别的应用,除了三大门户网站以外,其他的网上应用业务压力并不大;二来也没有现如今这么丰富的技术选型,几乎清一色的PHP(坊间一直流传着PHP是世界上最好的语言这个说法,我08年左右

    2024年01月18日
    浏览(47)
  • 【架构设计】单体软件向微服务化演变

    假设单体软件的各模块如下,其中服务包含许多功能模块,如用户管理模块、商品模块、订单模块、仓库模块; 服务化是指对单体服务进行拆分,将一个服务软件拆分为多个相互关联的服务,他们之间相互协作,能正常完成原单体服务的所有业务。 服务化后,有如下优点:

    2024年01月17日
    浏览(83)
  • springboot + activiti实现activiti微服务化

    本文介绍如何将springboot+activiti进行整合,并配合eureka,zuul和feign实现activiti的微服务化,将流程控制和业务逻辑分离. 并实现了几个比较特殊的功能,比如时间段委托(某人请假或出差,出差时间内,所有待办交给被委托人处理),比如节点的无限级加签功能(流程本身有不确定性,临时增加

    2024年02月09日
    浏览(39)
  • 为什么要将应用微服务化

    其实在十多年前,“架构师”并不是一个需求很大的职业,一来那时还没有“全民App”级别的应用,除了三大门户网站以外,其他的网上应用业务压力并不大;二来也没有现如今这么丰富的技术选型,几乎清一色的PHP(坊间一直流传着PHP是世界上最好的语言这个说法,我08年左右

    2024年01月17日
    浏览(48)
  • 分布式、服务化的ERP系统架构设计

    ERP 之痛        曾几何时,我混迹于电商、珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP)。作为一个ERP系统,系统主要功能模块无非是订单管理、商品管理、生产采购、仓库管理、物流管理、财务管理等等。作为一个管理系统,大家的一般开发习惯就是使用

    2024年02月11日
    浏览(56)
  • 解析UI页面结构树的逆向解析服务化:技术探索与应用

    “限时免费赠送!人工智能测试开发资料大礼包,把握测试行业的新机遇\\\" 解析UI页面结构树的逆向解析服务化是一项具有挑战性和前景广阔的技术,它可以用于多种场景,例如网页内容分析、自动化测试、网页爬虫等。下面是一些技术探索与应用方面的讨论: 技术探索 HTM

    2024年04月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包