使用 uwsgi-nginx-flask-docker 中的 Tesseract 4 - Docker 容器

2023-12-27

我的 python 项目在本地运行,并且它可以工作。我将 python 中的 tesseract 与 subprocess 包一起使用。

然后我部署了我的项目,因为我使用 Flask,所以我安装了tiangolo-uwsgi-flask-nginx-docker https://github.com/tiangolo/uwsgi-nginx-flask-docker但是,Tesseract 没有安装在那里。这就是为什么我的项目不再工作,因为它找不到超正方体。它无法识别安装在我的 AWS 实例上的 tesseract,因为 tesseract 未安装在 docker 容器中。

这就是为什么我也想使用超正方体 4 Docker https://github.com/tesseract-shadow/tesseract-ocr-re其中安装了 Tesseract。

我有两个 Docker:

c82b61361992        tesseractshadow/tesseract4re:latest   "/bin/bash"            6 seconds ago       Up 5 seconds                                      t4re
e122633ef81c        my_project:latest                 "/entrypoint.sh /sta   35 minutes ago      Up 35 minutes       0.0.0.0:80->80/tcp, 443/tcp   modest_perlman

但我不知道如何诉说my_project它必须从 Tesseract Container 中取出 Tesseract。

I read 这个帖子 https://deis.com/blog/2016/connecting-docker-containers-1/关于连接两个 Docker 容器,但我更迷失了。 :)

我看到 Tesseract Docker 应该这样工作:

#!/bin/bash
docker ps -f name=t4re
TASK_TMP_DIR=TASK_$$_$(date +"%N")
echo "====== TASK $TASK_TMP_DIR started ======"
docker exec -it t4re mkdir \-p ./$TASK_TMP_DIR/
docker cp ./ocr-files/phototest.tif t4re:/home/work/$TASK_TMP_DIR/
docker exec -it t4re /bin/bash -c "mkdir -p ./$TASK_TMP_DIR/out/; cd ./$TASK_TMP_DIR/out/; tesseract ../phototest.tif phototest -l eng --psm 1 --oem 2 txt pdf hocr"
mkdir -p ./ocr-files/output/$TASK_TMP_DIR/
docker cp t4re:/home/work/$TASK_TMP_DIR/out/ ./ocr-files/output/$TASK_TMP_DIR/
docker exec -it t4re rm \-r ./$TASK_TMP_DIR/
docker exec -it t4re ls
echo "====== Result files was copied to ./ocr-files/output/$TASK_TMP_DIR/ ======"

但我不知道如何在我的 python 脚本和其他容器中实现它。

我的 python-tesseract 脚本看起来非常类似于pytesseract.py https://github.com/madmaze/pytesseract/blob/master/src/pytesseract.py我只是更改了几行并删除了一些我不需要的东西。

也许有人知道如何做到这一点,或者可以提出另一种更好的方法来使用 tesseracttiangolo-docker


EDIT(见下面的编辑)

我找到了答案。由于它适用于每两个 docker 容器,因此我将编写一个始终可以使用的通用解决方案。

我在同一个实例中同时拥有 docker 映像和容器:

CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                    NAMES
14524d364cff        (image)               "java -jar ..."   40 hours ago        Up 40 hours         0.0.0.0:5000->5000/tcp   api-1
3392994ae3ac        (image)               "java -jar ..."   40 hours ago        Up 40 hours         0.0.0.0:5002->5002/tcp   api-2

到这里为止就很容易了。

然后,我写了一个 docker-compose.yml

version: '2'
services:         
  api-1:
    image: _name-of-image_
    container_name: api-1
    ports:
      - "5000:5000"
    depends_on:
      - api-2

  api-2:
    image: _name-of-image_
    container_name: api-2
    ports:
      - "5002:5002"

然后,以api-1的docker文件为例。

...
ENV API-2HOST api-2
...

就是这样。

