chineseocr项目不使用web推理-docker容器化

news2024/11/27 14:07:40

整个流程介绍

  1. 拉取 ufoym/deepo 镜像 -- 因为包含了主流深度学习框架,镜像4G出头。
  2. 拉取 chineseocr 项目代码。
  3. 修改代码,不使用web,增加命令行传入图片路径的功能
  4. 打包成docker镜像。

开始

拉取 ufoym/deepo 镜像 :cpu版本为例

docker hub地址:(好像需要梯子)

https://hub.docker.com/r/ufoym/deepo

docker pull ufoym/deepo:cpu
拉取 chineseocr 项目代码

项目:https://github.com/chineseocr/chineseocr

git clone https://github.com/chineseocr/chineseocr.git
修改代码,不使用web,增加命令行传入图片路径的功能

先 run 一个容器:

docker run -itd -v /home/wind/winds/ocr/chineseocr-app:/data --name ocr ufoym/deepo:cpu

 进入容器开发:

docker exec -it ocr /bin/bash

安装一些库:

 ps. 把web注释掉

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

把官方的 test.ipynb 文件改为 .py 文件,使用argparse解析命令行输入的命令:

下面代码保存为 run.py 文件:

import os
import json
import time
from config import *
from application import trainTicket,idcard 

import argparse

if __name__ == "__main__":

    parser = argparse.ArgumentParser()
    parser.add_argument('--img_path','-img_path', type=str, default='test.jpeg')
    args = parser.parse_args()

    if yoloTextFlag =='keras' or AngleModelFlag=='tf' or ocrFlag=='keras':
        os.environ["CUDA_VISIBLE_DEVICES"] = ''

    if yoloTextFlag=='opencv':
        scale,maxScale = IMGSIZE
        from text.opencv_dnn_detect import text_detect
    elif yoloTextFlag=='darknet':
        scale,maxScale = IMGSIZE
        from text.darknet_detect import text_detect
    elif yoloTextFlag=='keras':
        scale,maxScale = IMGSIZE[0],2048
        from text.keras_detect import  text_detect
    else:
        print( "err,text engine in keras\opencv\darknet")
        
    from text.opencv_dnn_detect import angle_detect

    from crnn.keys import alphabetChinese,alphabetEnglish
    if ocrFlag=='keras':
        from crnn.network_keras import CRNN
        if chineseModel:
            alphabet = alphabetChinese
            if LSTMFLAG:
                ocrModel = ocrModelKerasLstm
            else:
                ocrModel = ocrModelKerasDense
        else:
            ocrModel = ocrModelKerasEng
            alphabet = alphabetEnglish
            LSTMFLAG = True
            
    elif ocrFlag=='torch':
        from crnn.network_torch import CRNN
        if chineseModel:
            alphabet = alphabetChinese
            if LSTMFLAG:
                ocrModel = ocrModelTorchLstm
            else:
                ocrModel = ocrModelTorchDense
                
        else:
            ocrModel = ocrModelTorchEng
            alphabet = alphabetEnglish
            LSTMFLAG = True
    elif ocrFlag=='opencv':
        from crnn.network_dnn import CRNN
        ocrModel = ocrModelOpencv
        alphabet = alphabetChinese
    else:
        print( "err,ocr engine in keras\opencv\darknet")
        
    nclass = len(alphabet)+1   
    if ocrFlag=='opencv':
        crnn = CRNN(alphabet=alphabet)
    else:
        crnn = CRNN( 32, 1, nclass, 256, leakyRelu=False,lstmFlag=LSTMFLAG,GPU=GPU,alphabet=alphabet)
    if os.path.exists(ocrModel):
        crnn.load_weights(ocrModel)
    else:
        print("download model or tranform model with tools!")
        
    ocr = crnn.predict_job
    
    from main import TextOcrModel

    model =  TextOcrModel(ocr,text_detect,angle_detect)

    import cv2
    import time
    p = args.img_path
    img = cv2.imread(p)

    h,w = img.shape[:2]
    timeTake = time.time()
    scale=608
    maxScale=2048

    result,angle= model.model(img,
                                        detectAngle=True,##是否进行文字方向检测
                                        scale=scale,
                                        maxScale=maxScale,
                                        MAX_HORIZONTAL_GAP=80,##字符之间的最大间隔,用于文本行的合并
                                        MIN_V_OVERLAPS=0.6,
                                        MIN_SIZE_SIM=0.6,
                                        TEXT_PROPOSALS_MIN_SCORE=0.1,
                                        TEXT_PROPOSALS_NMS_THRESH=0.7,
                                        TEXT_LINE_NMS_THRESH = 0.9,##文本行之间测iou值
                                        LINE_MIN_SCORE=0.1,                                             
                                        leftAdjustAlph=0,##对检测的文本行进行向左延伸
                                        rightAdjustAlph=0.1,##对检测的文本行进行向右延伸
                                    )
            
    timeTake = time.time()-timeTake

    print('It take:{:.3f}s'.format(timeTake))

    for line in result:
        print(line['text'])

ps. 因为TensorFlow版本的问题,会出现2-3和错误,下面列出可能遇到的错误和解决办法:

报错1:tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_367' with dtype float and shape [2]
[[{{node Placeholder_367}}]]
-- 就是这类Placeholder_xxx的问题

解决1:https://github.com/chineseocr/chineseocr/issues/496:

报错2:AttributeError: module ‘keras.backend‘ has no attribute 'get_session'

解决2:AttributeError: module ‘keras.backend‘ has no attribute ‘get_session‘ 问题解决_叶庭云的博客-CSDN博客

报错3:ValueError: Subshape must have computed start >= end since stride is negative, but is 0 and 2 (computed from start 0 and end 9223372036854775807 over shape with rank 2 and stride-1)

解决3:Tensorflow v1到v2版本兼容指南 - 知乎

最后,成功:

打包成docker镜像
docker commit -m 'cpu inference' -a 'hongrun' cdfaa57d915d ocr:cpu

以上。


附注:有一个轻量化的 chineseocr 项目,叫做 chineseocr_lite,这个也可以打包成镜像,但好像封装的有点死,不容易改动(比如不想用web),所以就抛弃它。

chineseocr_lite 项目:

https://github.com/DayBreak-u/chineseocr_lite/tree/master

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

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

相关文章

封装ThreadLocal

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 为什么要封装ThreadLoc…

geemap学习笔记020:如何搜索Earth Engine Python脚本

前言 本节内容比较简单,但是对于自主学习比较重要,JavaScript提供了很多的示例代码,为了便于学习,geemap将其转为了Python代码。 Earth Engine Python脚本 import ee import geemapee.Initialize()geemap.ee_search() #搜索Ear…

Vue3网站用户引导功能【Intro.js】

一、介绍 Intro.js 是一个用于创建网站用户引导、功能介绍和教程的 JavaScript 库。它允许开发者通过步骤和提示突出显示网站上的特定元素,以帮助用户更好地了解和使用网站的功能。以下是 Intro.js 的一些关键特点和用法介绍: 更多Intro.js 功能网址&a…

图扑数字孪生压缩空气储能管控平台

压缩空气储能在解决可再生能源不稳定性和提供可靠能源供应方面具有重要的优势。压缩空气储能,是指在电网负荷低谷期将电能用于压缩空气,在电网负荷高峰期释放压缩空气推动汽轮机发电的储能方式。通过提高能量转换效率、增加储能密度、快速启动和调节能力…

电子编曲软件FL Studio2024汉化中文免费版下载

电子编曲需要什么软件?市面上的宿主软件都可以完成电子编曲的工作,主要适用电子音乐风格编曲的宿主软件有FL Studio、Ableton Live等。电子编曲需要什么基础?需要对于电子音乐足够熟悉、掌握基础乐理知识以及宿主软件的使用方法。 就我个人的…

Linux cgroup技术

cgroup 全称是 control group,顾名思义,它是用来做“控制”的。控制什么东西呢?当然是资源的使用了。 cgroup 定义了下面的一系列子系统,每个子系统用于控制某一类资源。 CPU 子系统,主要限制进程的 CPU 使用率。cpu…

王道数据结构课后代码题p175 06.已知一棵树的层次序列及每个结点的度,编写算法构造此树的孩子-兄弟链表。(c语言代码实现)

