使用 Amazon Rekognition API 进行文本检测和 OCR
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Amazon Rekognition API 进行文本检测和 OCR相关的知识,希望对你有一定的参考价值。
使用 Amazon Rekognition API 进行文本检测和 OCR
这篇博客将介绍如何 使用Amazon Rekognition API 进行文本检测和 OCR,包括如何创建 Amazon Rekognition密钥、安装boto3(用于调用AWS接口的Python程序包)以及如何实现Python 脚本来调用 Amazon Rekognition API。
Amazon Rekognition OCR API 结果不仅正确,而且还可以在行和单词级别解析结果,提供了比 EAST文本检测模型和 Tesseract OCR引擎更精细的粒度(至少无需微调多个选项)。
1. 效果图
逐行OCR 效果图如下:
可以看到对输入飞机图像进行了逐行OCR,从而证明 Amazon Rekognition API 能够:
在输入图像中查找每个文本块、OCR 每个文本的投资回报率、将文本块分组为行。
逐单词OCR 效果图如下:
2. 原理
适用于Python的Amazon Web Services(AWS)软件开发工具包(SDK)
pip install boto3
2.1 步骤
- 了解 Amazon Rekognition API
- 如何获取 AWS Rekognition 密钥。这些密钥将包括公共访问密钥和密钥,类似于SSH,SFTP等。
- 如何将 Amazon Rekognition API 用于 OCR
- 获取 Amazon Web Services (AWS) Rekognition Keys
- 安装 Amazon 的 boto3 软件包以调用OCR API 接口
- 实现与 Amazon Rekognition API 接口的 Python 脚本,以 OCR 图像
2.2 云OCR API优缺点
到目前为止主要专注于使用Tesseract OCR引擎。但是还有其他光学字符识别(OCR)引擎可用,其中一些引擎比Tesseract更准确,并且即使在复杂,不受约束的条件下也能准确地OCR文本。
通常,这些OCR引擎位于云中。为了保持这些模型和相关数据集的专有性,这些公司不会公开模型,而是将它们放在REST API中。调用这些云API的主要原因是准确性。 首先考虑谷歌和微软通过运行各自的搜索引擎获得的数据量。然后考虑亚马逊每天通过简单地打印运输标签产生的数据量。这些公司拥有令人难以置信的图像数据量 。当在数据上训练新颖,最先进的OCR模型时,结果是一个非常强大和准确的OCR模型。
虽然这些模型确实比Tesseract更准确,但也有一些缺点,包括:
- OCR图像需要互联网连接 - 对于大多数笔记本电脑/台式机来说,这不是一个问题,但如果您在边缘工作,则可能无法进行互联网连接;
- 如果使用的是边缘设备,则可能不希望将功耗花在网络连接上;
- 网络连接会带来延迟;
- 更耗时,因为图像需要打包到API请求中并上传到OCR API。API需要解析图像并对其进行OCR,然后最终将结果返回给客户端;
- 由于OCR每个图像的延迟和时间,可能不能够实时运行;
- 收费的(但通常提供免费试用或每月最多免费获得多个API请求)
3. 源代码
# 使用AWS Rekognition Keys API进行图片ocr(逐行或者逐单词)
# 需要事先注册亚马逊拿到key
# USAGE
# python amazon_ocr.py --image images/aircraft.png
# python amazon_ocr.py --image images/aircraft.png --type word
# python amazon_ocr.py --image images/aircraft.png --type line
# 导入必要的包
import argparse
import boto3
import cv2
from config import aws_config as config # 导入AWS 访问密钥、私有密钥和区域
# image:我们正在绘制 OCR 文本的输入图像
# text:OCR 文本本身
# poly:Amazon Rekognition API 返回的文本边界框的多边形对象/坐标
# color:边界框的颜色
def draw_ocr_results(image, text, poly, color=(0, 255, 0)):
# 解包边界框坐标,注意缩放坐标
# 相对于输入图像大小
(h, w) = image.shape[:2]
tlX = int(poly[0]["X"] * w)
tlY = int(poly[0]["Y"] * h)
trX = int(poly[1]["X"] * w)
trY = int(poly[1]["Y"] * h)
brX = int(poly[2]["X"] * w)
brY = int(poly[2]["Y"] * h)
blX = int(poly[3]["X"] * w)
blY = int(poly[3]["Y"] * h)
# 构建一个顶点list,构建边界框的每一个向量
pts = ((tlX, tlY), (trX, trY), (brX, brY), (blX, blY))
topLeft = pts[0]
topRight = pts[1]
bottomRight = pts[2]
bottomLeft = pts[3]
# 为文本绘制边界框
cv2.line(image, topLeft, topRight, color, 2)
cv2.line(image, topRight, bottomRight, color, 2)
cv2.line(image, bottomRight, bottomLeft, color, 2)
cv2.line(image, bottomLeft, topLeft, color, 2)
# 绘制文本
cv2.putText(image, text, (topLeft[0], topLeft[1] - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2)
# 返回图像
return image
# 构建命令行参数及解析
# --image 要ocr的图像路径
# --type 参数可以是行或单词,指示希望 Amazon Rekognition API 返回分组为行或单个单词的 OCR 结果。
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
help="path to input image that we'll submit to AWS Rekognition")
ap.add_argument("-t", "--type", type=str, default="line",
choices=["line", "word"],
help="output text type (either 'line' or 'word')")
args = vars(ap.parse_args())
# 使用密钥连接到AWS,以使用Amazon Rekognition OCR API
client = boto3.client(
"rekognition",
aws_access_key_id=config.ACCESS_KEY,
aws_secret_access_key=config.SECRET_KEY,
region_name=config.REGION)
# 加载图像为原始二进制文件,请求Amazon Rekognition OCR API
print("[INFO] making request to AWS Rekognition API...")
image = open(args["image"], "rb").read()
response = client.detect_text(Image="Bytes": image)
# 获取文本检测结果返回值,加载图像为opencv的Numpy格式以进行绘制
detections = response["TextDetections"]
image = cv2.imread(args["image"])
# 复制图像
final = image.copy()
# 遍历检测的边界框坐标
for detection in detections:
# 提取OCR的文本,类型(单词”或“行”)及文本边界框坐标
text = detection["DetectedText"]
textType = detection["Type"]
poly = detection["Geometry"]["Polygon"]
# 仅绘制文本类型与请求类型相同的文本
if args["type"] == textType.lower():
# 按行绘制ocr文本
output = image.copy()
output = draw_ocr_results(output, text, poly)
final = draw_ocr_results(final, text, poly)
# 展示ocr的文本
print(text)
cv2.imshow("Output", output)
cv2.waitKey(0)
# 展示最终输出
cv2.imshow("Final Output", final)
cv2.waitKey(0)
参考
- https://pyimagesearch.com/2022/03/21/text-detection-and-ocr-with-amazon-rekognition-api/
- Amazon keys获取:https://customers.pyimagesearch.com/aws-keys/
以上是关于使用 Amazon Rekognition API 进行文本检测和 OCR的主要内容,如果未能解决你的问题,请参考以下文章
使用 Amazon Rekognition API 进行文本检测和 OCR
是否可以使用 Google 的 Vision API 或 Amazon 的 Rekognition 来获取对象的数量?
基于Amazon KVS 与 Amazon Rekognition Streaming Video Events实时视频检测方案
用户无权执行:rekognition:RecognizeCelebrities with a explicit deny