Пример #1
0
def buildHeatMap(pointsList, circlesCoordsList, planePath, imgFile_path):
    mapimg = Image.open(imgFile_path)

    draw = ImageDraw.Draw(mapimg)

    # draw line of plane moving
    if len(planePath
           ) == 2 and planePath[0] is not None and planePath[1] is not None:
        length = 2000
        starty = planePath[0][1] - length * math.sin(planePath[1])
        startx = planePath[0][0] - length * math.cos(planePath[1])
        endy = planePath[0][1] + length * math.sin(planePath[1])
        endx = planePath[0][0] + length * math.cos(planePath[1])
        draw.line(xy=[(startx, starty), (endx, endy)],
                  width=3,
                  fill=(0, 255, 255))

    for coordsAndRadius in circlesCoordsList:
        draw.ellipse([
            coordsAndRadius[0][0] - coordsAndRadius[1], coordsAndRadius[0][1] -
            coordsAndRadius[1], coordsAndRadius[0][0] + coordsAndRadius[1],
            coordsAndRadius[0][1] + coordsAndRadius[1]
        ],
                     outline='white')

    heatmapper = Heatmapper(point_diameter=25, point_strength=0.2, opacity=0.7)
    heatmapImg = heatmapper.heatmap_on_img(pointsList, mapimg)
    return heatmapImg
Пример #2
0
def heatmap_generator(img_dir, heatmap_dir, histo_datafile):
    # Enter Directory of all images
    #img_dir = "./output_frames"  
    data_path = os.path.join(img_dir,'*g')
    files = glob.glob(data_path)
#    print(files)
#    
    heatmapper = Heatmapper(
    point_diameter=90,  # the size of each point to be drawn
    point_strength=0.8,  # the strength, between 0 and 1, of each point to be drawn
    opacity=0.65,  # the opacity of the heatmap layer
    colours='default',  # 'default' or 'reveal'
                        # OR a matplotlib LinearSegmentedColorMap object 
                        # OR the path to a horizontal scale image
    grey_heatmapper='PIL'  # The object responsible for drawing the points
                           # Pillow used by default, 'PySide' option available if installed
)
    professions_dict = points.getCordinatesDict(histo_datafile)
    for k, v in professions_dict.items():
#        print(k, v)
        if k == "frame":
            continue
        frame = Image.open(img_dir + "/" + k)
        heatmap = heatmapper.heatmap_on_img(v, frame)
        dest_path = heatmap_dir + "/" + k + ".png"
        #dest_path = os.path.join(".\\destination\\", '*g')
#        print(dest_path)
    
        heatmap.save(dest_path)
Пример #3
0
def buildTimedHeatMap(pointsList, circlesCoords, redCoords, planePath, imgFile_path):
    mapimg = Image.open(imgFile_path).convert('RGBA')

    game_events_image = Image.new('RGBA', mapimg.size, (255,255,255,0))
    draw = ImageDraw.Draw(game_events_image)

    if redCoords[1] > 0:
        draw.ellipse([redCoords[0][0] - redCoords[1], redCoords[0][1] - redCoords[1],
                      redCoords[0][0] + redCoords[1], redCoords[0][1] + redCoords[1]],
                     fill=(255, 0, 0, 50))

    # draw line of plane moving
    if len(planePath) == 2 and planePath[0] is not None and planePath[1] is not None:
        length = 2000
        starty = planePath[0][1] - length * math.sin(planePath[1])
        startx = planePath[0][0] - length * math.cos(planePath[1])
        endy = planePath[0][1] + length * math.sin(planePath[1])
        endx = planePath[0][0] + length * math.cos(planePath[1])
        draw.line(xy=[(startx, starty), (endx, endy)], width=3, fill=(0, 255, 255))

    draw.ellipse([circlesCoords[0][0] - circlesCoords[1], circlesCoords[0][1] - circlesCoords[1],
                  circlesCoords[0][0] + circlesCoords[1], circlesCoords[0][1] + circlesCoords[1]],
                 outline='white')

    mapimg = Image.alpha_composite(mapimg, game_events_image)

    heatmapper = Heatmapper(point_diameter=25, point_strength=0.5, opacity=0.7)
    heatmapImg = heatmapper.heatmap_on_img(pointsList, mapimg)
    return heatmapImg
