analyze_video.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. async def get_available_api_key():
  20. """获取一个未锁定的 API key,如果没有可用的则等待 60 秒后重试"""
  21. while True:
  22. async with lock:
  23. for key_data in api_keys:
  24. if not key_data['locked']:
  25. key_data['locked'] = True # 锁定该 key
  26. return key_data['key']
  27. print("没有可用的 API key,等待 60 秒后重试...")
  28. await asyncio.sleep(60)
  29. async def release_api_key(api_key):
  30. """释放已锁定的 API key,并将其放到列表末尾"""
  31. async with lock:
  32. for i, key_data in enumerate(api_keys):
  33. if key_data['key'] == api_key:
  34. key_data['locked'] = False # 释放该 key
  35. # 将释放的 key 移动到列表末尾
  36. api_keys.append(api_keys.pop(i))
  37. break
  38. @app.post("/process_video/")
  39. async def process_video(request: VideoRequest):
  40. """处理视频请求"""
  41. video_path = request.video_path
  42. # 获取一个可用的 API key
  43. # api_key = await get_available_api_key()
  44. api_key = "AIzaSyCor0q5w37Dy6fGxloLlCT7KqyEFU3PWP8"
  45. try:
  46. print("来一个请求,使用 API key:", api_key)
  47. result, mark = await main(video_path, api_key)
  48. return {
  49. "code": 0,
  50. "message": "视频处理成功",
  51. "result": result,
  52. "mark": mark
  53. }
  54. except Exception as e:
  55. print(f"视频处理失败: {str(e)}")
  56. return {
  57. "code": 1,
  58. "message": f"视频处理失败: {e}",
  59. "result": f"视频处理失败: {e}",
  60. "mark": f"视频处理失败: {e}"
  61. }
  62. # finally:
  63. # # 释放 API key,确保后续请求可以使用
  64. # await release_api_key(api_key)
  65. if __name__ == "__main__":
  66. uvicorn.run(app, host="0.0.0.0", port=8080)