File size: 1,304 Bytes
be754f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import base64
import io

import numpy as np
from PIL import Image, ImageEnhance


def load_rgb_image(contents: bytes):
    return Image.open(io.BytesIO(contents)).convert("RGB")


def preprocess_image(image: Image.Image):
    enhancer = ImageEnhance.Color(image)
    image = enhancer.enhance(0)

    enhancer = ImageEnhance.Contrast(image)
    image = enhancer.enhance(2)

    return crop_echo_panel(image)


def crop_echo_panel(image: Image.Image):
    w, h = image.size

    if w <= 640:
        return image

    target_ratio = 16 / 9
    current_ratio = w / h

    if current_ratio > target_ratio:
        new_w = int(h * target_ratio)
        crop_width = w - new_w
        right_cut = round(80 * (h / 1080))
        left_cut = crop_width - right_cut
        image = image.crop((left_cut, 0, w - right_cut, h))
        w, h = image.size

    left = w * (2 / 3)
    upper = 90 * (w / 1920)
    right = w
    lower = 540 * (w / 1920)

    upper = max(0, min(upper, h))
    lower = max(0, min(lower, h))

    return image.crop((left, upper, right, lower))


def encode_jpeg_base64(image: Image.Image):
    buffered = io.BytesIO()
    image.save(buffered, format="JPEG")
    return base64.b64encode(buffered.getvalue()).decode("utf-8")


def to_ocr_array(image: Image.Image):
    return np.array(image)