Пример #4
0
def newHeatmapper(point_diameter=50):
    heatmapper_cutout = Heatmapper(
        point_diameter=point_diameter,  # the size of each po    int to be drawn
        point_strength=
        0.005,  # the strength, between 0 and 1, of each point to be drawn
        opacity=1,  # the opacity of the heatmap layer
        colours='reveal',  # 'default' or 'reveal'
        # OR a matplotlib LinearSegmentedColorMap object
        # OR the path to a horizontal scale image
        grey_heatmapper='PIL'  # The object responsible for drawing the points
        # Pillow used by default, 'PySide' option available if installed
    )

    heatmapper = Heatmapper(
        point_diameter=point_diameter,  # the size of each point to be drawn
        point_strength=
        0.02,  # the strength, between 0 and 1, of each point to be drawn
        opacity=1,  # the opacity of the heatmap layer
        colours='default',  # 'default' or 'reveal'
        # OR a matplotlib LinearSegmentedColorMap object
        # OR the path to a horizontal scale image
        grey_heatmapper='PIL'  # The object responsible for drawing the points
        # Pillow used by default, 'PySide' option available if installed
    )
    return heatmapper_cutout, heatmapper
Пример #5
0
 def __init__(self):
     self.heatmapper = Heatmapper(
         point_diameter=15,
         point_strength=0.05,
         opacity=3,
         colours='reveal',
     )
     self.heatmap_name = 'heatmap.png'
     self.detector = CENSURE()
Пример #6
0
def cal_heatmap(icam, frame, startFrame, find_ind):
    # draw the image for heatmap
    heatmap_value = []
    path = 'D:/Code/DeepCC/DeepCC/src/visualization/data/background' + str(
        icam) + '.jpg'
    background_img = Image.open(path)
    for i in find_ind:
        center_x = int(data_part[i][3] + (data_part[i][5] / 2))
        center_y = int(data_part[i][4] + (data_part[i][6] / 2))
        heatmap_value.append((center_x, center_y))
    heatmapper = Heatmapper()
    heatmap = heatmapper.heatmap_on_img(heatmap_value, background_img)
    img = cv2.cvtColor(np.asarray(heatmap), cv2.COLOR_RGB2BGR)
    return img
Пример #7
0
def drawing_heatmap(bucket_name, destination_key, key, point_list) :
    try:
        s3.Object(bucket_name=bucket_name, key=key).load()
        is_image_exists(bucket_name, key)
    except botocore.exceptions.ClientError:
        return None
    obj = s3.Object(bucket_name=bucket_name, key=key)
    obj_body = obj.get()['Body'].read()
    #이미지 등록
    img = Image.open(BytesIO(obj_body))
    heatmapper = Heatmapper()
    heatmap = heatmapper.heatmap_on_img(point_list, img)
    buffer = BytesIO()
    heatmap.save(buffer, 'PNG')
    buffer.seek(0)
    obj = s3.Object(bucket_name=bucket_name, key=destination_key)
    obj.put(Body=buffer, ContentType='image/png')

    return "https://{bucket}.s3.amazonaws.com/{destination_key}".format(bucket=bucket_name, destination_key=destination_key)
Пример #8
0
def main():
    example_base_img = os.path.join('assets', 'cat.jpg')

    img_heatmapper = Heatmapper(colours='default', point_strength=0.6)
    video_heatmapper = VideoHeatmapper(img_heatmapper)

    heatmap_video = video_heatmapper.heatmap_on_image_path(
        base_img_path=example_base_img,
        points=_example_random_points(),
        duration_s=40,
        keep_heat=True)

    heatmap_video.write_videofile('out_on_image.mp4', bitrate="5000k", fps=24)
Пример #9
0
def heatmap_calculator(video_class):
    print('heatmap one time')
    plano_ori_heat = Image.open('images/square_plane.jpg')
    heatmapper = Heatmapper(point_diameter=50,
                            point_strength=0.25,
                            opacity=0.65,
                            colours='default',
                            grey_heatmapper='PIL')

    while True:
        points = copy.copy(video_class.points)
        if len(points) != 0:
            heatmap_img = heatmapper.heatmap_on_img(points, plano_ori_heat)
            heatmap_img = np.asarray(heatmap_img)
            heatmap_img = cv2.cvtColor(heatmap_img, cv2.COLOR_BGR2RGB)
            video_class.heatmap_img = heatmap_img
        else:
            heatmap_img = np.asarray(plano_ori_heat)
            heatmap_img = cv2.cvtColor(heatmap_img, cv2.COLOR_BGR2RGB)
            video_class.heatmap_img = heatmap_img
        if video_class.stopped:
            return
