Wpis z mikrobloga

Pełna transkrypcja bardzo długiego audio przy pomocy modelu Gemini Flash 1.5 i Gemini API (za darmo, każdy może korzystać). Alternatywa dla whisper, lub można po prostu przetestować możliwości modelu LLM. Im lepszy prompt tym lepsze response.

Idea jest prosta, zatrzymanie wiecznej pętli gdy model zwróci: HasRemainingChunks = False

import os
import json
from datetime import datetime
import typing_extensions as typing
import google.generativeai as genai
from google.generativeai.types import file_types

genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
audio_file_path = os.path.join(os.path.dirname(__file__), "audio.m4a")
audio_info_file_path = os.path.join(os.path.dirname(__file__), "audio.txt")
if not os.path.exists(audio_info_file_path):
with open(audio_info_file_path, "w", encoding="utf-8") as f:
sample_audio = genai.upload_file(audio_file_path)
f.write(str(sample_audio.to_dict()))
else:
with open(audio_info_file_path, "r", encoding="utf-8") as f:
audio_dict = eval(f.read())
expiration_time = datetime.fromisoformat(audio_dict["expiration_time"]).replace(tzinfo=datetime.now().tzinfo)
if expiration_time < datetime.now():
sample_audio = genai.upload_file(audio_file_path)
with open(audio_info_file_path, "w", encoding="utf-8") as f:
f.write(str(sample_audio.to_dict()))
else:
sample_audio = file_types.File(audio_dict)

class Chunk(typing.TypedDict):
chunk: str
has_remaining_chunks: bool

model = genai.GenerativeModel("models/gemini-1.5-flash", generation_config=genai.GenerationConfig(max_output_tokens=8192, temperature=0.2, response_mime_type="application/json", response_schema=Chunk))
chat = model.start_chat(history=[{"role": "user", "parts": [sample_audio]}])
response = chat.send_message(
"Please generate a transcript of the audio file in Polish, ensuring to correct any grammatical errors without changing the meaning. Each chunk should be as long as possible."
)
response_dict = json.loads(response.text)
transcript = response_dict["chunk"]
while response_dict["has_remaining_chunks"]:
response = chat.send_message("continue")
response_dict = json.loads(response.text)
transcript += f" {response_dict['chunk']}"

#sztucznainteligencja #ai #python #gemini #audio #programowanie
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

  • 0
Przykładowy rezultat: https://drive.google.com/file/d/1YcuCHMY33uX-j019lCEtQT2QgwUAldS2/view?usp=sharing
https://youtu.be/EPf05l4xF0E Drobne błędy typu "arkush" zamiast "arkusz" prawdopodobnie dlatego, że zadałem pytanie w języku angielskim. Pierwszy lepszy prompt wygenerowany przez gpt-4o-mini, a chyba każdy wie, że pisanie dobrego promptu jest kluczowe. Myślę, że ta transkrypcja jest znacznie lepsza od automatycznej transkrypcji z YouTube oraz co najmniej porównywalna z Whisperem.
  • Odpowiedz