145 lines
No EOL
7.1 KiB
PHP
145 lines
No EOL
7.1 KiB
PHP
<?php
|
|
include "../internal/mysql.php";
|
|
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Installation von Snowboy - Jonas Leder</title>
|
|
|
|
<link href="/css/style.css" rel="stylesheet">
|
|
<link href="/css/normalize.css" rel="stylesheet">
|
|
<link href="/css/sourcesanspro.css" rel="stylesheet">
|
|
<link href="/css/menue.css" rel="stylesheet">
|
|
<link href="/css/prism.css" rel="stylesheet">
|
|
<script src="https://kit.fontawesome.com/038c6c1f0e.js" crossorigin="anonymous"></script>
|
|
|
|
<!-- Matomo -->
|
|
<script type="text/javascript">
|
|
var _paq = window._paq = window._paq || [];
|
|
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
|
_paq.push(["setCookieDomain", "*.jonasled.de"]);
|
|
_paq.push(['trackPageView']);
|
|
_paq.push(['enableLinkTracking']);
|
|
(function() {
|
|
var u="//matomo.jonasled.de/";
|
|
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
|
_paq.push(['setSiteId', '1']);
|
|
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
|
g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
|
})();
|
|
</script>
|
|
<noscript><p><img src="//matomo.jonasled.de/matomo.php?idsite=1&rec=1" style="border:0;" alt="" /></p></noscript>
|
|
<!-- End Matomo Code -->
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div class="header-wrapper">
|
|
<div class="header-homepage color-overlay" data-parallax-depth="20">
|
|
<div class="header-description gridContainer content-on-center">
|
|
<div class="row header-description-row">
|
|
<div class="header-content header-content-centered">
|
|
<div class="align-holder">
|
|
<h1 class="heading8">Installation von Snowboy</h1>
|
|
<p class="header-subtitle"> </p>
|
|
<div class="header-buttons-wrapper"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="header-separator header-separator-bottom ">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 100" preserveAspectRatio="none">
|
|
<path class="svg-white-bg" d="M737.9,94.7L0,0v100h1000V0L737.9,94.7z"></path>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
<div id="mainMenu" includeHTML="/include/menue.php?page=projekte"></div>
|
|
</header>
|
|
<div id="content">
|
|
<p>Heute stelle ich mal kein Projekt in dem Sinne vor wie sonst, sondern schreibe viel mehr eine Anleitung zur Installation von Snowboy, da dich viele Probleme dabei hatte und im Internet auch relativ wenig dazu stand. Wir sind in der Schule aktuell dabei einen Smarten Lautsprecher auf Basis des Google AIY Projekts aufzubauen. Das Problem war, dass uns das Hotword "ok, google" nicht gefallen hatte. Nach ein paar Minuten googlen sind wir dann auf die Bibliothek Snowboy gestoßen, mit welcher alle Probleme gelöst werden sollten. Das Problem war nur, dass wir die Bibilothek nicht kompiliert bekommen haben. Die folgende Anleitung sollte auf allen Linux Maschinen (Raspberry Pi, Ubuntu, Debian, ...) laufen. Es kann aber vorkommen dass noch vereinzelt weitere Pakete installiert werden müssen. In der folgenden Anleitung verwende ich eine Aktuelle LinuxMint Tara Version mit allen Updates von 1.Dezember 2018.</p>
|
|
<p>Kommen wir nun zur Installationsanleitung:</p>
|
|
<p>1.Updates installieren:</p>
|
|
<pre><code class="language-bash">sudo apt update && sudo apt upgrade -y</code></pre>
|
|
<p>2.Dependencies installieren:</p>
|
|
<pre><code class="language-bash">sudo apt install -y python-pyaudio python3-pyaudio sox libatlas-base-dev gcc make wget libpcre3 libpcre3-dev build-essential git python3-setuptools python3-dev autotools-dev automake</code></pre>
|
|
<p>3.Swig und pcre herunterladen und kompilieren</p>
|
|
<pre>
|
|
<code class="language-bash">
|
|
wget http://downloads.sourceforge.net/swig/swig-3.0.12.tar.gz
|
|
tar -xovzf swig-3.0.12.tar.gz
|
|
cd swig-3.0.12
|
|
wget https://sourceforge.net/projects/pcre/files/pcre/8.42/pcre-8.42.tar.gz
|
|
./Tools/pcre-build.sh
|
|
./autogen
|
|
./configure
|
|
make
|
|
sudo make install
|
|
cd ..
|
|
</code>
|
|
</pre>
|
|
<p>4. snowboy herunterladen und kompilieren</p>
|
|
<pre>
|
|
<code class="language-bash">
|
|
git clone https://github.com/Kitt-AI/snowboy
|
|
cd snowboy
|
|
sudo python3 setup.py install
|
|
cd swig/Python3
|
|
make
|
|
</code>
|
|
</pre>
|
|
<p>Jetzt Sollte Snowboy funktionieren. Bei mir gab es leider Probleme mit den Beispielen. Ixh musste noch Zeile nr. 5 in der Datei "snowboy/examples/Python3/snowboydecoder.py" in "import snowboydetect" ändern. Eigene Hotwords können nun unter <a href="https://snowboy.kitt.ai">snowboy.kitt.ai</a> erstellt werden.</p>
|
|
<p>Viel Spaß beim weiter experimentieren mit Snowboy.</p>
|
|
<p>Kleiner Ergänzung, bei der Installation auf einem Raspberry Pi bin ich auf zwei Fehler gestoßen. Der erste war, dass der Raspberry Pi keinen direkten Mikrofon Eingang hatte. Der zweiter war dann schon etwas exotischer, ich habe nämlich meine China USB Soundkarte zum testen angeschlossen. Dort kam aber nur als Fehler "Invalid Sample Rate". Das Problem der Soundkarte ist, dass sie nur 44kHz als Abtastrate unterstützt, Snowboy braucht aber eine Abtastrate von 16kHz wie ich daraufhin nachgelesen habe. Unten sind zwei Screenshots der Fehler angefügt.</p><br>
|
|
<img src="/img/snowboy_no_mic.png">
|
|
<img src="/img/snowboy_wrong_sample_rate.png">
|
|
<h2>Kommentare:</h2>
|
|
<?php
|
|
|
|
$article = basename($_SERVER["SCRIPT_FILENAME"], '.php');
|
|
$result = $conn->query("SELECT * FROM comments WHERE article='$article'");
|
|
if ($result->num_rows > 0) {
|
|
while($row = $result->fetch_assoc()) {
|
|
$name = $row["name"] . "<br>";
|
|
$gravatar = get_gravatar($row["email"]);
|
|
$content = $row["comment"];
|
|
|
|
echo(<<<EOF
|
|
<h3 class="commentTitle">$name</h3>
|
|
<div class="comment">
|
|
<img src="$gravatar">
|
|
<article class="commentArticle">
|
|
<p class="commentText">$content</p>
|
|
</article>
|
|
</div>
|
|
EOF);
|
|
}
|
|
}
|
|
?>
|
|
|
|
<div id="newComment">
|
|
<form action="/newComment.php" method="post">
|
|
<label for="name">Name:</label><br>
|
|
<input type="text" id="name" name="name"><br><br>
|
|
|
|
<label for="email">E-Mail: (wird nicht veröffentlicht)</label><br>
|
|
<input type="text" id="email" name="email"><br><br>
|
|
|
|
<label for="comment">Kommentar:</label><br>
|
|
<textarea name="comment" id="comment"></textarea><br><br>
|
|
|
|
<input type="submit" value="Kommentar veröffentlichen"><br>
|
|
<p>Mit dem klick auf den obigen Button erklären sie sich mit der <a href="/datenschutzerklaerung.html">Datenschutzerklärung</a> einverstanden.</p>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<footer includeHTML="/include/footer.php">
|
|
</footer>
|
|
<script src="/js/includeHTML.js"></script>
|
|
<script src="/js/prism.js"></script>
|
|
</body>
|
|
</html>
|