Files
@ 7cb01d4080c9
Branch filter:
Location: OneEye/exp/annotations.py - annotation
7cb01d4080c9
1.8 KiB
text/x-python
a hinted neural network (failed)
d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 1874230ef2bd 1874230ef2bd 1874230ef2bd 1874230ef2bd a9c02a5b2bfc a9c02a5b2bfc a9c02a5b2bfc a9c02a5b2bfc a9c02a5b2bfc a9c02a5b2bfc 1874230ef2bd 1874230ef2bd 1874230ef2bd a9c02a5b2bfc 1874230ef2bd 1874230ef2bd a9c02a5b2bfc a9c02a5b2bfc a9c02a5b2bfc a9c02a5b2bfc d91db8f73233 d91db8f73233 d91db8f73233 1874230ef2bd d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 d91db8f73233 1874230ef2bd a9c02a5b2bfc d91db8f73233 d91db8f73233 d91db8f73233 1874230ef2bd 1874230ef2bd 1874230ef2bd 1874230ef2bd 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
from analyzer.corners import Corners
class Board:
labels=["UNSET","CLEAR","GOOD","POOR"]
UNSET=0
CLEAR=1
GOOD=2
POOR=3
def __init__(self,**kwargs):
self.board=Corners(kwargs.get("board") or [])
self.grid=Corners(kwargs.get("grid") or [])
self.grade=kwargs.get("grade") or Board.UNSET
def isEmpty(self):
return len(self.board)==0 and len(self.grid)==0 and self.grade==Board.UNSET
def setGrade(self,g):
self.grade=g
class DataFile(MutableMapping):
"""self.data: {filename: [Board, ...}"""
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]}
elif isinstance(obj,Board):
return {"type": "Board", "val": {"board": list(obj.board), "grid": list(obj.grid), "grade": obj.grade}}
raise TypeError(obj)
def deserialize(self,obj):
type=obj.get("type")
if type=="EPoint": return EPoint(*obj["val"])
elif type=="Board": return Board(**obj["val"])
return obj
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)
|