/* 此树为 A B C D E F G 孩子-兄弟链表为 A B E C F G D */ 本题代码如下 void createtree(tree* t, char a[], int degree[], int n) {// 为B数组分配内存tree* B (tree*)malloc(sizeof(tree) * n);int i 0;i…

CENTOS 7 添加黑名单禁止IP访问服务器

一、通过 firewall 添加单个黑名单 只需要把ip添加到 /etc/hosts.deny 文件即可,格式 sshd:$IP:deny vim /etc/hosts.deny# 禁止访问sshd:*.*.*.*:deny# 允许的访问sshd:.*.*.*:allowsshd:.*.*.*:allow 二、多次失败登录即封掉IP,防止暴力破解的脚本…

搞程序权益系统v1.1

继1.0出来后我就把antdui换成elem 新增号卡功能现在只支持对接号氪系统 大家问我这个程序到底有什么用,我这边已经在写和WordPress对接文件,到时候在WordPress网站打开该程序就可以把订单同步到你的程序里面去,当然自己有集成能力也可以到小…

FairGuard无缝兼容小米澎湃OS、ColorOS 14 、鸿蒙4!

随着移动互联网时代的发展,各大手机厂商为打造生态系统、构建自身的技术壁垒,纷纷投身自研操作系统。 而对于一款游戏安全产品,在不同操作系统下,是否能够无缝兼容并且提供稳定的、高强度的加密保护,成了行业的一大痛…

python笔记:dtaidistance

1 介绍 用于DTW的库纯Python实现和更快的C语言实现 2 DTW举例 2.1 绘制warping 路径 from dtaidistance import dtw from dtaidistance import dtw_visualisation as dtwvis import numpy as np import matplotlib.pyplot as plts1 np.array([0., 0, 1, 2, 1, 0, 1, 0, 0…

Redis 命令全解析之 String类型

文章目录 ⛄String 介绍⛄命令⛄对应 RedisTemplate API⛄应用场景 ⛄String 介绍 String 类型,也就是字符串类型,是Redis中最简单的存储类型。 其value是字符串,不过根据字符串的格式不同,又可以分为3类: ● string&…

javaScript(四):函数和常用对象

文章目录 1、函数介绍2、函数的作用3、函数语法4、常用对象:数组5、常用对象:String6、常用对象:自定义对象 1、函数介绍 函数是一段可重复使用的代码块,用于执行特定任务或计算并返回结果。 函数由以下几个要素组成: …

2024最新电脑系统清理软件哪个好用?

基本上,不管是win版还是Mac版的电脑,其装机必备就是一款电脑系统清理软件,就比如Mac,目前在市面上,电脑系统清理软件是非常多的。 对于不熟悉系统的用户来说,使用一些小众工具,往往很多用户都不…

Flask项目Day1,Flask常见第三方拓展包

拉项目 git clone https://gitee.com/hahaguai007/python-flask-mysql.git git clone 项目地址运行后即可获取项目 2.创建数据库 在MySQL中创建一个数据库,名字自己定,然后修改RealProject\settings.py里的SQLALCHEMY_DATABASE_URI,格式为 …

一部,即全部,十年超越之作一加12售价4299元起

2023 年 12 月 5 日,一加正式发布十年旗舰一加 12。作为一加十年超越之作,一加 12 秉持「产品力优先」理念,带来多项领先行业的首创技术。一加 12 全球首发拥有医疗级护眼方案和行业第一 4500nit 峰值亮度的 2K 东方屏,完整搭载 F…

【Intel/Altera】 全系列FPGA最新汇总说明,持续更新中

前言 2023年11月14日英特尔 FPGA中国技术日,Intel刚发布了新的FPGA系列,官网信息太多,我这里结合以前的信息,简单汇总更新一下,方便大家快速了解Intel/Altera FPGA家族。 目录 前言 Altera和Intel 型号汇总 1. Agi…

【五分钟】学会利用cv2.resize()函数实现图像缩放

引言 在numpy知识库:深入理解numpy.resize函数和数组的resize方法中,小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看,numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

Python爬虫技术:如何利用ip地址爬取动态网页

目录 一、引言 二、Python爬虫基础 三、动态网页结构分析 四、利用ip地址爬取动态网页 1、找到需要爬取的动态网页的URL结构 2、构造请求参数 3、发送请求并获取响应 4、解析响应内容 五、实例代码 六、注意事项 七、总结 一、引言 随着互联网的快速发展&#xff0…

调研37位程序员后,我不再因为AI而焦虑 feat.脑放电波

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 杜1- 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo Nixon 的毕业论文研究了37位程序员使用GPT 写代码的状态,我们邀请了懂编程 且 具备一定技术团队管理经验的科技乱炖朱峰、小…