views.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. from django.http import HttpResponse,JsonResponse
  2. from django.shortcuts import render
  3. from django.views.decorators.csrf import csrf_exempt #在视图函数上添加@csrf_exempt装饰器来绕过CSRF保护。不引起csrf报错也可以在前端加上{%csrf_token%}
  4. from . import generalRequest,dbOperate_upload_Uvoice,login as login_func,register #引入请求声纹API方法
  5. from datetime import datetime
  6. import json
  7. import time
  8. import os
  9. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aiDogProject.settings")
  10. import django
  11. django.setup()
  12. from aiDogApp.models import *
  13. from django.views.decorators.csrf import csrf_exempt
  14. # Create your views here.
  15. # from rest_framework.decorators import api_view
  16. # from rest_framework.response import Response
  17. APPId = "4522d502"
  18. APISecret = "Zjc5MjJhMzBmMDYxNTg4MTNlMTg1MmQw"
  19. APIKey = "f7a9f0ceae3ff7ebfc0c89efeb18810d"
  20. # file_path = './media/讯飞开放平台.mp3'#读取数据库路径下音源@@@@@@@@@@@@
  21. file_path = './audio_cache/voice_JTYNZP9O_1729843681.mp3'#读取数据库路径下音源
  22. res_pub={
  23. "status":"",
  24. "date":"2024-5-6",
  25. "msg":""
  26. }
  27. # @api_view(['GET'])
  28. # @csrf_exempt
  29. def check_Uvoice(request):
  30. #user_uid=request.POST.get("user_id",'')# 用户ID
  31. # file_path = request.POST.get("file_path", '') # 用户声纹 ID
  32. best_res = None # 存储符合条件的最大 score 结果
  33. max_score = 0.3 # 初始为0.3, 只记录比0.3大的score
  34. # file_path = './audio_cache/voice_JTYNZP9O_1729843681.mp3'
  35. file_path = './media/讯飞开放平台.mp3' # 读取数据库路径下音源
  36. date_now = datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S')
  37. user_uid1 = 'JTYNZP9O'
  38. feature_id = 'iFLYTEK_examples_featureId'
  39. user_uid = 'iFLYTEK_examples_groupId'
  40. voices = VoiceFeatureInfo.objects.filter(uid=user_uid1)
  41. for voice in voices:
  42. print(voice.voice_feature_id)
  43. print(voice.command_type)
  44. message_response = generalRequest.req_url(
  45. api_name='searchScoreFea', APPId=APPId, APIKey=APIKey, APISecret=APISecret,
  46. file_path=file_path, featureId=voice.voice_feature_id, groupId=user_uid
  47. )
  48. if message_response.get('code') == 0:
  49. data_dict = json.loads(message_response.get('msg'))
  50. score = data_dict.get('score')
  51. print(score)
  52. # 更新最大 score 和对应的结果
  53. if score is not None and score > max_score:
  54. max_score = score
  55. best_res = {
  56. "status": "success",
  57. "date": date_now,
  58. "message": message_response,
  59. "score": score,
  60. "command_type": voice.command_type,
  61. "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  62. }
  63. # 检查是否找到符合条件的结果
  64. if best_res:
  65. return JsonResponse(best_res)
  66. else:
  67. return JsonResponse({"message": "请重新发出口令."})
  68. @csrf_exempt
  69. def upload_Uvoice(request):
  70. # if request.method != "POST":
  71. # return JsonResponse({
  72. # "status": "Error",
  73. # "message": "Only POST method is allowed.",
  74. # "date": datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S')
  75. # })
  76. user_uid = request.POST.get("user", '') # 用户ID
  77. command_type = request.POST.get("command_type", '')
  78. file_stream = request.FILES.get("file_stream") # Get the uploaded file
  79. feature_id = str(time.time())[:10] # 随机 voice feature ID
  80. res = None
  81. user_uid = 'iFLYTEK_examples_groupId'
  82. command_type = 3
  83. # 确保用户id和声纹id不为空
  84. if not user_uid or not command_type:
  85. return JsonResponse({
  86. "status": "Error",
  87. "date": datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S'),
  88. "message": "Please ensure all required fields are provided!",
  89. "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  90. })
  91. else:
  92. res = {
  93. "status": "Success",
  94. "date": datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S'),
  95. "message": dbOperate_upload_Uvoice.process_voice_recording(user_uid, feature_id, command_type,file_stream),
  96. "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  97. }
  98. return JsonResponse(res)
  99. # @csrf_exempt
  100. def toLogin(request):
  101. return render(request, "login.html")
  102. # return JsonResponse(res)
  103. @csrf_exempt
  104. def login(request):
  105. mobile_number = request.POST.get("mobile_number", '')
  106. password = request.POST.get("password", '')
  107. # mobile_number = '1234567890'
  108. # password = 'ypwd121'
  109. if mobile_number and password:
  110. res_pub["msg"]=login_func.login_user(mobile_number, password)
  111. # if res["msg"]!="":
  112. return JsonResponse(res_pub)
  113. else:
  114. return HttpResponse("登陆失败!")
  115. @csrf_exempt
  116. def register(request):
  117. mobile_number = request.POST.get("mobile_number", '')
  118. password = request.POST.get("password", '')
  119. mobile_number = '1234567890'
  120. password = 'yyqc87489882'
  121. res = None
  122. date_now = datetime.strftime(datetime.today(), '%Y-%m-%d %H:%M:%S')
  123. if mobile_number and password:
  124. # 请求注册接口
  125. uid = register.register_user(mobile_number, password)
  126. # 如果注册成功,返回uid,uid不为空则创建声纹库
  127. if uid is not None and uid != '':
  128. # 1.创建声纹特征库 createGroup
  129. message_response = generalRequest.req_url(api_name='createGroup', APPId=APPId,
  130. APIKey=APIKey, APISecret=APISecret, file_path=file_path,
  131. featureId='',
  132. groupId=uid)
  133. if message_response.get('code') == 0:
  134. # 声纹库创建成功,返回给前端注册结果
  135. res = {
  136. "status": "success",
  137. "date": date_now,
  138. "message": message_response,
  139. "user": uid,
  140. "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  141. }
  142. return JsonResponse(res)
  143. else:
  144. return HttpResponse("注册失败!")