gunicorn+flask+PaddleOCR

前言

由于公司是2G,所以一些收费的公网api不能用(同时也不安全),以至于内部尝试了多种开源ocr框架。首先是使用golang封装的一个ocr模块gosseract,使用英文模型多数字字母识别准确率高一点,不过也只有80%多的准确率。后面就尝试用gunicorn+flask+PaddleOCR 简单开发了一个web服务。

gosseract(自己弄一个unbuntu的基础镜像)

dockerfile

RUN echo 'deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse \n\deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse \n\deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse \n\deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse \n\deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse' > /etc/apt/sources.listENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \apt-get -y install vim wget net-tools curl sudo make telnet iputils-ping tzdata git gcc libtbb2 zip && \ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime && echo "Asia/Shanghai" > /etc/timezoneRUN apt-get -y install automake ca-certificates g++ git libtool libleptonica-dev make pkg-config
RUN git clone https://github.com/tesseract-ocr/tesseract.git && cd tesseract && ./autogen.sh && ./configure && make && make install && ldconfig
#libleptonica 需要创建软连接才能使用
RUN ln -s  /usr/lib/x86_64-linux-gnu/liblept.so /usr/lib/x86_64-linux-gnu/libleptonica.so

 然后自己根基上述打一个基础镜像,自己的golang代码基于这个基础镜像来生成生产镜像。

gunicorn+flask+PaddleOCR

gunicorn是一个wcgi服务,类似网关和反向代理服务(参考php)。能够使用多进程的方式管理应用服务。

dockerfile(基础镜像)

FROM registry.baidubce.com/paddlepaddle/paddle:2.1.3-gpu-cuda10.2-cudnn7RUN echo 'deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse \n\deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse \n\deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse \n\deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse \n\deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse \n\deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse' > /etc/apt/sources.list
#不然的话会加载其他源 会报错
RUN rm -rf /etc/apt/apt.conf.d/* /etc/apt/sources.list.d/
# 不知道为什么原先的ssl居然不能用 太垃圾了(版本匹配不上)
RUN apt update && apt remove -y libssl-dev && apt install -y libssl-devRUN python3 -m pip install paddlepaddle "paddleocr>=2.0.1" -i https://mirror.baidu.com/pypi/simple
RUN pip3 install gunicorn gevent flask  -i https://mirror.baidu.com/pypi/simpleRUN echo "from paddleocr import PaddleOCR" >> download.py
# 预先加载英文模型 防止在代码跑起来之后加载 如果想要加载中文模型 就是复制俩行
RUN echo "PaddleOCR(use_angle_cls=True, lang=\"en\")" >> download.py
RUN python3 download.py

生产镜像

FROM ****/ocr_base:0.0.2WORKDIR /workspaceCOPY ./app/ocr/app.py /workspace/app.py
# 这里面是启动3个worker 不要太多 模型加载之后可是能消耗近2g物理内存
CMD cd /workspace && gunicorn -b 0.0.0.0:8000 -w 3 -k gevent --access-logfile - app:app

其中app.py 就是flask的入口文件

import time
import urllib.requestfrom flask import Flask, request
from paddleocr import PaddleOCR, draw_ocrdef save_image(url,outputfile):try:response = urllib.request.urlopen(url)data = response.read()with open(outputfile, "wb") as file:file.write(data)return Trueexcept urllib.error.URLError as e:print("Error occurred while retrieving the URL:", e)return Falseapp = Flask(__name__)
ocr = PaddleOCR(use_angle_cls=True, lang="en")@app.route("/")
def hello():print("-------------------")return "Hello World!"@app.post("/ocr/check")
def check_post():ret = {}req = request.get_json()print(req,type(req))url = req.get("url")if url == None :ret["code"] = -1ret["msg"] = "param url lost"ret["data"] = []return retresult = ocr.ocr(url, cls=True)if len(result) == 0:ret["code"] = -3ret["msg"] = "ocr result empty"ret["data"] = []return retdata =[]for idx in range(len(result)):res = result[idx]for idx1 in range(len(res)) :temp = {}res1 = res[idx1]temp["text"]=res1[-1][0]temp["score"]=res1[-1][1]data.append(temp)ret["code"] = 0ret["msg"] = ""ret["data"] = data    return retif __name__ == "__main__" :app.run()

到此你就搭建了一个ocr的web服务了

普通的验证码之类的识别1s 10张 想要更高的性能那你就在生产镜像里面吧worker加到更大,不过消耗的cpu内存也就更多(PaddleOCR其实支持gpu 这里默认是cpu)

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

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

相关文章

SpringBoot的流浪宠物系统

采用技术:springbootvue 项目可以完美运行

DALL·E 3 ChatGPT-4的梦幻联动

核心内容:DALLE 3 & ChatGPT-4的梦幻联动 hello,我是小索奇,最近DALL结合ChatGPT4的话题逐渐上升了起来,今天就带大家探索一下~ DALLE的主要功能是根据文本描述来生成图片。你可以告诉它一个穿着皮草的西瓜,它就能…

百度小程序制作源码 百度引流做关键词排名之技巧

百度作为国内最大的搜索引擎,对于关键词排名和流量获取的策略格外重要,下面给大家分享一个百度小程序制作源码和做百度引流、关键词排名的一些技巧。 移动设备的普及和微信小程序的火热,百度也推出了自己的小程序。百度小程序与微信小程序类…

充电保护芯片TP4054国产替代完全兼容DP4054DP4054H 锂电充电芯片