Пример #10
0
    def apply_heatmap(self):
        '''
        Uses the heatmappy library to add points from self.heat_points to the 
        video in self.video_path. Takes no args and returns nothing, but creates
        a video with an overlaid heatmap at self.out_path.
        '''

        header = ['x', 'y', 'ms', 'x_std', 'y_std', 'ms_std']
        self.export_data('distributions.csv', self.distributions, header)
        self.export_data('samples.csv', self.heat_points, header[:3])

        img_hm = Heatmapper()
        video_hm = VideoHeatmapper(img_hm)
        video_out = video_hm.heatmap_on_video_path(video_path=self.video_path,
                                                   points=self.heat_points)

        video_out.write_videofile(self.out_path, bitrate="5000k", fps=24)
    plt.imshow(frame_bw, cmap="gray")
    plt.show()


    process_frame(frame_bw, frame_clr, Pt, area=500)


    plt.figure()
    plt.title(run_name)
    plt.imshow(frame_clr)
    plt.show()

#%% Save final view and heatmap

npstack = Pt.get_drawable_tracks_npstack()
df = pd.DataFrame(npstack, columns=['x','y','time','track'])
paths = df[['x','y']]


write_name = run_name +  str(frame_idx) + "_"
cv2.imwrite(base_dir + 'outputFiles/' + write_name + 'final_img.png', frame_clr)


ret, frame_clr = Dataset.get_next_frame(frame_idx)

pil_img = Image.fromarray(frame_clr)
heatmapper = Heatmapper()
heatmap = heatmapper.heatmap_on_img(paths.values.tolist(), pil_img)
heatmap.save(base_dir + 'outputFiles/' + write_name + 'heatmap.png')

Пример #12
0
from heatmappy import Heatmapper

from PIL import Image

example_points = [(100, 20), (120, 25), (200, 50), (60, 300), (170, 250)]
example_img_path = 'default-cat.png'
example_img = Image.open(example_img_path)

heatmapper = Heatmapper()
heatmap = heatmapper.heatmap_on_img(example_points, example_img)
heatmap.save('heatmapbasic.png')

heatmapper = Heatmapper(opacity=0.9, colours='reveal')
heatmap = heatmapper.heatmap_on_img_path(example_points, example_img_path)
heatmap.save('heatmapreveal.png')
                    (337, 112), (92, 253), (92, 253), (92, 253), (92, 253),
                    (92, 253), (92, 253), (92, 253), (92, 253), (92, 253),
                    (92, 253), (459, 191), (459, 191), (459, 162), (92, 270),
                    (459, 285), (213, 112), (337, 96), (92, 85), (459, 347),
                    (213, 112), (213, 112), (92, 253), (92, 253), (92, 180),
                    (92, 180), (92, 180), (92, 118), (337, 67), (337, 67),
                    (337, 67), (337, 67), (92, 118), (213, 112), (213, 112),
                    (92, 302), (459, 130), (337, 96), (337, 112), (213, 96),
                    (459, 118), (459, 118), (459, 118), (459, 146), (459, 118),
                    (459, 118), (459, 118), (92, 191), (459, 375), (459, 375),
                    (459, 285), (459, 162), (459, 162), (459, 180), (459, 180),
                    (337, 112), (92, 302), (92, 302), (92, 302), (92, 302),
                    (92, 118), (92, 180), (92, 118), (459, 118), (459, 118),
                    (459, 60), (92, 302), (92, 302), (92, 69), (459, 191),
                    (459, 207), (459, 253), (459, 253), (92, 118), (92, 69),
                    (459, 191), (459, 253), (459, 191), (459, 253), (459, 253),
                    (92, 69), (337, 112), (459, 60), (459, 60), (92, 101),
                    (92, 101), (92, 101), (92, 101), (92, 101), (92, 101),
                    (92, 101), (92, 101), (459, 180), (459, 180), (459, 180),
                    (92, 101), (459, 180), (459, 180), (459, 180), (92, 101),
                    (459, 180), (459, 180), (459, 180), (92, 101), (459, 130),
                    (459, 130), (459, 130), (92, 331), (92, 331), (337, 67),
                    (92, 331), (337, 67), (337, 67), (459, 130), (459, 130),
                    (459, 330), (92, 163), (92, 163), (459, 330), (459, 146),
                    (92, 163), (92, 223), (459, 330)]

