SOUND / Wav2Vec2

Wav2Vec2

reComputer RK3576

Mit RKNN beschleunigte englische Spracherkennung durch facebook/wav2vec2-base-960h auf reComputer RK3576 und RK3588.

38 Downloads
Präzision
RKNN

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Bereitstellen
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-wav2vec2:latest

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "wav2vec2-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "wav2vec2-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

Modelldetails

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Schnellstart

1. Docker installieren

Führen Sie zur Installation von Docker folgende Befehle auf dem Entwicklungsboard aus:

bash
# Download installation script
curl -fsSL https://get.docker.com -o get-docker.sh
# Install using Aliyun mirror source
sudo sh get-docker.sh --mirror Aliyun
# Start Docker and enable auto-start on boot
sudo systemctl enable docker
sudo systemctl start docker

2. Projekt ausführen (ein Befehl, Dual-Modus-Vorschau)

Dieses Projekt bietet englische automatische Spracherkennung auf Basis von facebook/wav2vec2-base-960h. Über die Weboberfläche können Sie eine Audiodatei hochladen oder Audio mit dem Browser-Mikrofon aufnehmen.

Schritt A: Images abrufen

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-wav2vec2:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-wav2vec2:latest

Schritt B: mit einem Befehl starten

Für RK3588:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-wav2vec2:latest

Aufruf: http://<Board_IP>:8000


Für RK3576:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-wav2vec2:latest

Aufruf: http://<Board_IP>:8000

Die Browser-Mikrofonberechtigung erfordert häufig HTTPS oder einen vertrauenswürdigen Kontext bzw. localhost. Der Datei-Upload bleibt ohne Mikrofonberechtigung verfügbar, und der Container benötigt keine Zuordnung des Host-Geräts /dev/snd.

3. Inferenz über die Befehlszeile

bash
python inference.py --platform rk3576 --model_dir model \
    --file samples/test.wav --beam_width 8

Verwenden Sie im RK3588-Quellverzeichnis --platform rk3588.


🔌 API-Dokumentation

Das Projekt bietet synchrone Transkription für hochgeladene Audiodateien. Vor der Inferenz wird Audio in Mono mit 16 kHz konvertiert, Stille entfernt, der Pegel normalisiert und auf Clipping geprüft.

1. Schnittstelle zur Spracherkennung

Endpunkt: POST /api/models/wav2vec2/predict

Anfrageparameter (Multipart/Form-Data):

  • file: Erforderliche WAV-Datei oder eine andere von libsndfile unterstützte Audiodatei. Die Uploadgrenze beträgt 64 MB.
  • beam_width: Optionale CTC-Decodierbreite von 1 bis 32. Der Standardwert ist 8; 1 wählt die Greedy-Decodierung.

Anwendungsbeispiel:

bash
curl -X POST "http://127.0.0.1:8000/api/models/wav2vec2/predict" \
    -F 'file=@samples/test.wav' \
    -F 'beam_width=8'

Antwortformat (JSON):

json
{
  "success": true,
  "model": "wav2vec2",
  "platform": "rk3576",
  "inference_time_ms": 812.4,
  "result": {
    "text": "EXAMPLE TRANSCRIPT",
    "frames": 999,
    "sample_rate": 16000,
    "original_duration_seconds": 4.2,
    "processed_duration_seconds": 4.0,
    "segments": 1,
    "beam_width": 8,
    "truncated": false,
    "warnings": []
  }
}

Das RKNN-Modell hat eine feste Eingabedauer von 20 Sekunden. Längere Aufnahmen werden in überlappende Segmente aufgeteilt und zusammengeführt, statt abgeschnitten zu werden. Ein größerer Wert für beam_width erhöht den Decodieraufwand auf der CPU und kann das Transkript verbessern; das RKNN-Modell selbst ändert sich nicht.

2. Schnittstelle zur Systemkonfiguration

Aktuelle Konfiguration abrufen

  • Endpunkt: GET /api/config
  • Antwort: {"beam_width": 8}

Konfiguration aktualisieren

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
    -H 'Content-Type: application/json' \
    -d '{"beam_width": 1}'

Prüfen Sie mit GET /api/health die aktive Plattform, die Modellbereitschaft, die geladene RKNN-Datei und die Laufzeitfunktionen. Die OpenAPI-Dokumentation befindet sich unter /docs.


🛠️ Entwicklerhandbuch (Empfehlungen für den Produktionseinsatz)

Codebeschreibung

  • web_service.py:
    • Web-API: Verarbeitet Audio-Uploads im Browser, Mikrofonaufnahmen, Konfiguration und synchrone Transkription.
    • Validierung: Lehnt leere Dateien, Dateien über 64 MB und ungültige Beam-Breiten ab.
  • task_runtime.py:
    • Audioverarbeitung: Decodiert Audio, konvertiert es in Mono mit 16 kHz, entfernt Stille, normalisiert die Pegel und erzeugt überlappende 20-Sekunden-Segmente.
    • RKNN-Inferenz: Führt wav2vec2.rknn für jedes Segment aus.
    • CTC-Decoder: Unterstützt Greedy- und Beam-Search-Decodierung und führt Segmenttranskripte zusammen.
  • inference.py: Bietet einmalige Transkription über die Befehlszeile.

Modelldateien

KomponenteDatei
Wav2Vec2-Modellmodel/wav2vec2.rknn
Beispielaudiosamples/test.wav

Modelle ändern

  1. Legen Sie das konvertierte Modell unter model/wav2vec2.rknn ab.
  2. Behalten Sie den festen Eingabevertrag von 20 Sekunden, Mono und 16 kHz sowie die vom mitgelieferten CTC-Vokabular erwartete Ausgabe-Token-Reihenfolge bei.
  3. Testen Sie sowohl kurze Eingaben als auch die überlappende Segmentierung langer Audiodaten, bevor Sie den Ersatz veröffentlichen.

Das Upstream-Projekt bietet derzeit ein RKNN-Modell mit fester Form pro Plattform. beam_width ändert den Decoder, anstatt eine andere Größe oder Quantisierung auszuwählen.

Lokale Images erstellen

Im Stammverzeichnis von reComputer-RK-CV ausführen:

bash
docker build -f docker/rk3576/wav2vec2.dockerfile \
    -t rk3576-wav2vec2:local src/rk3576_wav2vec2

docker build -f docker/rk3588/wav2vec2.dockerfile \
    -t rk3588-wav2vec2:local src/rk3588_wav2vec2

Eingaben und Ausgaben

Eingabe: in Mono mit 16 kHz konvertiertes Audio. Ausgabe: englisches Transkript, Segmentdetails und Inferenzzeit.