paddle v4 hubserving 部署

news2024/12/23 14:30:41

环境准备:https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7/deploy/hubserving#24-%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1
在这里插入图片描述

服务器启动命令

hub serving start -c deploy/hubserving/ocr_system/config.json

客户端请求
python tools/test_hubserving.py --server_url=server_url --image_dir=image_path

import base64
import sys
import time
import requests
import json
import asyncio
import aiohttp

import pandas as pd
from sqlalchemy import create_engine, text
import time


from PIL import Image
from io import BytesIO
import cv2
import numpy as np
import io

time1 = time.time()



def read_data():
    conn = create_engine('mysql+pymysql://xxx:xxx@xxx.xxx.xx.xx:3306/x?charset=uxxxtf8')
    connection = conn.connect()
    page = 0
    sql_select = f"SELECT * from xj_zsjh_png LIMIT {page * 10}, 100"  # 1000条100s  
    results = pd.read_sql(sql=text(sql_select), con=connection)
    out = json.loads(results.to_json(orient='records'))
    img_strs_list = [x['bas64_str'] for x in out]
    return img_strs_list


def cv2_to_base64(image):
    return base64.b64encode(image).decode('utf8')

def save_data(results, file_name):
    df = pd.DataFrame([[i['text'] for i in x] for x in results])

    df.to_csv(file_name, index=False)

def process_image_(img_str):
    binary = base64.b64decode(img_str)
    image = Image.open(BytesIO(binary))

    # 创建一个新的RGB图像,将Alpha通道设置为0
    rgb_image = Image.new('RGB', image.size, (255, 255, 255))
    # 将RGBA图像的颜色信息复制到RGB图像
    rgb_image.paste(image, (0, 0), mask=image)
    # 裁剪图片
    left = 535
    top = 0
    right = left + 240
    bottom = image.size[1]
    cropped_image = rgb_image.crop((left, top, right, bottom))

    # 创建一个BytesIO对象
    image_bytes = io.BytesIO()
    # 将图像保存到BytesIO对象中
    cropped_image.save(image_bytes, format='JPEG')
    return image_bytes






def main2():
    results = []
    img_strs_list = read_data()
    for i, img_str in enumerate(img_strs_list):
        image_bytes = process_image_(img_str)
        data = {'images': [cv2_to_base64(image_bytes.getvalue())]}
        headers = {
            'Content-Type': 'application/json'
        }
        response = requests.post("http://192.168.0.189:8868/predict/ocr_system", data=json.dumps(data), headers=headers)


        if response.status_code == 200:
            res = response.json()["results"][0]
            results.append(res)
        else:
            print('Error:', response.status_code)
    save_data(results, 'normal.csv')

async def process_image(img_str):
    image_bytes = process_image_(img_str)
    headers = {
        'Content-Type': 'application/json'
    }
    # 发送 OCR 请求
    data = {'images': [cv2_to_base64(image_bytes.getvalue())]}
    async with aiohttp.ClientSession() as session:
        async with session.post("http://192.168.0.189:8868/predict/ocr_system", data=json.dumps(data),
                                headers=headers) as response:
            if response.status == 200:
                res = (await response.json())["results"][0]
                return res
            else:
                print(f'Error: {response.status}')
                return None


async def process_images(img_strs_list):
    tasks = []
    sem = asyncio.Semaphore(1)  # 限制并发数为5 当创建过多session时就会报错
    async with sem:
        for img_str in img_strs_list:
            task = asyncio.create_task(process_image(img_str))
            tasks.append(task)
        results = await asyncio.gather(*tasks)

    return results


# 在主函数中调用异步任务
async def main():
    img_strs_list = read_data()
    results = await process_images(img_strs_list)
    save_data(results, 'async.csv')


# asyncio.run(main()) #100条 8.666
main2() #100条 9.667 # 96.832
print(f'当前页 共花费--> ', round(time.time() - time1, 3), '\n') # 1.813

(异步与非异步结果差不多)
结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1352611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

境内深度合成服务算法备案清单(2023年12月)

截止2024年1月3日,第三批深度合成服务算法备案信息的公告尚未发布,预计将会在2024-1-10左右发布,我公司已知晓部分公示名单,如中国电信数字人生成算法,详情联系WX号:SuanfabeiandayuAI生成合成类算法应办理…

非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (实例篇 V)

Title: 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (实例篇 V) 姊妹博文 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (I) 非线性最小二乘问题的数值方法 —— 从牛顿迭代法到高斯-牛顿法 (II) 非线性最小二乘问题的数值方法 —— 从牛顿…

RPA如何入门?

许多人可能认为RPA等人工智能软件的入门非常困难,不知道该如何开始。作为一名刚接触RPA软件一年多的新手,回答这个问题也是对自己学习RPA历程的回顾。同时,这也是分享给那些打算学习RPA初学者的经验,希望可以帮助大家更好地、更迅…

SANSAN新鲜事|物联网平台就只能做数据监控吗?

