This repository has been archived on 2025-06-01. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
compLIB/lib/classes/Opencv.html
2023-02-10 11:37:24 +01:00

265 lines
No EOL
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="writer-html5" lang="de" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Camera und OpenCV &mdash; CompLib 0.2.3 Dokumentation</title><link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Stichwortverzeichnis" href="../../genindex.html" />
<link rel="search" title="Suche" href="../../search.html" />
<link rel="next" title="Hardware" href="../../other/hardware.html" />
<link rel="prev" title="Double Elimination" href="DoubleElimination.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html"><img src="../../_static/compair-logo-white.svg" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Dokumentation durchsuchen" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../gettingStarted/index.html">Erste Schritte</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../software/installation.html">Installationsanweisungen</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../faq.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../other/usage.html">Beispiele</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">compLib</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Motor.html">Motoren</a></li>
<li class="toctree-l2"><a class="reference internal" href="Encoder.html">Encoder</a></li>
<li class="toctree-l2"><a class="reference internal" href="IRSensor.html">Infrarot Sensoren</a></li>
<li class="toctree-l2"><a class="reference internal" href="Seeding.html">Seeding</a></li>
<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>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../other/hardware.html">Hardware</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">CompLib</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../index.html">compLib</a> &raquo;</li>
<li>Camera und OpenCV</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/lib/classes/Opencv.rst.txt" rel="nofollow"> Quelltext anzeigen</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="camera-und-opencv">
<span id="lib-camera"></span><h1>Camera und OpenCV<a class="headerlink" href="#camera-und-opencv" title="Link zu dieser Überschrift"></a></h1>
<div class="section" id="dokumentation-des-camera-moduls">
<h2>Dokumentation des Camera Moduls<a class="headerlink" href="#dokumentation-des-camera-moduls" title="Link zu dieser Überschrift"></a></h2>
<dl class="py class">
<dt id="compLib.Camera.Marker">
<em class="property">class </em><code class="sig-prename descclassname">compLib.Camera.</code><code class="sig-name descname">Marker</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">id</span><span class="p">:</span> <span class="n">int</span></em>, <em class="sig-param"><span class="n">x</span><span class="p">:</span> <span class="n">float</span></em>, <em class="sig-param"><span class="n">y</span><span class="p">:</span> <span class="n">float</span></em><span class="sig-paren">)</span><a class="headerlink" href="#compLib.Camera.Marker" title="Link zu dieser Definition"></a></dt>
<dd></dd></dl>
<dl class="py class">
<dt id="compLib.Camera.Camera">
<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> &#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<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> &#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> &#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.</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>
<p><img alt="ArucoExample" src="../../_images/6x6_1000-0.png" /></p>
<p>Um die Positionen zu verarbeiten, muss dann nur noch das „markers“ array durchgegangen werden. Das könnte z.B. so gemacht werden:</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="k">for</span> <span class="n">marker</span> <span class="ow">in</span> <span class="n">markers</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Marker mit der id: </span><span class="si">{</span><span class="n">marker</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ist auf der X Position: </span><span class="si">{</span><span class="n">marker</span><span class="o">.</span><span class="n">x</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;und auf der Y Position: </span><span class="si">{</span><span class="n">marker</span><span class="o">.</span><span class="n">y</span><span class="si">}</span><span class="s2">&quot;</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>Wichtig ist noch zu beachten, dass die X und Y Positionen ihren Ursprung in der linken oberen Ecke des Bildes haben. D.h. die Position (0,0) ist im oberen linken Bildrand.</p>
</div>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="DoubleElimination.html" class="btn btn-neutral float-left" title="Double Elimination" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Zurück</a>
<a href="../../other/hardware.html" class="btn btn-neutral float-right" title="Hardware" accesskey="n" rel="next">Weiter <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2022, Verein zur Förderung von Wissenschaft und Technik an Schulen (F-WuTS).</p>
</div>
Erstellt mit <a href="https://www.sphinx-doc.org/">Sphinx</a> mit einem
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
bereitgestellt von <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>