Files
@ 28c6f89a3a7e
Branch filter:
Location: OneEye/exp/annotations.py - annotation
28c6f89a3a7e
1.2 KiB
text/x-python
stone detection enhanced by edge subtraction
d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 | 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)
|