add leftover files

master
git 2024-07-23 12:06:52 +02:00
parent d3b8971102
commit b9def1e911
3 changed files with 111 additions and 40 deletions

1
.gitignore vendored
View File

@ -75,3 +75,4 @@ dmypy.json
.pytype/ .pytype/
cython_debug/ cython_debug/
/data/ /data/
.idea/

136
app.py
View File

@ -1,42 +1,12 @@
import cv2 import cv2
import os import os
import math import math
import numpy as np from colors import colorslist
import matplotlib.pyplot as plt import glob
import shutil
# Create the temp dir def takescreenshots(video):
if not os.path.exists('data'): print(video)
os.makedirs('data')
# Define the color spaces
Red_lower2 = np.array([,100,100])
Red_upper2 = np.array([,255,255])
Red_lower1 = np.array([0,100,100])
Red_upper1 = np.array([6,255,255])
Orange_lower = np.array([7,100,100])
Orange_upper = np.array([22,255,255])
Yellow_lower = np.array([23,100,100])
Yellow_upper = np.array([32,255,255])
Green_lower = np.array([33,100,100])
Green_upper = np.array([75,255,255])
Cyan_lower = np.array([76,100,100])
Cyan_upper = np.array([97,255,255])
Blue_lower = np.array([93,100,100])
Blue_upper = np.array([130,255,255])
Purple_lower = np.array([130,100,100])
Purple_upper = np.array([,255,255])
Pink_lower = np.array([,100,100])
Pink_upper = np.array([,255,255])
White_lower = np.array([,100,100])
White_upper = np.array([,255,255])
Black_lower = np.array([,100,100])
Black_upper = np.array([,255,255])
# loop through video files
videopath = '/media/vm/HDD/freeloops/3D/'
imagepath = 'data/'
videos = os.listdir(videopath)
for video in videos:
cap = cv2.VideoCapture(videopath + video) cap = cv2.VideoCapture(videopath + video)
framerate = cap.get(cv2.CAP_PROP_FPS) framerate = cap.get(cv2.CAP_PROP_FPS)
while cap.isOpened(): while cap.isOpened():
@ -47,13 +17,99 @@ for video in videos:
if frameId % math.floor(framerate) == 0: if frameId % math.floor(framerate) == 0:
filename = imagepath + "/screenshot_" + str(int(frameId)) + ".jpg" filename = imagepath + "/screenshot_" + str(int(frameId)) + ".jpg"
cv2.imwrite(filename, frame) cv2.imwrite(filename, frame)
del cap
# analyze each screenshot for colors
def getcolors(image):
img = cv2.imread(imagepath + image)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
return hsv
def getcolormask(hsv,lower, upper):
colormask = cv2.inRange(hsv, lower, upper)
return colormask
def getcolorpercentage(mask):
percentage = round(((mask > 0).mean()) * 100, 3)
return percentage
def calcaverage(color):
return sum(color)/len(color)
def gettopcolor(colors):
color = max(colors, key=colors.get)
result = {color: results.pop(color)}
return result
def movetofolder(folder):
if not os.path.exists('/media/vm/HDD/organisedloops/' + folder):
os.makedirs('/media/vm/HDD/organisedloops/' + folder)
shutil.move(videopath + video, '/media/vm/HDD/organisedloops/' + folder)
# Create the temp dir
if not os.path.exists('data'):
os.makedirs('data')
# loop through video files
videopath = '/media/vm/HDD/organise/'
imagepath = 'data/'
videos = os.listdir(videopath)
for video in videos:
percentagedict = {}
for color in colorslist:
percentagedict[color['color']] = []
takescreenshots(video)
# analyze each screenshot for colors
images = os.listdir(imagepath) images = os.listdir(imagepath)
for image in images: for image in images:
cap = cv2.imread(imagepath + image, cv2.COLOR_BGR2HSV) hsv = getcolors(image)
plt.imshow(cap)
for color in colorslist:
mask = getcolormask(hsv, color['lowerlimit'], color['upperlimit'])
percentagedict[color['color']].append(getcolorpercentage(mask))
results = {}
for color in colorslist:
results[color['color']] = calcaverage(percentagedict[color['color']])
results['red'] = results['red1'] + results['red2']
del results['red1'], results['red2']
primarycolor = gettopcolor(results)
print(primarycolor)
secondarycolor = gettopcolor(results)
print(secondarycolor)
tertiarycolor = gettopcolor(results)
print(tertiarycolor)
# If color detection fails
if next(iter(primarycolor.values())) <= 0.001:
folder = 'nofolder'
movetofolder(folder)
# if one color dominates
elif next(iter(secondarycolor.values())) <= next(iter(primarycolor.values())) * 0.05:
folder = next(iter(primarycolor.keys()))
movetofolder(folder)
# move video file according to results else:
# if two colors dominate
if next(iter(secondarycolor.values())) >= next(iter(tertiarycolor.values())) * 4:
folder = next(iter(primarycolor.keys())) + ' + ' + next(iter(secondarycolor.keys()))
movetofolder(folder)
# if three colors dominate
else:
folder = 'multicolor'
movetofolder(folder)
# clear data folder
files = glob.glob('data/*')
for f in files:
os.remove(f)

14
colors.py Normal file
View File

@ -0,0 +1,14 @@
import numpy as np
colorslist = [
{'color': 'red1', 'lowerlimit': np.array([0, 40, 31]), 'upperlimit': np.array([6, 255, 255])},
{'color': 'red2', 'lowerlimit': np.array([175, 40, 31]), 'upperlimit': np.array([180, 255, 255])},
{'color': 'orange', 'lowerlimit': np.array([7, 40, 31]), 'upperlimit': np.array([22, 255, 255])},
{'color': 'yellow', 'lowerlimit': np.array([26, 40, 31]), 'upperlimit': np.array([32, 255, 255])},
{'color': 'green', 'lowerlimit': np.array([39, 40, 31]), 'upperlimit': np.array([70, 255, 255])},
{'color': 'cyan', 'lowerlimit': np.array([76, 40, 31]), 'upperlimit': np.array([80, 255, 255])},
{'color': 'blue', 'lowerlimit': np.array([93, 40, 31]), 'upperlimit': np.array([128, 255, 255])},
{'color': 'purple', 'lowerlimit': np.array([131, 40, 31]), 'upperlimit': np.array([149, 255, 255])},
{'color': 'pink', 'lowerlimit': np.array([150, 40, 31]), 'upperlimit': np.array([176, 255, 255])},
{'color': 'white', 'lowerlimit': np.array([0, 0, 245]), 'upperlimit': np.array([180, 3, 255])}
]