本文最后更新于 80 天前,其中的信息可能已经有所发展或是发生改变。
准备:
1、可以运行Docker的主机
2、良好的网络
3、会一点代码或会使用AI写代码
创建一个whisper文件夹,文件夹内创建一个docker-compose.yml文件,写入以下信息:
version: '3.8' # 使用适合您Docker Compose版本的yaml格式版本
services:
whisper_asr_service:
image: onerahmet/openai-whisper-asr-webservice:latest
container_name: whisper_asr_container # 可选,用于自定义容器名称
ports:
- 9000:9000 #访问端口
volumes:
- ./whiper:/root/.cache/whisper # 模型缓存目录挂载
environment:
- ASR_MODEL=medium
可选模型
在目录中运行docker-compose up -d
下载镜像和创建容器。
成功启动容器后,访问http://IP:9000/docs查看接口文档:
/asr是语音转文字接口,/det…age是判断语言类型接口。一般使用/asr即可,可以直接在网页上进行测试:
如图上所示,我将我说的”随便说一句话“文件传上后即解析出对应文字。
但是OpenAI的接口不是这样的:
因此无法直接接到One-Api上,需要用软件转一下,这里用宝塔搭建的,就用PHP写,用的Laravel框架:
创建AudioTranscriptionController
控制器
php artisan make:controller /API/AudioTranscriptionController
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class AudioTranscriptionController extends Controller
{
//
public function transcribe(Request $request)
{
// 验证授权头信息(如果需要的话)
if (!$request->bearerToken() || $request->bearerToken() !== env('OPENAI_API_KEY', 'sk-fastgpt')) {
return response()->json(['error' => 'Unauthorized'], 401);
}
// return response()->json(['text' => '测试']);
// 获取上传的音频文件
$file = $request->file('file');
if (!$file) {
return response()->json(['error' => 'Missing audio file'], 422);
}
// 构建转发请求的参数
$response = Http::attach(
'audio_file', file_get_contents($file), $file->getClientOriginalName(), ['Content-Type' => 'audio']
)->post('http://IP:9000/asr', [
'encode' => true,
'task' => 'transcribe',
'word_timestamps' => false,
'output' => 'txt',
]);
// 处理ASR服务返回的结果
$transcriptionText = $response->body();
// 将文本转换为JSON格式响应
return response()->json(['text' => $transcriptionText]);
}
}
route/api.php
中添加以下代码:
use App\Http\Controllers\API\AudioTranscriptionController;
// ...
Route::post('/v1/audio/transcriptions', [AudioTranscriptionController::class, 'transcribe']);
在.env
文件中添加OPENAI_API_KEY
变量:
OPENAI_API_KEY=sk-fastgpt
然后http://LaravelIP/api/v1/audio/transcriptions就做好和OpenAI一样的转换接口了。
同样可以测试一下看看:
最后接入到One-Api中就可以使用了:
Python版本
from flask import Flask, request, jsonify
import os
import requests
app = Flask(__name__)
@app.route('/v1/audio/transcriptions', methods=['POST'])
def transcribe():
# 验证授权头信息(如果需要的话)
# api_key = os.getenv('OPENAI_API_KEY')
# auth_header = request.headers.get('Authorization')
# if not auth_header or f'Bearer {api_key}' != auth_header:
# return jsonify({'error': 'Unauthorized'}), 401
# 获取上传的音频文件
file = request.files.get('file')
if not file:
return jsonify({'error': 'Missing audio file'}), 422
# 构建转发请求的参数
files = {'audio_file': (file.filename, file.stream, 'audio')}
data = {
'encode': True,
'task': 'transcribe',
'word_timestamps': False,
'output': 'txt',
}
# 发送POST请求到ASR服务
response = requests.post('http://192.168.0.128:9000/asr', files=files, data=data)
# 处理ASR服务返回的结果
transcription_text = response.text
# 将文本转换为JSON格式响应
return jsonify({'text': transcription_text})
if __name__ == '__main__':
# 指定IP地址和端口
app.run(host='0.0.0.0', port=9001, debug=True)
需要先pip install flask和requests