一,写一个python脚本作为中间层来处理自己的东西

from flask import Flask, request
import json
import base64
import ast
import requests
app = Flask(__name__)


@app.route('/cimc_ocr', methods=['POST'])
def hello_world():
    if 'file' not in request.files:
        return 'No file part in the request.'
    file = request.files['file']
    if file.filename == '':
        return 'No file selected.'

    image_data1 = file.read()

    image = base64.b64encode(image_data1).decode('utf8')

    data = {"key": ["image"], "value": [image]}

    # 转成 json 字符串

    json_str = json.dumps(data)

    print(json_str)

    url = "http://192.168.3.211:9998/ocr/prediction"  # 接口的URL

    headers = {
        "Content-Type": "application/json"  # 设置请求头为JSON类型
    }

    response = requests.post(url, data=json_str, headers=headers)

    print(response.json())  # 使用.json()方法获取响应的JSON数据

    data_str = response.json().get("value")[0];

    my_set = set()

    # 使用ast模块解析字符串

    data_list = ast.literal_eval(data_str)

    for item in data_list:

        for itemlist in item[0]:

            if not str(itemlist).startswith("0"):

                print(itemlist)

                my_set.add(itemlist)

    return '\n'.join(str(x) for x in my_set)

if __name__ == '__main__':

    app.run(host='0.0.0.0')

设置为:app.run(host=‘0.0.0.0’)
如果不设置默认是app.run()表示默认是localhost,5000端口不能访问(即使防火墙开启)

二,将这个脚本转化为 docker 容器

准备如下三个文件:

1. paseData.py脚本文件

2. dockerFile文件

FROM python:3.9

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY paseData.py .

EXPOSE 5000

CMD [ "python", "paseData.py" ]

3. requirements.txt文件

requirements.txt是一个常见的文本文件,用于列出Python项目的依赖项(即所需的第三方包和库)。它通常位于项目的根目录中,并用于在安装和管理项目依赖时提供指南。
当您在Python项目中使用第三方库时,您可以将其添加到requirements.txt文件中,以便其他人可以轻松地安装并运行您的项目。此文件列出了每个依赖项的名称及其版本号

Flask==1.1.2
requests==2.25.0
Jinja2==2.11.3
MarkupSafe==1.1.1
itsdangerous==1.1.0
werkzeug==0.16.0
以下是对这些包的简要解释:
1. Flask==1.1.2:Flask是一个使用Python编写的微型Web框架。它提供了简单易用的API和工具,用于构建Web应用程序和API。Flask具有灵活性和可扩展性,可用于构建各种规模的Web应用程序。
2. requests==2.25.0:requests是一个流行的HTTP库,用于向Web服务器发送请求并获取响应。它提供了简单且易于使用的API,可以执行各种HTTP操作,如发送GET、POST等类型的请求,处理响应内容等。
3. Jinja2==2.11.3:Jinja2是一个现代的、功能丰富的模板引擎,用于将动态数据注入到静态模板中。它使用简单的语法和强大的模板继承机制,允许开发者在应用程序中使用模板来生成动态内容。
4. MarkupSafe==1.1.1:MarkupSafe是一个用于转义HTML、XML和其他标记语言的库。它提供了一组用于处理转义和安全字符串操作的函数,用于确保从数据源插入的内容不会导致潜在的跨站点脚本(XSS)漏洞。
5. itsdangerous==1.1.0:itsdangerous是Flask中使用的一个库,用于处理安全相关的操作,如生成和校验加密令牌、签名数据等。它提供了一些有用的功能,如生成和验证加密的会话Cookie、生成和验证一次性令牌等。
6. werkzeug==0.16.0:Werkzeug是一个用于构建Web应用程序的WSGI工具库。它提供了一组用于处理HTTP请求、路由和中间件等的工具和实用程序。
这些包都是用于Web开发的常用工具和依赖项。它们提供了构建和运行Web应用程序所需的各种功能和功能组件。Flask作为Web框架,依赖于这些包来提供核心功能,如处理HTTP请求、渲染模板、处理表单数据等。

三,构建镜像

docker build -t mypasedatapp:1.0 .

将 dockerFile文件和python文件放在同一个文件夹下面

四,启动容器

docker run -d --name mypasedatapp -p 5000:5000 --network=host -it mypasedatapp:1.0
这个命令是使用 Docker 来运行一个名为 mypasedatapp 的容器。下面我会逐一解释这个命令中的各个参数:
1. docker run: 这是 Docker 的一个基础命令,用于启动新的容器。
2. -d: 以“分离”模式运行容器,即后台运行。
3. --name mypasedatapp: 为容器指定一个名字,名字为 mypasedatapp。
4. -p 5000:5000: 端口映射。将宿主机的 5000 端口映射到容器的 5000 端口。
5. --network=host: 使用宿主机的网络栈。这意味着容器将不会获得一个独立的 IP 地址,而是直接使用宿主机的 IP 地址和端口。需要注意的是,当使用 --network=host 时,-p 端口映射实际上是多余的,因为容器已经直接使用了宿主机的网络。
6. -it: 这两个选项通常一起使用,用于交互式地运行容器。其中 -i 保持 STDIN 打开,-t 分配一个伪终端。但在这个命令中,由于使用了 -d 选项来后台运行容器,-it 实际上是多余的。
7. mypasedatapp:1.0: 这是要运行的 Docker 镜像的名字和标签。名字是 mypasedatapp,标签是 1.0

五,测试访问

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