paddle v4 hubserving 部署

环境准备: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 aiohttpimport pandas as pd
from sqlalchemy import create_engine, text
import timefrom PIL import Image
from io import BytesIO
import cv2
import numpy as np
import iotime1 = time.time()def read_data():conn = create_engine('mysql+pymysql://xxx:xxx@xxx.xxx.xx.xx:3306/x?charset=uxxxtf8')connection = conn.connect()page = 0sql_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_listdef 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通道设置为0rgb_image = Image.new('RGB', image.size, (255, 255, 255))# 将RGBA图像的颜色信息复制到RGB图像rgb_image.paste(image, (0, 0), mask=image)# 裁剪图片left = 535top = 0right = left + 240bottom = 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_bytesdef 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 reselse:print(f'Error: {response.status}')return Noneasync 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.mzph.cn/news/594501.shtml

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

相关文章

Java ORM 框架 Mybatis详解

📖 内容 Mybatis 的前身就是 iBatis ,是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。本文以一个 Mybatis 完整示例为切入点,结合 Mybatis 底层源码分析,图文并茂的讲解 Mybatis 的核心工作机制。 …

面向对象编程(高级)

面向对象编程(高级) 1、类变量和类方法 (1) 概念 类变量,也称为静态变量,是指在类级别声明的变量。它们与特定类相关联,而不是与类的实例(对象)相关联。每个类变量只有…

JavaSE语法之十五:异常(超全!!!)

文章目录 一、异常的概念与体系1. 异常的概念2. 异常的体系结构3. 异常的分类 二、异常的处理方式1. 防御式编程(1)LBYL 事前防御型(2)EAFP 时候认错型 2. 异常的抛出3. 异常的捕获(1)异常声明的 throws&am…

工作流入门这篇就够了!

总概 定义:工作流是在计算机支持下业务流程的自动或半自动化,其通过对流程进行描述以及按一定规则执行以完成相应工作。 应用:随着计算机技术的发展以及工业生产、办公自动化等领域的需求不断提升,面向事务审批、材料提交、业务…

OpenCV中实现图像旋转的方法

OpenCV中实现图像旋转的方法 函数:cv2.flip() 功能:水平或者垂直翻转 格式:dst cv2.flip(src,flipCode[,dst]) 参数说明: src:输入图像 dst:和原图像具有相同大小、类型的目标图像。 flipCode&#…

【Hotspot源码】揭秘Java线程创建过程中的各种细节

近期准备给大家分享专题系列文章,聚焦Java多线程机制。会从hotspot源码角度,给大家揭秘平时学习多线程那些从来没有想过的问题,或者存在疑虑却又无法证明的理论。 今天是系列文章首篇,咱们来谈谈Java线程创建的一些细节问题&#…

Vue 中的 ref 与 reactive:让你的应用更具响应性(中)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Lumerical Script------for语句

Lumerical------for语句 正文正文 关于 Lumerical 中 for 语句的用法这里不做过多说明了,仅仅做一个记录,具体用法如下: 通常我们用的比较多的形式是第一种步长值为 1 的情况。对于其他步长值的情况,我们可以使用第二种用法。对于 while 的类似使用方法可以使用第三种。 …

用Audio2Face驱动UE - MetaHuman

新的一年咯,很久没发博客了,就发两篇最近的研究吧。 开始之前说句话,别轻易保存任何内容,尤其是程序员不要轻易Ctrl S 在UE中配置Audio2Face 先检查自身电脑配置看是否满足,按最小配置再带个UE可能会随时崩&#x…

宏晶微 MS9125 USB 投屏控制芯片 VGAHDM输出 全新原装

1.基本介绍 MS9125 是一款 USB 单芯片投屏器,内部集成了 USB2.0 控制器和数据收发模块、视频 DAC、HDMI 接口和音视频处理模块,MS9125 可以通过 USB 接口显示或者扩展 PC、智能手机、平板电脑的显示信息到更大尺寸的显示设备上,支持 VGA 和 HDMI 视频接…

hcie datacom笔试考多少道题目?

华为认证的HCIE Datacom(数据通信)是网络工程师们向往的顶级认证之一。对于即将参加HCIE Datacom笔试的考生们,你们一定想知道笔试会考多少道题目。下面将为大家揭秘HCIE Datacom笔试的题目数量,并分享一些优秀的培训机构,帮助大家顺利通过考…

diffusers 源码待理解之处

一、训练DreamBooth时,相关代码的细节小计 ** class_labels timesteps 时,模型的前向传播怎么走?待深入去看 ** 利用class_prompt去生成数据,而不是instance_prompt class DreamBoothDataset(Dataset):"""A dat…

循环与基础函数

循环与函数 1.循环的三种方式2.循环的中断与空语句3.函数的定义与使用4.参数的作用域5.指针6.总结 1.循环的三种方式 我们最熟悉的循环为for和while,这两种循环方式在Python系列介绍过。在C中,循环的基本逻辑同Python是类似的。c中while循环的语法如下&…

力扣每日一题99:恢复二叉搜索树

题目 给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。 示例 1: 输入:root [1,3,null,null,2] 输出:[3,1,null,null,2] 解释:3 不能是 1 …

【linux】ufw 的基本使用

碎碎念 所有的云平台的网络流量的进出基本上有三层,首先是虚拟网的流量控制,一般是通过子网访问控制列表来控制vpc也好子网也好的流量出入,其次是安全组控制一层,通过安全组规则控制一类/一组主机(指EC2/ECS/VM/CE这些…

c语言结构体学习

文章目录 前言一、结构体的声明1,什么叫结构体?2,结构体的类型3,结构体变量的创建和初始化4,结构体的类型5,结构体的初始化 二、结构体的访问1,结构体成员的点操作符访问2,结构体体成员的指针访问 三、结构…

rime中州韵小狼毫 inputShow lua Filter 输入字符透传滤镜

在 rime中州韵小狼毫 inputShow lua Translator 一文中,我们通过 inputShow.lua 定制了 inputShow_translator,这使得我们的输入方案可以将用户输入的字符透传到候选列表中来。如下👇: 👆上图中我们在候选列表中看到了…

基于ssm+vue服装商城购物系统

摘要 在基于SSM框架和Vue.js的服装商城购物系统中,整合了多种先进的技术,为电子商务领域的发展提供了有力支持。该系统不仅仅是技术层面的整合,更是对于业务流程和用户体验的深入考虑。以下是对该系统扩展的一些关键方面的讨论,以…

synchronized锁

synchronized 类锁:给类的静态方法加上synchronized 关键字进行修饰, 锁的是当前类class,一个静态同步方法拿到锁,其他静态同步方法就会等待静态同步方法和普通同步方法间是没有竞争的 对象锁:给类的方法加上synchron…

elasticsearch如何操作索引库里面的文档

上节介绍了索引库的CRUD,接下来操作索引库里面的文档 目录 一、添加文档 二、查询文档 三、删除文档 四、修改文档 一、添加文档 新增文档的DSL语法如下 POST /索引库名/_doc/文档id(不加id,es会自动生成) { "字段1":"值1", "字段2&q…