स्थानीय डेप्थ वीडियो कन्वर्टर बनाएं - Gradio के साथ

Wikiprompt से, मुफ्त प्रॉम्प्ट विश्वकोश

Larus Canus
योगदानकर्ताLarus CanusXस्रोत

20 जुल॰ 2026

स्थानीय डेप्थ वीडियो कन्वर्टर बनाएं - Gradio के साथ Gradio और Depth Anything V2 का उपयोग करके एक स्थानीय Depth वीडियो कनवर्टर एप्लिकेशन बनाने के लिए एक विस्तृत प्रॉम्प्ट, जिसमें क्रॉस-प्लेटफॉर्म एक्सेलेरेशन सपोर्ट और कई कस्टमाइज़ेशन विकल्प शामिल हैं।

प्रॉम्प्ट सामग्रीसहेजें

🌐
निम्नलिखित एक पूर्ण Python Depth वीडियो कनवर्टर है जो Windows और macOS पर स्थानीय रूप से चलता है, बिना किसी मौजूदा प्रोजेक्ट कोड पर निर्भर हुए: ## 1. मुख्य Python स्क्रिप्ट (`depth_converter.py`) ```python import os import subprocess import tempfile import shutil import numpy as np import cv2 import gradio as gr from PIL import Image import torch from transformers import pipeline from transformers import AutoModelForDepthEstimation, AutoProcessor import platform import json # सिस्टम जानकारी IS_WINDOWS = platform.system() == "Windows" IS_MACOS = platform.system() == "Darwin" class DepthVideoConverter: def __init__(self): self.device = self._get_device() self.models = {} self.current_model_size = "small" def _get_device(self): """स्वचालित रूप से सर्वोत्तम उपलब्ध डिवाइस चुनें""" if torch.cuda.is_available() and IS_WINDOWS: print("CUDA उपलब्ध है - GPU का उपयोग कर रहे हैं") return "cuda" elif IS_MACOS and torch.backends.mps.is_available(): print("Apple Silicon उपलब्ध है - MPS का उपयोग कर रहे हैं") return "mps" else: print("CPU का उपयोग कर रहे हैं") return "cpu" def _load_model(self, model_size): """मॉडल को लोड करें और कैश करें""" if model_size == self.current_model_size and self.models.get(model_size): return self.models[model_size] model_map = { "small": "depth-anything/Depth-Anything-V2-Small", "base": "depth-anything/Depth-Anything-V2-Base", "large": "depth-anything/Depth-Anything-V2-Large" } model_name = model_map.get(model_size, model_map["small"]) if self.models.get(self.current_model_size): del self.models[self.current_model_size] torch.cuda.empty_cache() if self.device == "cuda" else None print(f"मॉडल लोड हो रहा है: {model_name}") try: # समकालिक पाइपलाइन का उपयोग करें pipe = pipeline( "depth-estimation", model=model_name, device=self.device ) self.models[model_size] = pipe self.current_model_size = model_size return pipe except Exception as e: print(f"मॉडल लोडिंग में त्रुटि: {e}") raise def process_frame(self, frame, model_size, invert=False, temporal_smoothing=0): """एक फ्रेम को डेप्थ मैप में बदलें""" # फ्रेम को RGB में बदलें rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) pil_image = Image.fromarray(rgb_frame) # डेप्थ अनुमान pipe = self._load_model(model_size) result = pipe(pil_image) # डेप्थ मैप निकालें depth_map = np.array(result["depth"]) # सामान्यीकरण (0-255) depth_map = (depth_map - depth_map.min()) / (depth_map.max() - depth_map.min() + 1e-8) depth_map = (depth_map * 255).astype(np.uint8) # समयिक स्मूथिंग (सरल फ्रेम औसत) if temporal_smoothing > 0: if not hasattr(self, '_prev_depth'): self._prev_depth = depth_map.astype(np.float32) else: alpha = 1.0 / (1.0 + temporal_smoothing) self._prev_depth = alpha * depth_map.astype(np.float32) + (1.0 - alpha) * self._prev_depth depth_map = self._prev_depth.astype(np.uint8) # काले/सफेद उलटना if invert: depth_map = 255 - depth_map return depth_map def process_video(self, input_path, model_size, output_resolution, invert, temporal_smoothing, preserve_audio): """पूरे वीडियो को प्रोसेस करें""" # आउटपुट फ़ाइल नाम तैयार करें output_path = os.path.join( os.path.dirname(input_path), "depth_" + os.path.basename(input_path) ) # टेम्पोरेरी फ़ाइलें temp_dir = tempfile.mkdtemp() temp_video = os.path.join(temp_dir, "temp_video.mp4") try: # वीडियो खोलें cap = cv2.VideoCapture(input_path) if not cap.isOpened(): raise Exception("वीडियो नहीं खोला जा सका") # वीडियो जानकारी प्राप्त करें fps = int(cap.get(cv2.CAP_PROP_FPS)) frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # आउटपुट रिज़ोल्यूशन निर्धारित करें if output_resolution == "मूल": out_width, out_height = frame_width, frame_height elif output_resolution == "1280x720": out_width, out_height = 1280, 720 elif output_resolution == "1920x1080": out_width, out_height = 1920, 1080 elif output_resolution == "848x480": out_width, out_height = 848, 480 else: out_width, out_height = frame_width, frame_height # वीडियो राइटर बनाएं fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter(temp_video, fourcc, fps, (out_width, out_height)) # फ़्रेम प्रोसेसिंग frame_count = 0 while True: ret, frame = cap.read() if not ret: break # फ्रेम को डेप्थ मैप में बदलें depth_map = self.process_frame(frame, model_size, invert, temporal_smoothing) # रिज़ोल्यूशन बदलें depth_resized = cv2.resize(depth_map, (out_width, out_height), interpolation=cv2.INTER_LINEAR) # ग्रेस्केल से BGR में बदलें depth_bgr = cv2.cvtColor(depth_resized, cv2.COLOR_GRAY2BGR) # वीडियो में लिखें out.write(depth_bgr) frame_count += 1 print(f"\rप्रगति: {frame_count}/{total_frames} ({frame_count/total_frames*100:.1f}%)", end="") print("\nप्रोसेसिंग पूर्ण!") cap.release() out.release() # ऑडियो जोड़ें if preserve_audio: self._preserve_audio(input_path, temp_video, output_path) else: shutil.move(temp_video, output_path) return output_path finally: # सफाई if os.path.exists(temp_dir): shutil.rmtree(temp_dir) def _preserve_audio(self, input_path, temp_video, output_path): """ffmpeg का उपयोग करके ऑडियो संरक्षित करें""" try: cmd = [ "ffmpeg", "-i", input_path, "-i", temp_video, "-map", "0:a", "-map", "1:v", "-c:a", "aac", "-c:v", "libx264", "-preset", "medium", "-crf", "23", "-shortest", output_path ] result = subprocess.run(cmd, capture_output=True, text=True, check=True) except subprocess.CalledProcessError as e: print(f"ffmpeg त्रुटि: {e}") print(f"ffmpeg आउटपुट: {e.stdout}") print(f"ffmpeg stderr: {e.stderr}") # फ़ॉलबैक: बिना ऑडियो के कॉपी करें shutil.copy(temp_video, output_path) print("चेतावनी: ऑडियो जोड़ने में विफल। बिना ऑडियो के सहेजा गया।") # UI इंटरफ़ेस def create_ui(): converter = DepthVideoConverter() def process_video_ui(video_file, model_size, output_resolution, invert, temporal_smoothing, preserve_audio): if video_file is None: return "कृपया एक वीडियो फ़ाइल चुनें", None # प्रोसेस करें output_path = converter.process_video( video_file.name if hasattr(video_file, 'name') else video_file, model_size, output_resolution, invert, temporal_smoothing, preserve_audio ) return "प्रोसेसिंग पूर्ण!", output_path with gr.Blocks(title="Depth वीडियो कनवर्टर") as demo: gr.Markdown("# डेप्थ वीडियो कनवर्टर") gr.Markdown("Depth Anything V2 का उपयोग करके साधारण वीडियो को डेप्थ मैप वीडियो में बदलें") with gr.Row(): with gr.Column(scale=1): video_input = gr.Video(label="वीडियो अपलोड करें (MP4/MOV)") model_size = gr.Dropdown( choices=["small", "base", "large"], value="small", label="मॉडल आकार", info="छोटे मॉडल तेज़ हैं, बड़े मॉडल अधिक सटीक हैं" ) output_resolution = gr.Dropdown( choices=["मूल", "848x480", "1280x720", "1920x1080"], value="मूल", label="आउटपुट रिज़ोल्यूशन" ) invert = gr.Checkbox(label="काले/सफेद उलटें", value=False) temporal_smoothing = gr.Slider( minimum=0, maximum=10, value=0, step=1, label="समयिक स्मूथिंग", info="फ़्लिकर कम करने के लिए (उच्च मान अधिक स्मूथ)" ) preserve_audio = gr.Checkbox(label="ऑडियो संरक्षित करें", value=True) process_btn = gr.Button("वीडियो बदलें", variant="primary") with gr.Column(scale=1): status = gr.Textbox(label="स्थिति", interactive=False) video_output = gr.Video(label="आउटपुट वीडियो") process_btn.click( process_video_ui, inputs=[video_input, model_size, output_resolution, invert, temporal_smoothing, preserve_audio], outputs=[status, video_output] ) return demo if __name__ == "__main__": demo = create_ui() print(f"डिवाइस: {torch.cuda.is_available() if torch.cuda.is_available() else 'CPU/MPS'}") demo.launch(server_name="127.0.0.1", server_port=7860, share=False) ``` ## 2. `requirements.txt` ``` gradio>=4.0.0 opencv-python>=4.8.0 numpy>=1.24.0 torch>=2.0.0 transformers>=4.35.0 pillow>=10.0.0 ffmpeg-python>=0.2.0 ``` ## 3. `README.md` # Depth वीडियो कनवर्टर Depth Anything V2 का उपयोग करके साधारण वीडियो को डेप्थ मैप वीडियो में बदलें। ## विशेषताएँ - 🚀 तीन डेप्थ मॉडल विकल्प (छोटा, मध्यम, बड़ा) - ⚡ NVIDIA CUDA, Apple Silicon, या CPU स्वचालित चयन - 🖥️ ग्रैडियो आधारित सरल वेब UI - 🔄 काले/सफेद उलटने का विकल्प - 📊 फ़्लिकर कम करने के लिए समयिक स्मूथिंग - 🔊 ffmpeg के साथ ऑडियो संरक्षण - 📐 कई आउटपुट रिज़ोल्यूशन ## सिस्टम आवश्यकताएँ - Python 3.9 या उच्चतर - 8 GB RAM (16 GB अनुशंसित) - GPU (वैकल्पिक लेकिन अनुशंसित) ## इंस्टॉलेशन ### Windows के लिए: ```bash # Python 3.9+ स्थापित करें এবং निम्न चलाएँ: python -m venv venv venv\Scripts\activate pip install -r requirements.txt ``` ### macOS के लिए: ```bash # Python 3.9+ स्थापित करें और निम्न चलाएँ: python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` ### Apple Silicon (M1/M2/M3) के लिए: ```bash # Metal MPS समर्थन के लिए: pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu # या Apple Metal के लिए: pip install torch torchvision ``` ### ffmpeg इंस्टॉलेशन: **Windows:** ```bash # choco का उपयोग करके: choco install ffmpeg # या प्रिंगल विंडोज़ इंस्टॉलर डाउनलोड करें और पथ जोड़ें ``` **macOS:** ```bash brew install ffmpeg ``` ## उपयोग ### वेब UI लॉन्च करें: ```bash python depth_converter.py ``` फिर ब्राउज़र में खोलें: `http://127.0.0.1:7860` ### उड़ान विकल्प: 1. **वीडियो अपलोड करें** - MP4 या MOV फ़ाइल चुनें 2. **मॉडल आकार चुनें** - ज़रूरत के अनुसार small/base/large चुनें 3. **रिज़ोल्यूशन चुनें** - आउटपुट रिज़ोल्यूशन चुनें 4. **सेटिंग समायोजित करें** - इनवर्ट, स्मूथिंग, ऑडियो 5. **वीडियो बदलें** - कनवर्ट पर क्लिक करें ## उदाहरण आउटपुट वीडियो फ़्रेम → ग्रेस्केल डेप्थ मैप वीडियो जहां प्रत्येक पिक्सेल मान दृश्य की गहराई दर्शाता है। ## पथ समस्या निवारण ### GPU पहचान नहीं हुई: - CUDA के लिए: `pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118` - Apple Silicon के लिए: सुनिश्चित करें कि PyTorch संस्करण MPS समर्थन करता है ### ffmpeg त्रुटियाँ: - सुनिश्चित करें कि ffmpeg आपके PATH में है - `ffmpeg -version` चलाकर जाँचें ### कम मेमोरी त्रुटियाँ: - छोटे मॉडल आकार का उपयोग करें - कम रिज़ोल्यूशन आउटपुट चुनें ## लाइसेंस MIT ## क्रेडिट - Depth Anything V2 के लिए @LiheYoung और GenAI Team को धन्यवाद - Hugging Face Transformers ## 4. लॉन्च के लिए स्पष्ट इंस्टॉलेशन और निर्देश ### Windows इंस्टॉलेशन और लॉन्च: ```bash # 1. Python 3.9+ इंस्टॉल करें # https://www.python.org/downloads/windows/ # 2. प्रोजेक्ट डायरेक्टरी बनाएं mkdir depth-converter cd depth-converter # 3. स्क्रिप्ट और requirements.txt फ़ाइलें डालें # 4. वर्चुअल एनवायरनमेंट बनाएं python -m venv venv venv\Scripts\activate # 5. डिपेंडेंसीज़ इंस्टॉल करें pip install -r requirements.txt # 6. ffmpeg इंस्टॉल करें winget install ffmpeg # 7. एप्लिकेशन लॉन्च करें python depth_converter.py ``` ### macOS इंस्टॉलेशन और लॉन्च: ```bash # 1. Homebrew इंस्टॉल करें (यदि नहीं है) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 2. Python इंस्टॉल करें brew install python@3.11 # 3. प्रोजेक्ट डायरेक्टरी बनाएं mkdir depth-converter cd depth-converter # 4. स्क्रिप्ट और requirements.txt फ़ाइलें डालें # 5. वर्चुअल एनवायरनमेंट बनाएं python3 -m venv venv source venv/bin/activate # 6. डिपेंडेंसीज़ इंस्टॉल करें pip install -r requirements.txt # 7. ffmpeg इंस्टॉल करें brew install ffmpeg # 8. एप्लिकेशन लॉन्च करें python depth_converter.py ``` ### GPU त्वरण विकल्प: **Windows (NVIDIA GPU के साथ):** ```bash pip uninstall torch torchvision pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 ``` **macOS (Apple Silicon के साथ):** कोई अतिरिक्त कार्रवाई आवश्यक नहीं; MPS स्वचालित रूप से उपयोग किया जाएगा।

पूरा प्रॉम्प्ट देखने के लिए साइन इन करें

Continue with:

By logging in, you agree to our Terms of Use and Privacy Policy

उपयोग

यह प्रॉम्प्ट coding के साथ उपयोग के लिए डिज़ाइन किया गया है। ऊपर प्रॉम्प्ट सामग्री कॉपी करें और अपने पसंदीदा AI टूल में पेस्ट करें।

सर्वोत्तम परिणामों के लिए, आप अपनी विशिष्ट आवश्यकताओं के अनुसार प्लेसहोल्डर (वर्ग कोष्ठक या बड़े अक्षरों में दर्शाए गए) को अनुकूलित कर सकते हैं।

संदर्भ

श्रेणियाँ:coding| twitter| python| gradio

चर्चा