在我的特定情况下,我有一个 api-1.conf :

accounts = {
  http = {
    host = "localhost"
    host = ${?API-2HOST}
    port = 5002
    poolBufferSize = 100
    routes = {
      authentication = "/authentication"
      login = "/login/"
      logout = "/logout"
      refreshTokens = "/refreshTokens"
    }
  }
}

然后我可以轻松地在那里发出请求,两个 docker 容器也可以进行通信。

希望它可以帮助某人。

EDIT

由于它可能很复杂,因此我创建了一个仅包含 dockerfile 的 git 项目,您可以在其中使用 Flask、nginx、uwsgi 和 tesseract。所以没有必要同时使用这两个容器。

docker-flask-nginx-uwsgi-tesseract https://github.com/MarkRatFelt/docker-flask-nginx-uwsgi-tesseract

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 uwsgi-nginx-flask-docker 中的 Tesseract 4 - Docker 容器 的相关文章

  • Flask_login - 当前用户

    我正在使用烧瓶登录我的烧瓶应用程序中的扩展用于登录用户 您必须知道 此扩展有一个变量 用于存储当前用户 除了测试之外 该代码运行良好 当我测试代码时 使用unittest 我注册了一个 测试用户 并登录 但是当前用户变量不保留登录的用户 这
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • Docker Compose 无法连接到数据库

    我使用 Nestjs 作为后端 并使用 typeorm 作为 ORM 我尝试在 docker compose 文件中定义我的数据库和应用程序 如果我将数据库作为容器运行 并从本地计算机运行应用程序 那么它运行良好 我的程序连接并创建表等 但
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 带有 npm 启动脚本的 Nodejs 应用程序

    我对nodejs很陌生 在我的docker化环境中 我想为nodejs应用程序提供appdynamics支持 这要求每个应用程序都要求将以下内容作为其应用程序的第一行 require appdynamics profile controll
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • 为什么 UpdatePanel 内的按钮在第一次后不执行 JQuery 事件

    我有一个按钮 在UpdatePanel 它打开一个弹出表单 允许我输入一些数据 然后提交执行一些功能 使用输入的新数据更新 UpdatePanel 并关闭弹出窗口
  • JavaScript 执行使页面暂时挂起

    我有一个网络应用程序使用jQuery JavaScript重重 它在内存中保存一个大数组 用户通过在文本框中键入内容来过滤它 问题 当过滤算法运行时 应用程序变得无响应浏览器甚至可能询问用户是否让脚本继续 最理想的是 我希望过滤器功能在单独
  • 是否可以在运行时检测到您的 iOS 应用程序正在 iPad mini 上运行?

    在运行时检测不同的硬件对于分析很有用 以及其他更值得怀疑的目的 许多 iOS 应用程序创建者可能有兴趣了解有多少用户在 iPad mini 上体验他们的应用程序 而不仅仅是知道有多少用户在屏幕分辨率为 1024x768 的 iPad 上体验
  • 将 numpy 数组的列与另一个数组相加和相乘

    我有一个2D numpy array x和和1D numpy array y import numpy as np x np arange 12 reshape 4 3 y np array 1 0 2 0 3 0 4 0 我想乘 加列向量
  • DialogFragment 的自定义布局 OnCreateView 与 OnCreateDialog

    我正在尝试使用我自己的布局创建 DialogFragment 我见过几种不同的方法 有时布局在 OnCreateDialog 中设置如下 我正在使用 Mono 但我已经习惯了 Java public override Android App
  • 合并多个画布并下载为图像

    我正在尝试将两个 HTML 画布合并到一个画布中 然后将其下载为图像 我的代码如下 function downloadCanvas var bottleCanvas document getElementById bottleCanvas
  • ggplot 中的多行图表不使用构面

    假设我有一个太宽的图表 我想将其切成两半并将其显示为两个图表 一个使用 x 刻度范围的前半部分 第二个使用后半部分 有简单的方法吗 一个例子是ggplot diamonds aes x price geom bar 我不想使用上面的线生成的
  • FOSRestBundle:如何删除 {_format} 参数?

    我只需要支持单一 API 格式 即 JSON 并且我不喜欢在路由中使用 format 可以去掉吗 在您的 config yml 中 确保您已进行以下配置 fos rest format listener true routing loade
  • Flash CS4不肯放手

    我有一个Flash项目 它有很多源文件 我有一个使用率相当高的类 称之为 Jenine 我最近 也许是无情地 将 Jenine 从一个命名空间迁移到了另一个命名空间 我以为我们已经准备好了 我以为是时候了 新的 Jenine 在各方面都更好
  • JPA:两端都有列表,没有无限循环

    我正在尝试通过链接两个实体Set属性如 实体A Set
  • 寻找相当于机械化功能的请求

    我有兴趣看看 Requests 是否可以处理我主要在 Mechanize 中执行的一些任务 Mechanize 可以轻松处理填写表单和提交表单 但我很难在 Requests 中尝试做同样的事情 例如 import mechanize br
  • 有没有允许复制粘贴的 diff 工具

    是否有差异工具可以让您粘贴两段文本并获得差异 我无法使用在线工具 因为我正在处理专有数据 而且我还没有找到提供该功能的工具 Try WinMerge http winmerge org 它会做到这一点 Steps 下载并安装 winmerg
  • 将 +"" 添加到字符串会追加“0”

    由于偶然的打字错误 我遇到了一种我无法解释的行为 当我有 var text abc text the text变量突然变成abc0 有人可以对此提供任何见解吗 评估为数字0 这是因为为了应用一元加运算符 被强制为一个数字 与Number 这
  • PHP 类中的异常

    我正在为我的朋友编写一个 Web 应用程序 PHP 并决定使用我有限的 Java OOP 培训 我的问题是 在我的课程 应用程序中记录特定关键事情失败而不会真正破坏我的页面的最佳方式是什么 我的问题是我有一个对象 SummerCamper
  • 解析带有截断时区信息的 Java 日期

    考虑以下日期字符串 2012 10 01 01 02 03 004 0500 在 Java 中使用以下方式识别这一点SimpleDateFormat图案 yyyy MM dd HH mm ss SSSZ 但是 如果上面的时区信息被截断为 2
  • Azure blob 的阻止列表为空,但 blob 不为空!怎么会这样?

    这个问题简单来说就是 可以使用单个 PUT 请求创建块 blob 这将创建一个包含已提交内容的 blob 但该 blob不会有任何已提交的块 这意味着您不能假设提交的块的串联与提交的内容相同 使用块 blob 时 您必须特别注意具有空块列表
  • 如何 JSON 序列化集合? [复制]

    这个问题在这里已经有答案了 我有一个Pythonset包含对象 hash and eq 方法以确保集合中不包含重复项 我需要对这个结果进行 json 编码set 但即使传递一个空的set to the json dumps方法提出了一个Ty
  • 如何将 Vec 转换为 Vec? [复制]

    这个问题在这里已经有答案了 我已将文件读入无符号字节向量 let data fs read test bin expect Unable to read file 我怎样才能将这个向量转换 转换为Vec
  • 编译时弃用警告:零参数方法的 eta 扩展

    编译此代码片段时 scala 编译器会发出以下警告 不推荐使用零参数方法值的 eta 扩展 你是否 打算写Main this porFiles5 吗 警告 timerFunc porFiles5 当我将一个函数传递给另一个函数以进行简单的计
  • 使用 uwsgi-nginx-flask-docker 中的 Tesseract 4 - Docker 容器

    我的 python 项目在本地运行 并且它可以工作 我将 python 中的 tesseract 与 subprocess 包一起使用 然后我部署了我的项目 因为我使用 Flask 所以我安装了tiangolo uwsgi flask ng