Hi
ich habe einen kleinen Sprachassistent geschrieben der z.b. Internetsuchen durchführt oder eine Wetter API abfragt. Da SpeechToText mit Lazarus für mich nicht realisierbar war habe ich mit Python ein kleines Programm geschrieben, das, wenn es gestartet wird die Speechengine von Google nutzt und das Resultat in einer .txt Datei speichert.
AssignFile(DateiStatus,'Status.txt');
Rewrite(DateiStatus);
Writeln(DateiStatus,V);
CloseFile(DateiStatus);
Status:=TStringlist.Create;
AProcess := TProcess.Create(nil);
AProcess.Executable:= 'STT_Extanded';
// An das Programm soll der Parameter -h übergeben werden:
AProcess.Parameters.Add('-h');
// AProcess.Options := AProcess.Options + [poWaitOnExit]; <--- wenn ich das Programm mit dieser Zeile Aktiv Starte wird das Programm während dem Ausführen der Exe unterbrochen
AProcess.Execute; //Dadurch kann ich aber während dem Aufnehmen nichts auf dem Fenster verändern
AProcess.Free;
STT := TStringList.Create;
STT.LoadFromFile('Textdatei.txt');
result:= STT[0];
Gleichzeitig schreibt Python den Aktuellen Status in eine Status.Txt. Es war ein versuch von mir die kommunikation zwischen beiden Programmen zu ermöglichen aber was ich erst jetzt herrausgefunden habe ist, dass es abstürzt wenn pyton und Lazarus gleichzeitig auf die Status.txt zugreifen.
Meine Lösung für das Problem war das ich das Lazarus Programm während der Ausführung des Python Programms gestoppt habe (poWaitOnExit), allerdings kann ich dann keine Änderungen in dem eigentlichen Programm anzeigen sowa wie "Sprehen sie Jetzt" oder so.
Wie schaffe ich es eine einfache Kommunikation von python zu Lazarus aufzubauen die darin besteht, dass python dem Lazarus Programm sagt, in welchem Stadium(Aufnehmen, Verarbeiten,Fertig) das Python Programm sich befinden, damit ich dann den Text Aus der Textdatei.txt auslesen kann.
Message von Python an Pascal
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Message von Python an Pascal
Hi!
Vom Linux OS geklaut:
Du definierst einen Dateinamen und ein Verzeichnis.
Diese Datei ist die Lock-Datei
Die beidseitige Logik:
Wenn die Lockdatei existiert:
Warten bis sie nicht mehr existiert
else
LockDatei anlegen
Textdatei schreiben
LockDatei löschen
Fertig
Winni
Vom Linux OS geklaut:
Du definierst einen Dateinamen und ein Verzeichnis.
Diese Datei ist die Lock-Datei
Die beidseitige Logik:
Wenn die Lockdatei existiert:
Warten bis sie nicht mehr existiert
else
LockDatei anlegen
Textdatei schreiben
LockDatei löschen
Fertig
Winni
Re: Message von Python an Pascal
Ich würde es entweder über eine Datenbank realisieren, oder eine API.
Re: Message von Python an Pascal
Hi die Idee ist echt cool aber ich habe noch nicht ganz verstanden was ich genau machen muss. Muss ich eine extra datei erstellen lassen mit python und diese nach dem Skript wieder löschen oder soll ich die Datei wo mein Text gespeichert ist Lock(en)?
In python würde ich es dann so schreiben:
In python würde ich es dann so schreiben:
Code: Alles auswählen
with FileLock("myfile.txt"):
datei = open('myfile.txt', 'w')
datei.write('Locked')
print("Lock acquired.")
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Message von Python an Pascal
Hi!
Die Lockdatei ist eine extra Datei, deren Zweck darin besteht, zu signalisieren, ob Du die TextDatei anfassen darfst, oder ob ein anderer Process /User darin gerade arbeitet.
Pascal:
Winni
Die Lockdatei ist eine extra Datei, deren Zweck darin besteht, zu signalisieren, ob Du die TextDatei anfassen darfst, oder ob ein anderer Process /User darin gerade arbeitet.
Pascal:
Code: Alles auswählen
uses ....fileutil;
const LockFile = './lockfile.lock';
... var f: file;
while FileExists(LockFile) do sleep (100);
assignFile(f,lockFile);
rewrite (f);
closeFile(f);
/// jetzt in Deine Textdatei schreiben
deleteFile (lockFile);
...
-
- Beiträge: 945
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Message von Python an Pascal
Du könntest alternativ auch mit Hilfe von Python 4 Delphi (bzw. mit dem Fork Python for Lazarus, welches mehr Plattformen unterstützt) direkt dein Skript ausführen (mit eventuellen Anpassungen, so dass du gar keine Datei mehr brauchst).Aloxen hat geschrieben: Di 31. Mai 2022, 18:00 ich habe einen kleinen Sprachassistent geschrieben der z.b. Internetsuchen durchführt oder eine Wetter API abfragt. Da SpeechToText mit Lazarus für mich nicht realisierbar war habe ich mit Python ein kleines Programm geschrieben, das, wenn es gestartet wird die Speechengine von Google nutzt und das Resultat in einer .txt Datei speichert.
FPC Compiler Entwickler