I have this in python:
I just made a python script to generate videos, and wanted to expose this functionality via the REST API, with using fastAPI, but when I added it, I get exception about openai modules, that can't be found
import openai
from fastapi import FastAPI
import re
import shutil
import urllib.request
from gtts import gTTS
from moviepy.editor import *
openai.api_key = "API_KEY"
app = FastAPI()
@app.get("/generate-video")
async def generate_video():
return generateResultVideo("")
def generateResultVideo(text):
try:
paragraphs = re.split(r"[,.]", text)
initTemporaryFolders()
generateTemporaryVideoSnapshots(paragraphs)
result_video = concatTempSnapshots()
return result_video
finally:
removeTemporaryFolders()
def initTemporaryFolders():
os.makedirs("audio")
os.makedirs("images")
os.makedirs("videos")
def removeTemporaryFolders():
shutil.rmtree("videos")
shutil.rmtree("images")
shutil.rmtree("audio")
def generateTemporaryVideoSnapshots(paragraphs):
i = 1
for para in paragraphs[:-1]:
response = openai.Image.create(
prompt=para.strip(),
n=1,
size="1024x1024"
)
print("Generate New AI Image From Paragraph...")
image_url = response['data'][0]['url']
urllib.request.urlretrieve(image_url, f"images/image{i}.jpg")
print("The Generated Image Saved in Images Folder!")
# Create gTTS instance and save to a file
tts = gTTS(text=para, lang='en', slow=False)
tts.save(f"audio/voiceover{i}.mp3")
print("The Paragraph Converted into VoiceOver & Saved in Audio Folder!")
# Load the audio file using moviepy
print("Extract voiceover and get duration...")
audio_clip = AudioFileClip(f"audio/voiceover{i}.mp3")
audio_duration = audio_clip.duration
# Load the image file using moviepy
print("Extract Image Clip and Set Duration...")
image_clip = ImageClip(f"images/image{i}.jpg").set_duration(audio_duration)
# Use moviepy to create a text clip from the text
print("Customize The Text Clip...")
text_clip = TextClip(para,
fontsize=65,
color="white",
size=(1024, 1024),
method="caption",
align="South"
)
text_clip = text_clip.set_pos('center').set_duration(audio_duration)
print("Concatenate Audio, Image, Text to Create Final Clip...")
clip = image_clip.set_audio(audio_clip)
video = CompositeVideoClip([clip, text_clip])
# Save the final video to a file
video = video.write_videofile(f"videos/video{i}.mp4", fps=24)
print(f"The Video{i} Has Been Created Successfully!")
i += 1
def concatTempSnapshots():
clips = []
l_files = os.listdir("videos")
for file in l_files:
clip = VideoFileClip(f"videos/{file}")
clips.append(clip)
print("Concatenate All The Clips to Create a Final Video...")
final_video = concatenate_videoclips(clips, method="compose")
final_video = final_video.write_videofile("final_video.mp4")
print("The Final Video Has Been Created Successfully!")
return final_video
And get exception:
INFO: Will watch for changes in these directories: ['/Users/admin/Video-AI-Startup/ShortsGeneratorV2']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [40071] using WatchFiles
Process SpawnProcess-1:
Traceback (most recent call last):
File "/usr/local/Cellar/python@3.10/3.10.11/Frameworks/Python.framework/Versions/3.10/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
self.run()
File "/usr/local/Cellar/python@3.10/3.10.11/Frameworks/Python.framework/Versions/3.10/lib/python3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.10/site-packages/uvicorn/_subprocess.py", line 76, in subprocess_started
target(sockets=sockets)
File "/usr/local/lib/python3.10/site-packages/uvicorn/server.py", line 60, in run
return asyncio.run(self.serve(sockets=sockets))
File "/usr/local/Cellar/python@3.10/3.10.11/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
File "/usr/local/lib/python3.10/site-packages/uvicorn/server.py", line 67, in serve
config.load()
File "/usr/local/lib/python3.10/site-packages/uvicorn/config.py", line 477, in load
self.loaded_app = import_from_string(self.app)
File "/usr/local/lib/python3.10/site-packages/uvicorn/importer.py", line 24, in import_from_string
raise exc from None
File "/usr/local/lib/python3.10/site-packages/uvicorn/importer.py", line 21, in import_from_string
module = importlib.import_module(module_str)
File "/usr/local/Cellar/python@3.10/3.10.11/Frameworks/Python.framework/Versions/3.10/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/Users/admin/Video-AI-Startup/ShortsGeneratorV2/./main.py", line 1, in <module>
import openai
ModuleNotFoundError: No module named 'openai'
Tried every solution from stackoverflow, but still get this error, pycharm is okay, no red lines
If I delete fast API, code compiles successfully