example_img_path = '/Users/jimhahn/Desktop/input-map-undergrad_2018-03-26_V1.0.png'
example_img = Image.open(example_img_path)
heatmapper = Heatmapper()
heatmap = heatmapper.heatmap_on_img(wayfinder_points, example_img)
heatmap.save('/Users/jimhahn/Desktop/wayfinder-only_2018-03-26_V1.0.png')
Пример #14
0
    def test(self, heatmap=True):
        """
        Test the model on the held-out test data.
        """
        # load the best checkpoint
        self.load_checkpoint(best=True)
        self.model.eval()
        with torch.no_grad():

            losses = []
            accuracies = []

            confusion_matrix = torch.zeros(self.num_classes, self.num_classes)
            heat_points = [[[] for i in range(self.num_glimpses)]
                           for j in range(self.num_digits + 1)]
            heat_mean = torch.zeros(self.num_digits, *self.im_size)

            var_means = torch.zeros(self.num_glimpses, len(self.test_loader))
            loss_means = torch.zeros(self.num_glimpses, len(self.test_loader))
            count_hits = torch.zeros(self.num_glimpses, 2)
            var_dist = torch.zeros(len(self.test_loader.dataset),
                                   self.num_glimpses, self.im_size[-1],
                                   self.im_size[-1])
            err_dist = torch.zeros(len(self.test_loader.dataset),
                                   self.num_glimpses, self.im_size[-1],
                                   self.im_size[-1])
            labels = torch.zeros(len(self.test_loader.dataset))

            dist = PairwiseDistance(2)
            dists = torch.zeros(len(self.test_loader.dataset),
                                self.num_glimpses)

            run_idx = 0
            for i, (_, x, y) in enumerate(self.test_loader):
                if self.use_gpu:
                    x = x.cuda()
                    y = y.cuda()

                true = y.detach().argmax(1)
                # initialize location vector and hidden state
                self.batch_size = x.shape[0]
                s_t, _, l_t = self.reset()

                targets = torch.zeros(self.num_glimpses, 3, *x.shape[2:])
                glimpses = torch.zeros(self.num_glimpses, 3, *x.shape[2:])
                means = torch.zeros(self.num_glimpses, 3, *x.shape[2:])
                vars = torch.zeros(self.num_glimpses, 3, *x.shape[2:])

                locs = torch.zeros(self.batch_size, self.num_glimpses, 2)
                acc_loss = 0
                sub_dir = self.plot_dir / f"{i:06d}_dir"
                if not sub_dir.exists() and i < 10:
                    sub_dir.mkdir(parents=True)

                for t in range(self.num_glimpses):
                    # forward pass through model
                    locs[:, t] = l_t.clone().detach()
                    s_t, l_pred, r_t, out_t, mu, logvar = self.model(
                        x,
                        l_t,
                        s_t,
                        samples=self.samples,
                        classify=self.classify,
                    )
                    draw = x[0].expand(3, -1, -1)
                    extent = self.patch_size
                    for patch in range(self.num_patches):
                        draw = draw_glimpse(
                            draw,
                            l_t[0],
                            extent=extent,
                        )
                        extent *= self.glimpse_scale

                    targets[t] = draw
                    glimpses[t] = self.model.sensor.glimpse[0][0].expand(
                        3, -1, -1)
                    means[t] = r_t[0][0].expand(3, -1, -1)
                    vars[t] = convert_heatmap(
                        r_t.var(0)[0].squeeze().cpu().numpy())

                    if t == 0:
                        var_first = r_t.var(0).squeeze().cpu().numpy()
                    var_last = r_t.var(0).squeeze().cpu().numpy()

                    loc_prev = loc = denormalize(x.size(-1), l_t)
                    l_t = get_loc_target(r_t.var(0),
                                         max=self.use_amax).type(l_t.type())
                    loc = denormalize(x.size(-1), l_t)
                    dists[run_idx:run_idx + len(x),
                          t] = dist.forward(loc_prev.float(),
                                            loc.float()).detach().cpu()
                    var_dist[run_idx:run_idx + len(x),
                             t] = r_t.var(0).detach().cpu().squeeze()

                    temp_loss = torch.zeros(self.batch_size,
                                            *err_dist.shape[2:])
                    for s in range(self.samples):
                        temp_loss += F.binary_cross_entropy(
                            r_t[s], x, reduction='none').detach().cpu(
                            ).squeeze() / self.samples
                    err_dist[run_idx:run_idx + len(x), t] = temp_loss

                    for k, l in enumerate(loc):
                        if x.squeeze()[k][l[0], l[1]] > 0:
                            count_hits[t, 0] += 1
                        else:
                            count_hits[t, 1] += 1

                    imgs = [targets[t], glimpses[t], means[t], vars[t]]
                    filename = sub_dir / f"{i:06d}_glimpse{t:01d}.png"
                    if i < 10:
                        torchvision.utils.save_image(
                            imgs,
                            filename,
                            nrow=1,
                            normalize=True,
                            pad_value=1,
                            padding=1,
                            scale_each=True,
                        )

                    var = r_t.var(0).reshape(self.batch_size, -1)
                    var_means[t, i] = var.max(-1)[0].mean(0)
                    loss_means[t, i] = temp_loss.mean()

                    for j in range(self.num_digits):
                        heat_points[j][t].extend(
                            denormalize(x.size(-1), l_t[true == j]).tolist())

                    heat_points[-1][t].extend(loc.tolist())

                labels[run_idx:run_idx + len(true)] = true
                run_idx += len(x)
                for s in range(self.samples):
                    loss = F.mse_loss(r_t[s], x) / self.samples
                    acc_loss += loss.item()  # store

                if self.classify:
                    if self.num_classes == 1:
                        pred = out_t.detach().squeeze().round()
                        target = (y.argmax(1) == self.target_class).float()
                    else:
                        pred = out_t.detach().argmax(1)
                        target = true
                        for p, tr in zip(pred.view(-1), target.view(-1)):
                            confusion_matrix[tr.long(), p.long()] += 1

                    accuracies.append(
                        torch.sum(pred == target).float().item() / len(y))

                for j in range(self.num_digits):
                    if len(x[true == j]):
                        heat_mean[j] += x[true == j].mean(0).cpu()

                losses.append(acc_loss)
                imgs = [targets, glimpses, means, vars]

                for im in imgs:
                    im = (im - im.min()) / (im.max() - im.min())
                # store images + reconstructions of largest scale
                filename = self.plot_dir / f"{i:06d}.png"
                if i < 10:
                    torchvision.utils.save_image(
                        torch.cat(imgs, 0),
                        filename,
                        nrow=6,
                        normalize=False,
                        pad_value=1,
                        padding=3,
                        scale_each=False,
                    )

            pkl.dump(dists, open(self.file_dir / 'dists.pkl', 'wb'))
            pkl.dump(var_dist, open(self.file_dir / 'var_dist.pkl', 'wb'))
            pkl.dump(err_dist, open(self.file_dir / 'err_dist.pkl', 'wb'))
            pkl.dump(heat_points, open(self.file_dir / 'locs.pkl', 'wb'))
            pkl.dump(labels, open(self.file_dir / 'labels.pkl', 'wb'))
            pkl.dump(heat_mean, open(self.file_dir / 'mean.pkl', 'wb'))
            print(count_hits[:, 0] / count_hits.sum(1))

            sn.set(font="serif",
                   font_scale=2,
                   context='paper',
                   style='dark',
                   rc={"lines.linewidth": 2.5})

            errs = err_dist.view(len(self.test_loader.dataset),
                                 self.num_glimpses, -1).cpu().numpy()
            vars = var_dist.view(len(self.test_loader.dataset),
                                 self.num_glimpses, -1).cpu().numpy()
            f, ax = plt.subplots(2, 1, sharex=True, figsize=(9, 12))
            ax[0].plot(range(self.num_glimpses),
                       errs.mean((0, -1)),
                       marker='o',
                       markersize=10,
                       c=PLOT_COLOR)
            ax[0].set_ylabel('Prediction Error')
            ax[1].plot(range(self.num_glimpses),
                       vars.max(-1).mean(0),
                       marker='o',
                       markersize=10,
                       c=PLOT_COLOR)
            ax[1].set_xlabel('Saccade number')
            ax[1].set_ylabel('Uncertainty')
            f.tight_layout()
            f.savefig(self.plot_dir / f"comb_var_err.pdf",
                      bbox_inches='tight',
                      pad_inches=0,
                      dpi=600)

            print("#######################")
            if self.classify:
                print(confusion_matrix)
                print(confusion_matrix.diag() / confusion_matrix.sum(1))
                plot_confusion_matrix(confusion_matrix,
                                      self.plot_dir / f"confusion_matrix.png")
                pkl.dump(confusion_matrix,
                         open(self.file_dir / 'conf_matrix.pkl', 'wb'))

            #create heatmaps
            flatten = lambda l, i: [
                item for sublist in l for item in sublist[i]
            ]
            for i in range(self.num_digits):
                img = array2img(heat_mean[i])
                points = np.array(heat_points[i])

                first = points[:3].reshape(-1, 2)
                heatmapper = Heatmapper(
                    point_diameter=1,  # the size of each point to be drawn
                    point_strength=
                    0.3,  # the strength, between 0 and 1, of each point to be drawn
                    opacity=0.85,
                )
                heatmap = heatmapper.heatmap_on_img(first, img)
                heatmap.save(self.plot_dir / f"heatmap_bef{i}.png")

                last = points[3:-1].reshape(-1, 2)
                heatmap = heatmapper.heatmap_on_img(last, img)
                heatmap.save(self.plot_dir / f"heatmap_aft{i}.png")

                for j in range(self.num_glimpses):
                    heatmap = heatmapper.heatmap_on_img(heat_points[i][j], img)
                    heatmap.save(self.plot_dir /
                                 f"heatmap_class{i}_glimpse{j}.png")

            self.logger.info(
                f"[*] Test loss: {np.mean(losses)}, Test accuracy: {np.mean(accuracies)}"
            )
            return np.mean(losses)
              (83.2964724, 206.3611842), (83.2964724, 206.3611842),
              (83.2964724, 206.3611842), (83.2964724, 206.3611842),
              (83.2964724, 206.3611842), (83.2964724, 206.3611842),
              (83.2964724, 206.3611842), (83.2964724, 206.3611842),
              (90.58982342, 208.9370392), (90.58982342, 208.9370392),
              (90.58982342, 208.9370392), (90.58982342, 208.9370392),
              (90.58982342, 208.9370392), (90.58982342, 208.9370392),
              (90.58982342, 208.9370392), (90.58982342, 208.9370392),
              (90.58982342, 208.9370392), (90.58982342, 208.9370392),
              (90.58982342, 208.9370392), (90.58982342, 208.9370392),
              (90.58982342, 208.9370392), (85.85770642, 190.939349),
              (85.85770642, 190.939349), (85.85770642, 190.939349),
              (85.85770642, 190.939349), (85.85770642, 190.939349),
              (85.85770642, 190.939349), (85.85770642, 190.939349),
              (85.85770642, 190.939349), (85.85770642, 190.939349),
              (85.85770642, 190.939349), (85.85770642, 190.939349),
              (85.85770642, 190.939349), (85.85770642, 190.939349),
              (128.1527387, 198.9594999), (128.1527387, 198.9594999),
              (128.1527387, 198.9594999), (128.1527387, 198.9594999),
              (128.1527387, 198.9594999), (128.1527387, 198.9594999),
              (128.1527387, 198.9594999), (128.1527387, 198.9594999),
              (128.1527387, 198.9594999), (128.1527387, 198.9594999),
              (128.1527387, 198.9594999), (128.1527387, 198.9594999),
              (128.1527387, 198.9594999)]
