Browse Source

removed example scripts. added display script, that replaces the example scripts

Dimitri Korsch 7 years ago
parent
commit
cb7abb8c97
5 changed files with 113 additions and 102 deletions
  1. 5 0
      display.sh
  2. 0 50
      example_cub.py
  3. 0 51
      example_nab.py
  4. 1 1
      nabirds/__init__.py
  5. 107 0
      nabirds/display.py

+ 5 - 0
display.sh

@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+PYTHON=python
+
+$PYTHON nabirds/display.py $@
+

+ 0 - 50
example_cub.py

@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-if __name__ != '__main__': raise Exception("Do not import me!")
-
-from nabirds import Dataset, CUB_Annotations
-from nabirds.dataset import visible_part_locs, visible_crops, reveal_parts
-import matplotlib.pyplot as plt
-
-annot = CUB_Annotations(root="/home/korsch1/korsch/datasets/birds/cub200_11")
-
-print(annot.labels.shape)
-data = Dataset(annot.train_uuids, annot)
-
-start = 2000
-n_images = 5
-
-for i in range(len(data)):
-	if i+1 <= start: continue
-
-	im, parts, label = data[i]
-
-	idxs, xy = visible_part_locs(parts)
-
-	print(label, idxs)
-
-	fig1 = plt.figure(figsize=(16,9))
-	ax = fig1.add_subplot(2,1,1)
-
-	ax.imshow(im)
-	ax.scatter(*xy, marker="x", c=idxs)
-
-	ax = fig1.add_subplot(2,1,2)
-	ax.imshow(reveal_parts(im, xy))
-	ax.scatter(*xy, marker="x", c=idxs)
-
-	fig2 = plt.figure(figsize=(16,9))
-	n_parts = parts.shape[0]
-
-	for j, crop in enumerate(visible_crops(im, parts), 1):
-		ax = fig2.add_subplot(3, 5, j)
-		ax.imshow(crop)
-
-		middle = crop.shape[0] / 2
-		ax.scatter(middle, middle, marker="x")
-
-
-	plt.show()
-	plt.close()
-
-	if i+1 >= start + n_images: break
-

+ 0 - 51
example_nab.py

@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-if __name__ != '__main__': raise Exception("Do not import me!")
-
-from nabirds import Dataset, NAB_Annotations
-from nabirds.dataset import visible_part_locs, visible_crops, reveal_parts
-import matplotlib.pyplot as plt
-
-annot = NAB_Annotations("/home/korsch1/korsch/datasets/birds/nabirds")
-
-print(annot.labels.shape)
-data = Dataset(annot.train_uuids, annot)
-
-start = 2000
-n_images = 5
-
-for i in range(len(data)):
-	if i+1 <= start: continue
-
-	im, parts, label = data[i]
-
-	idxs, xy = visible_part_locs(parts)
-
-	print(label)
-	print(idxs)
-
-	fig1 = plt.figure(figsize=(16,9))
-	ax = fig1.add_subplot(2,1,1)
-
-	ax.imshow(im)
-	ax.scatter(*xy, marker="x", c=idxs)
-
-	ax = fig1.add_subplot(2,1,2)
-	ax.imshow(reveal_parts(im, xy))
-	ax.scatter(*xy, marker="x", c=idxs)
-
-	fig2 = plt.figure(figsize=(16,9))
-	n_parts = parts.shape[0]
-
-	for j, crop in enumerate(visible_crops(im, parts, .5), 1):
-		ax = fig2.add_subplot(2, 6, j)
-		ax.imshow(crop)
-
-		middle = crop.shape[0] / 2
-		ax.scatter(middle, middle, marker="x")
-
-	plt.show()
-	plt.close(fig1)
-	plt.close(fig2)
-
-	if i+1 >= start + n_images: break
-

+ 1 - 1
nabirds/__init__.py

@@ -1,4 +1,4 @@
 from .dataset import Dataset
 from .annotations import NAB_Annotations, CUB_Annotations
 
-__version__ = "0.1.2"
+__version__ = "0.1.3"

+ 107 - 0
nabirds/display.py

@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+if __name__ != '__main__': raise Exception("Do not import me!")
+
+from argparse import ArgumentParser
+import logging
+import numpy as np
+
+from nabirds import Dataset, NAB_Annotations, CUB_Annotations
+from nabirds.dataset import visible_part_locs, visible_crops, reveal_parts
+import matplotlib.pyplot as plt
+
+def init_logger(args):
+	fmt = "%(levelname)s - [%(asctime)s] %(filename)s:%(lineno)d [%(funcName)s]: %(message)s"
+	logging.basicConfig(
+		format=fmt,
+		level=getattr(logging, args.loglevel.upper(), logging.DEBUG),
+		filename=args.logfile or None,
+		filemode="w")
+
+def main(args):
+	init_logger(args)
+
+	annotation_cls = dict(
+		nab=NAB_Annotations,
+		cub=CUB_Annotations)
+
+	logging.info("Loading \"{}\" annnotations from \"{}\"".format(args.dataset, args.data))
+	annot = annotation_cls.get(args.dataset.lower())(args.data)
+
+	uuids = getattr(annot, "{}_uuids".format(args.subset.lower()))
+	data = Dataset(uuids, annot)
+	n_images = len(data)
+	logging.info("Found {} images in the {} subset".format(n_images, args.subset))
+
+	for i in range(n_images):
+		if i + 1 <= args.start: continue
+
+		im, parts, label = data[i]
+
+		idxs, xy = visible_part_locs(parts)
+
+		logging.debug(label)
+		logging.debug(idxs)
+
+		fig1 = plt.figure(figsize=(16,9))
+		ax = fig1.add_subplot(2,1,1)
+
+		ax.imshow(im)
+		ax.scatter(*xy, marker="x", c=idxs)
+
+		ax = fig1.add_subplot(2,1,2)
+		ax.imshow(reveal_parts(im, xy, ratio=args.ratio))
+		ax.scatter(*xy, marker="x", c=idxs)
+
+		fig2 = plt.figure(figsize=(16,9))
+		n_parts = parts.shape[0]
+		rows, cols = (2,6) if args.dataset.lower() == "nab" else (3,5)
+		for j, crop in enumerate(visible_crops(im, parts, ratio=args.ratio), 1):
+			ax = fig2.add_subplot(rows, cols, j)
+			ax.imshow(crop)
+
+			middle = crop.shape[0] / 2
+			ax.scatter(middle, middle, marker="x")
+
+		plt.show()
+		plt.close(fig1)
+		plt.close(fig2)
+
+		if i+1 >= args.start + args.n_images: break
+
+parser = ArgumentParser()
+
+parser.add_argument("data",
+	help="Folder containing the dataset with images and annotation files",
+	type=str)
+
+parser.add_argument("--dataset",
+	help="Possible datasets: NAB, CUB",
+	choices=["cub", "nab"],
+	default="nab", type=str)
+
+parser.add_argument("--subset",
+	help="Possible subsets: train, test",
+	choices=["train", "test"],
+	default="train", type=str)
+
+parser.add_argument("--start", "-s",
+	help="Image id to start with",
+	type=int, default=0)
+
+parser.add_argument("--n_images", "-n",
+	help="Number of images to display",
+	type=int, default=10)
+
+parser.add_argument("--ratio",
+	help="Part extraction ratio",
+	type=float, default=.2)
+
+parser.add_argument(
+	'--logfile', type=str, default='',
+	help='File for logging output')
+
+parser.add_argument(
+	'--loglevel', type=str, default='INFO',
+	help='logging level. see logging module for more information')
+
+main(parser.parse_args())