Im Rahmen der Veranstaltung Softwaretechnik-Praktikum im Sommersemester 2020 wurde dieses Projekt zum Thema Data Analytics durchgeführt.
Die Veranstaltung gehört zum Curriculum der Bachelorstudiengänge der Informatik an der Technischen Hochschule Mittelhessen.
Die Aufgabe war es, Informationen über verschiedene Schnittstellen zu erfassen, diese automatisiert zu verarbeiten und daraus ein Video zu generieren, welches die Informationen in Bild und Ton präsentiert.
Aktuell gibt es vier mögliche Videos, welche automatisiert erstellt werden können:
- Deutschlandweiter Wetterbericht
- Ortsbezogener Wetterbericht
- Bundesliga-Ergebnisse
- Twitter-Wordcloud
Neue Schnittstellen sollen schnell zu ergänzen sein, sodass weitere Videos mit anderen Themen erstellt werden können.
Zudem wurde ein Frontend entwickelt mit welchem es möglich ist Videos in Auftrag zu geben und diese zu festgelegten Zeitpunkten automatisch zu generieren. Dies ist auch durch ein Wordpress-Plugin möglich.
Die Software soll nach der Fertigstellung auf der Website https://biebertal.mach-mit.tv/ eingesetzt werden. Biertal.Mach-Mit.TV ist ein Kooperationsprojekt der Gemeinde Biebertal und dem Fachbereich MNI der Technischen Hochschule Mittelhessen.
Benötigte Software:
Unter Windows muss ggf. noch ein Windows Subsystem for Linux installiert werden. Weitere Informationen hier
Docker-Container starten:
Die Pfade hinter -v
müssen durch Pfade zu den Dateien, welche in Konfiguration beschrieben werden
- bzw. durch den Pfad zum Output-Ordner - ersetzt werden.
Linux:
docker run -t \
-v /home/user/out:/out \
-v /home/user/config.json:/config.json \
-p 8000:8000 \
visuanalytics/visuanalytics
Windows:
docker run -t ^
-v C:\Users\user\out:/out ^
-v C:\Users\user\config.json:/config.json ^
-p 8000:8000 ^
visuanalytics/visuanalytics
Falls man nur das Wordpress-Plugin verwenden will (siehe hier) kann man auch
eine Docker-Container starten, der das Frontend nicht enthält. Hierfür muss man nur anstelle von
visuanalytics/visuanalytics
im obigen Befehl
visuanalytics/visuanalytics:latest-wordpress
eingeben.
Der Server kann nun unter http://localhost:8000
erreicht werden.
Wenn man die Option
h264_nvenc
(siehe config.json verwenden will, kann man beim Starten noch die Option--runtime="nvidia"
(oder--gpus all
) angeben. Dafür muss man vorher ein paar Konfigurationen und Installationen vornehmen. Eine Anleitung dafür finden Sie hier (Dies ist nicht die offizielle Dokumentation, wir fanden diese aber hilfreicher. Die Dokumentation von Docker zu dem Thema befindet sich hier)
Benötigte Software:
In den src
-Ordner wechseln: cd src
Pakete installieren:
-
pip install -r visuanalytics/requirements.txt
-
Konfigurations-Dateien anlegen bzw. anpassen (diese werden unter Konfiguration beschrieben):
- Die Datei
config.json
muss sich im Ordnervisuanalytics/instance
befinden.
- Die Datei
In den frontend
-Ordner wechseln:
cd ./frontend
Frontend Dependencies installieren:
npm i
npm install react-scripts@3.4.1 -g
Programm starten:
- Backend & Frontend starten:
npm run start:all
- Nur Frontend starten:
npm run start
- Nur Backend starten:
npm run start:server
- Backend ohne npm starten:
python -m visuanalytics
(Dafür muss man sich im src-Ordner befinden)
Um die Option
h264_nvenc
(siehe config.json) zu verwenden, müssen diverse Einstellungen vorgenommen werden. Eine gute Anleitung finden Sie hier.
Nicht nur der Backend-Server kann das Frontend ausliefern. Das Frontend kann auch als Wordpress-Plugin verwendet werden.
Um das Wordpress-Plugin zu erstellen sind folgende Schritte nötig:
Benötigte Software:
In den frontend
-Ordner wechseln:
cd src/frontend
Frontend Dependencies installieren:
npm i
npm install react-scripts@3.4.1 -g
In den wordpress
-Ordner wechseln:
cd ../wordpress
(wenn man imfrontend
-Ordner ist, ansonstencd src/wordpress
)
Wordpress-Plugin erstellen:
python build.py
Im build
-Ordner befindet sich eine .zip-Datei, die sich einfach über die Wordpress-Oberfläche installieren lässt.
Damit das Plugin vollständig funktioniert, muss das Backend laufen (siehe hier oder hier). Um vom Plugin requests an das Backend zu senden, muss ein Reverse Proxy eingerichtet werden, dieser sollte dann alle requests die mit
/visuanalytics
anfangen an den Backendserver weiterleiten.
Die Konfigurationsdatei für das Programm hat folgendes Format:
{
"api_keys": {
"weatherbit": "APIKey"
},
"steps_base_config": {
"testing": false,
"h264_nvenc": false,
"thumbnail": false
},
"testing": false,
"audio": {}
}
api_keys
:
Die API-Keys für die verwendeten APIs:
weatherbit
: API-Key für weatherbit.iotwitter
: API-Key für Twitter
steps_base_config
(optional):
Die Konfiguration, die für jeden Job gelten soll (die Konfigurationen, die im Frontend angegeben werden, sind höherwertig).
-
testing
(optional):Wenn
testing
aktiviert ist, werden keine API-Abfragen gemacht. Zur Generierung des Videos werden in dem Fall Beispieldaten verwendet (diese sind nur für die vordefinierten Themen vorhanden). -
h264_nvenc
(optional):Wenn
h264_nvenc
aktiviert ist, wird diese Option beiFFmpeg
verwendet. Diese aktiviert die Hardware-Beschleunigung bei Nvidia-Grafikkarten. Damit dies funktioniert, müssen diverse Sachen beachtet werden (weitere Informationen unter Mit Docker sowie Ohne Docker). -
thumbnail
(optional):Wenn
thumbnail
aktiviert ist, wird zu jedem Video einThumbnail
generiert. Der Name des Thumbnails hat das Format:{video_name}_thumbnail.png
(wobei{video_name}
dem Namen des Videos entspricht). -
fix_names
(optional):
keep_count
(optional):
testing
(optional):
Wenn testing
aktiviert ist, wird die logging Ausgabe auf das "Info"-Level gesetzt, wodurch mehr Informationen in den Log eingetragen werden.
audio
(optional):
Hier kann die Konfiguration für die Audio-Generierung angegeben werden. Eine Erklärung dafür befindet sich hier.
console_mode
(optional):
Falls man das Programm ohne Frontend verwenden will, kann man diese Option auf true
setzen. Dann kann man die zu erstellenden Jobs in der Datei jobs.json
angeben (diese liegt ab unter src\visuanalytics\resources
, eine Erklärung des Formats befindet sich hier). Diese Option funktioniert nur, wenn man das Programm ohne Docker ausführt.
Wenn man den console_mode
(siehe hier) aktiviert hat, kann man die Jobs in der Datei jobs.json
wie folgt definieren:
{
"jobs": [
{
"name": "Wetter in Biebertal",
"id": 0,
"steps": "weather_single",
"schedule": {
"time": "12:00",
"daily": true
},
"config": {
"city_name": "Biebertal",
"p_code": "35444"
}
}
]
}
name
: Name des Jobs
id
: ID des Jobs (sollte einzigartig sein)
steps
: Thema, zu welchem ein Video generiert werden soll
Aktuelle Optionen:
"weather_germany"
: Deutschlandweiter Wetterbericht"weather_single"
: Ortsbezogener Wetterbericht"football"
: Spieltag- und Tabellenbericht für die Fußball-Bundesliga"twitter"
: Twitter-Wordcloud
schedule
: Hier kann der Zeitplan für die Generierung der Videos festgelegt werden.
Hierzu gibt es vier mögliche Einträge:
-
time
:Uhrzeit der Ausführung. Die Uhrzeit muss im Format
"%H:%M"
angegeben werden.Beispiel:
10:00
Die Uhrzeit muss immer angegeben werden.
-
daily
:Wenn dieser Wert
true
ist, wird der Job jeden Tag ausgeführt. -
date
:Ist ein Datum angegeben, so wird der Job einmalig und nur an diesem Datum ausgeführt. Das Datum muss in dem Format
%y-%m-%d
angegeben werden.Beispiel:
2020-06-09
-
weekdays
:Enthält die Wochentage, an welchen der Job ausgeführt werden soll. Die Wochentage werden als Array von Zahlen angegeben, wobei
0 ~ Montag
,1 ~ Dienstag
usw.Beispiel:
[0, 5, 6]
=> Der Job wird montags, samstags und sonntags ausgeführt.
Die Optionen
daily
,date
undweekdays
schließen sich gegenseitig aus. Es muss also genau eine Option ausgewählt werden.
config
: Hier können die Konfigurationen für die Jobs festgelegt werden.
Alle hier beschriebenen Konfigurationen sind optional und werden notfals mit default-Werten initalisiert.
Mögliche Konfigurationen für die verschiedenen Themen:
Deutschlandweiter Wetterbericht (steps: "weather_germany"
):
- alle Einstellungen, die auch in der config.json unter
steps_base_config
zur Verfügung stehen
Ortsbezogener Wetterbericht (steps: "weather_single"
):
-
alle Einstellungen, die auch in der config.json unter
steps_base_config
zur Verfügung stehen -
city_name
: str - Name des Ortes -
p_code
: str - Postleitzahl des Ortes -
speech_app_temp_2
: bool - Ob eine Audiodatei zu den gefühlten Temperaturen bei der 2-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_wind_2
: bool - Ob eine Audiodatei zu Windgeschwindigkeit und -richtung bei der 2-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_sun_2
: bool - Ob eine Audiodatei zu Sonnenauf- und -untergang bei der 2-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_rh_2
: bool - Ob eine Audiodatei zur relativen Luftfeuchtigkeit bei der 2-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_pop_2
: bool - Ob eine Audiodatei zur Regenwahrscheinlichkeit bei der 2-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_app_temp_3
: bool - Ob eine Audiodatei zu den gefühlten Temperaturen bei der 3-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_wind_3
: bool - Ob eine Audiodatei zu Windgeschwindigkeit und -richtung bei der 3-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_sun_3
: bool - Ob eine Audiodatei zu Sonnenauf- und -untergang bei der 3-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_rh_3
: bool - Ob eine Audiodatei zur relativen Luftfeuchtigkeit bei der 3-Tage-Übersicht erstellt und im Video abgespielt werden soll -
speech_pop_3
: bool - Ob eine Audiodatei zur Regenwahrscheinlichkeit bei der 2-Tage-Übersicht erstellt und im Video abgespielt werden soll
Aktuell lassen sich nur Wettervorhersagen für Städte in Deutschland generieren.
Spieltag-Bericht für die Fußball-Bundesliga (steps: "football"
):
- alle Einstellungen, die auch in der config.json unter
steps_base_config
zur Verfügung stehen liga-name
: str - Spielklasse (1 ~ 1. Liga
,2 ~ 2. Liga
,3 ~ 3. Liga
)
Twitter Wordcloud (steps: "twitter"
):
- alle Einstellungen, die auch in der config.json unter
steps_base_config
zur Verfügung stehen normalize_words
: bool - Ob die Wörter normalisiert werden sollen und Doppelungen bei der Zählung der Häufigkeiten zu vermeiden (Beispiel: Bundesliga, bundesliga und BUNDESLIGA (wird einzeln gezählt: je 1x)-> Bundesliga, Bundesliga, Bundesliga (insgesamt: 3x)colormap_words
: str - Die Farben der Wörter in der Wordcloudcolor_func
: bool - Ob für den Farbverlauf der Wörter in der Wordcloud ein bestimmter Farbverlauf anstelle einer Colormap verwendet werden sollcolor_func_words
: str - Farbe des gewünschten Farbverlaufs der Wörter in der Wordcloud (nur wenncolor_func
auftrue
gesetzt wurde)figure
: str - Form der Wordcloud (aktuell nur Kreis und Quadrat möglich)size_wordcloud
: str - Größe der Wordcloud (verschiedene Größen möglich)
Benötigte Software:
Unter Windows muss ggf. noch ein Windows Subsystem for Linux installiert werden. Weitere Informationen hier
In den src
-Ordner wechseln: cd src
Tests ausführen:
docker-compose -f visuanalytics/docker-compose.test.yml up
Benötigte Software:
In den src
-Ordner wechseln: cd src
Pakete installieren:
pip install -r visuanalytics/requiraments.txt
Tests ausführen:
python python3 -m unittest discover visuanalytics
Unter Linux kann es sein, dass `pip3` und `python3` verwendet werden müssen.
Für die Dokumentation wird das Python-Paket Sphinx verwendet.
Benötigte Software:
- dev-dependencies installieren:
pip install -r src/visuanalytics/requirements-dev.txt
Unter Linux kann es sein, dass
pip3
undpython3
verwendet werden müssen.
- in den Dokumentationsordner wechseln:
cd Docs
- Dokumentation generieren:
make html
Die Dokumentation befindet sich dann im Ordner _build/html
.