def from_string(string): """ Creates a scan record object from a semi-colon separated string. This is used when reading a stored record back from file. """ items = string.strip().split(Record.ITEM_SEPARATOR) id = items[Record.IND_ID] #0 timestamp = items[Record.IND_TIMESTAMP] #1 image_path = items[Record.IND_IMAGE] #2 if len(items) == Record.NUM_RECORD_ITEMS: holder_image_path = items[Record.IND_HOLDER_IMAGE] #3 plate_type = items[Record.IND_PLATE] #4 all_barcodes = items[Record.IND_BARCODES].split( Record.BC_SEPARATOR) #5 geo_class = Geometry.get_class(plate_type) geometry = geo_class.deserialize(items[Record.IND_GEOMETRY]) #6 else: # old version did not have holder image path plate_type = items[Record.IND_HOLDER_IMAGE] #3 all_barcodes = items[Record.IND_PLATE].split( Record.BC_SEPARATOR) #4 holder_image_path = items[ Record.IND_IMAGE] #2 - use same path for both images geo_class = Geometry.get_class(plate_type) geometry = geo_class.deserialize(items[Record.IND_BARCODES]) #5 holder_barcode = all_barcodes[0] pin_barcodes = all_barcodes[1:] return Record(plate_type=plate_type, holder_barcode=holder_barcode, barcodes=pin_barcodes, timestamp=timestamp, image_path=image_path, holder_image_path=holder_image_path, id=id, geometry=geometry)
def _calculate_geometry(self): slot_centers = [bc.center() for bc in self._barcodes] if self.plate_type == Geometry.UNIPUCK: use_emptys = len(self._barcodes) < 8 if use_emptys: empty_circles = EmptySlotDetector.detect(self._frame_img, self._barcodes) empty_centers = [c.center() for c in empty_circles] slot_centers.extend(empty_centers) geometry = Geometry.calculate_geometry(self.plate_type, slot_centers) return geometry
def __init__(self, geometry_name, num_slots=-1): self.id = str(uuid.uuid1()) if num_slots == -1: self.num_slots = Geometry.get_num_slots(geometry_name) else: self.num_slots = num_slots self.type = geometry_name self._geometry = None # Initialize slots self._slots = [Slot(i) for i in range(1, self.num_slots+1)]
def from_string(string): """ Creates a scan record object from a semi-colon separated string. This is used when reading a stored record back from file. """ items = string.strip().split(Record.ITEM_SEPARATOR) id = items[Record.IND_ID] timestamp = items[Record.IND_TIMESTAMP] #used to convert into float twice image = items[Record.IND_IMAGE] plate_type = items[Record.IND_PLATE] all_barcodes = items[Record.IND_BARCODES].split(Record.BC_SEPARATOR) holder_barcode = all_barcodes[0] pin_barcodes = all_barcodes[1:] geo_class = Geometry.get_class(plate_type) geometry = geo_class.deserialize(items[Record.IND_GEOMETRY]) return Record(plate_type=plate_type, holder_barcode=holder_barcode, barcodes=pin_barcodes, timestamp=timestamp, image_path=image, id=id, geometry=geometry)
def _create_geometry(self, barcodes): """ Create the blank geometry object which just stores the locations of all the barcodes. """ geometry = Geometry.calculate_geometry(self.plate_type, barcodes) return geometry