rec_img_path = '/Users/jimhahn/Desktop/wayfinder-only_2018-03-26_V1.0.png'
rec_img = Image.open(rec_img_path)
heatmapper = Heatmapper(opacity=0.3, colours='reveal')
#heatmapper = Heatmapper()
heatmap = heatmapper.heatmap_on_img(rec_points, rec_img)
heatmap.save(
    '/Users/jimhahn/Desktop/rec-and-wayfinder-heatmap_2018-03-26_V1.0.png')
Пример #16
0
class LogoFinder:
    def __init__(self):
        self.heatmapper = Heatmapper(
            point_diameter=15,
            point_strength=0.05,
            opacity=3,
            colours='reveal',
        )
        self.heatmap_name = 'heatmap.png'
        self.detector = CENSURE()

    @staticmethod
    def read_image(image_path):
        image = cv2.imread(image_path)
        bgr = image
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        return bgr, rgb, gray

    def make_heatmap(self, image_path):
        bgr_heatmap, rgb_heatmap, gray_heatmap = self.read_image(image_path)

        # Find contours and edges
        contours = find_contours(gray_heatmap,
                                 100,
                                 fully_connected='high',
                                 positive_orientation='high')
        edge_roberts = roberts(gray_heatmap)
        edge_sobel = sobel(gray_heatmap)

        self.detector.detect(gray_heatmap)
        thresh = threshold_otsu(gray_heatmap)
        bw = closing(gray_heatmap > thresh, square(3))
        cleared = clear_border(bw)
        label_image = label(cleared)
        image_label_overlay = label2rgb(label_image, image=gray_heatmap)

        edges = edge_roberts / 2 + edge_sobel / 2
        dots = list()

        for x in range(edges.shape[1]):
            for y in range(edges.shape[0]):
                for i in range(int(edges[y][x] * 2)):
                    dots.append([x, y])

        for n, point in enumerate(self.detector.keypoints):
            for i in range(self.detector.scales[n] * 10):
                dots.append([
                    point[1] + (random.random() - 0.5) * 10,
                    point[0] + (random.random() - 0.5) * 10
                ])

        for n, contour in enumerate(contours):
            if len(contour) > 50:
                for dot in contour:
                    dots.append([dot[1], dot[0]])

        for region in regionprops(label_image):
            # take regions with large enough areas
            if region.area >= 100:
                # draw rectangle around segmented coins
                minr, minc, maxr, maxc = region.bbox
                for x in range(minc, maxc):
                    for y in range(minr, maxr, 8):
                        dots.append([x, y])

        heatmap = self.heatmapper.heatmap_on_img_path(dots, image_path)
        heatmap.save(self.heatmap_name)

        bgr_heatmap, rgb_heatmap, gray_heatmap = self.read_image(
            self.heatmap_name)

        thresh = threshold_otsu(gray_heatmap)
        bw = closing(gray_heatmap > thresh, square(3))
        cleared = clear_border(bw)
        label_image = label(cleared)
        image_label_overlay = label2rgb(label_image, image=gray_heatmap)
        for n, region in enumerate(regionprops(label_image)):
            minr, minc, maxr, maxc = region.bbox
            if maxr - minr > 30 and maxc - minc > 30:
                yield minr, minc, maxr, maxc
