Kategorie: ARM

Keine Wanze am Handgelenk – das Android-Wear Smartwatch Mikrofon und die Spracherkennung abschalten


Eine ebenso bequeme wie vielleicht auch erschreckende Fähigkeit von Smartwatches ist die eingebaute Bedienung per Spracherkennung.

Für Android Wear hat Google gar nicht vorgesehen, dass die Spracherkennung sinnvoll deaktivierbar ist. Nur im Flugmodus, in dem die Uhr gänzlich an der Kommunikation gehindert wird, ist auch die Spracherkennung deaktiviert. In diesem Modus ist aber keine sinnvolle Nutzung der Smartwatch möglich, selbst die Zeit wird nach einer Weile nicht mehr zuverlässig angezeigt, was bei einer Uhr eine Katastrophe ist. Es ist anzunehmen, dass Apple bei der Apple Watch ähnlich verfährt.

Eine Suche nach einer Möglichkeit zur Deaktivierung der Spracherkennung bei Android Wear ergab nur zwei Hits, einen bei xda-Developer und einen bei Android-hilfe.de. Beides Anfragen nach einem solchen Feature aber keine hilfreichen Antworten. Offensichtlich gehöre ich zu der Minderheit der Nutzer, die keine Abhörwanze mit sich herumtragen möchten. Ich halte Spracherkennung für ein sehr nützliches Feature und habe mich in meiner Forschungtätigkeit ausfürlich damit beschäftigt (siehe hier und hier)  aber ich möchte Sprachsamples von mir nicht in der Cloud bei Google gespeichert haben.

Aktiv ist die Spracherkennung immer, wenn die Uhr, bzw. der Arm angehoben wird, da sie dann auch per Keyword „Ok Google“ aktiviert wird. Die Kunstpause, die entsteht wenn ein Suchwort gesprochen wird, deutet darauf hin, dass die Sprachverarbeitung in der Cloud erfolgt. Da die Erkennung immer läuft, kann eine Wear-Smartwatch meiner Meinung nach auf nichtöffentlichen Sitzungen oder bei privaten Gesprächen gar nicht verwendet werden.

Auch der mögliche Missbrauch durch Menschen in Sprechweite, andere Apps oder Radio- und Fernsehton mit “OK Google wähle 0900-XXX” muss bedacht werden. Eine dauerhaft aktivierte Spracherkennung ist wie eine offene Konsole, an der jeder beliebige Kommandos eingeben kann.

Um Abhilfe zu schaffen, habe ich eine kleine Android Wear App geschrieben, welche das Mikrofon stummschaltet. Die Smartwatch ist damit weiterhin nutzbar für Notifikationen und andere Applikationen, die kein Mikrofon erfordern.

Die App kann hier im Play-Store heruntergeladen werden. Sie installiert eine Wear-App mit dem Namen „Mute Wear Mic“ auf der Smartwatch, die per Checkbox das Mikrofon abschaltet. Ihre Privatsphäre und die Ihrer Freunde und Kollegen wird mit dieser App geschützt. Um die Spracherkennung wieder einzuschalten, muss die App erneut aufgerufen und das Häkchen erst gesetzt und dann wieder entfernt werden.

Update: Die App funktionierte zunächst nicht mit der Moto360 von Motorola, da alle Motorola-Androidgeräte den Systemaufruf zum “muten” des Mikrofons nicht unterstützen. Nun ist die App um ein spezieller Verfahren für Motorola ergänzt worden. Ich benötige aber noch Rückmeldungen von Motorola Nutzern.

Die App erfordert Rechte zur Änderung der Audioeistellungen.

Meine “mute wear mic” App

Wirklich 100% sicher, dass die Smartwatch nicht mithört kann man dann leider auch nicht mehr sein, da die NSA  mit dem Projekt Irritant Horn an einem Verfahren gearbeitet hat, welches per Man-in-the-Middle die App-Stores von Google und Samsung manipulieren sollte.

