Geschrieben von Christian Schnettelker

Schlagwörter:

Nerd deluxe: Videotext von VHS auslesen – Teil 3

Im dritten Teil meiner Artikelserie zu „Videotext von VHS auslesen“ beschreibt die Installation von Linux, CUDA, Python und des Zielprogramms vhs-teletext.

VHS-Kassette
Der Artikel gliedert sich in zwölf Schritte, teilweise mit Unterschritten. Ich habe mich bemüht, alles möglichst verständlich zu beschreiben.

Vorbemerkungen

Sie sollten zumindest über rudimentäre Kenntnisse im Umgang mit dem Linux-Terminal („Bash“) verfügen. Falls das nicht der Fall ist empfehle ich, vorab ein paar entsprechende Anleitungen auf Youtube einzusehen. Hier einige der wichtigsten Kommandos:

Kommando als Supervisor ausführen: $ sudo <kommando>
Verzeichniswechsel: $ cd <verzeichnis>
Ins Home-Verzeichnis wechseln: $ cd ~
Bildschirm löschen: $ clear
Verzeichnisinhalt ausgeben: $ ls
Datei editieren: $ nano <dateiname>
Freien Festplatten-Speicherplatz ausgeben: $ df -h

Das führende $ Zeichen bedeutet im Folgenden nicht Geldgeilheit, sondern dass dieses Kommando im Linux-Terminal eingeben wird.

Achten Sie auf Tippfehler, diese können alle Bemühungen leicht zunichte machen. Besser ist es, die Kommandos vom z.B. Browser per Kopieren auszuschneiden und mittels Einfügen im Terminal einzusetzen.

Schritt 1: Linux installieren

Wie in Teil zwei erwähnt empfehle ich dringend, Linux Ubuntu 64bit zu verwenden. Die Version, auf die ich in dieser Anleitung verwende, ist die 16.04 LTS. Ein paar Hinweise dazu:

  • Installieren Sie die deutsche Version, darauf beziehe ich mich nachfolgend
  • Der Rechner muss eine Verbindung zum Internet haben
  • Deaktivieren Sie nach der Installation die Bildschirmabschaltung (Systemeinstellungen > Helligkeit und Sperren), damit Sie später längere Zeit ungestört der Aufzeichnung zusehen können
  • Das Terminal öffnet sich in Ubuntu mit rechte Maustaste (auf den Desktop), „Terminal öffnen“
  • Werden Sie bei den folgenden Kommandos im Terminal gefragt, ob weitere Pakete installiert werden sollen („Möchten Sie fortfahren“), immer mit Ja (J) antworten

Dieser Schritt sollte das kleinste Problem sein.

Schritt 2: Module für die TV-Karte permanent starten

Der Linux-Kernel beinhaltet die Treiber für unsere im Teil zwei bereits beschriebene TV-Karte. Diese müssen nur noch aktiviert werden, und zwar dergestalt, dass sie mit jedem Neustart automatisch eingebunden werden. Dafür editieren wir zuerst die Datei rc.local:

$ sudo nano /etc/rc.local

Es öffnet sich der Editor, schreiben Sie die folgenden Kommandos vor das abschließende „exit 0″:

modprobe bt878
modprobe dvb_core
modprobe dst
modprobe dvb-bt8xx

Speichern Sie die Änderungen ab (Control + X).

Schritt 3: Nvidia-Treiber aktivieren

CUDA arbeitet nur mit den original Nvidia-Treibern zusammen, diese aktivieren wir in diesem Schritt.

  1. Im Ubuntu Menü links auf das Symbol „Systemeinstellungen“ klicken
  2. Rubrik „System“ > „Anwendungen & Aktualisierungen“ > Reiter „Zusätzliche Treiber“
  3. NVIDIA binary driver – bei mir Version 361.42 – aktivieren

Starten Sie dann den Rechner mit

$ sudo reboot

neu. Anschließend können Sie mit dem Kommando

$ nvidia-smi

überprüfen, ob der ausgewählte Treiber wirklich läuft.

Schritt 4: TVTime installieren

