使用AWS Textract(Python3.6)提取文本


介绍

我尝试使用AWS Textract

从图像中提取文本

开发环境

  • Windows 10
  • 水蟒
  • Python 3.6
  • OpenCV 4.4.0
  • awscli v2

介绍

1。安装awscli
通过参考在Windows

上安装,更新和卸载AWS CLI版本2来安装AWSCLIV2.msi

2。从AWS控制台在IAM中生成访问密钥
image.png

3。在命令提示符

上设置awscli

输入生成访问密钥时获得的访问密钥和秘密访问密钥。
对于默认的区域名称,请指定可以使用Textract的ap-south-1(亚太孟买)。
输出格式为json。

1
2
3
4
5
$ aws configure
AWS Access Key ID [None]: XXXX
AWS Secret Access Key [None]: XXXX
Default region name [None]: ap-south-1
Default output format [None]: json
  • 地区和区域
  • 配置文件和凭证文件设置

3。从"添加IAM权限"中添加策略" AmazonTextractFullAccess"
image.png

4。打开anaconda提示符并创建一个Python 3.6环境。

1
2
$ conda create -n py36 python=3.6
$ conda activate py36

5。安装库

1
2
$ pip install boto3
$ pip install opencv-python

6。让我们运行

下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import boto3
import cv2
import os.path

def process_text_analysis(image):
    client = boto3.client('textract')
    image_data = cv2.imencode(".png", image)[1].tostring()
    response = client.analyze_document(Document={'Bytes': image_data}, FeatureTypes=["TABLES", "FORMS"])
    blocks = response['Blocks']
    return blocks

def draw_blocks(image, blocks):
    height, width = image.shape[:2]
    draw = image.copy()
    for block in blocks:
        if block['BlockType'] == "WORD":
            vertices = [(int(width * block['Geometry']['Polygon'][i]['X']), int(height * block['Geometry']['Polygon'][i]['Y'])) for i in range(len(block['Geometry']['Polygon']))]
            cv2.putText(draw, block['Text'], vertices[0], cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 255), 1, cv2.LINE_AA)
            cv2.rectangle(draw, vertices[0], vertices[2], (0, 255, 0))
    return draw

filename = "338px-Atomist_quote_from_Democritus.png"
image = cv2.imread(filename, cv2.IMREAD_COLOR)

blocks = process_text_analysis(image)
print("Blocks detected: " + str(len(blocks)))

draw = draw_blocks(image, blocks)
cv2.imshow("draw", draw)
cv2.waitKey(0)

<表格>

输入

输出


<身体>

338px-Atomist_quote_from_Democritus.png

awsocr.png


感谢您的辛勤工作。