[英]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。 所以不需要使用两个容器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.