def findMarkers(self, image): grayScaleImage = self.getGrayScale(image) binaryThresholdImage = self.getThresholdMask(grayScaleImage) # Make copy, since findContours() is destructive imageCopy, contourList, hierarchy = cv2.findContours( binaryThresholdImage.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if len(contourList) > 0: # check if at least 1 marker was found tempCount = 0 # Start of fresh frame, reset timestamp and number of markers i = len(contourList) timestamp = datetime.datetime.now() #print("Fresh frame. deleting markers") del self.markerList[:] for contour in contourList: if tempCount < 20: tempCount += 1 rect = cv2.minAreaRect(contour) box = cv2.boxPoints(rect) box = np.int0(box) cv2.drawContours(image, [box], 0, (0, 255, 0), 2) x, y, x2, y2 = cv2.boundingRect(contour) centerX = int(x + (x2 / 2)) centerY = int(y + (y2 / 2)) # Draw an identifying label on top of each marker self.drawText(image, "A" + str(len(contourList) - i), (centerX, centerY - 25), .50, (0, 255, 255), 1) # Draw a circle denoting centerpoint of marker cv2.circle(image, (centerX, centerY), 2, (0, 0, 255), -1) try: if (len(self.markerList) == 0): print("Creating first marker") elif (len(self.markerList) < len(contourList)): print("Creating new marker") else: pass temp = Marker(centerX, centerY, "A", len(contourList) - i, timestamp) self.markerList.append(temp) temp.printTest() i = i - 1 except: print("Error creating marker object or appending") else: print("too many markers in view") else: del self.markerList[:]
def addMarker(self, marker): if self.markers is None: self.markers = [] currMarker = Marker() currMarker.marker = marker self.markers.append(currMarker)
def addMarker(self, marker): """ Add a marker style to the list of marker styles through which the plot will cycle when drawing lines. If no markers are specified, the markers specified by the Line objects themselves will be used. Note that, when drawing lines, all line style/color combinations are cycled through with a given marker before a new marker is chosen. """ if self.markers is None: self.markers = [] currMarker = Marker() currMarker.marker = marker self.markers.append(currMarker)
def GetFound(self): found = AR.GetFound() markers = [] for m in found: marker = Marker(m) markers.append(marker) return markers
def __init__(self, marker=None, markerSize=8.0, width=1.0, color='black', lineStyle='-', dates=False, **kwargs): super(HLine, self).__init__("hline", **kwargs) self._marker = Marker() self._marker.marker = marker self._marker.size = markerSize self.width = width """ The line's width """ self.color = color """ The line's color. See :ref:`styling-colors` for valid colors. """ self._lineStyle = LineStyle() self._lineStyle.style = lineStyle self.dates = dates
def __init__(self, editor): Signal.__init__(self) self.__init_attributes(editor) from GUI.Manager import Manager Manager(self, editor) from LineJumper import Jumper Jumper(self, editor) from Feedback import Feedback Feedback(self, editor) from Utils import create_bookmark_image create_bookmark_image(editor) from MarkAdder import Adder Adder(self, editor) from MarkRemover import Remover Remover(self, editor) from MarginDisplayer import Displayer Displayer(self, editor) from DatabaseWriter import Writer Writer(self, editor) from MarkReseter import Reseter Reseter(self, editor) from MarkUpdater import Updater Updater(self, editor) from Marker import Marker Marker(self, editor) from DatabaseReader import Reader Reader(self, editor)
def __init__(self, x, y, text=None, bbox=None): PlotInfo.__init__(self, "label") self.x = x """ The label's x coordinate """ self.y = y """ The label's y coordinate """ self.text = text """ The text that should be displayed with the label """ self.textX = x self.textY = y self.arrow = None self._marker = Marker() self._labelProperties = LabelProperties() if bbox: self.bbox = dict(bbox) else: self.bbox = None
def __init__(self): super(BoxAndWhisker,self).__init__("boxplot") self.width=None """ The width of each of the element's "boxes". """ self.color="black" self.label = None self.xSequence = [] """ A list of lists defining the values to be plotted. Each list gives a set of y-axis values. The first list gives the values for x=0, the second for x=1, and so on. """ #TODO Document self.flierMarker = Marker() self.flierMarker.marker = '+' self.flierMarker.color = 'b'
def load_markers(path): """ Loads a yaml file containing marker definitions Returns a list of marker ids and a dictionary of corresponding Marker() objects """ marker_dict = {} marker_list = [] with open(path) as f: raw_markers = yaml.load(f) for marker in raw_markers: id_ = raw_markers[marker][0] len_ = raw_markers[marker][1] x = raw_markers[marker][2][0] y = raw_markers[marker][2][1] z = raw_markers[marker][2][2] rot_x = raw_markers[marker][3][0] rot_y = raw_markers[marker][3][1] rot_z = raw_markers[marker][3][2] marker_list.append(id_) marker_dict[str(id_)] = Marker(id_, len_, x, y, z, rot_x, rot_y, rot_z) return set(marker_list), marker_dict
def set_frame_markers(data, rm): s.frame_markers = [] for m in data.markers: stop = False for srm in Graph.shown_reference_markers: if m.id == srm.id: stop = True break if stop is False: marker_found = False marker_id = m.id position = m.pose.pose.position #marker_position = Position((position.x-rm[0].current_position.x), #(position.y-rm[0].current_position.y), #(position.z-rm[0].current_position.z)) marker_position = Position(position.x, position.y, position.z) marker_found = False for out in Graph.outgoing.keys(): if m.id == out.id: marker_found = True if s.counter == 2: # update location once in 30 iterations out.last_position = out.current_position out.current_position = marker_position s.frame_markers.append(out) if not marker_found: marker = Marker(marker_id, marker_position) s.frame_markers.append(marker) Graph.outgoing[marker] = set() return s.frame_markers
def __init__(self, marker='o', markerSize=20, color="black", **kwargs): super(Scatter, self).__init__("scatter", **kwargs) self._marker = Marker() self._marker.marker = marker self._marker.size = markerSize self.color = color """
def __init__(self, editor): GObject.__init__(self) from Selector import Selector Selector(self, editor) from TextInserter import Inserter Inserter(self, editor) from CaseProcessor import Processor Processor(self, editor) from TextExtractor import Extractor Extractor(self, editor) from Marker import Marker Marker(self, editor)
def add_marker(): request_dict = request.get_json() response = {'Success': 'marked', 'ErrorMessage': ''} parse_response = Marker.parse_from_json(request_dict) if not parse_response[0]: response['Success'] = 'Failed' response['ErrorMessage'] = parse_response[1] else: add_new_marker(parse_response[1]) return jsonify(response)
def mark_next_image(self, cv_image, crop=False): frame = cv_image if (crop): height, width, channel = cv_image.shape yMin = 0 yMax = height xMin = 0 xMax = width / 2 frame = frame[yMin:yMax, xMin:xMax] aruco_dict = self.board.get_dictionary() parameters = aruco.DetectorParameters_create() res = aruco.detectMarkers(frame, aruco_dict, parameters=parameters) corners = res[0] ids = res[1] gray = frame markers = [] if len(corners) > 0: gray = aruco.drawDetectedMarkers(frame, corners) try: rvec, tvec = aruco.estimatePoseSingleMarkers( corners, 0.20, zed_parameter.cameraMatrix, zed_parameter.distCoeffs) except: pass for i in range(0, len(rvec)): # Get two dictionaries with xy positions about the corners of one marker and calculate also distance and angle to them corner_xy, corner_dist_ang = self.get_marker_from_image( gray, rvec[i][0], tvec[i][0], zed_parameter.cameraMatrix, zed_parameter.distCoeffs) # They are drawn onto the current image self.drawPointAtSingleMarker(gray, corner_xy, corner_dist_ang, ids[i]) # Finally they are filled in the marker data object marker = Marker(i, confidence=1.0, corners_xy_pos=corner_xy, corners_distances_angles=corner_dist_ang) markers.append(marker) return gray, markers
def __init__(self, color='black', width=1, lineStyle='-', marker=None, markerSize=8.0, dates=False, loglog=False, steps=None, alpha=None, antialiased=False, **kwargs): super(Line, self).__init__("line", **kwargs) self._marker = Marker() self._marker.marker = marker self._marker.size = markerSize # TODO Change to width self.lineWidth = width """ The line's width """ self.color = color """ The line's color. see :ref:`styling-colors` for valid colors. """ self._lineStyle = LineStyle() self._lineStyle.style = lineStyle self.dates = dates """ If True, the x-axis values of this line will be interpreted as dates """ self.loglog = loglog self.steps = steps self.alpha = alpha self.antialiased = antialiased """
def set_reference_marker(data): for fm in data.markers: if fm.id in Graph.reference_markers: for s in Graph.shown_reference_markers: if fm.id == s.id: position = fm.pose.pose.position s.last_position = s.current_position s.current_position = Position(position.x, position.y, position.z) return [s, s.calc_movement()] position = fm.pose.pose.position Graph.shown_reference_markers.append( Marker(fm.id, Position(position.x, position.y, position.z))) return None return None
def __init__(self, editor): GObject.__init__(self) from Selector import Selector Selector(self, editor) from TextInserter import Inserter Inserter(self, editor) from SelectionProcessor import Processor Processor(self, editor) from IndentationProcessor import Processor Processor(self, editor) from IndentationCharacter import Character Character(self, editor) from TextExtractor import Extractor Extractor(self, editor) from Marker import Marker Marker(self, editor) from OffsetExtractor import Extractor Extractor(self, editor) from Refresher import Refresher Refresher(self, editor)
def __init__(self, editor): Signal.__init__(self) from MatchIndexer import Indexer Indexer(self, editor) from MatchSelector import Selector Selector(self, editor) from MatchNavigator import Navigator Navigator(self, editor) from Reseter import Reseter Reseter(self, editor) from MatchColorer import Colorer Colorer(self, editor) from Marker import Marker Marker(self, editor) from Searcher import Searcher Searcher(self, editor) from RegexCreator import Creator Creator(self, editor) from PatternCreator import Creator Creator(self, editor) from SelectionDetector import Detector Detector(self, editor)
def __init__(self, x_id): self.p_playerid = x_id self.p_pieces = [Marker(x_id),Marker(x_id),Marker(x_id),Marker(x_id),Marker(x_id)]
) # Remove whitespace characters from start and end of string records = jsonFile.split( '\n' ) # Turn line delimited JSON objects into list of JSON objets for i in records: # For each JSON Object if (i == chr(4)): print "EOF" break if (i[0] != '{' ): # If the first character is not a opening curly brace print "Error: " + i # Print out the record if (i[-1] != '}' ): # If the last character is not a closing curly brace print "Error: " + i # Print out the record else: # Otherwise temp = Marker(0, 0, 'NA') # Make a temporary marker markerList.append( temp.jsonLoad(i) ) # Deserialize the marker from JSON, store it in temp, and append it to the marker list. myHash.update( str(temp.GUID) ) # Update the SHA1 hash with the GUID of the newly inserted marker print(markerList[-1].jsonDump() ) # Print the newly recived marker print("My Hash {0}".format(myHash.hexdigest()) ) # Print out the hash the host generated print("Their Hash {0}".format(theirHash) ) # Print out the hash sent from the camera if (myHash.hexdigest() == theirHash): # Compare both hashes print("Match") else:
def test_format_training(self): marker = Marker('testFiles/training.txt', None, 'testFiles/category_map_test.csv', 550) formatted = marker.format_training_file() form_line = MLUtils.format_line((' | otherwise = y\n\n').replace('\n','')) padded = MLUtils.pad_float(form_line, 550) self.assertTrue((0, padded) in formatted)
def get(self, id): response = self.post_data_url(hard_url="/api/sdk/map/get.php", data_query={'apikey': self.__apiKey, 'id': id}) if response in [None, '']: raise Exception("Invalid Data Received") response_dict = response.json() if response_dict.get('success') is False: raise Exception(response_dict.get('message')) # Creating Map from response rMap = json.loads(response_dict.get('message')) map_instance = Map(name=rMap.get('name'), height=rMap.get('height'), width=rMap.get('width'), zoom=rMap.get('zoom'), center=Point(rMap.get('centerLatitude'), rMap.get('centerLongitude'))) map_instance.setId(rMap.get("id")) map_instance.setLayerId(rMap.get("layerId")) map_instance.setGroupId(rMap.get("groupId")) map_instance.setButtonStyle(rMap.get("buttonStyle")) map_instance.setPassword(rMap.get("password")) map_instance.setUseCluster(rMap.get("useCluster")) map_instance.setOverlayEnable(rMap.get("overlayEnable")) map_instance.setOverlayTitle(rMap.get("overlayTitle")) map_instance.setOverlayContent(rMap.get("overlayContent")) map_instance.setOverlayBlurb(rMap.get("overlayBlurb")) map_instance.setLegendEnable(rMap.get("legendEnable")) map_instance.setLegendContent(rMap.get("legendContent")) map_instance.setProjectId(int(rMap.get("projectId"))) map_instance.setShowSidebar(rMap.get("showSidebar")) map_instance.setShowExport(rMap.get("showExport")) map_instance.setShowMeasure(rMap.get("showMeasure")) map_instance.setShowMinimap(rMap.get("showMinimap")) map_instance.setShowSearch(rMap.get("showSearch")) map_instance.setShowFilelayer(rMap.get("showFilelayer")) map_instance.setShowSvg(rMap.get("showSvg")) map_instance.setShowStaticSidebar(rMap.get("showStaticSidebar")) map_instance.setStaticSidebarContent(rMap.get("staticSidebarContent")) # Creating Markers from response markers_list = rMap.get("markers") for marker in markers_list: marker_instance = Marker(marker.get('latitude'), marker.get('longitude')) marker_instance.setLocation(marker.get("location")) marker_instance.setDescription(marker.get("description")) marker_instance.setShowGetDirection(marker.get("showGetDirection")) marker_instance.setShowInfoBox(marker.get("showInfoBox")) marker_instance.setShowLocationOnPopup(marker.get("showLocationOnPopup")) marker_instance.setHideLabel(marker.get("hideLabel")) marker_instance.setMarkerStyle(marker.get("markerStyle")) marker_instance.setMarkerColor(marker.get("markerColor")) map_instance.addShape(marker_instance) image_overlays_list = json.loads(rMap.get("imageOverlays")) for imageOverlay in image_overlays_list: bounds = json.loads(imageOverlay.get("bounds")) boundA = bounds[0] boundB = bounds[1] p1 = Point(boundA[0], boundA[1]) p2 = Point(boundB[0], boundB[1]) image_overlay_instance = ImageOverlay(imageOverlay.get("name"), p1, p2, imageOverlay.get("src"), imageOverlay.get("popupcontent")) map_instance.addImageOverlay(image_overlay_instance) return map_instance
from Marker import Marker marker = Marker(["Tomer","Khalili"]) marker.mark_file("marking.txt") marker.print_marks() marker.print_bookmarks()
def mark_next_image(self, cv_image, ar_params, crop=False): frame = cv_image if (crop): height, width, channel = cv_image.shape yMin = 0 yMax = height xMin = 0 xMax = width / 2 frame = frame[yMin:yMax, xMin:xMax] aruco_dict = self.board.get_dictionary() parameters = aruco.DetectorParameters_create() res = aruco.detectMarkers(frame, aruco_dict, parameters=parameters) corners = res[0] ids = res[1] gray = frame markers = [] evasion_needed = False safe_steer = None safe_motor = None if len(corners) > 0: gray = aruco.drawDetectedMarkers(frame, corners) # Quick fix to make my code compatible with the newer versions try: rvec, tvec, _ = aruco.estimatePoseSingleMarkers( corners, 0.20, self.zed_parameters.cameraMatrix, self.zed_parameters.distCoeffs) except: rvec, tvec = aruco.estimatePoseSingleMarkers( corners, 0.20, self.zed_parameters.cameraMatrix, self.zed_parameters.distCoeffs) critical_dist_angle_pairs = [] for i in range(0, len(rvec)): # Get two dictionaries with xy positions about the corners of one marker and calculate also distance and angle to them center_line_xy, center_line_dist_ang = self.get_marker_from_image( gray, rvec[i][0], tvec[i][0], self.zed_parameters.cameraMatrix, self.zed_parameters.distCoeffs) # They are drawn onto the current image self.drawPointAtSingleMarker(gray, center_line_xy, center_line_dist_ang) if (center_line_dist_ang['distance'] < safety_distance): critical_dist_angle_pairs.append(center_line_dist_ang) evasion_needed = True # Finally they are filled in the marker data object marker = Marker(ids[i], confidence=1.0, center_line_xy=center_line_xy, center_line_dist_ang=center_line_dist_ang) markers.append(marker) if (evasion_needed and self.bagfile_handler == None): safe_motor, safe_steer = self.get_safe_commands( critical_dist_angle_pairs, ar_params) cv2.putText( gray, str(np.round(safe_motor, 2)) + "," + str(safe_steer), (10, 300), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 0, 255), 4) # If an evasion is needed draw onto the image safe values if (evasion_needed and self.bagfile_handler != None): safe_motor, safe_steer = self.get_safe_commands( critical_dist_angle_pairs) self.bagfile_handler.evasion_data.append({ 'timestamp': self.bagfile_handler.timestamp, 'motor_command': safe_motor, 'steering_command': safe_steer }) cv2.putText( gray, str(np.round(safe_motor, 2)) + "," + str(safe_steer), (10, 300), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 0, 255), 4) return gray, markers, safe_motor, safe_steer, evasion_needed
def __init__(self): super().__init__() self.threadpool = QtCore.QThreadPool() print("Max thread count " + str(self.threadpool.maxThreadCount())) self.worker = SweepWorker(self) self.noSweeps = 1 # Number of sweeps to run self.serialLock = threading.Lock() self.serial = serial.Serial() self.dataLock = threading.Lock() self.data : List[Datapoint] = [] self.data21 : List[Datapoint] = [] self.referenceS11data : List[Datapoint] = [] self.referenceS21data : List[Datapoint] = [] self.calibration = Calibration() self.markers = [] self.serialPort = self.getport() # self.serialSpeed = "115200" self.color = QtGui.QColor(160, 140, 20, 128) self.referenceColor = QtGui.QColor(0, 0, 255, 32) self.setWindowTitle("NanoVNA Saver") layout = QtWidgets.QGridLayout() scrollarea = QtWidgets.QScrollArea() outer = QtWidgets.QVBoxLayout() outer.addWidget(scrollarea) self.setLayout(outer) scrollarea.setWidgetResizable(True) self.resize(1150, 950) scrollarea.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) self.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) widget = QtWidgets.QWidget() widget.setLayout(layout) scrollarea.setWidget(widget) self.s11SmithChart = SmithChart("S11") self.s21SmithChart = SmithChart("S21") self.s11LogMag = LogMagChart("S11 Return Loss") self.s21LogMag = LogMagChart("S21 Gain") self.charts : List[Chart] = [] self.charts.append(self.s11SmithChart) self.charts.append(self.s21SmithChart) self.charts.append(self.s11LogMag) self.charts.append(self.s21LogMag) left_column = QtWidgets.QVBoxLayout() right_column = QtWidgets.QVBoxLayout() layout.addLayout(left_column, 0, 0) layout.addLayout(right_column, 0, 1) ################################################################################################################ # Sweep control ################################################################################################################ sweep_control_box = QtWidgets.QGroupBox() sweep_control_box.setMaximumWidth(400) sweep_control_box.setTitle("Sweep control") sweep_control_layout = QtWidgets.QFormLayout(sweep_control_box) self.sweepStartInput = QtWidgets.QLineEdit("") self.sweepStartInput.setAlignment(QtCore.Qt.AlignRight) sweep_control_layout.addRow(QtWidgets.QLabel("Sweep start"), self.sweepStartInput) self.sweepEndInput = QtWidgets.QLineEdit("") self.sweepEndInput.setAlignment(QtCore.Qt.AlignRight) sweep_control_layout.addRow(QtWidgets.QLabel("Sweep end"), self.sweepEndInput) self.sweepCountInput = QtWidgets.QLineEdit("") self.sweepCountInput.setAlignment(QtCore.Qt.AlignRight) self.sweepCountInput.setText("1") sweep_control_layout.addRow(QtWidgets.QLabel("Sweep count"), self.sweepCountInput) self.btnColorPicker = QtWidgets.QPushButton("█") self.btnColorPicker.setFixedWidth(20) self.setSweepColor(self.color) self.btnColorPicker.clicked.connect(lambda: self.setSweepColor(QtWidgets.QColorDialog.getColor(self.color, options=QtWidgets.QColorDialog.ShowAlphaChannel))) sweep_control_layout.addRow("Sweep color", self.btnColorPicker) self.sweepProgressBar = QtWidgets.QProgressBar() self.sweepProgressBar.setMaximum(100) self.sweepProgressBar.setValue(0) sweep_control_layout.addRow(self.sweepProgressBar) self.btnSweep = QtWidgets.QPushButton("Sweep") self.btnSweep.clicked.connect(self.sweep) sweep_control_layout.addRow(self.btnSweep) left_column.addWidget(sweep_control_box) ################################################################################################################ # Marker control ################################################################################################################ marker_control_box = QtWidgets.QGroupBox() marker_control_box.setTitle("Markers") marker_control_box.setMaximumWidth(400) marker_control_layout = QtWidgets.QFormLayout(marker_control_box) mouse_marker = Marker("Mouse marker", QtGui.QColor(20, 255, 20)) mouse_marker.updated.connect(self.dataUpdated) self.markers.append(mouse_marker) marker1 = Marker("Marker 1", QtGui.QColor(255, 0, 20)) marker1.updated.connect(self.dataUpdated) label, layout = marker1.getRow() marker_control_layout.addRow(label, layout) self.markers.append(marker1) marker2 = Marker("Marker 2", QtGui.QColor(20, 0, 255)) marker2.updated.connect(self.dataUpdated) label, layout = marker2.getRow() marker_control_layout.addRow(label, layout) self.markers.append(marker2) self.s11SmithChart.setMarkers(self.markers) self.s21SmithChart.setMarkers(self.markers) self.mousemarkerlabel = QtWidgets.QLabel("") self.mousemarkerlabel.setMinimumWidth(160) marker_control_layout.addRow(QtWidgets.QLabel("Mouse marker:"), self.mousemarkerlabel) self.marker1label = QtWidgets.QLabel("") marker_control_layout.addRow(QtWidgets.QLabel("Marker 1:"), self.marker1label) self.marker2label = QtWidgets.QLabel("") marker_control_layout.addRow(QtWidgets.QLabel("Marker 2:"), self.marker2label) left_column.addWidget(marker_control_box) ################################################################################################################ # Statistics/analysis ################################################################################################################ s11_control_box = QtWidgets.QGroupBox() s11_control_box.setTitle("S11") s11_control_layout = QtWidgets.QFormLayout() s11_control_box.setLayout(s11_control_layout) s11_control_box.setMaximumWidth(400) self.s11_min_swr_label = QtWidgets.QLabel() s11_control_layout.addRow("Min VSWR:", self.s11_min_swr_label) self.s11_min_rl_label = QtWidgets.QLabel() s11_control_layout.addRow("Return loss:", self.s11_min_rl_label) left_column.addWidget(s11_control_box) s21_control_box = QtWidgets.QGroupBox() s21_control_box.setTitle("S21") s21_control_layout = QtWidgets.QFormLayout() s21_control_box.setLayout(s21_control_layout) s21_control_box.setMaximumWidth(400) self.s21_min_gain_label = QtWidgets.QLabel() s21_control_layout.addRow("Min gain:", self.s21_min_gain_label) self.s21_max_gain_label = QtWidgets.QLabel() s21_control_layout.addRow("Max gain:", self.s21_max_gain_label) left_column.addWidget(s21_control_box) tdr_control_box = QtWidgets.QGroupBox() tdr_control_box.setTitle("TDR") tdr_control_layout = QtWidgets.QFormLayout() tdr_control_box.setLayout(tdr_control_layout) tdr_control_box.setMaximumWidth(400) self.tdr_velocity_dropdown = QtWidgets.QComboBox() self.tdr_velocity_dropdown.addItem("Jelly filled (0.64)", 0.64) self.tdr_velocity_dropdown.addItem("Polyethylene (0.66)", 0.66) self.tdr_velocity_dropdown.addItem("PTFE (Teflon) (0.70)", 0.70) self.tdr_velocity_dropdown.addItem("Pulp Insulation (0.72)", 0.72) self.tdr_velocity_dropdown.addItem("Foam or Cellular PE (0.78)", 0.78) self.tdr_velocity_dropdown.addItem("Semi-solid PE (SSPE) (0.84)", 0.84) self.tdr_velocity_dropdown.addItem("Air (Helical spacers) (0.94)", 0.94) self.tdr_velocity_dropdown.insertSeparator(7) self.tdr_velocity_dropdown.addItem("RG174 (0.66)", 0.66) self.tdr_velocity_dropdown.addItem("RG316 (0.69)", 0.69) self.tdr_velocity_dropdown.addItem("RG402 (0.695)", 0.695) self.tdr_velocity_dropdown.insertSeparator(11) self.tdr_velocity_dropdown.addItem("Custom", -1) self.tdr_velocity_dropdown.setCurrentIndex(1) # Default to PE (0.66) self.tdr_velocity_dropdown.currentIndexChanged.connect(self.updateTDR) tdr_control_layout.addRow(self.tdr_velocity_dropdown) self.tdr_velocity_input = QtWidgets.QLineEdit() self.tdr_velocity_input.setDisabled(True) self.tdr_velocity_input.setText("0.66") self.tdr_velocity_input.textChanged.connect(self.updateTDR) tdr_control_layout.addRow("Velocity factor", self.tdr_velocity_input) self.tdr_result_label = QtWidgets.QLabel() tdr_control_layout.addRow("Estimated cable length:", self.tdr_result_label) left_column.addWidget(tdr_control_box) ################################################################################################################ # Calibration ################################################################################################################ calibration_control_box = QtWidgets.QGroupBox("Calibration") calibration_control_box.setMaximumWidth(400) calibration_control_layout = QtWidgets.QFormLayout(calibration_control_box) b = QtWidgets.QPushButton("Calibration ...") self.calibrationWindow = CalibrationWindow(self) b.clicked.connect(self.calibrationWindow.show) calibration_control_layout.addRow(b) left_column.addWidget(calibration_control_box) ################################################################################################################ # Spacer ################################################################################################################ left_column.addSpacerItem(QtWidgets.QSpacerItem(1, 1, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)) ################################################################################################################ # Reference control ################################################################################################################ reference_control_box = QtWidgets.QGroupBox() reference_control_box.setMaximumWidth(400) reference_control_box.setTitle("Reference sweep") reference_control_layout = QtWidgets.QFormLayout(reference_control_box) btnSetReference = QtWidgets.QPushButton("Set current as reference") btnSetReference.clicked.connect(self.setReference) self.btnResetReference = QtWidgets.QPushButton("Reset reference") self.btnResetReference.clicked.connect(self.resetReference) self.btnResetReference.setDisabled(True) self.btnReferenceColorPicker = QtWidgets.QPushButton("█") self.btnReferenceColorPicker.setFixedWidth(20) self.setReferenceColor(self.referenceColor) self.btnReferenceColorPicker.clicked.connect(lambda: self.setReferenceColor( QtWidgets.QColorDialog.getColor(self.referenceColor, options=QtWidgets.QColorDialog.ShowAlphaChannel))) set_reference_layout = QtWidgets.QHBoxLayout() set_reference_layout.addWidget(btnSetReference) set_reference_layout.addWidget(self.btnReferenceColorPicker) reference_control_layout.addRow(set_reference_layout) reference_control_layout.addRow(self.btnResetReference) left_column.addWidget(reference_control_box) ################################################################################################################ # Serial control ################################################################################################################ serial_control_box = QtWidgets.QGroupBox() serial_control_box.setMaximumWidth(400) serial_control_box.setTitle("Serial port control") serial_control_layout = QtWidgets.QFormLayout(serial_control_box) self.serialPortInput = QtWidgets.QLineEdit(self.serialPort) self.serialPortInput.setAlignment(QtCore.Qt.AlignRight) # self.serialSpeedInput = QtWidgets.QLineEdit(str(self.serialSpeed)) # self.serialSpeedInput.setValidator(QtGui.QIntValidator()) # self.serialSpeedInput.setAlignment(QtCore.Qt.AlignRight) serial_control_layout.addRow(QtWidgets.QLabel("Serial port"), self.serialPortInput) # serial_control_layout.addRow(QtWidgets.QLabel("Speed"), self.serialSpeedInput) self.btnSerialToggle = QtWidgets.QPushButton("Open serial") self.btnSerialToggle.clicked.connect(self.serialButtonClick) serial_control_layout.addRow(self.btnSerialToggle) left_column.addWidget(serial_control_box) ################################################################################################################ # File control ################################################################################################################ self.fileWindow = QtWidgets.QWidget() self.fileWindow.setWindowTitle("Files") file_window_layout = QtWidgets.QVBoxLayout() self.fileWindow.setLayout(file_window_layout) reference_file_control_box = QtWidgets.QGroupBox("Import file") reference_file_control_layout = QtWidgets.QFormLayout(reference_file_control_box) self.referenceFileNameInput = QtWidgets.QLineEdit("") btnReferenceFilePicker = QtWidgets.QPushButton("...") btnReferenceFilePicker.setMaximumWidth(25) btnReferenceFilePicker.clicked.connect(self.pickReferenceFile) referenceFileNameLayout = QtWidgets.QHBoxLayout() referenceFileNameLayout.addWidget(self.referenceFileNameInput) referenceFileNameLayout.addWidget(btnReferenceFilePicker) reference_file_control_layout.addRow(QtWidgets.QLabel("Filename"), referenceFileNameLayout) file_window_layout.addWidget(reference_file_control_box) btnLoadReference = QtWidgets.QPushButton("Load reference") btnLoadReference.clicked.connect(self.loadReferenceFile) btnLoadSweep = QtWidgets.QPushButton("Load as sweep") btnLoadSweep.clicked.connect(self.loadSweepFile) reference_file_control_layout.addRow(btnLoadReference) reference_file_control_layout.addRow(btnLoadSweep) file_control_box = QtWidgets.QGroupBox() file_control_box.setTitle("Export file") file_control_box.setMaximumWidth(400) file_control_layout = QtWidgets.QFormLayout(file_control_box) self.fileNameInput = QtWidgets.QLineEdit("") btnFilePicker = QtWidgets.QPushButton("...") btnFilePicker.setMaximumWidth(25) btnFilePicker.clicked.connect(self.pickFile) fileNameLayout = QtWidgets.QHBoxLayout() fileNameLayout.addWidget(self.fileNameInput) fileNameLayout.addWidget(btnFilePicker) file_control_layout.addRow(QtWidgets.QLabel("Filename"), fileNameLayout) self.btnExportFile = QtWidgets.QPushButton("Export data S1P") self.btnExportFile.clicked.connect(self.exportFileS1P) file_control_layout.addRow(self.btnExportFile) self.btnExportFile = QtWidgets.QPushButton("Export data S2P") self.btnExportFile.clicked.connect(self.exportFileS2P) file_control_layout.addRow(self.btnExportFile) file_window_layout.addWidget(file_control_box) file_control_box = QtWidgets.QGroupBox() file_control_box.setTitle("Files") file_control_box.setMaximumWidth(400) file_control_layout = QtWidgets.QFormLayout(file_control_box) btnOpenFileWindow = QtWidgets.QPushButton("Files ...") file_control_layout.addWidget(btnOpenFileWindow) btnOpenFileWindow.clicked.connect(lambda: self.fileWindow.show()) left_column.addWidget(file_control_box) ################################################################################################################ # Right side ################################################################################################################ self.lister = QtWidgets.QPlainTextEdit() self.lister.setFixedHeight(80) charts = QtWidgets.QGridLayout() charts.addWidget(self.s11SmithChart, 0, 0) charts.addWidget(self.s21SmithChart, 1, 0) charts.addWidget(self.s11LogMag, 0, 1) charts.addWidget(self.s21LogMag, 1, 1) self.s11LogMag.setMarkers(self.markers) self.s21LogMag.setMarkers(self.markers) right_column.addLayout(charts) right_column.addWidget(self.lister) self.worker.signals.updated.connect(self.dataUpdated) self.worker.signals.finished.connect(self.sweepFinished)
def __init__(self): super().__init__() self.threadpool = QtCore.QThreadPool() print("Max thread count " + str(self.threadpool.maxThreadCount())) self.worker = SweepWorker(self) self.noSweeps = 1 # Number of sweeps to run self.serialLock = threading.Lock() self.serial = serial.Serial() self.dataLock = threading.Lock() self.values = [] self.frequencies = [] self.data : List[Datapoint] = [] self.data12 : List[Datapoint] = [] self.markers = [] self.serialPort = "COM11" # self.serialSpeed = "115200" self.setWindowTitle("NanoVNA Saver") layout = QtWidgets.QGridLayout() self.setLayout(layout) self.smithChart = SmithChart("S11") self.s12SmithChart = SmithChart("S12") left_column = QtWidgets.QVBoxLayout() right_column = QtWidgets.QVBoxLayout() layout.addLayout(left_column, 0, 0) layout.addLayout(right_column, 0, 1) ################################################################################################################ # Sweep control ################################################################################################################ sweep_control_box = QtWidgets.QGroupBox() sweep_control_box.setMaximumWidth(400) sweep_control_box.setTitle("Sweep control") sweep_control_layout = QtWidgets.QFormLayout(sweep_control_box) self.sweepStartInput = QtWidgets.QLineEdit("") self.sweepStartInput.setAlignment(QtCore.Qt.AlignRight) sweep_control_layout.addRow(QtWidgets.QLabel("Sweep start"), self.sweepStartInput) self.sweepEndInput = QtWidgets.QLineEdit("") self.sweepEndInput.setAlignment(QtCore.Qt.AlignRight) sweep_control_layout.addRow(QtWidgets.QLabel("Sweep end"), self.sweepEndInput) self.sweepCountInput = QtWidgets.QLineEdit("") self.sweepCountInput.setAlignment(QtCore.Qt.AlignRight) self.sweepCountInput.setText("1") sweep_control_layout.addRow(QtWidgets.QLabel("Sweep count"), self.sweepCountInput) self.sweepProgressBar = QtWidgets.QProgressBar() self.sweepProgressBar.setMaximum(100) self.sweepProgressBar.setValue(0) sweep_control_layout.addRow(self.sweepProgressBar) self.btnSweep = QtWidgets.QPushButton("Sweep") self.btnSweep.clicked.connect(self.sweep) sweep_control_layout.addRow(self.btnSweep) left_column.addWidget(sweep_control_box) ################################################################################################################ # Marker control ################################################################################################################ marker_control_box = QtWidgets.QGroupBox() marker_control_box.setTitle("Markers") marker_control_box.setMaximumWidth(400) marker_control_layout = QtWidgets.QFormLayout(marker_control_box) marker1 = Marker("Marker 1", QtGui.QColor(255, 0, 20)) marker1.updated.connect(self.dataUpdated) label, layout = marker1.getRow() marker_control_layout.addRow(label, layout) self.markers.append(marker1) marker2 = Marker("Marker 2", QtGui.QColor(20, 0, 255)) marker2.updated.connect(self.dataUpdated) label, layout = marker2.getRow() marker_control_layout.addRow(label, layout) self.markers.append(marker2) self.smithChart.setMarkers(self.markers) self.s12SmithChart.setMarkers(self.markers) self.marker1label = QtWidgets.QLabel("") marker_control_layout.addRow(QtWidgets.QLabel("Marker 1: "), self.marker1label) self.marker2label = QtWidgets.QLabel("") marker_control_layout.addRow(QtWidgets.QLabel("Marker 2: "), self.marker2label) left_column.addWidget(marker_control_box) left_column.addSpacerItem(QtWidgets.QSpacerItem(1, 1, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)) ################################################################################################################ # Serial control ################################################################################################################ serial_control_box = QtWidgets.QGroupBox() serial_control_box.setMaximumWidth(400) serial_control_box.setTitle("Serial port control") serial_control_layout = QtWidgets.QFormLayout(serial_control_box) self.serialPortInput = QtWidgets.QLineEdit(self.serialPort) self.serialPortInput.setAlignment(QtCore.Qt.AlignRight) # self.serialSpeedInput = QtWidgets.QLineEdit(str(self.serialSpeed)) # self.serialSpeedInput.setValidator(QtGui.QIntValidator()) # self.serialSpeedInput.setAlignment(QtCore.Qt.AlignRight) serial_control_layout.addRow(QtWidgets.QLabel("Serial port"), self.serialPortInput) # serial_control_layout.addRow(QtWidgets.QLabel("Speed"), self.serialSpeedInput) self.btnSerialToggle = QtWidgets.QPushButton("Open serial") self.btnSerialToggle.clicked.connect(self.serialButtonClick) serial_control_layout.addRow(self.btnSerialToggle) left_column.addWidget(serial_control_box) ################################################################################################################ # File control ################################################################################################################ file_control_box = QtWidgets.QGroupBox() file_control_box.setTitle("Export file") file_control_box.setMaximumWidth(400) file_control_layout = QtWidgets.QFormLayout(file_control_box) self.fileNameInput = QtWidgets.QLineEdit("") self.fileNameInput.setAlignment(QtCore.Qt.AlignRight) btnFilePicker = QtWidgets.QPushButton("...") btnFilePicker.setMaximumWidth(25) btnFilePicker.clicked.connect(self.pickFile) fileNameLayout = QtWidgets.QHBoxLayout() fileNameLayout.addWidget(self.fileNameInput) fileNameLayout.addWidget(btnFilePicker) file_control_layout.addRow(QtWidgets.QLabel("Filename"), fileNameLayout) self.btnExportFile = QtWidgets.QPushButton("Export data S1P") self.btnExportFile.clicked.connect(self.exportFileS11) file_control_layout.addRow(self.btnExportFile) left_column.addWidget(file_control_box) ################################################################################################################ # Right side ################################################################################################################ self.lister = QtWidgets.QPlainTextEdit() self.lister.setFixedHeight(100) self.s11LogMag = LogMagChart("S11") self.s12LogMag = LogMagChart("S12") charts = QtWidgets.QGridLayout() charts.addWidget(self.smithChart, 0, 0) charts.addWidget(self.s12SmithChart, 1, 0) charts.addWidget(self.s11LogMag, 0, 1) charts.addWidget(self.s12LogMag, 1, 1) self.s11LogMag.setMarkers(self.markers) self.s12LogMag.setMarkers(self.markers) right_column.addLayout(charts) right_column.addWidget(self.lister) self.worker.signals.updated.connect(self.dataUpdated) self.worker.signals.finished.connect(self.sweepFinished)
def addMarker(self, moduleList, markerText): if self.addMarkers: moduleList.append(Marker(markerText))
from Marker import Marker marker = Marker(["Tomer", "Khalili"]) marker.mark_file("marking.txt") marker.print_marks() marker.print_bookmarks()
except: print("Could not initialize camera") cameraInitialized = False else: cameraInitialized = True # If the camera was successfully initialized, attempt to start the capture feed if cameraInitialized: print("Camera initialized") print("Attempting to start camera capture feed...") try: vid.start_capture() except: print("Could not start camera capture feed") cameraCaptureStarted = False else: cameraCaptureStarted = True # If camera capture feed started successfully, output success message if cameraCaptureStarted: print("Camera capture feed started") # Otherwise, don't bother starting up camera else: print("Could not load modules. Aborting camera operation") # Marker testing newMarker = Marker(123, 32, "A") newMarker.printCoords() newMarker.printLabel()