Schlagwort-Archive: Python

Raspberry Pi mit openCV beobachtet Callibot

openCV mit dem Raspberry Pi – ein Einstieg

Sei die erste, die diesen Beitrag teilt.

Computer Vision ist der Einstieg in KI. Mit dem Raspberry Pi lassen sich handliche Geräte bauen, die mit entsprechenden Bibliotheken erstaunliche Dinge tun können. Z.B. Bienen oder LKW zählen. Als Basis lohnt der Blick auf openCV. Mittlerweile ist die Installation recht einfach.

Die Grundinstallation

Als Basis dient ein Raspberry Pi 3 B mit dem Betriebssystem Raspbian Stretch inkl Desktop, aber ohne Softwareschnickschnack. Dann passt alles so gerade auf eine 8 GB SD-Karte. Eine schnelle Karte sei empfohlen. Ebenso ist eine Raspberry Pi Kamera sinnvoll.

Die Installation erfolgt in vier Schritten:

  1. Raspbian aufsetzen
  2. Verbindung zum Raspberry Pi Desktop mit VNC aufbauen
  3. openCV für Python installieren
  4. Mit einem kleinen Python-Script die Installation testen.

Für den späteren Betrieb ist es sicher sinnvoll, auf den Desktop zu verzichten und den Raspberry headless einzurichten (Das empfehle ich meinen Studenten grundsätzlich). Bei der Entwicklung und den ersten Tests ist  für Video allerdings ein Fernzugriff auf eine grafische Benutzungsoberfläche hilfreich. Daher wird hier auf VNC gesetzt.

Raspbian aufsetzen

Zunächst laden Sie das das 3,4 GB große Image (Raspbian Stretch with desktop) und entpacken es:

https://www.raspberrypi.org/downloads/raspbian/

Auf einem Windows Rechner laden Sie WinDiskImager und brennen die SD-Karte. Auf einem Mac gelingt dies am Besten in der Konsole.:


df -h
sudo unmount disk2s1
sudo dd of=/dev/rdisk2 if=Downloads/raspbian.img bs=1m

Der Brennprozess dauert etliche Minuten.

Auf der SD-Karte finden der Rechner eine Partition „boot“. In dieser partition erzeugen Sie eine leere Datei ssh mit

nano ssh

und eine Datei


nano wpa_supplicant.conf

mit folgendem Inhalt:

# Datei wpa_supplicant.conf in der Boot-Partition (Raspbian Stretch)
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
       ssid="wlan-bezeichnung"
       psk="passwort"
       key_mgmt=WPA-PSK
}

Eine detaillierte Beschreibung finden Sie unter

https://pi-buch.info/wlan-schon-vor-der-installation-konfigurieren

Danach bindet sich der Raspberry in Ihr WLAN ein und ist über SSH erreichbar.

Die IP Adresse des Raspberrys finden Sie mit einem Tool wie Fritz Box WLAN auf dem Smartphone oder in der Konsole des Mac mit

sudo arp-scan -l

Sie können sich nun mit SSH direkt auf den Raspberry schalten mit Ihrer IP-Adresse

ssh pi@192.168.1.103

Die erste Aktion auf dem Raspberry sollte dann die Aktualisierung sein mit

sudo apt-get update
sudo apt-get upgrade

Remote Desktop einrichten

Sie benötigen zwei Komponenten: einen Serverprozess auf dem Raspberry und einen VNC-Client auf Ihrem Rechner.

Auf dem Raspberry ist unter Stretch schon der RealVNC Server installiert. Er muss nur mit

sudo raspi-config

eingeschaltet werden.

Als VNC-Client auf dem Mac funktionierte bei mir problemfrei RealVNC, alle anderen Lösungsvorschläge im Internet hakelten.

https://www.realvnc.com/de/connect/download/viewer/macos/

Eine detailliertere Beschreibung gibt es unter

https://www.elektronik-kompendium.de/sites/raspberry-pi/2111301.htm