​物联网(Internet of Things,简称IoT)是指通过网络将各种物理设备、智能终端、传感器等连接起来,实现信息的交换和通信的技术。物联网平台(IoT Platform)是指为物联网应用提供基础设施、服务和工具的软件平…

【springboot配置文件加载源码分析】

在Spring Boot的源码中,配置文件的加载是在应用程序启动的早期阶段进行的。具体来说,配置文件加载的主要步骤发生在SpringApplication类的run()方法中的prepareEnvironment方法中,真正读取我们的配置文件还是PropertySourceLoader。 本篇博客…

RFID智能生产制造全周期管理系统

一、MES系统简述 RFID/条码技术基于的MES制造执行系统可以加强ERP/MRP计划的执行功能。该系统包括MES与ERP的对接、MES报表与看板、MES物料管理、MES设备与工具管理、MES品质管理和MES生产过程管理WIP等功能,通过将MES系统与ERP计划和车间作业现场控制系统联系起来…

【面试】面向对象编程的三大概念(实例辅助记忆)

【面试】面向对象编程的三大概念(实例辅助记忆) 虑面向对象编程的三大特性,它们是: 封装(Encapsulation): 将对象的状态和行为封装在一起,对外部隐藏对象的内部实现细节。这样可以防…

第二部分组件化编程:vue学习(53-60)

文章目录 53.对组件的理解54 非单文件组件55 组件的几个注意事项56 组件的嵌套57 vuecomponent构造函数58 vue实例与组件实例59 一个重要的内置关系60 单文件组件 53.对组件的理解 左侧2个页面,如果要复用js和css的话,引用的路线十分混乱。使用js模块化&…

熔断、隔离、重试、降级、超时、限流,高可用架构流量治理核心策略全掌握

可用性的定义 在探讨高可用架构之前,让我们以 O2 系统为例,解释一下何谓可用性。O2 是腾讯内部的一个广告投放系统,专注于提升投放效率、分析广告效果,拥有自动化广告投放、AIGC 自动化素材生产等多种功能。 其整体架构概览如下&…

abaqus复合材料 19个实例

实例操作: 1.复合材料层结构的三种常用建模方法、静力分析中强度准则和损伤判据的引入、数据输入与输出 2.层合结构的热-力耦合分析 3.基于虚裂纹闭合技术(VCCT)的分层扩展模拟 4.基于cohesive单元的分层/界面损伤扩展模拟 5.基于XFEM方法的裂纹扩展模拟 6.复合材料加筋板…

在Go语言中实现HTTP请求的缓存

大家好,我是你们可爱的编程小助手,今天我们要一起探讨如何使用Go语言实现HTTP请求的缓存。听起来是不是很酷?让我们开始吧! 首先,我们要明白什么是缓存。简单来说,缓存就是将数据存储在内存中,…

中国供应链,出海大时代

尽量优化、打通跨境电商每一个参与方的物流、商流、信息流、资金流是电商供应链出海的解题之法。这个过程中数智化便是打通这些节点的钥匙。 作者|斗斗 编辑|皮爷 出品|产业家 “速卖通加持,阿里国际零售商业收入同比上涨73%”“拼多多发布Q3财报同比增长94%…

STM32MP157/linux驱动学习记录

1. uboot烧录 2.linux安装nfs服务 sudo apt-get install nfs-kernel-server rpcbind安装nfs服务 在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹&#…

文件属性信息

文件的属性信息 Linux是一个基于文件的操作系统,因此作为文件本身也就有很多属性,如果想要查看某一个文件的属性有两种方式:命令和函数。虽然有两种方式但是它们对应的名字是相同的,叫做stat。另外使用file命令也可以查看文件的一…

从fuzz视角看CTF堆题--qwb2023_chatting

前言 这个题目是一个c的堆题,而我自己对于c的一些内存分配不太了解,同时也不太会c的逆向,硬看是没有办法了,所以就想能不能通过fuzz的角度去进行利用 fuzz 大概思路 函数选择 可以看到有add delete switch read listuser mes…

大创项目推荐 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

小红书如何高效引流?

近年来,公域流量价格不断上涨,私域流量的优势逐渐凸显。企业正花费大量资源和成本来获取新流量,但与其如此,不如将精力放在留存和复购上,从而实现业绩的新增长。其中关键在于如何有效地将公域流量转化为私域流量。 然而…

html5实现好看的个人博客模板源码

文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的文章界面1.4 我的模板界面1.5 文章内容界面 2.结构和源码2.1 目录结构2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/135368653 html5实现好看…

ExecutorCompletionService详解

本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 文章目录 摘要ExecutorCompletionService适用场景ExecutorCompletionService使用ExecutorCompletionService原理解析注意事项总结 摘要 ExecutorCompletionService 是Jav…

LeetCode做题总结 15. 三数之和(未完)

不会做,参考了代码随想录和力扣官方题解,对此题进行整理。 代码思路 思想:利用双指针法,对数组从小到大排序。先固定一个数,找到其他两个。 (1)首先对数组从小到大排序。 (2&…