Update documentation

This commit is contained in:
Joel Klimont 2023-02-10 11:23:22 +01:00
parent 75185f19b6
commit e8ac3e810a
4 changed files with 137 additions and 21 deletions

View file

@ -11,3 +11,43 @@ Dokumentation des Camera Moduls
.. autoclass:: compLib.Camera.Camera
:members:
Beispiele
=========
Bild Anzeigen
---------------
Das folgende Programm fragt Bilder von der Kamera ab und schickt sie an den Webserver, der im Hintergrund läuft. Der Benutzer kann dann auf die Webseite: http://raspi_ip:9898 gehen und die Ausgabe der Kamera sehen.
.. code-block:: python
from compLib.Camera import *
camera = Camera()
while True:
image = camera.get_frame()
camera.publish_frame(image)
ArUco Marker Erkennen
------------------------
In diesem Programm werden die ArUco Marker, die sich am Spielfeld befinden, erkannt. Diese "QR-Code" ähnlichen Marker finden sich in den Logistikzonen und können dazu verwendet werden zu erkennen, wo der Roboter hinfahren sollt etc.
.. code-block:: python
from compLib.Camera import *
camera = Camera()
while True:
image = camera.get_frame()
markers, image = camera.detect_markers_midpoint(image)
print(markers)
print("-----------------")
camera.publish_frame(image)
Hier ist z.B. der ArUco Marker mit der ID 0. Führe das Programm aus und lass den Roboter auf den Bildschirm schauen. Das Programm sollte die 2D Position ausgeben, welcher der ArUco Marker (genauer sein Mittelpunkt) im Camera Bild hat.
.. |ArucoExample| image:: images/6x6_1000-0.png

View file

