This commit is contained in:
2022-04-29 02:06:44 +02:00
parent b187022918
commit ebafbdf4b2
128 changed files with 1619 additions and 0 deletions

146
utils.py Normal file
View File

@@ -0,0 +1,146 @@
import numpy as np
import os
import cv2 as cv
from PIL import Image
def mse(imageA, imageB):
# the 'Mean Squared Error' between the two images is the
# sum of the squared difference between the two images;
# NOTE: the two images must have the same dimension
err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
err /= float(imageA.shape[0] * imageA.shape[1])
# return the MSE, the lower the error, the more "similar"
# the two images are
return err
def mse_with_reshape(imageA, imageB):
# the 'Mean Squared Error' between the two images is the
# sum of the squared difference between the two images;
# NOTE: the two images must have the same dimension
if len(imageA) == 0 or len(imageB) == 0:
return 999
try:
imga = np.reshape(imageA, (len(imageA) * 17, 740, 3), 'C')
imgb = np.reshape(imageB, (len(imageB) * 17, 740, 3), 'C')
err = np.sum((imga.astype("float") - imgb.astype("float")) ** 2)
err /= float(imga.shape[0] * imga.shape[1])
# return the MSE, the lower the error, the more "similar"
# the two images are
return err
except:
return 999
def load_bl_line():
list_store = []
for path in os.listdir('bl-lines'):
if path.endswith(".npy"):
list_store.append(np.load("bl-lines\\" + path))
return list_store
def check_for_bl_line(line_item, black_list):
for bl_item in black_list:
if mse(line_item, bl_item) < 500:
return True
return False
def scale_screenshot(screenshot):
scale_percent = 200 # percent of original size
width = int(screenshot.shape[1] * scale_percent / 100)
height = int(screenshot.shape[0] * scale_percent / 100)
dim = (width, height)
resized_img = cv.resize(screenshot, dim, interpolation=4)
gray = cv.cvtColor(resized_img, cv.COLOR_BGR2GRAY)
thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)[1]
# cv.imshow("Tresh", thresh)
# cv.waitKey(1000)
return thresh
def save_line_item_npy_jpg(short_pic_list):
ifr = 1
for x in short_pic_list:
np.save("test{}".format(ifr), x)
Image.fromarray(x).save("test{}.jpg".format(ifr))
ifr = ifr + 1
def shorten_picture_input(new_pic_lst, old_pic_lst):
len_old = len(old_pic_lst)
len_new = len(new_pic_lst)
offset = 0
offset_diff = len_new - len_old
retval = []
while mse_with_reshape(old_pic_lst[offset: len_old], new_pic_lst[0: len_new - offset - offset_diff]) > 500.0:
offset = offset + 1
# print(offset)
if offset == len(old_pic_lst):
break
if offset > 0:
retval = new_pic_lst[len_new - offset: len_new]
return retval
def shorten_input(new_lst, old_lst):
len_old = len(old_lst)
len_new = len(new_lst)
offset = 0
offset_diff = len_new - len_old
retval = []
while old_lst[offset: len_old] != new_lst[0: len_new - offset - offset_diff]:
offset = offset + 1
# print(offset)
if offset > 0:
retval = new_lst[len_new - offset: len_new]
return retval
def format_output(data):
new_list = data.split("\n")
try:
while True:
# new_list.remove() ("",)
new_list.remove('\x0c')
except ValueError:
pass
return new_list
def update_screenshot_with_short_pic_list(short_pic_lst, lst_bl_items):
screenshot = []
# check if shorten line pictures list has any entries
if len(short_pic_lst) > 0:
index_lst = []
# check if any of the line item pictures is on the blacklist and save index
for x in range(len(short_pic_lst)):
if check_for_bl_line(short_pic_lst[x], lst_bl_items):
index_lst.append(x)
# remove blacklisted items from shorten list
r_short_pic_lst = np.delete(short_pic_lst, index_lst, axis=0)
# check if further shortened line pictures list has any entries
if len(r_short_pic_lst) == 0:
return screenshot
# combine shorten line picture list to one picture
screenshot = np.reshape(r_short_pic_lst, (len(r_short_pic_lst) * 17, 740, 3), 'C')
# saves all line item pictures to disk for blacklist evaluation
# save_line_item_npy_jpg(r_short_pic_lst)
return screenshot