docs
docs copied to clipboard
Ошибка при установке библиотеки speechKit
Делаю по инструкции у меня нет ни каких GRPC пакетов но либа отказывается ставиться! Уже 3 часа пытаюсь запустить быстрый старт)
сделал все что тут написано https://yandex.cloud/ru/docs/speechkit/sdk/python/version-conflict
сделал вообще чистое окружение новое, плевать все равно ГРПС пакеты ставит. Зачем выкладитьвать такие либы?)
@sorokin-as Андрей, здравствуйте! gRPC пакеты и должны ставиться, без них SpeechKit не будет работать. какая ошибка возникает при установке Python SDK?
@sorokin-as Андрей, здравствуйте! gRPC пакеты и должны ставиться, без них SpeechKit не будет работать. какая ошибка возникает при установке Python SDK?
либа пытается установиться потом говорит что у нее ошибка и сама себя откатывает
Мне с библиотекой через gRPC взаимодействовать? по REST API нет варианта?
либа пытается установиться потом говорит что у нее ошибка и сама себя откатывает
Попробуйте установить библиотеку в виртуальном окружении Python. Если не получится, создайте обращение в техническую поддержку Yandex Cloud.
Python SDK предоставляет REST-интерфейс, но для ее работы необходим пакет grpc-tools. то, что при установке yandex-speechkit ставится и grpc-tools, нормально и ожидаемо.
Также SpeechKit API v3 поддерживает REST для TTS и без использования библиотеки, а STT появится в ближайшем будущем.
Та же проблема, установка выходит с ошибкой и на ubuntu и в powershell
Та же проблема, установка выходит с ошибкой и на ubuntu и в powershell @ZhakovArtyom, тот же совет, виртуальное окружение, если не поможет, пишите в поддержку. Тут мы вам, увы, помочь не сможем
Спасибо за ответ, у меня получилось установить на python 3.10 (3.11-3.12 выходили ошибки), но на этом ошибки не закончились. при запуске будет, даже при установленной ffmpeg RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
@ZhakovArtyom Виртуальное окружение создает "чистую" независимую среду. Скорее всего вы не установили в него ffmpeg.
я и в venv и в poetry окружении делал... Может быть кому-то поможет, у меня получилось через api/v2 и бакеты распознавать в асинхронном режиме
import boto3
import requests
from aiohttp import ClientSession
class SpeechkitBaseHTTPClient:
def __init__(self,
base_url: str,
api_key: str,
storage_url: str,
aws_access_key_id: str,
aws_secret_access_key: str,
bucket_name: str,
storage_object_key: str,
file_path: str
) -> None:
self._session = ClientSession(
base_url=base_url,
headers={
'Authorization': f"Api-Key {api_key}",
}
)
self._operation_header = {
'Authorization': f"Api-Key {api_key}",
}
self._body = {
"config": {
"specification": {
"languageCode": "ru-RU",
"model": "general",
"profanityFilter": False,
"literature_text": True,
"audioEncoding": "MP3",
"sampleRateHertz": None,
"audioChannelCount": None,
"rawResults": False
}
},
"audio": {
"uri": None
}
}
self._s3 = boto3.session.Session().client(
service_name='s3',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
endpoint_url=storage_url
)
self._bucket_name = bucket_name
self._storage_object_key = storage_object_key
self._file_path = file_path
class SpeechkitHTTPClient(SpeechkitBaseHTTPClient):
async def transcribe_audio(self):
try:
self._s3.upload_file(self._file_path, self._bucket_name, self._storage_object_key)
print(
f'Файл {self._file_path} успешно загружен в бакет {self._bucket_name} с ключом {self._storage_object_key}')
except Exception as e:
print(f'Ошибка загрузки файла: {e}')
filelink = self._s3.generate_presigned_url('get_object',
Params={'Bucket': self._bucket_name,
'Key': self._storage_object_key},
ExpiresIn=3600)
body = self._body
body["audio"]["uri"] = filelink
async with self._session.post(
f"/speech/stt/v2/longRunningRecognize",
json=body
) as resp:
result = await resp.json()
print(result)
recognize_id = result['id']
text = await self.get_recognize_text(recognize_id)
return text
async def get_recognize_text(self, recognize_id):
while True:
GET = "https://operation.api.cloud.yandex.net/operations/{id}"
resp = requests.get(GET.format(id=recognize_id), headers=self._operation_header)
result = resp.json()
if result['done']:
break
print("Not ready")
time.sleep(3)
recognize_text = []
for chunk in result['response']['chunks']:
recognize_text.append(chunk['alternatives'][0]['text'])
return '\n'.join(recognize_text)
Возможно не самый красивый код, но рабочий🙂