Schade ist allerdings, dass immer mehr Nutzern Ihre Privatsphäre egal ist, da Sie davon ausgehen, dass die NSA eh an alle Daten kommt. Oder Ihnen ist Ihre Privatsspäre zugunsten von etwas Komfort egal. Interessant ist,  was Edward Snowden kürzlich dazu beigetragen hat:

Wenn Du meinst Privatshäre ist egal, nur weil Du nichts zu verbergen hast, kannst  Du genauso behaupten, Redefreiheit ist egal, nur weil Du nichts zu sagen hast!

Sprich Freund und tritt ein – Sprachausgabe für den Raspberry Pi mit eSpeak und SVOX-pico


Embedded Computer sind je nach Einsatzgebiet häufig nicht mit Bildschirmen oder Displays ausgestattet. Wenn sie aber in wechselnden Umgebungen mit oder ohne DHCP eingesetzt werden, ergibt sich häufig die Anforderung einmal schnell die bezogene oder eingestellte IP-Adresse herauszufinden. Natürlich lässt sich dieses Problem komfortabel mit DynDNS lösen, wenn der Rechner auch wirklich mit dem Internet verbunden ist. Ansonsten bleibt immer nur die Suche nach einem neuen Netzwerkgerät im Webinterface des Routers.

Diese Anforderung hatte ich selber ursprünglich für einen mobilen Roboter, der sich in wechselnden Umgebungen bzw. WLAN-Netzen bewegen konnte und per Webinterface bedient wurde. Um den Roboter initial zu finden, musste die IP-Adresse bekannt sein.
Aber auch für Zwecke der Heimautomatisierung eingesetzte Mini-Rechner müssen nicht immer mit Display betrieben werden. Für die Ausgabe seltener Störungen bietet sich das Audio-Interface, also die Soundkarte, als preiswerte und stromsparende Alternative an.

Mein mobiler Activemedia Pioneer 3AT Roboter mit Sprachausgabe 2006 FernUni in Hagen, damals realisiert mit MBROLA

Computergenerierte künstliche Sprachausgabe wird mit sogenannter Text-to-Speech-Software TTS realisiert. Diese Software setzt mit Hilfe von umfangreichen Aussprache-Lexika oder Heuristiken (Regeln) für die Zielsprache geschriebenen Text zunächst in eine Abfolge einzelner Laute (Phoneme) um. Die einzelnen Laute, bzw. deren Kombinationen werden entweder von einem Menschen bei der Erstellung der Software eingesprochen oder ebenfalls synthetisch (Signalsynthese oder Formantsynthese) erzeugt. Neuere Systeme basieren auf einem umfangreiche Wortschatz an von einem Menschen gesprochenen Worten, so das eine nahezu natürliche Sprache generiert werden kann. Selbst die Herausforderung eine natürliche Sprachmelodie (Prosodie) zu erzeugen, scheinen moderne kommerzielle Systeme zu meistern. Nun erfordert so eine hochqualitative Sprachdatenbank sehr viel Speicherplatz und ist aufwändig und teuer zu produzieren. Trotz allem gibt es im Open-Source-Bereich brauchbare und auch schlanke freie TTS-Programme. Eine sehr Ressourcen-sparende  TTS-Software ist eSpeak. Diese Software wurde ursprünglich auf einem Acorn RISC_OS Computer, also auch auf einer ARM-Architektur, entwickelt und eignet sich durch Ihre Kompaktheit, Ausführungsgeschwindigkeit und geringen Speicherbedarf besonders für Embedded Systeme. Außerdem unterstützt espeak über 20 Sprachen. An die Aussprache muss man sich etwas gewöhnen, sie ist aber verständlich.

Die auf dem Raspberry-Pi verwendete Debian-Variante Rasbian unterstützt eSpeak out-of-the-box.

Mit

sudo apt-get install espeak

ist die Installation erledigt. Die Ausgabe testen kann man testen, nachdem man das Audiointerface auf den Klinkenstecker per Alsamixer umgestellt hat. Default ist beim Rasberry PI Audioausgabe über HDMI. In /etc/config.txt kann das aber auch fest eingestellt werden.

sudo amixer cset numid=3 1

espeak -vde "hallo welt hier spricht der räspberri pei"

Wenn keine Option -w angegeben wird, gelangt die Ausgabe direkt an das Audio-Device /dev/dsp .

Höhere Sprachqualität mit SVOX-Pico

Eine Alternative mit der derzeit besten Sprachqualität im Open-Source-Bereich stellt die SVOX-Pico-TTS-Engine dar. Vielleicht kommt dem einen oder anderen Nutzer die Stimme bekannt vor. SVOX-Pico ist die in den Android-Versionen 2.1-2.3 eingesetzte Default-Sprachausgabe. Die neue, ab der Version 4.0 von Google für Android eingesetzte TTS-Engine, basiert leider auf Closed-Source-Software. Die SVOX-Pico TTS-Engine ist übrigens auch die Default-Engine für meine Wikipedia-Sprachausgabe Pediaphon und unterstützt neben Englisch (UK und US), Deutsch, Französisch auch Italienisch und Spanisch in hoher Qualität.

SVOX-Pico liegt als Open-Source vor, ist auf diverse Linux-Varianten portiert worden und lässt sich z.B. unter Ubuntu einfach mit sudo apt-get install pico2wave installieren. Für Raspbian muss das Paket selber kompiliert werden. Alternativ können Sie mein Debian-Paket für Rasbian ARM einfach herunterladen (MD5-Hash: b530eb9ff97b9cf079f622efe46ce513) und mit den Kommandos


apt-get install libpopt-dev
sudo dpkg --install pico2wave.deb

auf dem Rasberry Pi installieren. Das libpopt-dev ist ebenfalls erforderlich.
Mit

sudo amixer cset numid=3 1
pico2wave --lang=de-DE --wave=/tmp/test.wav "hallo welt hier spricht der räspberri pei"; play /tmp/test.wav;rm /tmp/test.wav

können Sie die Sprachausgabe testen.

Mit

sudo apt-get remove pico2wave

kann man das Debian-Paket auch wieder sauber deinstallieren.
Wer selber kompilieren möchte, muss neben know how etwas Geduld mitbringen.
Um die Quellen zu kompilieren ist neben automake auch das libtool erforderlich:

git clone -b upstream+patches git://git.debian.org/collab-maint/svox.git svox-pico
apt-get install automake libtool libpopt-dev
automake
./autogen.sh
./configure
make all
make install

Alternativ kann man auch ein direkt ein Debian-Paket bauen, dass auch sauber wieder aus dem System entfernt werden kann.
Ich habe zusätzlich für mein Binary die GCC-Optionen
-mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard
passend für den Raspberry Pi angepasst, damit auch die Hardware floation-point Unterstützung genutzt wird.

Um dann z.B. beim Bootvorgang automatisch die IP-Adresse des Pis zu sprechen, habe ich in der /etc/rc.local folgende Kommandos eingefügt:

/usr/bin/amixer cset numid=3 1
/usr/bin/espeak -vde "meine ei pie Adresse lautet $_IP"

Sicherlich lassen sich noch eine Menge anderer sinnvolle Anwendungen für eine Sprachausgabe auf dem PI finden. Mit seinen Sensoren kann der Pi auch als ein preiswertes Hilfsmittel für Blinde-Nutzer eingesetzt werden.

Raspberry Pi versus Cray XT 6m Supercomputer – MD5-Hash-Kollisionen berechnen mit dem Raspberry Pi


Der Raspberry Pi ist ein kleines Board mit ARM11- Prozessor (ein ARM1176JZF-S um genau zu sein, mit ARMv6 Befehlssatz), welches über einen 100 Mbit Ethernet-Port, HDMI, Analog Video, GPIO-Pins, SPI, I²C, UART und zwei USB-Schnittstellen verfügt. Der Prozessor ist übrigens identisch mit dem Im Apple iPhone der ersten Generation verbauten CPU.

Das kommt in der Verpackung, eine SD-Karte ist nicht dabei.

Das Besondere ist der Preis, der Raspberry Pi kostet nur 25-30$ und ist für den Einsatz in Schulen vorgesehen. In England ist er inklusive T-Shirt und Versand nach Deutschland für 34 € zu haben. Aufgrund seiner niedrigen Leistungsaufnahme von nur 3,5 Watt (lüfterlos und ohne Kühlkörper), seiner geringen Größe (etwa Kreditkartenformat, aber durch die Konnektoren ca. 1,5 cm hoch) und des günstigen Preises eignet sich der Raspberry Pi für energiesparende Bastelprojekte wie etwa ein NAS, einen kleiner Router oder ein eigenes kleines Mediacenter. Als Massenspeicher fungiert eine SD-Karte, die beispielsweise mit einer angepassten Linux-Version, wie z.B. Raspbian “wheezy”, einem modifizierten Debian, bespielt werden kann. Die Distribution bringt ein modernes Linux mit Desktop und einem schlanken und modernen Webkit-basierten Browser (Midori) mit. Obwohl der Raspberry nicht für so einen Anwendungsfall vorgesehen ist, kann man doch recht ordentlich damit im Internet surfen!

T-Shirt inklusive, der Raspberry Pi

Die Verwendung der angepassten Distribution ist sehr zu empfehlen, da diese Version im Gegensatz zu den Debian-ARM Versionen die Hardware Floating-Point-Unterstützung des ARM11 auch wirklich ausnutzen. Bei der Übersetzung von Source-Paketen sollte auch immer die GCC Compiler-Optionen

-mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard

angegeben werden, damit wirklich die Hardware-Floating-Point Unterstützung aktiviert wird. Ansonsten werden die Floating-Point-Operationen per Library in Software durchgeführt, was naturgemäß sehr viel länger dauert (Faktor 10). Die Ubuntu-Arm Distribution ist übrigens nicht für den Raspberry Pi geeignet, da sie als Mindestanforderung den ARMv7-Befehlssatz (ab ARM Cortex A8) voraussetzt.

Kleine ARM-Kunde und Tablet-Tipps

ARM-Prozessoren, bzw. von den Herstellern in System on  a Chip (SoC)  integrierte ARM-Kerne, treiben übrigens so ziemlich alle aktuellen Android Smartphones und Tablets an. Auch die Apple-A5 SoC im iPhone und iPad verwenden ARM-Prozessorkerne. Übrigens sind neben dem Hauptprozessor für die Benutzerschnittstelle (auf dem das Android oder das  iOS läuft) auch fast immer mehrere zusätzliche ARM-Kerne in einem Mobiltelefon verbaut. Leistungsschwächere, aber energiesparende “kleinere” ARM-Varianten werden beispielsweise für den Kommunikationsprozessor (das “Radio”) des Telefons eingesetzt, welcher die GSM und UMTS-Kommunikation abwickelt. Auch in fast allen Bluetooth-Chipsätzen und  GPS-Chipsätzen steckt jeweils ein weiterer kleiner ARM-Kern. Die Wahrscheinlichkeit ist also sehr hoch, dass in Ihrem Smartphone vier oder mehr ARM-Kerne in Chipsätzen “verbaut” sind.

Die Nummerierung der Befehlssätze ARMvX darf nicht mit der der Bezeichnung der Architektur verwechselt werden, siehe auch http://de.wikipedia.org/wiki/ARM-Architektur. Übrigens findet sich hier eine schöne Zuordnung von ARM-Befehlssatzversionen zu den korrespondierenden ARM-Architekturen und den zugehörigen Handelsnamen der SoC ARM-Implementierungen einiger Hersteller. Diese Aufstellung kann bei der Auswahl eines Android-Tablets in Hinsicht auf zu erwartende CPU-Leistung sehr hilfreich sein. (Unterhalb Cortex A8 [ARMv7] – Finger weg!)  Brauchbare Tablets mit Cortex A8 sind schon für knapp über 100 Euro erhältlich. Eine dem iPad 3 vergleichbare Performance kann aber erst einem Cortex A9 (auch ARMv7) basierten Gerät mit mehreren Kernen abverlangt werden.

Der Desktop der Raspbian “wheezy” Distribution, Midori Webbrowser inklusive, auf meinem Beamer

MD5-Hash-Kollision

Um die Leistungsfähigkeit der ARM11-Prozessors (AMRv6) auf die Probe zu stellen, habe ich keinen klassischen Benchmark eingesetzt, sondern mir die MD5 Collision Demo von Peter Selinger vorgenommen und die Quellen für den Raspberry Pi kompiliert. Hier bei handelt es sich um einen Algorithmus, der einen Angriff auf einen  MD5 Hashwert vornimmt und eine Kollision erzeugt. Mit so einer Hash-Kollision kann zweites Dokument oder ein zweites Binary erzeugen werden, dass einen identischen MD5 Hash zu einer Originaldatei besitzt. Der Algorithmus startet immer mit einem Zufallswert für die Berechnung einer Hash-Kollision, so dass es immer unterschiedlich lange dauert bis eine Kollision gefunden wird. Startet man den Prozess aber mehrmals auf einer Maschine mit mehreren Kernen, so steigt die Wahrscheinlichkeit recht schnell an ein Ergebnis zu kommen. Der Algorithmus parallelisiert also nicht die selber die Berechnung, sondern profitiert vom abweichenden Zufallsstartwert auf jedem Kern.

PC versus …

Ausprobiert habe ich das zunächst mit meinem single core Atom Netbook (2 Stunden 46 Minuten) und dann mit einer 8-Kern-Maschine (zwei Xeon Quad Core Prozessoren), dem Publikumsrechner des ZIM für Mitarbeiter der Hochschule. Diese Maschine benötigte nur 16 Minuten und 6 Sekunden um eine Kollision zu finden. Wohlgemerkt einer der Kerne hatte eine Kollision gefunden, der letzte Kern benötigte fast drei Stunden. (siehe Abbildung)

Das top-Kommando (“1″ drücken um alle Kerne zu sehen, 8 Kerne ausgelastet)

… CRAY versus ….

Den Cray XT 6m Supercomputer der Universität Duisburg-Essen konnte ich bereits im Juni 2010 mit der gleichen „Rechenaufgabe“ testen. Ich hatte seinerzeit allerdings nur 300 der insgesamt 4128 Kerne zur Verfügung, einer der Kerne fand nach 56 Sekunden eine Hash-Kollision. Auf der Cray kann ein Job automatisiert auf allen zur Verfügung stehenden Kernen gestartet werden.

Cray Supercomputer

Cray Supercomputer der Universität Duisburg Essen

… Raspberry PI

Und der gute Raspberry Pi? Ein Testlauf brachte nach 30 Stunden und 15 Minuten eine Hash-Kollision zum Vorschein. Wie beschrieben, es ist kein wirklicher Benchmark, es kann einfach Pech gewesen sein, dass es solange gedauert hat. Zwei weitere Durchgänge endeten nach 19Stunden 10 Minuten und 29 Stunden und 28 Minuten. Aber wie sieht denn nun die Energiebilanz des Raspberrys im Vergleich mit der Cray aus?

Preiswerter und leiser aber deutlich langsamer ;-) als ein Cray Supercomputer bei etwa gleichem Energieverbrauch bezogen auf die Rechenleistung

Die zwei Cray-Schränke an der Universität Duisburg-Essen benötigen je 40kW und die erzeugte Wärme per Klimatisierung abzuführen wird jeweils die gleiche Leistung benötigt. Also insgesamt 160 KW bzw. umgerechnet auf den im Experiment genutzten Anteil der 300 Kerne ca. 11.6 KW. Der Energieverbrauch in 56 Sekunden beträgt dann 0,18 KWh. Der Raspberry Pi nimmt eine Leistung von 0,0035 KW auf und verbraucht daher in 30,25 Stunden 0,106 KWh. Wenn man die Klimatisierung nicht berücksichtigen würde, ergäbe sich überraschenderweise ein etwa ähnlicher Energieverbrauch pro Rechenleistung!