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
示例#3
0
    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)
示例#5
0
 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
示例#6
0
 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