Als Teil der BWKI Abgabe ich habe ich die folgenden Python Programme eingereicht:
- CulianAIBot_Lebensmittelerkennung_Rezepterstellung.py
- CulianAIBot_Lebensmittelerkennung_Rezepterstellung.py
- CulinAIbot_Spracherkennung.py
import torch
from ultralytics import YOLO
import openai
import os
import pyaudio
import json
from vosk import Model, KaldiRecognizer
# OpenAI API-Key festlegen
openai.api_key = 'HIER_DEN_OPENAI_API_KEY_EINFUEGEN'
# Rezeptgenerierung mit Zutaten und Zubereitungsanleitung
def generate_recipe_with_instructions(prompt):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful kitchen assistant. Provide recipes with ingredients that need to be purchased and cooking instructions."},
{"role": "user", "content": prompt},
]
)
# Antwort des Sprachmodells extrahieren
full_response = response['choices'][0]['message']['content']
# In der Antwort sollten die Zutaten und Zubereitungsschritte getrennt sein
return full_response
# Initialisiere YOLO8 Modell
def initialize_yolo_model(model_path="CulinaiBot.pt"):
model = YOLO(model_path)
return model
# Objekterkennung mit YOLO8
def detect_objects(image_path, model):
results = model(image_path)
detected_items = results.names
return detected_items
# PyAudio und VOSK initialisieren
def initialize_pyaudio_vosk(model_path="model"):
if not os.path.exists(model_path):
print("Bitte das VOSK-Modell herunterladen und den Pfad angeben.")
exit(1)
# Initialisiere VOSK-Modell
vosk_model = Model(model_path)
# Initialisiere PyAudio
p = pyaudio.PyAudio()
# Audioeinstellungen (z.B. 16000 Hz, 16-bit, Mono)
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8000)
stream.start_stream()
return vosk_model, stream, p
# Echtzeit-Spracherkennung mit PyAudio und VOSK
def transcribe_audio_stream(vosk_model, stream):
recognizer = KaldiRecognizer(vosk_model, 16000)
transcription = ""
print("Spracherkennung läuft... Drücke Strg+C, um zu stoppen.")
try:
while True:
data = stream.read(4000)
if recognizer.AcceptWaveform(data):
result = recognizer.Result()
transcription += json.loads(result)["text"] + " "
except KeyboardInterrupt:
# Stoppt die Erkennung, wenn der Benutzer Strg+C drückt
print("\nErkennung beendet.")
return transcription.strip()
# Beispielaufgabe: Erkennung eines Bildes und Generierung eines Rezepts mit Zutaten und Anweisungen
def perform_task(image_path, yolo_model, vosk_model, stream):
# Bildverarbeitung mit YOLO8
detected_objects = detect_objects(image_path, yolo_model)
# Spracherkennung in Echtzeit mit VOSK und PyAudio
spoken_task = transcribe_audio_stream(vosk_model, stream)
# Rezept generieren mit OpenAI basierend auf der Spracherkennung
recipe_details = generate_recipe_with_instructions(spoken_task)
return detected_objects, spoken_task, recipe_details
# Hauptfunktion
if __name__ == "__main__":
# Initialisiere YOLO und VOSK mit PyAudio
yolo_model = initialize_yolo_model("CulinaiBot.pt")
vosk_model, stream, p = initialize_pyaudio_vosk("path_to_vosk_model")
# Pfad zu einem Beispielbild (z.B. das Bild eines Apfels)
image_path = "path_to_image.jpg"
# Führe die Aufgabe aus
detected_objects, transcription, recipe = perform_task(image_path, yolo_model, vosk_model, stream)
# Ergebnisse ausgeben
print(f"Erkannte Objekte: {detected_objects}")
print(f"Transkribierter Text: {transcription}")
print(f"Rezept mit Anleitung und Zutaten:\n{recipe}")
# Audio-Stream und PyAudio beenden
stream.stop_stream()
stream.close()
p.terminate()