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("注册失败!")