Es empfiehlt sich, parallel ein Terminal mit SSH-Verbindung und eine Remote Desktop Sitzung gleichzeitig offen zu halten. So können im Terminal Scripte erstellt und gleich im Desktop getestet werden.

openCV installieren

Bislang war die Installation von openCV ein Abenteuer für Fortgeschrittene, mit etlichen vorbereitenden Schritten musste openCV aus den Quellen selber kompiliert werden. Eine (nicht einfache) Anleitung, wie das geht finden Sie hier:

https://blog.helmutkarger.de/raspberry-video-camera-teil-14-sw-installation-computer-vision-opencv-3-2/

Zumindest für Python 3 gibt es inzwischen eine einfache Alternative, die direke Installation mit PIP.

Die Anleitungen im Internet führten bei mir nicht direkt zum Erfolg, es war folgende Befehlskette erforderlich:

pip install --upgrade pip
sudo apt install libatlas3-base libwebp6 libtiff5 libjasper1 libilmbase12 libopenexr22 libilmbase12 libgstreamer1.0-0 libavcodec57 libavformat57 libavutil55 libswscale4 libqtgui4 libqt4-test libqtcore4
sudo pip3 install opencv-python

Danach sollte ein interaktiver Test das Ergebnis zeigen, z.B.:

pi@raspberrypi~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.4'>
>>> 

Eine Anleitung die als „Pate“ diente, ist

https://pypi.org/project/opencv-python/ , ergänzt durch

https://blog.piwheels.org/new-opencv-builds/

Erster Test

Der folgende Python Code ist auf vielen Webseiten zu finden und eignet sich als Einstieg:

# import the necessary packages
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
 
# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (320, 240)
camera.framerate = 25
rawCapture = PiRGBArray(camera, size=(320, 240))
 
# allow the camera to warmup
time.sleep(1.0)
 
# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_p$
        # grab the raw NumPy array representing the image, then initialize t$
        # and occupied/unoccupied text
        image = frame.array
 
        # show the frame
        cv2.imshow("Frame", image)
        key = cv2.waitKey(1) & 0xFF
 
        # clear the stream in preparation for the next frame
        rawCapture.truncate(0)
 
        # if the `q` key was pressed, break from the loop
        if key == ord("q"):
                break

Mit

nano bild.py

kann das Programm angelegt werden.

Ein Start erfolgt dann im Desktop über VNC-Client, so dass direkt der Videostrom kontrolliert werden kann.

Der Screenshot in Abb.1 zeigt den VNC-Client mit einem Bild 320×240 Pixel und dem geöffneten Terminal, daneben die Mac-Konsole mit SSH und dem in nano geöffneten Quelltext.

Abb. 1: Screenshot erster Test

 

Raspberry Pi mit Temperatursensor DS18B20

IoT und Webanwendungen – aktuelle Ideen für studentische Projekte

Sei die erste, die diesen Beitrag teilt.

Im Modul Webanwendungen realisieren Studierende der Hochschule Niederrhein, Fachbereich Wirtschaftswissenschaften, Projekte im Internetumfeld (inkl. IoT). Informationen zu den Rahmenbedingungen im Modul erhalten Studierende unter

http://claus-brell.de/webanwendungen.php.

