Files
whisper-api-server/client_api.ipynb
T
2025-03-01 19:24:03 +03:00

137 lines
20 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"\n",
"def transcribe_audio(file_path: str, server_url: str = \"\"):\n",
" \"\"\"\n",
" Отправляет аудиофайл на сервер для распознавания и возвращает результат.\n",
"\n",
" Args:\n",
" file_path: Путь к локальному аудиофайлу.\n",
" server_url: URL сервера (по умолчанию \"\").\n",
"\n",
" Returns:\n",
" Распознанный текст.\n",
" \"\"\"\n",
" try:\n",
" # Открываем файл для отправки\n",
" with open(file_path, \"rb\") as audio_file:\n",
" # Формируем запрос\n",
" files = {\"file\": (file_path, audio_file)}\n",
" response = requests.post(f\"{server_url}/v1/audio/transcriptions\", files=files)\n",
"\n",
" # Проверяем статус ответа\n",
" if response.status_code == 200:\n",
" return response.json()\n",
" else:\n",
" print(f\"Ошибка: {response.status_code}\")\n",
" print(response.json())\n",
" return None\n",
"\n",
" except Exception as e:\n",
" print(f\"Ошибка при отправке файла: {e}\")\n",
" return None\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'processing_time': 11.976396322250366, 'text': ' Всем привет, это Данила ГД, и сегодня будет выпуск, посвященный математике. Наконец-то, надеюсь, вы давно этого ждали. И так как недавно вышел сериал «Игра в кальмара», я решил разобрать одну из игр. Но это будет не та игра, в которую играют все игроки, которые участвуют, собственно, в этих играх. А это будет обычная русская рулетка, в которую на самом деле играли и в каких-то других произведениях искусства. Итак, в русскую рулетку можно играть по-разному. Именно в этой серии главный герой играл с загадочным человеком из метро, и они играли по таким правилам. Изначально вставляется один патрон, прокручивается, и затем они, уже не трогая барабан, по очереди стреляют в себя. Первый игрок стреляет, потом, если он выжил, стреляет второй, если второй выжил, а то и стреляет первый и так далее. И в итоге стопроцентно на шестой раз, если вдруг оба дожили до конца, то на шестой раз второй игрок точно себя убьет. И что мне показалось интересным. Подумайте, есть ли разница вы начали первым или вы начали вторым. Отличается ли математическое ожидание вашей смерти от того, когда вы сделали первый выстрел? Вы можете пока подумать. Я могу сказать за себя, да, то есть я уже знаю ответ. Но когда я еще не посчитал, я думал, что с одной стороны, тот, кто начинает первым, у него изначально, да, вероятность одна шестая умереть. То есть второй игрок даже не рискует, а первый уже может себя убить. И вроде как это прикольно. Это с одной стороны. Но с другой стороны, и я думаю, что это перевешивает, тот факт, что последний выстрел это 100% вероятность себя убить, вот например предпоследний это всего лишь 50%, а последний сразу 100%. Я думаю, что это слишком весомый аргумент, что вторым начинать менее выгодно. Такая была у меня логика. Надеюсь, я достаточно дал времени подумать, и давайте перейдем к расчетам, наконец, к нашей любимой табличке. Но расчетов будет немного, они будут несложные. Как мы будем считать? Мы возьмем, например, первого игрока и сначала посчитаем вероятность умереть от первого выстрела, затем от третьего выстрела и затем от пятого выстрела, и после мы суммируем все эти три вероятности и узнаем общее математическое ожидание проиграть в этой игре. Давайте начнем. Первый выстрел это одна шестая, да у нас шесть отделений для патронов в барабане и один патрон, то есть шестнадцать процентов, давайте все переведем в проценты и почти семнадцать тоже. Теперь третий выстрел, здесь уже чуть посложнее. Как нам в целом добраться до третьего выстрела? Нам нужно, чтобы несколько условий срослось. Первое. Чтобы наш первый выстрел не закончился смертью. Ведь если мы себя убьем, третьего выстрела уже не будет. Второе. Чтобы выстрел второго игрока не закончился смертью. Давайте сразу это запишем. То есть пять шестых это шанс выжить от первого выстрела. Умножить на четыре пятых — это шанс выжить второго игрока от его второго выстрела. Ну, то есть для него первого, а в целом второго. И далее мы уже вставляем вероятность умереть нашу на третьем выстреле. Так как осталось еще четыре варианта, и среди этих четырех вариантов один патрон, то это, соответственно, одна четвертая. Вот мы получаементов. Да, уже довольно интересно. Можно сделать какие-то выводы, но давайте посчитаем пятый выстрел. Да, это сложно. Пятый выстрел это соответственно то же самое, только мы должны ещё и пережить первый, пережить третий. Второй игрок должен пережить второй выстрел, четвёртый выстрел, и только тогда мы наконец сможем убить себя или пережить пятого выстрела. Это одна вторая. И у нас снова получается 16%. Ну и, разумеется, сумма всего этого дела 50. И вуаля, мы получили расчет, что неважно, начинаете вы первым или вторым. По-хорошему, если вообще все делать по науке, да, и проверять самого себя, то нужно посчитать то же самое для второго игрока. Но я не буду этого делать, потому что здесь получился слишком ровно ответ, но есть более важный пункт. На самом деле, эта задача решается намного проще. Она, по сути, не требует математики. Давайте подойдем к ней логически. У нас есть барабан, в котором есть шесть отделов под патроны. В одном из них лежит патрон. И у нас есть два игрока. Каждый из двух игроков берет себе по три отсека под патроны. Каждый отсек это 16%, независимо ни от чего. То есть в три в сумме это 50%. Получается, что у каждого игрока 50% попасть в патрон или 50% не попасть в патрон. То есть вы уже должны понимать, что вообще не важно, какой порядок выстрелов у вас будет. У вас в любом случае есть три этих отсека, и либо вы сразу выбрали те три отсека, в одном из которых лежит патрон, либо вы выбрали три отсека, в котором нет патронов. То есть вообще не важно, вы можете стрельнуть три раза в соперника, потом три раза в себя, или наоборот, три раза в себя, три раза в соперника, или там два раза в себя, потом три раза будет стрелять соперник, и потом последний в себя. Короче, вообще не важно. И это довольно прикольно. То есть выбор здесь не имеет значения, хотя интуитивно кажется, что офигеть, какое значение он имеет. И если заходить дальше, да, если бы я жил в альтернативном мире, где я не хейтил бы казино, то это довольно неплохая игра для казино, где, например, ну, лежит игрушечный пистолет, есть тоже дилер, и вы можете подойти и сыграть с ним в эту игру. И прикол в том, что если вы просто играете, например, на 100 долларов, то всегда стреляет дилер, то есть он принимает решение. И вы такие, ну а в чем профит казино? Ведь это же около нулевая игра, ты только что это сказал. Да, так и есть. Но можно дать игроку возможность, например, за символические 5 долларов, забрать себе револьвер и принимать решение самому. И в каких-то казино вы могли бы действительно жульничать, но даже если нам все честно, люди все равно будут себя накручивать. И, соответственно, такая игра как раз играла на вот этом желании людей все контролировать, и можно было бы очень много с этого зарабатывать. В целом, вы можете подумать и вставить что-то подобное в какую-то свою игру, сделать мини-игру внутри своей большой игры, как любят какие-нибудь рок-стары. И в целом, на этом я могу закончить, но меня не давало покоя, что как будто бы когда-то должно быть важно, кто начинает первым, а кто вторым. И давайте немножко поменяем правила, потому что это не единственная возможность играть в русскую рулетку, можно делать по-другому. И новые правила я предлагаю сделать такими. У нас снова играют два человека. Первый точно так же вставляет патрон, крутит барабан и стреляет в себя. Если он выживает, то второй открывает барабан, вставляет еще один патрон, крутит барабан и стреляет в себя. Если и он выживает, то опять первый еще один патрон вставляет, крутит барабан и... Вы уже поняли. В итоге тоже шестой выстрел. Это будет стопроцентная смерть, если до нее дойдет. Первая такая же, шестая такая же что я такая же а вот между уже немножко есть разница и давайте опять же вы можете делать предположение опять будет 50 на 50 или все-таки разница будет а я пока подготовлю файл для новых подсчетов теперь то же самое опять у нас одна шестая у первого выстрела но у третьего выстрела уже все немножко по-другому начина же. У нас есть вероятность выжить первого игрока при первом выстреле, затем нам нужно получить вероятность выжить второго игрока при втором выстреле или при первом выстреле этого игрока, но это уже будет не четыре пятых, как в прошлый раз, а это будет четыре шестых, потому что его вероятность умереть была две шестые, то есть у него было два патрона и четыре пустых ячейки. И теперь мы уже вводим вероятность умереть нашу. Она составляет три шестых. Три патрона, шесть всего ячейок барабан. И это двадцать семь процентов. Уже интересно, да? Цифры другие, не шестнадцать процентов. Но, возможно, пятый выстрел сбалансирует и опять будет в сумме пятьдесят процентов. выстрел давайте опять скопирую отсюда начало даже все кстати я могу скопировать все потому что вероятность умереть и вероятность выжить одинаковые три шестых поэтому просто все копируем вставляем теперь мы умножаем на вероятность выжить второго игрока при четвертом выстреле это довольно маленькая вероятность у него четыре патрона соответственно это всего лишь шестых. И потом вероятность умереть при пятом выстреле. Это, как вы понимаете, 5 шестых. И это 7,72%. В целом, на глаз выглядит так, что в слуе будет 50%, но давайте проверим. Сумма 52,16. Вот это довольно любопытно. Кажется, что что-то не так. Да, если в данном случае я вам говорил, что так все гладенько получилось, и второго игрока в принципе можно не считать, то здесь явно придется посчитать. И, наверное, вы уже все поняли, и я просто ускорю видео и быстро посчитаю все для второго игрока, вы поверите мне на слово. Сто процентов. Все сошлось, это не ошибка, и действительно, вероятность проиграть первого игрока выше, чем вероятность проиграть второго игрока, вы поверите мне на слово, 100%. Все сошлось, это не ошибка, и действительно, вероятность проиграть первого игрока выше, чем вероятность проиграть второго игрока, а именно на 4,5% примерно, и это довольно прикольно, на мой взгляд. Опять же, если возвращаться к казино или подобным играм, то тут даже не надо вообще ничего придумывать, вы просто делаете такую игру и даете игрокам играть с дилером, но просто игрок обязан первый выстрел сделать в себя. Опять же, это может быть какая-то механика в играх с боксами и так далее. В общем, вот вам математика русской рулетки. Вроде ничего сложного, но довольно любопытные два примера, которые можно по-разному использовать, по-разному интерпретировать. На этом всё. Всем спасибо за внимание. До новых встреч.'}\n"
]
}
],
"source": [
"# Запуск транскрибации\n",
"server=\"https://box.nnp.space/api/transcribe/A88tc0ZaQO8-JOOiI7pmYM8-Hu60WQAPgMQ-RF_-zz1UBCk\"\n",
"file=\"/Users/serge/Downloads/emToQc8pxaI_audio.mp3\"\n",
"text = transcribe_audio(file, server)\n",
"\n",
"print(text)\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"zn4_Ngquuq8-Z9eFld-mYDo-df4uwUaFwdE-cbuWI7thgdg\n",
"Token copied to clipboard!\n"
]
}
],
"source": [
"import secrets\n",
"import pyperclip # Import the pyperclip library\n",
"\n",
"def generate_token(num_groups: int, group_length: int) -> str:\n",
" \"\"\"\n",
" Generates a token with a specified number of groups and length for each group.\n",
"\n",
" Args:\n",
" num_groups (int): The number of groups in the token.\n",
" group_length (int): The length of each group.\n",
"\n",
" Returns:\n",
" str: The generated token.\n",
" \"\"\"\n",
" groups = [secrets.token_urlsafe(group_length) for _ in range(num_groups)]\n",
" return \"-\".join(groups)\n",
"\n",
"if __name__ == \"__main__\":\n",
" num_groups = 4\n",
" group_length = 8\n",
" token = generate_token(num_groups, group_length)\n",
" print(token)\n",
"\n",
" # Copy the token to the clipboard\n",
" pyperclip.copy(token)\n",
" print(\"Token copied to clipboard!\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "wpc",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}