0

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

0 Answers0