簡體   English   中英

使用來自uwsgi-nginx-flask-docker的Tesseract 4 - Docker Container

[英]Use Tesseract 4 - Docker Container from uwsgi-nginx-flask-docker

我讓我的python項目運行本地,它的工作原理。 我使用python的tesseract和subprocess包。

然后我部署了我的項目,因為我使用Flask,我安裝了tiangolo-uwsgi-flask-nginx-docker,但是沒有安裝Tesseract。 這就是為什么我的項目不再起作用的原因,因為它無法找到tesseract。 並且它無法識別我的AWS實例上安裝的tesseract,因為docker容器中未安裝tesseract。

這就是為什么我想使用tesseract 4 Docker ,它安裝了Tesseract。

我有兩個Dockers:

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容器中取出Tesseract。

我讀過這篇關於連接兩個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我只是更改了幾行並刪除了一些我不需要的東西。

也許有人知道如何做到這一點,或者可以提出另一種更好的方法來使用tiangolo-docker tesseract

編輯 (見下面的編輯)

我找到了答案。 因為它適用於每兩個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容器都是通信的。

希望它可以幫助某人。

編輯

由於它可能很復雜,我創建了一個只有dockerfile的git項目,你可以使用flask,nginx,uwsgi和tesseract。 所以不需要使用兩個容器。

搬運工燒瓶-nginx的-uwsgi-的tesseract

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM