【问题标题】:How to make a REST API for OCR如何为 OCR 制作 REST API
【发布时间】:2019-11-22 17:37:24
【问题描述】:

我正在执行一项任务,其中我有一张图像并且必须从中提取日期。日期是使用 Google Cloud Platform Vision API 提取的。如何使用接受图像并返回日期的烧瓶制作 API?格式如下所示:

请求:POST /extract_date

有效负载:{“base_64_image_content”:}

响应:如果日期存在:{“日期”:“YYYY-MM-DD”} 如果日期不存在 现在:{“日期”:空}

你能帮帮我吗?

【问题讨论】:

  • 这个问题对于 Stack Overflow 来说太宽泛了,但幸运的是互联网上有大量关于这个主题的教程。
  • @KlausD。我认为 OP OP 围绕这个主题做了一些研究。我同意它相对广泛,但那是新人经常问的问题类型。我不会解雇它
  • 在我们的讨论之后,我用 GCP 函数代码扩展了答案。您可能想详细说明您的问题和/或指定您对 GCP 上的 OCR REST API 感兴趣。 GCP 在这里很有帮助,因为函数的成本可以忽略不计,而且在验证您必须使用的 Vision API 时没有问题。

标签: python rest machine-learning flask ocr


【解决方案1】:

Flask 是最流行的 Python 网络框架之一。它相对容易学习,而它的扩展 Flask-RESTful 使您能够快速构建 REST API。

小例子:

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class MyApi(Resource):
    def get(self, date):
        return {'date': 'if present'}

api.add_resource(MyApi, '/')

if __name__ == '__main__':
    app.run()

curl测试:

curl http://localhost:5000/ -d "data=base_64_image_content" -X PUT

根据 cmets 中的讨论,以下是如何使用 GCP Functions 构建 OCR REST API:

import re
import json
from google.protobuf.json_format import MessageToJson
from google.cloud import vision
from flask import Response


def detect_text(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response <http://flask.pocoo.org/docs/0.12/api/#flask.Flask.make_response>`.
    """
    client = vision.ImageAnnotatorClient()
    image = vision.types.Image(content=request.data)
    response = client.text_detection(image=image)
    serialized = MessageToJson(response)
    annotations = json.loads(serialized)

    full_text = annotations['textAnnotations'][0]['description']
    annotations = json.dumps(annotations)

    r = Response(response=annotations, status=200, mimetype="application/json")
    return r

您可以使用以下代码发出请求:

def post_image(path, URL):
    headers = {'content-type': 'image/jpeg'}
    img = open(path, 'rb').read()
    response = requests.post(URL, data=img, headers=headers)
    return response

【讨论】:

  • 谢谢你能解释一下我正在使用谷歌的视觉 api 来完成图像到文本的任务,经过一些预处理步骤我提取日期,所以我有一个 python 代码文件来完成这个任务,现在我全部如果有人使用我的 api,它会上传图像,然后我的代码运行并提取日期。实际上,如果我理解错误,我从不构建 api 纠正我
  • @EshanAgarwal 运行烧瓶服务器是一种选择。如果您使用 GCP,那么您可以考虑使用 GCP Functions,即无服务器执行环境。函数的行为在很大程度上类似于flask,并且函数的主体可以(几乎)相同。函数剥离了大部分部署和扩展的复杂性(用可能对您来说不是问题的不同问题替换它们)。您可能希望使用本地 flask 服务器进行调试,因此上面的代码是相关的。
  • 好的,如果我使用 GCP,那么我必须在 GCP 上部署它吗?但是我怎样才能使用 gcp 制作 REST api。
  • 你不需要,你可以部署任何东西,你的家用电脑、亚马逊或烤面包机,只要它支持软件堆栈。 GCP 只会让您更轻松。如何制作 REST API?我刚刚给了你应该查找的内容(GCP 函数)。阅读教程,尝试使用 Functions 和 Flask 独立部署一些东西(正如我刚刚描述的),然后提出更具体的问题/问题。如果它为您提供后续步骤的指导,请关闭此问题。除非您有更具体的问题,否则您不会得到更准确的答案。
  • 我如何提出请求?
猜你喜欢
  • 2011-09-26
  • 2015-06-19
  • 2019-01-06
  • 2017-07-04
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
相关资源
最近更新 更多