test_simple_matrix.py 3.67 KB
import urllib.request
import json
import copy
import os
import datetime
from imageio import imread
from imageio import imwrite
import cv2
import numpy as np
import matplotlib.pyplot as plt
import dateutil.parser
import pathlib
import psycopg2

class MyJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, (datetime.date, datetime.datetime)):
            return obj.replace(tzinfo=datetime.timezone.utc).isoformat()
        if isinstance(obj, np.ndarray):
            return obj.tolist()

# 1. Получить файл как np-массив
file_path = r"\png_test\source.png"
file_path_result = r"\png_test\result.png"
matrix = imread(os.path.abspath(os.curdir) + file_path)

# 2. Переделать его в сокращённую матрицу
simple_matrix = []
sm_iteratior = -1
for yy in matrix:
    sm_iteratior = sm_iteratior + 1
    simple_matrix.append([])
    for xx in yy:
        simple_matrix[sm_iteratior].append(int(xx[0]))

img = np.zeros((256,256, 4),dtype=np.uint8)
x = -1
for line in simple_matrix:
    x = x + 1
    y = -1
    for column in line:
        y = y + 1
        img[x][y] = [column, column, column, 255]

# 2.1 Перевести в ДЖейсон и вернуть обратно упрощённую матрицу
in_base = dict(matrix=simple_matrix)
in_json = json.dumps(in_base, cls = MyJSONEncoder)
from_json = json.loads(in_json)

# 2.2 Глубокое копирование параметров рисунка и обнуление его данных
img = copy.deepcopy(matrix)
for line in img:
    for column in line:
        column[0] = 0
        column[1] = 0
        column[2] = 0
        column[3] = 0

path = str(pathlib.Path(__file__).parent.absolute()) + file_path_result
imwrite(path, img)

# 2.2 Глубокое копирование параметров рисунка и обнуление его данных
img = np.zeros((256,256, 4),dtype=np.uint8)
x = -1
for line in from_json['matrix']:
    x = x + 1
    y = -1
    for column in line:
        y = y + 1
        img[x][y] = [column, column, column, 255 if column > 0 else 0]

path = str(pathlib.Path(__file__).parent.absolute()) + file_path_result
imwrite(path, img)

DBConnection = psycopg2.connect(
    host="localhost",
    port = "15432",
    database="wf71",
    user="wf71",
    password="wf71")
DBConnection.autocommit = True
print("Connect is success!")
cur = DBConnection.cursor()
query = "select measuretime, additional_info from md_precipitation where measurer_uuid = '1bc2b71c-d505-4034-a939-df0252b3f7c6' and measuretime >= '2020-07-08 07:00:00' and measuretime <= '2020-07-09 07:00:00'"
cur.execute(query)
result = cur.fetchall()
i = -1
for var in result:
    matrix = []
    m_dt = var[0]
    td = datetime.timedelta(hours=3)
    m_dt = m_dt+td
    print(m_dt)
    mx = json.loads(var[1])
    img = np.zeros((256,256, 4),dtype=np.uint8)

    error = mx.get("error", False)

    if error == "Radar matrix is not exist":
        continue
    else:
        matrix = mx["matrix"]
        if len(matrix) > 1:
            x = -1
            for line in matrix:
                x = x + 1
                y = -1
                for column in line:
                    y = y + 1
                    img[x][y] = [column, column, column, 255 if column > 0 else 0]

            fn_dt = '{}_{}_{}__{}_{}.png'.format(m_dt.timetuple()[0], m_dt.timetuple()[1], m_dt.timetuple()[2], m_dt.timetuple()[3], m_dt.timetuple()[4])
            imwrite(str(pathlib.Path(__file__).parent.absolute()) + r"/png_test/{}".format(fn_dt), img)
cur.close()
#get_png_picture_from_db


# 4. Сравнить