Пример #17
0
# Ensure script is run on python 3.5.2 and above
try:
    assert sys.version_info >= (3, 5, 2)
except AssertionError:
    print('Please use Python 3.6 : https://www.python.org/downloads/ \n')
    raise

# Read original data
filename = askopenfilename()
with open(filename) as temp:
    newdata = temp.read()

data = json.loads(newdata)
coord_img_list = []
coord_vid_list = []
for key, value in data.items():
    x_coord = float(value.pop('x_coord', None))
    y_coord = float(value.pop('y_coord', None))
    coord_pair = (x_coord, y_coord)
    coord_triple = (x_coord, y_coord,
                    float(value.pop('timestamp', None)) * 1000)
    coord_img_list.append(coord_pair)

example_img_path = 'test.jpg'
example_img = Image.open(example_img_path)

heatmap.save('heatmapnottest.png')
heatmapper = Heatmapper(point_diameter=40, point_strength=0.1)
heatmap = heatmapper.heatmap_on_img(coord_img_list, example_img)
Пример #18
0
from heatmappy import Heatmapper
from PIL import Image
import cv2
import os
import pandas as pd

coorList = list()
csv = "workdir/mot.mp4.csv"       # csv file to use
csvData = pd.read_csv(csv, header=0)   # csv import
video = "workdir/mot.mp4"         # video file to use

heatmapper = Heatmapper(
    point_diameter=35,                 # the size of each point to be drawn
    point_strength=0.2,                # the strength, between 0 and 1, of each point to be drawn
    opacity=0.65,                      # the opacity of the heatmap layer
    colours='default',                 # 'default' or 'reveal'
                                       # OR a matplotlib LinearSegmentedColorMap object 
                                       # OR the path to a horizontal scale image
    grey_heatmapper='PIL'              # the object responsible for drawing the points
                                       # pillow used by default, 'PySide' option available if installed
)

assert os.path.isfile(csv), \
'csv {} does not exist'.format(csv)
assert os.path.isfile(video), \
'video {} does not exist'.format(video)

# Capture the first frame of the video
videoFeed = cv2.VideoCapture(video)

assert videoFeed.isOpened(), \
'Cannot capture source'