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…

webpack配置入门

webpack是需要一定配置才能使用的,否则无任何效果。在开始webpack学习之前必须理解以下5个核心概念。 5大核心配置 1.entry(入口) webpack从那个文件开始打包,支持单文件入口(vue和react脚手架单入口)和多文件入口 2.output(输…

工作流入门这篇就够了!

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

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 的类似使用方法可以使用第三种。 …

企业级知识图谱的案例分享

近日,在深圳举办的2019中国知识图谱产业发展峰会上,中国人工智能知识图谱联盟(AICKI)正式发布了《2019知识图谱白皮书》。这份白皮书对中国知识图谱产业的发展现状、趋势和热点进行了解读,并对行业典型应用案例进行了详…

用Audio2Face驱动UE - MetaHuman

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

数据结构-线性表-链接存储

关于线性表计顺序存储可看上篇文章:数据结构-线性表-顺序存储-CSDN博客 线性表的链接存储 链接方式存储的线性表简称为链表LinkList,链表的具体存储表示为:用一组任意的存储单元来存放;链表中结点的逻辑次序和物理次序不一定相同…

我的JDK动态代理流程

我的JDK动态代理流程 我梳理的动态代理流程大约是: 如果每一个框架都有自己的BPP,且自己的BPP中都有自己的wrapIfNecessory,那样可能就是一个BPP一个代理类。但通常应该都是各自的框架以提供 Advisior(切面)的方式&am…

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

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

C++中的 greate/less 比较器模板的实现原理及作用

std::greater 是 C 标准库中的一个函数对象&#xff0c;它被设计用来在容器和算法中进行比较&#xff0c;以实现逆序排列或按照 “greater” 的语义进行比较。std::greater 是一个模板类&#xff0c;定义在头文件 <functional> 中。 这个函数对象模板有一个模板参数&…

hcie datacom笔试考多少道题目?

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

diffusers 源码待理解之处

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

JavaSE学习笔记 2023-12-26 --枚举和注释

二十二、枚举和注释 上一篇 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 文章目录 二十二、枚举和注释22.1枚举22.2注解 22.1枚举 接口/类中的静态属性 以内部类的形式使用较多 public enum Color {RED,GREEN,YELLOW } class Test01 {public s…

循环与基础函数

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

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

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