analyze_video.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import asyncio
  2. import uvicorn
  3. from fastapi import FastAPI
  4. from pydantic import BaseModel
  5. from google_ai.generativeai_video import main
  6. app = FastAPI()
  7. api_keys = [
  8. {'key': 'AIzaSyDs4FWRuwrEnQzu1M_Skio6NII6Mp4whAw', 'locked': False},
  9. {'key': 'AIzaSyC-IxUvJhbiKWA7uN1RTtVbOjt3pj_-Apc', 'locked': False},
  10. {'key': 'AIzaSyB43Pvugb-CMkEXJUSubXEAxKxYflCPPNU', 'locked': False},
  11. {'key': 'AIzaSyAYgOeHS2NUlVuVe14rgNDaxXRNRt4smuY', 'locked': False},
  12. {'key': 'AIzaSyAa4H7YzIOiqA0QIDuO6kNErFBoWT-BEtc', 'locked': False},
  13. {'key': 'AIzaSyAUvBSpjFcm7b8FsgRUTG6anzoalDp9gYg', 'locked': False},
  14. {'key': 'AIzaSyB43Pvugb-CMkEXJUSubXEAxKxYflCPPNU', 'locked': False}
  15. ]
  16. lock = asyncio.Lock()
  17. class VideoRequest(BaseModel):
  18. video_path: str
  19. prompt: str
  20. mark: str
  21. async def get_available_api_key():
  22. """获取一个未锁定的 API key,如果没有可用的则等待 60 秒后重试"""
  23. while True:
  24. async with lock:
  25. for key_data in api_keys:
  26. if not key_data['locked']:
  27. key_data['locked'] = True # 锁定该 key
  28. return key_data['key']
  29. print("没有可用的 API key,等待 60 秒后重试...")
  30. await asyncio.sleep(60)
  31. async def release_api_key(api_key):
  32. """释放已锁定的 API key,并将其放到列表末尾"""
  33. async with lock:
  34. for i, key_data in enumerate(api_keys):
  35. if key_data['key'] == api_key:
  36. key_data['locked'] = False # 释放该 key
  37. # 将释放的 key 移动到列表末尾
  38. api_keys.append(api_keys.pop(i))
  39. break
  40. @app.post("/process_video/")
  41. async def process_video(request: VideoRequest):
  42. """处理视频请求"""
  43. video_path = request.video_path
  44. prompt = request.prompt
  45. mark = request.mark
  46. # 获取一个可用的 API key
  47. # api_key = await get_available_api_key()
  48. api_key = "AIzaSyCor0q5w37Dy6fGxloLlCT7KqyEFU3PWP8"
  49. try:
  50. print("来一个请求,使用 API key:", api_key)
  51. result, mark = await main(video_path, api_key, prompt, mark)
  52. return {
  53. "code": 0,
  54. "message": "视频处理成功",
  55. "result": result,
  56. "mark": mark
  57. }
  58. except Exception as e:
  59. print(f"视频处理失败: {str(e)}")
  60. return {
  61. "code": 1,
  62. "message": f"视频处理失败: {e}",
  63. "result": f"视频处理失败: {e}",
  64. "mark": f"视频处理失败: {e}"
  65. }
  66. # finally:
  67. # # 释放 API key,确保后续请求可以使用
  68. # await release_api_key(api_key)
  69. if __name__ == "__main__":
  70. uvicorn.run(app, host="0.0.0.0", port=8080)