Django + python之语音转文字/小程序(语音搜索用)

**我用的是Centos7系统
1、注册百度账号并登陆

https://login.bce.baidu.com/
2、找到所需要的服务
在这里插入图片描述
3、创建应用
在这里插入图片描述
在这里插入图片描述
创建完成会生成以下信息
在这里插入图片描述
4、需要安装的包有

pip3 install pydub
pip3 install wave(这个包好像是python自带的,import wave报错再装)
需要录音的话需要安装以下包:
pip3 install pyaudio
安装pyaudio之前需要安装portaudio
[添加链接描述](http://portaudio.com/download.html)下载 pa_stable_v190600_20161030.tgz (或其他版本)
解压:
tar zxvf pa_stable_v190600_20161030.tgz
移动到/usr/local文件夹:
mv portaudio /usr/local
进入portaudio:
cd  /usr/local/portaudio
执行以下命令:
./configure
make
make install

5、音频格式转换还需要安装ffmpeg
1)安装Nux Dextop Yum 源

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

2)安装FFmpeg 和 FFmpeg开发包

sudo yum install ffmpeg ffmpeg-devel -y

6、编写代码(我新建的子应用)
在这里插入图片描述
1)在utils.py里添加以下代码

import base64

import datetime

import json

import os

import wave

import requests

from pyaudio import PyAudio, paInt16

from pydub import AudioSegment


# 获取token
def get_access_token():

	API_Key = 'eINfdS6lsyGOliLXeqtsp5dd' # 换成你自己的

	Secret_Key = 'GKgz239UmCB8GS3B98h686ZUVxd998WH' # 换成你自己的

	url = 'https://openapi.baidu.com/oauth/2.0/token?'

	payload = {
    	"grant_type": "client_credentials",
    	"client_id": API_Key,
    	"client_secret": Secret_Key
	}

	response = requests.get(url, params=payload, timeout=3)
	json_str = json.loads(response.text)

	access_token = json_str['access_token']

	return access_token


framerate = 16000
NUM_SAMPLES = 2000
channels = 1
sampwidth = 2
TIME = 2

# 前端传来的语音文件写入方式
def save_wave_file(filename, data):

	wf = wave.open(filename, 'wb')
	wf.setnchannels(channels)
	wf.setsampwidth(sampwidth)
	wf.setframerate(framerate)
	wf.writeframes(b"".join(data))
	wf.close()


# 音频格式转换(mp3转wav)
def trans_mp3_to_wav():

	# 转换前的语音地址
	song = AudioSegment.from_mp3('/home/wwwroot/zcc/01.mp3')

	# 转换后的语音地址
	song.export("/home/wwwroot/zcc/01.wav", format="wav")


# 百度音频转换接口
def get_word(file_name, get_vido):

	# 音频文件写入到服务器
	save_wave_file(file_name, get_vido)

	# 音频为mp3格式转为wav格式
	trans_mp3_to_wav()

	with open('/home/wwwroot/zcc/01.wav', "rb") as f:
    	speech = base64.b64encode(f.read()).decode('utf8')

	size = os.path.getsize(r'/home/wwwroot/zcc/01.wav')

	headers = {'Content-Type': 'application/json'}

	access_token = get_access_token()

	url = 'https://vop.baidu.com/pro_api'
	data = {
    	"format": "wav",
    	"rate": 16000,
    	"channel": 1,
    	"cuid": 'zhichacha',
    	"dev_pid": 80001,
    	"token": access_token,
    	"len": size,
    	"speech": speech,

	}
	req = requests.post(url, json.dumps(data), headers)
	result = json.loads(req.text)

	return result


# 录音(微信小程序开发腾讯有录音功能所以这个没用上)
def my_record():
	pa = PyAudio()
	stream = pa.open(format=paInt16, channels=1,
                 	rate=framerate, input=True,
                 	frames_per_buffer=NUM_SAMPLES)
	my_buf = []
	count = 0
	# print('.')
	# 控制录音时间
	while count < TIME * 10:
    	string_audio_data = stream.read(NUM_SAMPLES)
    	my_buf.append(string_audio_data)
    	count += 1

	save_wave_file('01.wav', my_buf)
	stream.close()

2)视图逻辑

from rest_framework import status

from rest_framework.generics import GenericAPIView

from rest_framework.response import Response

from baiduapi.utils import get_word


class GetWordview(GenericAPIView):
	"""
	音频转换
	"""
	def post(self, request):
    	# 获取音频文件
    	get_audio = request.data.get('audio', None)
        # 定义路径
    	file_name = '/home/wwwroot/zcc/01.mp3'
    	# 是否为空
    	if get_audio:

        	# 百度音频接口
        	data = get_word(file_name, get_audio)
        	if data['err_no'] == 0:

            	# 返回数据
            	data = {
                	'status': 200,
                	'msg': 'OK',
                	'data': data['result'][0].replace('。', '')
            	}

            	return Response(data=data, status=status.HTTP_200_OK)
        	else:
            	# 返回数据
            	data = {
                	'status': data['err_no'],
                	'msg': data['err_msg'],
            	}

            	return Response(data=data, status=status.HTTP_200_OK)

    	else:
        	data = {
            	'status': 202,
            	'msg': '参数缺失'
        	}

        	return Response(data=data, status=status.HTTP_200_OK)

*****小程序开发如若测试成功,但体验版失败请在小程序后台需配置uploadFile合法域名
大功告成!!!!!!!!

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,如果你想了解关于交通方面的程序代码,可以使用 PythonDjango 和 MySQL 来开发。以下是一个简单的示例,展示如何使用这些技术开发交通管理系统。 首先,你需要安装 Django 和 MySQL,然后创建一个新的 Django 项目。在该项目中,你需要创建一个新的应用程序,用于处理交通管理系统的功能。 在应用程序中,你可以创建一个名为 Traffic 的模型,用于存储交通数据。该模型可以包含以下字段: ```python from django.db import models class Traffic(models.Model): location = models.CharField(max_length=100) date = models.DateField() time = models.TimeField() congestion = models.IntegerField() ``` 在这个模型中,我们存储了交通位置、日期、时间和拥堵度。接下来,你需要创建一个视图,用于显示交通数据。 ```python from django.shortcuts import render from .models import Traffic def traffic(request): traffic_data = Traffic.objects.all() return render(request, 'traffic.html', {'traffic_data': traffic_data}) ``` 在这个视图中,我们获取 Traffic 模型的所有实例,并将它们传递给 traffic.html 模板。 最后,你需要创建一个 traffic.html 模板,用于显示交通数据。 ```html <!DOCTYPE html> <html> <head> <title>Traffic Data</title> </head> <body> <h1>Traffic Data</h1> <table> <tr> <th>Location</th> <th>Date</th> <th>Time</th> <th>Congestion</th> </tr> {% for traffic in traffic_data %} <tr> <td>{{ traffic.location }}</td> <td>{{ traffic.date }}</td> <td>{{ traffic.time }}</td> <td>{{ traffic.congestion }}</td> </tr> {% endfor %} </table> </body> </html> ``` 在这个模板中,我们使用一个简单的表格来显示交通数据。 这只是一个简单的示例,展示如何使用 PythonDjango 和 MySQL 开发交通管理系统。实际上,你可能需要更多的功能和更复杂的模型来处理实际的交通数据。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值