File size: 2,543 Bytes
3afb4b6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import re
import os
import logging
import os
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client

class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> ocr_api20210707Client:
        config = open_api_models.Config(
            access_key_id=os.environ.get('OCR_ACCESS_KEY_ID'),
            access_key_secret=os.environ.get('OCR_ACCESS_KEY_SECRET'),
        )
        config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
        return ocr_api20210707Client(config)

    @staticmethod
    def main(image) -> None:
        client = Sample.create_client()
        recognize_all_text_request = ocr_api_20210707_models.RecognizeAllTextRequest(
            body=image,
            type='Advanced',
            output_coordinate='points',
            output_oricoord=True,
        )
        runtime = util_models.RuntimeOptions()
        output = client.recognize_all_text_with_options(recognize_all_text_request, runtime)
        # logger.info(f'ocr response:{output}', extra={'request_id': ""})
        output = output.body.data.sub_images[0].block_info.block_details
        return output

def image_to_binary(image_path):
    with open(image_path, 'rb') as file:
        binary_data = file.read()
    return binary_data

def remove_punctuation(text):
    # 使用正则表达式删除标点符号、下划线和空格
    cleaned_text = re.sub(r'[^\w\s]', '', text)  # 删除标点符号
    cleaned_text = re.sub(r'_', '', cleaned_text)  # 删除下划线
    cleaned_text = re.sub(r'\s', '', cleaned_text)  # 删除空格
    return cleaned_text.replace("v", "").replace("o", "").replace("O", "").replace("T", "").replace("Q", "").replace("丶", "")


class OCRError(Exception):
    def __init__(self, message):
        super().__init__(message)
        self.message = message

def ocr(image_path):
    text = []
    coordinate = []
    image = image_to_binary(image_path)
    print(image_path)
    try:
        outputs = Sample.main(image)
    except Exception as e:
        raise OCRError(e.message)
    for output in outputs:
        text.append(output.block_content)
        bbox = [int(output.block_points[0].x), int(output.block_points[0].y), int(output.block_points[2].x), int(output.block_points[2].y)]
        coordinate.append(bbox)
    
    return text, coordinate