|
|
- 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()
-
-
-
|