Initial
This commit is contained in:
146
utils.py
Normal file
146
utils.py
Normal 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
|
||||
Reference in New Issue
Block a user