@ -48,6 +48,11 @@
<li class="toctree-l2"><a class="reference internal" href="DoubleElimination.html">Double Elimination</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Camera und OpenCV</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#dokumentation-des-camera-moduls">Dokumentation des Camera Moduls</a></li>
<li class="toctree-l3"><a class="reference internal" href="#beispiele">Beispiele</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#bild-anzeigen">Bild Anzeigen</a></li>
<li class="toctree-l4"><a class="reference internal" href="#aruco-marker-erkennen">ArUco Marker Erkennen</a></li>
</ul>
</li>
</ul>
</li>
</ul>
@ -94,47 +99,113 @@
<em class="property">class </em><code class="sig-prename descclassname">compLib.Camera.</code><code class="sig-name descname">Camera</code><a class="headerlink" href="#compLib.Camera.Camera" title="Link zu dieser Definition"></a></dt>
<dd><dl class="py method">
<dt id="compLib.Camera.Camera.detect_markers">
<code class="sig-name descname">detect_markers</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em><span class="sig-paren">)</span><a class="headerlink" href="#compLib.Camera.Camera.detect_markers" title="Link zu dieser Definition"></a></dt>
<dd><p>Funktion um die ArUco Marker in einem Bild zu erkennen.
:param image: Bild, welches die Kamera aufgenommen hat.
:return: Gibt drei Variablen zurueck. Erstens eine Liste an Postionen der „Ecken“ der erkannten Markern. Zweitens eine Liste an IDs der erkannten Markern und dritten noch Debug Informationen (diese können ignoriert werden).</p>
<code class="sig-name descname">detect_markers</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em><span class="sig-paren">)</span> &#x2192; Any<a class="headerlink" href="#compLib.Camera.Camera.detect_markers" title="Link zu dieser Definition"></a></dt>
<dd><p>Funktion um die ArUco Marker in einem Bild zu erkennen.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameter</dt>
<dd class="field-odd"><p><strong>image</strong> Bild, welches die Kamera aufgenommen hat.</p>
</dd>
<dt class="field-even">Rückgabe</dt>
<dd class="field-even"><p>Gibt drei Variablen zurueck. Erstens eine Liste an Postionen der „Ecken“ der erkannten Markern. Zweitens eine Liste an IDs der erkannten Markern und dritten noch Debug Informationen (diese können ignoriert werden).</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="compLib.Camera.Camera.detect_markers_midpoint">
<code class="sig-name descname">detect_markers_midpoint</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em><span class="sig-paren">)</span> &#x2192; tuple<a class="headerlink" href="#compLib.Camera.Camera.detect_markers_midpoint" title="Link zu dieser Definition"></a></dt>
<dd><p>Funktion um die ArUco Marker in einem Bild zu erkennen, einzuzeichnen und den Mittelpunkt der Marker auszurechnen.
:param image: Bild, welches die Kamera aufgenommen hat.
:return: Gibt zwei Variablen zurueck. Erstens eine Liste an „Markern“ und zweitens das Bild mit den eigezeichneten Marken.</p>
<code class="sig-name descname">detect_markers_midpoint</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em><span class="sig-paren">)</span> &#x2192; Tuple<span class="p">[</span>List<span class="p">[</span><a class="reference internal" href="#compLib.Camera.Marker" title="compLib.Camera.Marker">compLib.Camera.Marker</a><span class="p">]</span><span class="p">, </span>Any<span class="p">]</span><a class="headerlink" href="#compLib.Camera.Camera.detect_markers_midpoint" title="Link zu dieser Definition"></a></dt>
<dd><p>Funktion um die ArUco Marker in einem Bild zu erkennen, einzuzeichnen und den Mittelpunkt der Marker auszurechnen.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameter</dt>
<dd class="field-odd"><p><strong>image</strong> Bild, welches die Kamera aufgenommen hat.</p>
</dd>
<dt class="field-even">Rückgabe</dt>
<dd class="field-even"><p>Gibt zwei Variablen zurueck. Erstens eine Liste an „Markern“ und zweitens das Bild mit den eigezeichneten Marken.</p>
</dd>
<dt class="field-odd">Rückgabetyp</dt>
<dd class="field-odd"><p>Tuple[List[<a class="reference internal" href="#compLib.Camera.Marker" title="compLib.Camera.Marker">Marker</a>], Any]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="compLib.Camera.Camera.draw_markers">
<code class="sig-name descname">draw_markers</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em>, <em class="sig-param"><span class="n">corners</span></em>, <em class="sig-param"><span class="n">ids</span></em><span class="sig-paren">)</span><a class="headerlink" href="#compLib.Camera.Camera.draw_markers" title="Link zu dieser Definition"></a></dt>
<dd><p>Zeichnet die erkannten Markern mit ihren IDs in das Bild.
:param image: Original Bild, in dem die Marker erkannt wurden.
:param corners: List der Positionen der Ecken der erkannten Marker.
:param ids: IDs der erkannten Markern.
:return: Neues Bild mit den eigezeichneten Markern.</p>
<code class="sig-name descname">draw_markers</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em>, <em class="sig-param"><span class="n">corners</span></em>, <em class="sig-param"><span class="n">ids</span></em><span class="sig-paren">)</span> &#x2192; Any<a class="headerlink" href="#compLib.Camera.Camera.draw_markers" title="Link zu dieser Definition"></a></dt>
<dd><p>Zeichnet die erkannten Markern mit ihren IDs in das Bild.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameter</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>image</strong> Original Bild, in dem die Marker erkannt wurden.</p></li>
<li><p><strong>corners</strong> List der Positionen der Ecken der erkannten Marker.</p></li>
<li><p><strong>ids</strong> IDs der erkannten Markern.</p></li>
</ul>
</dd>
<dt class="field-even">Rückgabe</dt>
<dd class="field-even"><p>Neues Bild mit den eigezeichneten Markern.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="compLib.Camera.Camera.get_frame">
<code class="sig-name descname">get_frame</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#compLib.Camera.Camera.get_frame" title="Link zu dieser Definition"></a></dt>
<dd><p>Die Funktion das neuste Bild, welches die Kamera aufgenommen hat zurück.
:return: Ein „opencv image frame“</p>
<code class="sig-name descname">get_frame</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Any<a class="headerlink" href="#compLib.Camera.Camera.get_frame" title="Link zu dieser Definition"></a></dt>
<dd><p>Die Funktion gibt das neuste Bild, welches die Kamera aufgenommen, hat zurück.</p>
<dl class="field-list simple">
<dt class="field-odd">Rückgabe</dt>
<dd class="field-odd"><p>Ein „opencv image frame“</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="compLib.Camera.Camera.publish_frame">
<code class="sig-name descname">publish_frame</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">image</span></em><span class="sig-paren">)</span><a class="headerlink" href="#compLib.Camera.Camera.publish_frame" title="Link zu dieser Definition"></a></dt>
<dd><p>Sendet das Bild, welches der Funktion übergeben wird, an den Webserver, damit es der Nutzer in seinem Browser ansehen kann.
:param image: Opencv Bild, welches dem Nutzer angezeigt werden soll.
:return: None</p>
<dd><p>Sendet das Bild, welches der Funktion übergeben wird, an den Webserver, damit es der Nutzer in seinem Browser ansehen kann.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameter</dt>
<dd class="field-odd"><p><strong>image</strong> Opencv Bild, welches dem Nutzer angezeigt werden soll.</p>
</dd>
<dt class="field-even">Rückgabe</dt>
<dd class="field-even"><p>None</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="beispiele">
<h2>Beispiele<a class="headerlink" href="#beispiele" title="Link zu dieser Überschrift"></a></h2>
<div class="section" id="bild-anzeigen">
<h3>Bild Anzeigen<a class="headerlink" href="#bild-anzeigen" title="Link zu dieser Überschrift"></a></h3>
<p>Das folgende Programm fragt Bilder von der Kamera ab und schickt sie an den Webserver, der im Hintergrund läuft. Der Benutzer kann dann auf die Webseite: <a class="reference external" href="http://raspi_ip:9898">http://raspi_ip:9898</a> gehen und die Ausgabe der Kamera sehen.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">compLib.Camera</span> <span class="kn">import</span> <span class="o">*</span>
<span class="n">camera</span> <span class="o">=</span> <span class="n">Camera</span><span class="p">()</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">camera</span><span class="o">.</span><span class="n">get_frame</span><span class="p">()</span>
<span class="n">camera</span><span class="o">.</span><span class="n">publish_frame</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
</pre></div>
</div>
</div>
<div class="section" id="aruco-marker-erkennen">
<h3>ArUco Marker Erkennen<a class="headerlink" href="#aruco-marker-erkennen" title="Link zu dieser Überschrift"></a></h3>
<p>In diesem Programm werden die ArUco Marker, die sich am Spielfeld befinden, erkannt. Diese „QR-Code“ ähnlichen Marker finden sich in den Logistikzonen und können dazu verwendet werden zu erkennen, wo der Roboter hinfahren sollt etc.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">compLib.Camera</span> <span class="kn">import</span> <span class="o">*</span>
<span class="n">camera</span> <span class="o">=</span> <span class="n">Camera</span><span class="p">()</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">camera</span><span class="o">.</span><span class="n">get_frame</span><span class="p">()</span>
<span class="n">markers</span><span class="p">,</span> <span class="n">image</span> <span class="o">=</span> <span class="n">camera</span><span class="o">.</span><span class="n">detect_markers_midpoint</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">markers</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;-----------------&quot;</span><span class="p">)</span>
<span class="n">camera</span><span class="o">.</span><span class="n">publish_frame</span><span class="p">(</span><span class="n">image</span><span class="p">)</span>
</pre></div>
</div>
<p>Hier ist z.B. der ArUco Marker mit der ID 0. Führe das Programm aus und lass den Roboter auf den Bildschirm schauen. Das Programm sollte die 2D Position ausgeben, welcher der ArUco Marker (genauer sein Mittelpunkt) im Camera Bild hat.</p>
</div>
</div>
</div>

View file

@ -114,6 +114,11 @@
</li>
<li class="toctree-l1"><a class="reference internal" href="classes/Opencv.html">Camera und OpenCV</a><ul>
<li class="toctree-l2"><a class="reference internal" href="classes/Opencv.html#dokumentation-des-camera-moduls">Dokumentation des Camera Moduls</a></li>
<li class="toctree-l2"><a class="reference internal" href="classes/Opencv.html#beispiele">Beispiele</a><ul>
<li class="toctree-l3"><a class="reference internal" href="classes/Opencv.html#bild-anzeigen">Bild Anzeigen</a></li>
<li class="toctree-l3"><a class="reference internal" href="classes/Opencv.html#aruco-marker-erkennen">ArUco Marker Erkennen</a></li>
</ul>
</li>
</ul>
</li>
</ul>

File diff suppressed because one or more lines are too long