Um den richtigen Kanal auswählen und das von VHS übertragene Bild sehen zu können benötigen wir ein entsprechendes Programm. Ich habe mich für TVTime entschieden.

Es wurde zwar anscheinend länger nicht mehr gepflegt und zeigt sich manchmal boshaft, der Kanalsuchlauf funktioniert ggf. beim ersten Mal nicht – es unterstützt aber unsere Oldie-TV-Karte und erfüllt seinen Zweck.

  • Im Ubuntu Menü links auf das Symbol „Ubuntu Software“ klicken
  • Nach „TVTime“ suchen (das Programm heißt vollständig TVTime Television Viewer) und es über den nebenstehenden Button installieren
  • TVTime starten („Rechner durchsuchen“-Symbol ganz oben links, nach „TV“ suchen)

Beim Linux-Start gibt es (anscheinend durch dieses Programm verursacht) ggf. wiederholend eine Fehlermeldung („Problem mit einer Systemanwendung festgestellt“), diese ignorieren Sie bitte.

Anschließend nehmen Sie bitte noch die folgenden Einstellungen im Programm selber vor (Klick mit der rechten Maustaste ins Programmfenster ruft das Menü auf). Der VHS-Rekorder sollte zu diesem Zeitpunkt an die TV-Karte angeschlossen sein und ein Band abspielen, damit Sie den richtigen Kanal finden:

  1. „Eingangssignal“ > „Fernsehnorm“ von NTSC auf PAL stellen (anschließend „mit dieser Einstellung neu starten“ wählen)
  2. „Senderplätze einstellen“ > „Kanalsuche starten“ (bei mir fand sich das VHS-Bild entweder auf 88 oder 109. Sollte kein Signal gefunden werden, die Suche nach ein paar Sekunden wiederholen)
  3. „Senderplätze einstellen“ > „Signalprüfung deaktivieren“ (wichtig, da andernfalls das Signal abbrechen und es zu Frame-Drops kommen kann)

Damit ist Linux für unser Programm soweit eingerichtet.

Schritt 5: CUDA über den Synaptic-Paketmanager installieren

Starten Sie die Installation des Paketmanagers mit

$ sudo apt-get install synaptic

Falls Sie während des Installations-Vorgangs nach der TV-Norm gefragt werden, PAL und Europa auswählen. Anschließend starten Sie das Programm (über den Menüpunkt „Rechner durchsuchen“, nach „Synaptic“ suchen).

In Synaptic suchen Sie nach „nvidia-cuda-dev“, wählen es aus und installieren es mittels der Schaltfläche „Anwenden“.

Schritt 6: Holen von vhs-teletext

Zuerst müssen wir git installieren, anschließend wird darüber vhs-teletext V2 auf die Festplatte geladen:

$ sudo apt-get install git
$ git clone https://github.com/ali1234/vhs-teletext.git

Im Installationsskript fehlen aus mir unbekannten Gründen drei Einträge, dies tragen wir nun nach, damit die späteren Aufrufe korrekt funktionieren:

$ sudo nano ~/vhs-teletext/setup.py

Es öffnet sich wieder der Editor, tauschen Sie die Zeile

scripts=['deconvolve', 't42pipe', 'vbiview', 'vbicat', 'training'],

gegen

scripts=['deconvolve', 't42pipe', 'vbiview', 'vbicat', 'training', 't42html', 't42interactive', 't42service' ],

aus und speichern Sie die Datei wieder ab.

Schritt 7: Anpassung von vhs-teletext an die deutschen Sonderzeichen

Wie erwähnt muss der Quellcode angepasst werden, damit die deutschen Umlaute korrekt erscheinen. Hinweis: hier ändern wir den vhs-teletext-Quellcode. Die Änderungen beschreiben den Stand Mai 2016, zu einem späteren Zeitpunkt kann der Quellcode anders aussehen.

Bitte achten Sie unbedingt auf das korrekte Einrücken der jeweiligen Zeilen, diese Einrückung ist eine besondere Eigenschaft von Python:

