Ejemplo n.º 1
0
    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[:]
Ejemplo n.º 2
0
    def addMarker(self, marker):
        if self.markers is None:
            self.markers = []

        currMarker = Marker()
        currMarker.marker = marker
        self.markers.append(currMarker)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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'
Ejemplo n.º 10
0
    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
Ejemplo n.º 12
0
    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
        """
Ejemplo n.º 13
0
	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)
Ejemplo n.º 14
0
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)
Ejemplo n.º 15
0
    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
Ejemplo n.º 16
0
    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
Ejemplo n.º 18
0
	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)
Ejemplo n.º 19
0
	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)
Ejemplo n.º 20
0
    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)]
Ejemplo n.º 21
0
 )  # 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:
Ejemplo n.º 22
0
 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((' &#124; 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
Ejemplo n.º 24
0
from Marker import Marker

marker = Marker(["Tomer","Khalili"])

marker.mark_file("marking.txt")

marker.print_marks()

marker.print_bookmarks()
Ejemplo n.º 25
0
    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
Ejemplo n.º 26
0
    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)
Ejemplo n.º 27
0
    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)
Ejemplo n.º 28
0
 def addMarker(self, moduleList, markerText):
     if self.addMarkers:
         moduleList.append(Marker(markerText))
Ejemplo n.º 29
0
from Marker import Marker

marker = Marker(["Tomer", "Khalili"])

marker.mark_file("marking.txt")

marker.print_marks()

marker.print_bookmarks()
Ejemplo n.º 30
0
    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()