■产品概述 DP4054H是-款完整的采用恒定电流/恒定电压单节锂离子电池充电管理芯片。其SOT小封装和较少的外部元件数目使其成为便携式应用的理想器件,DP4054H可 以适合USB电源和适配器电源工作。 由于采用了内部PMOSFET架构,加上防倒充电路,所以不需要外…

机器学习基础-数据分析:房价预测

mac设置中文字体 #要设置下面两行才能显示中文 Arial Unicode MS 为字体 plt.rcParams[font.sans-serif] [Arial Unicode MS] #设置图片大小 plt.figure(figsize(20, 11), dpi200)pie官方文档 总体代码 python import pandas as pd import numpy as np import matplotlib.…

自然灾害对物流业的影响

自然灾害是指地球自然系统的各种异常事件,例如地震、飓风、洪水、干旱、林火等,这些事件都会对人们的生活、经济和环境产生极大的影响。 自然灾害可能导致以下影响: 丧失生命:自然灾害可能会导致人员伤亡和死亡,当然包…

用PyTorch轻松实现二分类:逻辑回归入门

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

《golang设计模式》第二部分·结构型模式-07-代理模式(Proxy)

文章目录 1. 概述1.1 角色1.2 模式类图 2. 代码示例2.1 设计2.2 代码2.3 示例类图 1. 概述 代理(Proxy)是用于控制客户端访问目标对象的占位对象。 需求:在调用接口实现真是主题之前需要一些提前处理。 解决:写一个代理&#xff…

ViewPager、RecycleView实现轮播图

1.ViewPager实现轮播图形效果。 1&#xff09;layout中&#xff0c;PageIndicatorView轮播的View <RelativeLayoutandroid:layout_width"match_parent"android:layout_height"200dp"android:orientation"vertical"><androidx.viewpager…

http.header.Set()与Add()区别;

在Go语言中进行HTTP请求时&#xff0c;http.Header对象表示HTTP请求或响应的头部信息。http.Header是一个map[string][]string类型的结构&#xff0c;用于存储键值对&#xff0c;其中键表示HTTP头字段的名称&#xff0c;值是一个字符串切片&#xff0c;可以存储多个相同名称的头…

centos openssh升级

注意&#xff1a; openssh升级异常会造成服务失联&#xff0c;如果在允许的情况下可以安装talent服务&#xff0c;使用talent升级&#xff1b; 如果不能安装talent服务&#xff0c;可以打开多个终端&#xff0c;启动ping命令&#xff0c;防止升级终端失败后&#xff0c;作为备用…

巧用excel实现试卷向表格的转换

MID($E$10,FIND(D14,$E$10,1),FIND(D15,$E$10,1)-FIND(D14,$E$10,1)) MID($E$10,FIND(D15,$E$10,1),FIND(D16,$E$10,1)-FIND(D15,$E$10,1)) 中华人民共和国司法部

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Span

作为Text组件的子组件&#xff0c;用于显示行内文本的组件。无子组件 一、接口 Span(value: string | Resource) 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 参数&#xff1a; 参数名 参数类型 必填 参数描述 value string | Resource 是 文本内…

c++视觉---中值滤波处理

中值滤波&#xff08;Median Filter&#xff09;是一种常用的非线性平滑滤波方法&#xff0c;用于去除图像中的噪声。它不像线性滤波&#xff08;如均值滤波或高斯滤波&#xff09;那样使用权重来计算平均值或加权平均值&#xff0c;而是选择滤波窗口内的像素值中的中间值作为输…

docker搭建jenkins

1.拉取镜像 docker pull jenkinsci/blueocean 2.启动容器 docker run -d -u root -p 8666:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name MyJenkins jenkinsci/blueocean 3.访问ip:port,就能访问了 4.docker logs 容器…

主从复制的实现方案

读写分离技术架构图 实现读写分离的技术架构选型如上;需要自己去实践主从复制;为了节省资源&#xff0c;当然系统并发量并没有那么大,选择一主一丛;强制读主库,为了解决主从同步延迟带来的影响&#xff1b;对于实时性要求高的强制读主库&#xff1b;GTID 主要是一种事务标识技术…

linux centos运行C语言程序

1.安装gcc。 yum install gcc [rootlinux ~]# yum install gcc 已加载插件&#xff1a;fastestmirror, langpacks Repository updates is listed more than once in the configuration Repository extras is listed more than once in the configuration Loading mirror spee…

Ubuntu 22.04 铭瑄 MS-终结者 B760M D4 WIFI 驱动安装

wifi芯片为intel ax101ngw 直接装最新稳定版本linux 6.5.6 源码地址 https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.5.6.tar.xz .config参考 /boot/config-6.2.0-33-generic修改&#xff0c;完整内容如下 # # Automatically generated file; DO NOT EDIT. # Linux/…

OpenCV Python – 使用SIFT算法实现两张图片的特征匹配

OpenCV Python – 使用SIFT算法实现两张图片的特征匹配 1.要实现在大图中找到任意旋转、缩放等情况下的小图位置&#xff0c;可以使用特征匹配算法&#xff0c;如 SIFT (尺度不变特征变换) 或 SURF (加速稳健特征)。这些算法可以在不同尺度和旋转情况下寻找匹配的特征点 impo…

docker搭建nginx

1.docker pull nginx 2.docker run --name nginx-test -p 8082:80 -d nginx 3.访问ip:8082