$ sudo nano ~/vhs-teletext/teletext/t42/printer.py

Es öffnet sich der Editor, schreiben Sie in die erste Zeile

# -*- coding: utf-8 -*-

Ändern Sie den Block

    else:
        if c == ord('#'):
            return unichr(0xa3) # pound sign
        elif c == ord('_'):
            return unichr(ord('#'))
        elif c == ord('`'):
            return unichr(0x2014) # em dash
        elif c == ord('~'):
            return unichr(0xf7) # division symbol
        elif c == 0x7f:
            return unichr(0xe65f) # rectangle
        else:
            return unichr(c)

am Anfang der Datei in der Klasse „PrinterANSI“ zu:

    else:
        if c == 0x7f:
            return unichr(0xe65f) # rectangle
        else:
            return unichr(c)

Wir deaktivieren hier die speziellen englischen Zeichenzuordnungen. Nun müssen noch die deutschen Umlaute eingesetzt werden, ändern Sie den Block

    else:
        body = self.linkify(body)
    return head+body.encode('utf8')+foot+'\n'

am Dateiende zu

    else:
        body = self.linkify(body)

    body_de = body.encode('utf8')
    body_de = body_de.replace("¤","$")
    body_de = body_de.replace("@","§")
    body_de = body_de.replace("[","Ä")
    body_de = body_de.replace("\\","Ö")
    body_de = body_de.replace("]","Ü")
    body_de = body_de.replace("`","°")
    body_de = body_de.replace("{","ä")
    body_de = body_de.replace("|","ö")
    body_de = body_de.replace("}","ü")
    body_de = body_de.replace("~","ß")

    return head+body_de+foot+'\n'

und speichern Sie diese Änderung ab.

Hinweis: durch diese Änderung werden die Umlaute in der späteren HTML-Ausgabe korrigiert, nicht jedoch in der interaktiven Seitenanzeige. Ich versuche noch, dies zu verbessern und habe den Autor um Hilfe angefragt.

Schritt 8: Rechtschreibkorrektur auf Deutsch einstellen

Wir editieren wieder den Python-Quellcode:

$ sudo nano ~/vhs-teletext/teletext/t42/packet.py

In ca. der Dateimitte ändern Sie die Zeilen

import enchant
    d = enchant.Dict('en_UK')

bitte zu

import enchant
    d = enchant.Dict('de_DE')

und speichern die Änderungen ab. Das war es schon für diesen Schritt.

Schritt 9: Virtual Environment für Phyton einrichten

Damit vhs-teletext korrekt funktioniert richten wir den Programmen nun mit den folgenden Kommandos eine virtuelle Umgebung ein:

$ sudo apt install python-pip
$ sudo apt install virtualenv
$ cd ~/vhs-teletext
$ virtualenv venv
$ source venv/bin/activate

Diese virtuelle Umgebung werden wir später noch permanent machen.

Schritt 10: Installation von Phyton-Abhängigkeiten

Es folgen die Installation weiterer Programme, damit vhs-teletext korrekt funktioniert:

$ sudo apt-get install python-numpy python-scipy python-pycuda nvidia-modprobe python-enchant
$ pip install scikit-cuda
$ sudo apt-get install libblas-dev liblapack-dev gfortran
$ pip install scipy pyenchant

Das Ganze dauert eine Weile, bitte haben Sie Geduld.

Schritt 11: Python-Warnungen nicht anzeigen, Environment permanent einrichten

Hier nehmen wir eine Einstellung vor, welche irritierende Python-Warnungen unterdrückt und die virtuelle Umgebung aus Schritt 9 automatisch startet:

$ sudo nano ~/.bashrc

Im Editor tragen Sie die folgenden zwei Zeilen am Dateiende ein:

export PYTHONWARNINGS="ignore"
source ~/vhs-teletext/venv/bin/activate

und speichern die Änderung wieder ab.

Schritt 12: Installieren von vhs-teletext

Nun sollte alles bereit sein, wir installieren („make install“) die Zielsoftware vhs-teletext:

$ python setup.py install

Sollten hier Fehlermeldungen auftauchen haben Sie vermutlich bei der Änderung des Python-Sourcecodes (Schritt 7) die Einrückung nicht korrekt beachtet. Überprüfen Sie dann die gemeldeten Fehler, deren Zeilennummer angegeben wird. Der Editor nano zeigt mit Alt+C die aktuelle Zeilennummer im Fenster unten an.

Sollten Sie nicht weiterkommen empfiehlt sich zur Fehlersuche die Installation von PyChecker. Wenn alles ohne Fehlermeldung durchläuft müssen wir nur noch ein paar Dateien installieren und kopieren:

$ cp config_bt8x8_pal.py venv/bin/
$ sudo apt-get install tv-fonts rxvt-unicode
$ cd /etc/fonts/conf.d
$ sudo rm 70-no-bitmaps.conf
$ sudo ln -s ../conf.avail/70-yes-bitmaps.conf .

Damit ist die Installation abgeschlossen, starten Sie den Rechner mit

$ sudo reboot

neu.

Weiter im vierten Teil

Zuletzt führen wir einen Auslese- und Berechnungslauf durch, mehr dazu im vierten Teil.
 


 

Nachtrag vom 19. April 2017

Durch einen Hardwarefehler musste ich meinen VHS-Videotextrechner kürzlich neu aufsetzen, dabei sind mir zwei Dinge aufgefallen, was vielleicht für jemanden hilfreich sein könnten:

Numpy

1. Es gibt im Jahre 2017 ein Problem in der Python-Bibliothek „Numpy“, welches dazu führt, dass die Erzeugung der Videotext-Dateien mittels des Befehles „deconvolve“ abbricht, siehe https://github.com/ali1234/vhs-teletext/issues/5. Dies liegt an einer neueren Numpy-Version 1.12.x und (laut Aussage des Software-Autors) an einem Fehler in vhs-teletext.

Als Lösung muss Numpy zu der früheren Version 1.11.2 zurückgeführt werden („downgrade“). Laden Sie die Datei numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl aus dem Netz in ~/Downloads herunter und führen Sie die folgenden Kommandos aus:

$ sudo apt-get remove python-numpy
$ cd ~/Downloads
$ pip install numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl

Mit

$ pip freeze | grep 'numpy'

können Sie dann überprüfen, ob die Version 1.11.2 wirklich läuft. Vermeiden Sie bis zur Fehlerbehebung unbedingt, dass Linux das Paket später wieder updated oder wiederholen Sie dann den Downgrade.

Alte Nvidia-Grafikkarte und CUDA

2. Wenn Sie eine alte Nvidia-Grafikkarte verwenden möchten, die CUDA gar nicht, eingeschränkt oder nur fehlerhaft unterstützt, kann Linux bei der in diesem Artikel beschriebenen Installation so durcheinander geraten, dass Sie beim Start in eine Passworteingabe-Endlosschleife geraten.

Bei mir war das bei einer Ersatzkarte Modell Geforce 8600 GT der Fall. Um so eine Karte (bzw. jede anderen Grafikkarte) zu verwenden, lassen Sie bei der Neuinstallation alles mit CUDA weg:

- Schritt 3: keine Aktion, NVIDIA-Treiber nicht akivieren
- Schritt 5: keine Aktion
- Schritt 10: Nur die folgenden Kommandos anwenden:

$ sudo apt-get install python-numpy python-scipy python-enchant
$ sudo apt-get install libblas-dev liblapack-dev gfortran
$ pip install scipy pyenchant

Es hat mich nochmal zwei Tage gekostet, bis ich diese beiden Punkte eruiert hatte.

Kommentare

Kommentare

Kommentar schreiben

Allgemeiner Hinweis: Bitte kommentieren Sie zum Thema unter Vermeidung von Allgemeinplätzen. Eine gute Rechtschreibung sollte selbstverständlich sein.

Hinweis für SEO-Kommentarschreiber: alle Links sind nofollow und steigern Eure Linkpopularität nicht. Offensichtliche SEO-Kommentare werden nicht oder in anonymisierter Form veröffentlicht.