Die Projektangebote für das laufende Semester sind:

  1. simpleWhatsApp (für spontane Gruppen)
    Es soll ein einfacher WhatsApp Clone erstellt werden, der die spontane Kommunikation für Gruppen ermöglicht. Der Client soll in Javascript erstellt werden, Server in PHP mit SQLite. die Oberfläche besteht aus vier Feldern: einem Namensfeld, einem Gruppenfeld, einem Nachrichteneingabefeld, einem Chatausgabefeld. Ein Nutzer trägt in die Weboberfläche lediglich einen ausgedachten Nutzernamen (z.B. JanaProudmoore99 und einen Gruppennamen z.B Karnevalsparty) ein. Sofort sieht ein Nutzer, was andere mit dem gleichen Gruppennamen so tippen. in das Nachrichteneingabefeld kann ein Nutzer nun selber Nachrichten eingeben. Je Gruppennamen werden nur die letzten 15 Nachrichten auf dem Server aufbewahrt.
  2. dataGuardian – Datenvisualisierung für Messdaten (Umweltdatennetzwerk MG)
    Aus einigen studentischen Projekten sind Datensammlungen entstanden. Im geplanten Umweltdatenmessnetzwerk Mönchengladbach werden viele Daten anfallen. Hierfür soll eine einfache generische Visualisierungsmöglichkeit geschaffen werden.Beispiel einer Visualisierung: https://cbrell.de/biene40.
    Beispiel für noch unvisualisierte Daten: https://cbrell.de/raspilab/umweltdaten.php?pin=hummel2&modus=tab
  3. showMyData – Generisches Internet-Anzeige-Modul
    Ein Raspberry Pi mit einem e-Ink-Display holt sich aus dem Internet alle 10 Minuten über einen Webservice ein Bild und stellt das dar. Das Bild ist eine einfache Darstellungen von z.B. allgemein verfügbaren Wetter- oder Börsendaten.
    DiesesSystem ließe sich leicht an  ganz unterschiedliche Fragestellungen anpassen.
  4. moveDetect Abschätzung von Aktivitätsintensität über das Internet
    Ein Projekt zu KI und Computer Vision. Ein System aus Raspberry Pi mit Kamera und Webservice beobachtet eine Situation und bewertet lediglich Veränderungen. (Stichworte: OpenCV, Kantendetektion, Canny-Algorithmus). Der Veränderung wird eine Prozentzahl zugeordnet (aktuelle Veränderung gegenüber maximal beobachtbarer). Statt einer realen Situation kann eine Video vom Einflugloch einer Bienenbeute genutzt werden. Jede Minute wird die minimale, durchschnittliche und maximale Veränderung an einen Webservice übertragen. Die Daten werden im Interne geordnet angezeigt.
  5. learningRaspi
    Ein Projekt zu KI und Computer Vision. Ziel ist, auf einem Videostream (auf jedem Bild) Objekte zu identifizieren und zu zählen. Es geht (noch) nicht darum, die Objekte zu klassifizieren.  Die Anzahl der Objekte im Bild soll an einen Webservice übertragen werden. Die Daten werden im Interne geordnet angezeigt. Vermutlich ist die Aufgabenstellung mittels OpenCV und YOLO zu lösen. Ggf. ist die Implementierung von Tensorflow Lite auf dem Raspi sinnvoll.
  6. digitalHumidor – der elektronische Zigarrenschrank
    Nichts ist schlimmer als zu feuchte oder zu trockene Zigarren. In einer Kiste soll die Temperatur und die Luftfeuchte gemessen und über das Internet dargestellt werden. Die Messung kann (für Arduino-geübte) mit einem ESP8266 (in Form von NodeMCU) erfolgen. Das Team soll sich Gedanken über einen geeigneten Alarmierungsmechanismus machen.
    Siehe auch: Tabakgarage – Eine Fallstudie für die Wirtschaftsinformatik
  7. CalliBot goes Raspi: Websteuerung für den CalliBot
    Die Plattform für den CalliopeBot wird über einen Raspbery Pi gesteuert. Der Raspberry Pi holt sich ein „Fahrprogramm“ von einem Webservice und fährt das „Fahrprogramm“ einmal ab (so ähnlich wie im Brettspiel Roborally).
    Es gibt eine einfache Online-Eingabemöglichkeit für das Fahrprogramm.
    siehe Videos zum Girls Day, google Suche: „hochschule mönchengladbach girls day calliope youtube“.
  8. Infokiosk für den stationären Handel
    Zusammenführung der Projekte InKi und iKiosk zu einem funktionierenden Prototypen mit einheitlicher Schnittstelle.
  9. eyePi – Augen für den CalliBot
    Analog zum Anki Cozmo sollen „emotionale Zustände“ über Augen visualisiert werden. Dazu ist ein Anzeigemedium (128 x 64 Pixel, entweder als App auf dem Smartphone oder Mini-Display mit Raspberry oder Ajax-Anwendung) zu programmieren, das einen emotionalen Zustand von einem Webservice holt und visualisiert.
    Die passenden Webservices und eine Eingabemöglichkeit für die emotionalen Zustände sind zu erstellen.
    Eine alternative Nutzungsform (auf einem Tablet, „Cozmo-like-eyes“) wäre die Funktion als eye-Catcher für Schaufenster im stationären Handel. Hier wäre es sinnvoll, wenn die Augenbewegungen einem Schaufensterbummler vor dem Schaufenster folgen würden.
  10. SMS-Web-Gateway
    Mit einem Raspberry Pi und einem UMTS-Stick wird ein Gateway aufgebaut. Das Gateway hat eine Telefonnummer. An diese Telefonnummer kann man eine SMS schicken. Das Gateway überträgt die SMS an einen Webservice. Die 10 letzten SMS werden auf einer Übersichtsseite im Internet dargestellt (mit Absender und Uhrzeit).
  11. particlePi – Feinstaub Messstation für das Umweltdatennetzwerk Mönchengladbach
    Demonstrator für das Umweltdatenmessnetzwerk MG.
    Mit einem Raspberry Pi und einem Feinstaubsensor soll eine System mit folgenden Eigenschaften aufgebaut werden:
    * Messung der Feinstaubdaten alle 10 Minuten, Speicherung auf SD-Karte.
    * headless Betrieb
    * Gesamtsystem geeignet für mehrere Messstationen (Anzahl vorher nicht bekannt)
    * Übertragung der Daten ins Internet jede Stunde.
    * grafische Aufbereitung der Daten im Internet.
  12. Raspberry Internet-Wetterstation
    Mit einem Raspberry Pi und einem 7 Zoll Display soll eine Wetterstation aufgebaut werden. Die Wetterstation als Gesamtanwendung zeigt die aktuellen Wetterdaten der Region (anhand der IP Adresse) in Textform und „Ü50-Buchstaben“ an.
    * Webservice, der Wetterdaten im Internet sammelt und aufbereitet
    * schlanke Webschnittstelle zu Raspberry (REST, http GET, Daten im CSV-Format, Aktualisierung alle 10 Minuten)
    * headless Betrieb, einfaches Plug-und Play System
    * Raspberry zeigt Daten lediglich an.
  13. QR-Code-Schnitzeljagd
    Demonstrator für Gamification der Verkaufsförderung im stationären Handel oder zum Einsatz in Naturschutzgebieten.
    Anwendung auf dem Smartphone (Android-Studio oder X-Code oder Xamarin). Das Smartphone holt sich beim Start eine Liste von QR-Codes (mit gestuften Findehinweisen und Geokoordinaten) von einem Webserver. Der Nutzer macht sich der Anwednung bekannt durch einen Spielernamen. Der Nutzer bekommt eine Liste der QR-Codes mit jeweiliger Entfernung vom eigenen Standort. Durch Klick auf den Code bekommt der Nutzer Findehinweise. Hat ein Nutzer den QR-Code gefunden, kann er ihn scannen. Das wird auf einem Webservice registriert. Der Nutzer erhält dafür einen Fortschritt ( z.B. 4 von 10 QR-Codes gefunden). Die QR-Codes liegen auf dem Webservice in einer SQLite-Datenbank. Dazu gibt es eine minimalistische Administratonsseite (Anlegen, Ansehen, Ändern, Löschen). Es wird gelogt, wann welcher Nutzer welchen QR-Code gescannt hat. Für die Logdaten gibt es auf dem Server eine Übersichtsseite.
    * geolocation erfassen auf dem Smartphone.
    * Entfernungen berechnen.
    * Webservice aufrufen
    * QR-Codes Scannen
    Geeignet für Teams, die schon einmal eine Android-App geschrieben haben.
  14. PflanzenFreund
    Beleuchtungssteuerung über das Internet mit dem Raspberry Pi
    Die Anwendung soll mittels einer LDR die Belichtung in der Nähe einer Pflanze messen. Dann soll der Sollwert aus dem Internet mittels Webservice geladen werden. Ist der gemessene Wert kleiner, so soll eine Lampe mittels 433 MHz Sender eingeschaltet werden. Das soll nur tagsüber geschehen.
  15. PowerBank-Checker
    Reale Kapazitäten von Powerbanks bestimmen mit dem Raspberry Pi
    Es wird eine „Last“ mit einer Glühlampe (0,4 A bei 5 Volt), einer Leuchtdiode, und einer LDR zum Messen zur Verfügung gestellt. Der Raspberry soll jede Minute an einen Webservice übermitteln, ob die LED noch leuchtet. Die Gesamtleuchtdauer soll geeignet grafisch dargestellt werden, auch während der Messung. Drei verschiedene Spannungsquellen (Aldi-Powerbank 5Ah, Pearl Powerbank 10 Ah, Paket mit 4 Eneloops mit 2 Ah) sollen vermessen werden.
  16. ideaCollector
    Ausgangssituation: Spontane Ideen, gefundene Zitate und Links, mündliche Mitteilungen … gehen verloren oder stehen nicht auf allen eigenen Geräten zur Verfügung.
    Lösungsansatz: webbasierte Textschnipselsammlung. Über ein einfaches, responsive Interface können Ideen festgehalten werden.
    Technik: REST Schnittstelle, um ggf. auch eine App ankoppeln zu können. Datensparsam mit Javascript / AJAX.
    Anforderungen: Mehrbenutzerfähig (keine explizite Nutzerverwaltung), eigene Ideen chronologisch auflisten, Grafik mit Ideenstatistik.
  17. Zugangskontrolle für den Internet-Meisenkasten
  18. Fledermauskasten 4.0 – Optische Überwachung mit Bewegungsmelder und IR-Kamera
  19. Internet-Verlängerung für Funksteckdosen – IoT-lite und smart home
  20. Javascript Geotracker
  21. Wissensmanagement und Kollaboration mit Etherpad Lite auf dem Raspberry Pi
    Auf dem Raspberry Pi ist eine headless Server mit Etherpad Lite zum Laufen zu bringen (Achtung: node.js). Es sind zwei Konfigurationen zu testen: a) zuhause (privates WLAN) und b) im WLAN der Hocchschule. Es ist eine Anleitung so zu verfassen, dass sie für RaspiLab Schülerworkshops nutzbar ist.
  22. Indoor-Navigation für Roboter
    Es soll mit zwei Raspberry Pi eine Positionsbestimmung und Überwachung der Position im Internet entwickelt werden. Als technischer Demonstrator soll nur eine einfache lineare Anordnung untersucht werden. Die Position wird aus den Feldstärken eines Accesspoint, wer auf einem Robotermodell besetigt wird, ermittelt. Die Positionen sind regelmäßig (jede Sekunde) über Funk an einen Webservice zu übertragen. Auf dem Webserver sollen die Informationen durch eine Grafik visualisiert werden.
    Ressourcen (werden zur Verfügung gestellt): zwei Raspberry Pi WLAN, Router, Webserver.
  23. Paketverfolgung mit dem Smartphone
    Für einige Anwendungsfälle kann kann ein GPS-Tracker auf einem Smartphone die preiswerteste Lösung sein („Billig-Handy“ für 60 Euro). Es soll ein GPS-Tracker entwickelt werden, der automatisch jede 10 Minuten die aktuellen Koordinaten und die Telefonnummer des Smartphones (aus der SIM karte) an einen Webservice überträgt. Im Netz kann man sich dann die Karte mit den Positionen der Smartphones anschauen und für jede Telefonnummer die Liste der Trackpunkte mit Zeitstempel als CSV Datei herunterladen.