3 – Documentation

Documentation for the graphical user interfaces can be downloaded below as an OpenOffice ODT file or a PDF – this is what you should be looking at if you’re interested in how to use Argus as an application. We do provide some installation instructions and quick-start tutorials on this website, but we strongly suggest you read the docs fully (they’re not that long!) if you plan to use Argus.

Argus-Documentation v1.1 (pdf)

Argus-Documentation v1.1 (odt)

Documentation of the functions and classes included in Argus as well as examples of using Argus from the command line can be found at:  http://argus-docs.readthedocs.org/en/latest/intro.html; refer to these if you’re interested in learning how to use Argus components and routines in your own Python programs.

 

17 comments on “3 – Documentation
  1. Yeshara Packirisamy says:

    Hello. When using the Argus Wand function, what is the format for the outputted DLT coefficient file? How is it related to the SBA profile? Is there any way to validate whether the extrinsics received from Argus is correct?

    • Tyson Hedrick says:

      Hi Yeshara,

      The DLT coefficient file is formatted as a comma-separated-value array with each column representing a camera and giving the Direct Linear Transformation parameters for that camera. These are handing for doing triangulation from large numbers of cameras and for compatibility with older workflows. The SBA profile contains the camera intrinsics and extrinsics from the bundle adjustment step, formatted with each camera specified in a row. Rotations are given as quaternions.

      Cheers,
      Ty

      • Yeshara Packirisamy says:

        Thank you! The output I received from Argus Wand, shows that my DLT coefficients are all less than 5, but when I use those coefficients in the DLTdv5 tracking program, the line of zero error (blue epipolar line) does not always align with my marker centroid in each view. Do you know what could be going wrong?

  2. Kusha says:

    Hello,

    So I was trying to use Wand to get the extrinsic matrices for a 5-camera setup. I am not sure I understand which of the CSV files obtained from Clicker go where in Wand and how they are formatted because I get the error that the shape of my reference points file is not correct.

    Also, I noticed that the Argus documentation and example differ from each other in the way the input camera intrinsics file is formatted. Could you please clarify that?

    Thank you so much!

    Best,
    Kusha

    • Tyson Hedrick says:

      Hi Kusha,

      If you have a 5-camera setup your Wand input files should have the following dimensions:
      Input cameras: 5 rows, 1 for each camera
      Input paired points: 20 columns, n rows where n is the number of paired points
      Input unpaired points: 10 columns, m rows where m is the number of unpaired points

      The unpaired points columns are as follows:
      [cam1u,cam1v,cam2u,cam2v, …]

      The paired points columns are as follows:
      [point1cam1u,point1cam1v,point1cam2u,…point2cam1v,point2cam1u,point2cam2v,…]

      The error you’re getting is pretty generic and could refer to a dimensional inconsistency between any of the 3 inputs. I’ve most often seen it from the cameras file since it is easy to forget to check this one, but any could be at fault.

      Cheers,
      Ty Hedrick

      [edited to change pixel coordinate references from x,y to u,v]

      • Kusha says:

        Hello,

        Thank you so much for the response! Interestingly though, I see only 2 columns in a file named “fec-xyzres.csv”.
        I do have the right paired points file (named fec-xypts.csv).
        And then I have a third file with only 5 columns (named fec-offsets.csv).
        What do you think could be going wrong here?
        My error is in the reference points file as follows :-

        “Loading points…
        Defining reference points
        Incorrect shape of reference points! Make sure they are formatted according to the documentation.”

        Also, the documentation says the format for camera intrinsics file is as follows:

        “The ten columns correspond to the value camera intrinsics: focal length (pixels), horizontal center (pixels), vertical center (pixels), aspect ratio, skew, first radial distortion coefficient, second radial distortion coefficient, first and second tangential distortion coefficient, and third radial distortion coefficient.”

        But the example in the tutorial is as follows:

        1 1780 0 0 959.9 539.5 1 -0.255 -.07 0 0 .3
        2 1780 0 0 959.9 539.5 1 -0.255 -.07 0 0 .3
        3 1780 0 0 959.9 539.5 1 -0.255 -.07 0 0 .3

        This has twelve columns instead of ten. The first column seems to be the serial number, but I am not sure what the first two zeroes in each row are?

        So sorry about the multiple questions!

        Thank you so much!

        Best,
        Kusha

        • Selene says:

          Hello,

          I have the same problem with the camera profile I enter in Wand.
          As Kusha said, the documentation states there are 10 columns, however in the example there are twelve.
          Besides, they are in a different order than in the Calibrate output.

          Taking your tutorial as an example:
          Calibrate output (which should be the same order as Wand needs):
          866.1561329367602,960.0,540.0,1.0,0.0,-0.21474150887847218,0.03878927258523093,0.0,0.0,0.0,382.9789605960871

          Camera profile:
          1 866.16 1920 1080 960 540 1 -0.21474 0.038789 0 0 0

          Therefore I don’t know where the third and forth value in camera profile comes from and why the skew value is missing.

          Thank you very much!
          Best,
          Selene

          • Tyson Hedrick says:

            Hi Selene,

            In the example above the 3rd and 4th value are the image_width and image_height. The skew value is assumed by Argus to be zero since we’re not aware of any current cameras with any appreciable skew. I believe the zero is present in Calibrate output, but not included in the camera profile.

            As you note, this isn’t described correctly in the documentation and we will update it shortly.

            Cheers,
            Ty Hedrick

  3. John David johnson says:

    I am hoping that I can figure this out because this is just the type of thing we are looking for to help us with some of our field research. I am working through the tutorial and when I pull up the clicker and try to run it from the tutorial videos inputing the values from the tutorial i get the following (any help would be appreciated):

    Traceback (most recent call last):
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 1856, in
    windows.append(clickerWindow(movies[k], offsets, k + 1, end, factor))
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 551, in __init__
    self.img = pyglet.sprite.Sprite(ArrayInterfaceImage(img).texture)
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 120, in __init__
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 222, in view_new_array
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 166, in dirty
    AttributeError: ‘ArrayInterfaceImage’ object has no attribute ‘texture’
    Traceback (most recent call last):
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 1856, in
    windows.append(clickerWindow(movies[k], offsets, k + 1, end, factor))
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 551, in __init__
    self.img = pyglet.sprite.Sprite(ArrayInterfaceImage(img).texture)
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 120, in __init__
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 222, in view_new_array
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 166, in dirty
    AttributeError: ‘ArrayInterfaceImage’ object has no attribute ‘texture’
    Traceback (most recent call last):
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 1856, in
    windows.append(clickerWindow(movies[k], offsets, k + 1, end, factor))
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 551, in __init__
    self.img = pyglet.sprite.Sprite(ArrayInterfaceImage(img).texture)
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 120, in __init__
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 222, in view_new_array
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 166, in dirty
    AttributeError: ‘ArrayInterfaceImage’ object has no attribute ‘texture’
    Traceback (most recent call last):
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 1856, in
    windows.append(clickerWindow(movies[k], offsets, k + 1, end, factor))
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 551, in __init__
    self.img = pyglet.sprite.Sprite(ArrayInterfaceImage(img).texture)
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 120, in __init__
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 222, in view_new_array
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 166, in dirty
    AttributeError: ‘ArrayInterfaceImage’ object has no attribute ‘texture’
    Traceback (most recent call last):
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 1856, in
    windows.append(clickerWindow(movies[k], offsets, k + 1, end, factor))
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 551, in __init__
    self.img = pyglet.sprite.Sprite(ArrayInterfaceImage(img).texture)
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 120, in __init__
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 222, in view_new_array
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 166, in dirty
    AttributeError: ‘ArrayInterfaceImage’ object has no attribute ‘texture’
    Traceback (most recent call last):
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 1856, in
    windows.append(clickerWindow(movies[k], offsets, k + 1, end, factor))
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\argus_gui-2.1.dev3-py3.7.egg\argus_gui\resources\scripts/argus-click”, line 551, in __init__
    self.img = pyglet.sprite.Sprite(ArrayInterfaceImage(img).texture)
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 120, in __init__
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 222, in view_new_array
    File “c:\users\jjohn235\appdata\local\programs\python\python37\lib\site-packages\pygarrayimage-1.0-py3.7.egg\pygarrayimage\arrayimage.py”, line 166, in dirty
    AttributeError: ‘ArrayInterfaceImage’ object has no attribute ‘texture’

    • Tyson Hedrick says:

      Hi John,

      Based on the error your’re getting I suspect you have a beta version of the Pyglet package installed. Can you use a command line (either terminal, cmd.exe or Anaconda prompt) to enter “pip freeze” without the quotes? This will give you a list of the package versions installed; pyglet should be version 1.3.2; anything else will probably cause this error. If that’s the problem, try “pip install pyglet==1.3.2” to fix it.

      Cheers,
      Ty Hedrick

  4. Max says:

    Hello,

    I have some problems using Argus and hope that you can help me with that.

    With a dot pattern i was successful to calculate the variables I need for DWarp. But if I now try to use DWarp with one of my videos (60s length) the process takes about 30-40 minutes and is overloading the working memory.
    The conversion starts quite fast with 33 fps, but slows down pretty fast, until there is barely any progress.
    Is there any way to improve the performance of that programm, since I want to use DWarp for approx. 300-400 videos of that kind?

    Thanks for your help!

    Best,
    Max

    • Tyson Hedrick says:

      Hi Max,

      OK – this is surprising, I would not expect DWarp to take nearly that long for a 60 second video. DWarp can use up a lot of disk space when processing a long video, but I’d think of long as 10 minutes or more in that context. Can you provide the following information: 1) Platform (Mac/Windows/Linux) & platform version, 2) Python version, 3) Argus installation mode (Anaconda, stock python, etc.)? I’ll also send you an email to possibly share some files so we can try and replicate your problem here.

      Thanks,
      Ty Hedrick

  5. Talia says:

    FYI for an update in the documentation for the manual installation [and it may eventually effect the conda install (I’m not sure how conda environments work)]:

    PyPi now officially and by default will not allow installation of wheels whose names are not PEP 440 compliant. Therefore, if trying to pip install sba==1.6.8pypi (or just pip install sba), it will either complain or install the latest PEP compliant wheel, which isn’t the most recent. For details, see: https://github.com/pypa/pip/issues/9188

    I would either re-release the 1.6.8 sba pypi to be compliant with PEP 440 name compliance, or change the instructions to be:
    pip install –use-deprecated=legacy-resolver sba==1.6.8pypi

    If anyone is having install issues related to this, I hope this helps

  6. Martin Susanto says:

    Hello,

    I’ve been having some problems installing Argus due to what seems like an issue installing sba 1.6.8pypi, and I would appreciate any insight into what might be the issue.

    I am installing on MacOS using Anaconda.
    Here is the error that comes up when I try to create the environment from the config file:

    ERROR: Exception:
    Traceback (most recent call last):
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/cli/base_command.py”, line 173, in _main
    status = self.run(options, args)
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/cli/req_command.py”, line 203, in wrapper
    return func(self, options, args)
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/commands/install.py”, line 316, in run
    reqs, check_supported_wheels=not options.target_dir
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/resolver.py”, line 95, in resolve
    collected.requirements, max_rounds=try_to_avoid_resolution_too_deep
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py”, line 472, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py”, line 341, in resolve
    self._add_to_criteria(self.state.criteria, r, parent=None)
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py”, line 172, in _add_to_criteria
    if not criterion.candidates:
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_vendor/resolvelib/structs.py”, line 151, in __bool__
    return bool(self._sequence)
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py”, line 140, in __bool__
    return any(self)
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py”, line 128, in
    return (c for c in iterator if id(c) not in self._incompatible_ids)
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py”, line 32, in _iter_built
    candidate = func()
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/factory.py”, line 209, in _make_candidate_from_link
    version=version,
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py”, line 283, in __init__
    wheel_version = Version(wheel.version)
    File “/Users/martin5009/opt/anaconda3/envs/Argus/lib/python3.6/site-packages/pip/_vendor/packaging/version.py”, line 266, in __init__
    raise InvalidVersion(f”Invalid version: ‘{version}'”)
    pip._vendor.packaging.version.InvalidVersion: Invalid version: ‘1.6.8pypi’

    failed

    CondaEnvException: Pip failed

    I tried just running “pip install sba” in the conda environment, but I run across a similar issue.
    I’ve also tried installing sba manually (following the instructions on the PyPI page for sba), but one of the files needed for manual installation is contained on a Bitbucket repo that seems to no longer exist.
    Could this be the issue?

    Thanks,
    Martin Susanto

Leave a Reply to Tyson Hedrick Cancel reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.