123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- from django.http import HttpResponse,JsonResponse
- from django.shortcuts import render
- from django.views.decorators.csrf import csrf_exempt #在视图函数上添加@csrf_exempt装饰器来绕过CSRF保护。不引起csrf报错也可以在前端加上{%csrf_token%}
- from . import generalRequest,dbOperate_upload_Uvoice,login as login_func,register #引入请求声纹API方法
- from datetime import datetime
- import json
- import time
- import os
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aiDogProject.settings")
- import django
- django.setup()
- from aiDogApp.models import *
- from django.views.decorators.csrf import csrf_exempt
- # Create your views here.
- # from rest_framework.decorators import api_view
- # from rest_framework.response import Response
- APPId = "4522d502"
- APISecret = "Zjc5MjJhMzBmMDYxNTg4MTNlMTg1MmQw"
- APIKey = "f7a9f0ceae3ff7ebfc0c89efeb18810d"
- # file_path = './media/讯飞开放平台.mp3'#读取数据库路径下音源@@@@@@@@@@@@
- file_path = './audio_cache/voice_JTYNZP9O_1729843681.mp3'#读取数据库路径下音源
- res_pub={
- "status":"",
- "date":"2024-5-6",
- "msg":""
- }
- # @api_view(['GET'])
- # @csrf_exempt
- def check_Uvoice(request):
- #user_uid=request.POST.get("user_id",'')# 用户ID
- # file_path = request.POST.get("file_path", '') # 用户声纹 ID
- best_res = None # 存储符合条件的最大 score 结果
- max_score = 0.3 # 初始为0.3, 只记录比0.3大的score
- # file_path = './audio_cache/voice_JTYNZP9O_1729843681.mp3'
- file_path = './media/讯飞开放平台.mp3' # 读取数据库路径下音源
- date_now = datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S')
- user_uid1 = 'JTYNZP9O'
- feature_id = 'iFLYTEK_examples_featureId'
- user_uid = 'iFLYTEK_examples_groupId'
- voices = VoiceFeatureInfo.objects.filter(uid=user_uid1)
- for voice in voices:
- print(voice.voice_feature_id)
- print(voice.command_type)
- message_response = generalRequest.req_url(
- api_name='searchScoreFea', APPId=APPId, APIKey=APIKey, APISecret=APISecret,
- file_path=file_path, featureId=voice.voice_feature_id, groupId=user_uid
- )
- if message_response.get('code') == 0:
- data_dict = json.loads(message_response.get('msg'))
- score = data_dict.get('score')
- print(score)
- # 更新最大 score 和对应的结果
- if score is not None and score > max_score:
- max_score = score
- best_res = {
- "status": "success",
- "date": date_now,
- "message": message_response,
- "score": score,
- "command_type": voice.command_type,
- "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- }
- # 检查是否找到符合条件的结果
- if best_res:
- return JsonResponse(best_res)
- else:
- return JsonResponse({"message": "请重新发出口令."})
- @csrf_exempt
- def upload_Uvoice(request):
- # if request.method != "POST":
- # return JsonResponse({
- # "status": "Error",
- # "message": "Only POST method is allowed.",
- # "date": datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S')
- # })
- user_uid = request.POST.get("user", '') # 用户ID
- command_type = request.POST.get("command_type", '')
- file_stream = request.FILES.get("file_stream") # Get the uploaded file
- feature_id = str(time.time())[:10] # 随机 voice feature ID
- res = None
- user_uid = 'iFLYTEK_examples_groupId'
- command_type = 3
- # 确保用户id和声纹id不为空
- if not user_uid or not command_type:
- return JsonResponse({
- "status": "Error",
- "date": datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S'),
- "message": "Please ensure all required fields are provided!",
- "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- })
- else:
- res = {
- "status": "Success",
- "date": datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S'),
- "message": dbOperate_upload_Uvoice.process_voice_recording(user_uid, feature_id, command_type,file_stream),
- "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- }
- return JsonResponse(res)
- # @csrf_exempt
- def toLogin(request):
- return render(request, "login.html")
- # return JsonResponse(res)
- @csrf_exempt
- def login(request):
- mobile_number = request.POST.get("mobile_number", '')
- password = request.POST.get("password", '')
- # mobile_number = '1234567890'
- # password = 'ypwd121'
- if mobile_number and password:
- res_pub["msg"]=login_func.login_user(mobile_number, password)
- # if res["msg"]!="":
- return JsonResponse(res_pub)
- else:
- return HttpResponse("登陆失败!")
- @csrf_exempt
- def register(request):
- mobile_number = request.POST.get("mobile_number", '')
- password = request.POST.get("password", '')
- mobile_number = '1234567890'
- password = 'yyqc87489882'
- res = None
- date_now = datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S')
- if mobile_number and password:
- # 请求注册接口
- uid = register.register_user(mobile_number, password)
- # 如果注册成功,返回uid,uid不为空则创建声纹库
- if uid is not None and uid != '':
- # 1.创建声纹特征库 createGroup
- message_response = generalRequest.req_url(api_name='createGroup', APPId=APPId,
- APIKey=APIKey, APISecret=APISecret, file_path=file_path,
- featureId='',
- groupId=uid)
- if message_response.get('code') == 0:
- # 声纹库创建成功,返回给前端注册结果
- res = {
- "status": "success",
- "date": date_now,
- "message": message_response,
- "user": uid,
- "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- }
- return JsonResponse(res)
- else:
- return HttpResponse("注册失败!")
|