SOUND / Wav2Vec2
Wav2Vec2
reComputer RK3588
Mit RKNN beschleunigte englische Spracherkennung durch facebook/wav2vec2-base-960h auf reComputer RK3576 und RK3588.
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.
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:latestREST API
Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "wav2vec2-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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:
# 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 docker2. 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
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:latestSchritt B: mit einem Befehl starten
Für RK3588:
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:latestAufruf: http://<Board_IP>:8000
Für RK3576:
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:latestAufruf: 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
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wav --beam_width 8Verwenden 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;1wählt die Greedy-Decodierung.
Anwendungsbeispiel:
curl -X POST "http://127.0.0.1:8000/api/models/wav2vec2/predict" \
-F 'file=@samples/test.wav' \
-F 'beam_width=8'Antwortformat (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
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.rknnfü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
| Komponente | Datei |
|---|---|
| Wav2Vec2-Modell | model/wav2vec2.rknn |
| Beispielaudio | samples/test.wav |
Modelle ändern
- Legen Sie das konvertierte Modell unter
model/wav2vec2.rknnab. - Behalten Sie den festen Eingabevertrag von 20 Sekunden, Mono und 16 kHz sowie die vom mitgelieferten CTC-Vokabular erwartete Ausgabe-Token-Reihenfolge bei.
- 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:
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_wav2vec2Eingaben und Ausgaben
Eingabe: in Mono mit 16 kHz konvertiertes Audio. Ausgabe: englisches Transkript, Segmentdetails und Inferenzzeit.