def scan_next_frame(self, frame_img, is_single_image=False): self._frame_img = frame_img self._frame_number += 1 self._is_single_image = is_single_image result = OpenScanResult(self._frame_number) result.set_old_barcode_data(self._old_barcode_data) result.start_timer() # Read all the barcodes in the image try: barcodes = self._perform_frame_scan() result.set_barcodes(barcodes) except NoBarcodesDetectedError as ex: # TODO: logging the error result.set_error(str(ex)) # Create a 'blank' geometry object to store the barcode locations new_barcodes = result.new_barcodes() num_new_barcodes = len(new_barcodes) geometry = self._create_geometry(new_barcodes) # Create the plate if any(new_barcodes): plate = Plate(self.plate_type, num_slots=num_new_barcodes) plate.set_geometry(geometry) for s, barcode in enumerate(new_barcodes): plate.slot(s).set_barcode(barcode) result.set_plate(plate) result.end_timer() return result
def _initialize_plate_from_barcodes(self): for bc in self._barcodes: bc.perform_read() if self._any_valid_barcodes(): slot_scanner = self._create_slot_scanner() self._plate = Plate(self.plate_type) self._plate_scan = PlateScanner(self._plate, self._is_single_image) self._plate_scan.new_frame(self._geometry, self._barcodes, slot_scanner)