{{ message }}

Instantly share code, notes, and snippets.

# PulkitS01/create_density_map.py

Last active Jul 21, 2020
Libraries
 for img_path in img_paths: print (img_path) mat = io.loadmat(img_path.replace('.jpg','.mat').replace('images','ground-truth').replace('IMG_','GT_IMG_')) img= plt.imread(img_path) k = np.zeros((img.shape,img.shape)) gt = mat["image_info"][0,0][0,0] for i in range(0,len(gt)): if int(gt[i])
 # function to create density maps for images def gaussian_filter_density(gt): print (gt.shape) density = np.zeros(gt.shape, dtype=np.float32) gt_count = np.count_nonzero(gt) if gt_count == 0: return density pts = np.array(list(zip(np.nonzero(gt), np.nonzero(gt)))) leafsize = 2048 # build kdtree tree = scipy.spatial.KDTree(pts.copy(), leafsize=leafsize) # query kdtree distances, locations = tree.query(pts, k=4) print ('generate density...') for i, pt in enumerate(pts): pt2d = np.zeros(gt.shape, dtype=np.float32) pt2d[pt,pt] = 1. if gt_count > 1: sigma = (distances[i]+distances[i]+distances[i])*0.1 else: sigma = np.average(np.array(gt.shape))/2./2. #case: 1 point density += scipy.ndimage.filters.gaussian_filter(pt2d, sigma, mode='constant') print ('done.') return density
 part_A_train = os.path.join(root,'part_A/train_data','images') part_A_test = os.path.join(root,'part_A/test_data','images') part_B_train = os.path.join(root,'part_B/train_data','images') part_B_test = os.path.join(root,'part_B/test_data','images') path_sets = [part_A_train,part_A_test]
 img_paths = [] for path in path_sets: for img_path in glob.glob(os.path.join(path, '*.jpg')): img_paths.append(img_path)
 #defining the image path img_paths = [] for path in path_sets: for img_path in glob.glob(os.path.join(path, '*.jpg')): img_paths.append(img_path)
 # importing libraries import h5py import scipy.io as io import PIL.Image as Image import numpy as np import os import glob from matplotlib import pyplot as plt from scipy.ndimage.filters import gaussian_filter import scipy import json from matplotlib import cm as CM from image import * from model import CSRNet import torch from tqdm import tqdm %matplotlib inline
 #importing libraries import h5py import scipy.io as io import PIL.Image as Image import numpy as np import os import glob from matplotlib import pyplot as plt from scipy.ndimage.filters import gaussian_filter import scipy import json import torchvision.transforms.functional as F from matplotlib import cm as CM from image import * from model import CSRNet import torch %matplotlib inline
 #defining the location of dataset root = '/home/pulkit/CSRNet/ShanghaiTech/CSRNet-pytorch/' part_A_train = os.path.join(root,'part_A/train_data','images') part_A_test = os.path.join(root,'part_A/test_data','images') part_B_train = os.path.join(root,'part_B/train_data','images') part_B_test = os.path.join(root,'part_B/test_data','images') path_sets = [part_A_test]
 mae = 0 for i in tqdm(range(len(img_paths))): img = transform(Image.open(img_paths[i]).convert('RGB')).cuda() gt_file = h5py.File(img_paths[i].replace('.jpg','.h5').replace('images','ground-truth'),'r') groundtruth = np.asarray(gt_file['density']) output = model(img.unsqueeze(0)) mae += abs(output.detach().cpu().sum().numpy()-np.sum(groundtruth)) print (mae/len(img_paths))
 path_sets = [part_B_train,part_B_test] img_paths = [] for path in path_sets: for img_path in glob.glob(os.path.join(path, '*.jpg')): img_paths.append(img_path) # creating density map for part_b images for img_path in img_paths: print (img_path) mat = io.loadmat(img_path.replace('.jpg','.mat').replace('images','ground-truth').replace('IMG_','GT_IMG_')) img= plt.imread(img_path) k = np.zeros((img.shape,img.shape)) gt = mat["image_info"][0,0][0,0] for i in range(0,len(gt)): if int(gt[i])
 from matplotlib import cm as c img = transform(Image.open('part_A/test_data/images/IMG_100.jpg').convert('RGB')).cuda() output = model(img.unsqueeze(0)) print("Predicted Count : ",int(output.detach().cpu().sum().numpy())) temp = np.asarray(output.detach().cpu().reshape(output.detach().cpu().shape,output.detach().cpu().shape)) plt.imshow(temp,cmap = c.jet) plt.show() temp = h5py.File('part_A/test_data/ground-truth/IMG_100.h5', 'r') temp_1 = np.asarray(temp['density']) plt.imshow(temp_1,cmap = c.jet) print("Original Count : ",int(np.sum(temp_1)) + 1) plt.show() print("Original Image") plt.imshow(plt.imread('part_A/test_data/images/IMG_100.jpg')) plt.show()
 #setting the root to the Shanghai dataset you have downloaded # change the root path as per your location of dataset root = '/home/pulkit/CSRNet-pytorch/'
 gt_file = h5py.File(img_paths.replace('.jpg','.h5').replace('images','ground-truth'),'r') groundtruth = np.asarray(gt_file['density']) plt.imshow(groundtruth,cmap=CM.jet)
 plt.imshow(Image.open(img_paths))
 np.sum(groundtruth)
 from torchvision import datasets, transforms transform=transforms.Compose([ transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ])