Files @ 6aace8f39e75
Branch filter:

Location: OneEye/exp/annotations.py - annotation

Laman
detecting board diagonals with RANSAC
import sys
sys.path.append("../src")

import gzip
import json
from typing import MutableMapping

from analyzer.epoint import EPoint


class DataFile(MutableMapping):
	"""self._data: {filename: [EPoint,EPoint,EPoint,EPoint]}"""
	def __init__(self,filename):
		self.filename=filename
		try:
			with gzip.open(filename,mode="rt",encoding="utf8") as f:
				self._data=json.load(f,object_hook=self.deserialize)
		except OSError:
			self._data=dict()

	def save(self):
		with gzip.open(self.filename,mode="wt",encoding="utf8") as f:
			json.dump(self._data,f,default=self.serialize,indent="\t")

	def serialize(self,obj):
		if isinstance(obj,EPoint):
			return {"type": "EPoint", "val": [obj.x,obj.y]}
		raise TypeError(obj)

	def deserialize(self,obj):
		if obj.get("type")!="EPoint": return obj
		return EPoint(*obj["val"])

	def __getitem__(self, key): return self._data[key]
	def __setitem__(self, key, val): self._data[key]=val
	def __delitem__(self, key): del self._data[key]
	def __iter__(self): return iter(self._data)
	def __len__(self): return len(self._data)


def computeBoundingBox(corners):
	x1=min(p.x for p in corners)
	x2=max(p.x for p in corners)
	y1=min(p.y for p in corners)
	y2=max(p.y for p in corners)
	return (x1,y1,x2,y2)