You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

119 lines
2.9 KiB

import cv2
import numpy as np
import json
from matplotlib import pyplot as plt
import cv2
import numpy as np
import json
import os
from matplotlib import pyplot as plt
import xml.etree.ElementTree as ET
import cv2
import numpy as np
import os
import json
from pysolar.solar import *
from datetime import datetime
def calcAvg(img,locations_xml):
locations_extracted = []
loc_images = {}
average_values = {}
for i in range( len( locations_xml ) ):
try:
locations_extracted.append([])
for j in range(4):
locations_extracted[i].append(locations_xml[i][1][j].attrib)
locations_extracted[i].append(locations_xml[i].attrib['occupied'])
locations_extracted[i].append(locations_xml[i].attrib['id'])
except Exception:
print("xml corrupt!")
return {}
for col in range(len(img)):
for pix in range(len(img[col])):
if (img[col][pix] == [255,255,255]).all():
img[col][pix] == [255,255,254]
for i in range(len(locations_extracted)):
temp = locations_extracted[i]
pts = np.array([[int(temp[0]['x']),int(temp[0]['y'])],
[int(temp[1]['x']),int(temp[1]['y'])],
[int(temp[2]['x']),int(temp[2]['y'])],
[int(temp[3]['x']),int(temp[3]['y'])]])
rect = cv2.boundingRect(pts)
x,y,w,h = rect
croped = img[y:y+h, x:x+w].copy()
pts = pts - pts.min(axis=0)
mask = np.zeros(croped.shape[:2], np.uint8)
cv2.drawContours(mask, [pts], -1, (255, 255, 255), -1, cv2.LINE_AA)
dst = cv2.bitwise_and(croped, croped, mask=mask)
bg = np.ones_like(croped, np.uint8)*255
cv2.bitwise_not(bg,bg, mask=mask)
dst2 = bg+ dst
blurred = cv2.GaussianBlur(dst2,(5,5),3)
edges = cv2.Canny(blurred,100,100)
if not temp[4] in loc_images:
loc_images[temp[4]] = {}
loc_images[temp[4]][temp[5]] = edges
for state in loc_images:
average_values[state] = {}
for lot in loc_images[state]:
reps = 0
for col in loc_images[state][lot]:
for pix in col:
if(pix == 255):
reps += 1
average_values[state][lot] = reps
print (average_values)
return average_values
def generateAvg():
dates = os.listdir('./PKLot/PKLot/PUCPR/Sunny')
imgs = []
averages={}
back_file = open("backup.json","w")
back_file.write("{")
for i in range(len(dates)):
imgs.append(os.listdir(os.path.join('./PKLot/PKLot/PUCPR/Sunny',dates[i])))
for i in range(len(imgs)):
for j in range(len(imgs[i])):
if(imgs[i][j][-4:] == ".jpg"):
try:
img_location = os.path.join('./PKLot/PKLot/PUCPR/Sunny',dates[i],imgs[i][j])
locs = ET.parse(img_location[:-4] + ".xml").getroot()
print(img_location,end=" ")
average = calcAvg(cv2.imread(img_location),locs)
if not(average == {}):
averages[img_location] = average
back_file.write("'"+img_location + "':" + str(average))
except Exception:
continue
back_file.write("}")
js = json.dumps(averages)
print(js)
fp = open('data.json', 'w')
fp.write(js)
fp.close()
generateAvg()