Download app.py from riteshcp/camera: direct link, hf CLI and curl.
- Browser
- Download file 4.72 kB
-
https://huggingface.co/spaces/riteshcp/camera/resolve/main/app.py
- Command line
-
hf download hf://spaces/riteshcp/camera/app.py
-
curl -L -o app.py https://huggingface.co/spaces/riteshcp/camera/resolve/main/app.py
4.72 kB
| import cv2 | |
| import gradio as gr | |
| import os | |
| # ग्लोबल वेरिएबल्स | |
| video_path = "" | |
| live_mode = False | |
| # अस्थायी फ़ोल्डर में वीडियो सहेजने के लिए पथ सेट करें | |
| save_dir = "/tmp/videos" | |
| if not os.path.exists(save_dir): | |
| os.makedirs(save_dir) | |
| def upload_video(uploaded_video): | |
| global video_path, live_mode | |
| live_mode = False | |
| video_path = os.path.join(save_dir, "uploaded_video.mp4") | |
| # वीडियो को अस्थायी पथ पर कॉपी करें | |
| with open(video_path, "wb") as f: | |
| f.write(uploaded_video.read()) | |
| return f"वीडियो अपलोड हुआ: {video_path}" | |
| def start_live_feed(): | |
| global live_mode, video_path | |
| live_mode = True | |
| video_path = 0 # कैमरा का उपयोग करने के लिए 0 सेट करें | |
| return "लाइव फीड शुरू हो गया" | |
| def process_video(): | |
| if video_path == "": | |
| return "कोई वीडियो अपलोड नहीं हुआ है या लाइव मोड सक्रिय नहीं है। कृपया पहले वीडियो अपलोड करें या लाइव मोड सक्रिय करें।", None | |
| cap = cv2.VideoCapture(video_path) | |
| if not cap.isOpened(): | |
| return "त्रुटि: वीडियो खोलने में असमर्थ", None | |
| processed_frame = None | |
| while True: | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| # यहाँ हम मानते हैं कि लाइव फीड में चार्ट होते हैं। चार्ट को पहचानने के लिए ह्यू और एज डिटेक्शन का उपयोग कर सकते हैं। | |
| gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |
| edges = cv2.Canny(gray_frame, 50, 150) | |
| # ये सिर्फ एक उदाहरण है; आप इसे ट्रेडिंग संकेतकों और चार्ट पैटर्न की पहचान के लिए बढ़ा सकते हैं। | |
| contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) | |
| for cnt in contours: | |
| x, y, w, h = cv2.boundingRect(cnt) | |
| cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2) | |
| processed_frame = frame # अंतिम फ्रेम जिसमें डिटेक्शन हुआ हो | |
| cap.release() | |
| if processed_frame is not None: | |
| processed_image_path = os.path.join(save_dir, "processed_frame.png") | |
| cv2.imwrite(processed_image_path, processed_frame) | |
| return None, processed_image_path | |
| else: | |
| return "कोई चार्ट नहीं मिला या वीडियो खाली है।", None | |
| def end_processing(): | |
| global video_path, live_mode | |
| video_path = "" | |
| live_mode = False | |
| return "प्रसंस्करण समाप्त हुआ। आप अब नया वीडियो अपलोड कर सकते हैं या लाइव फीड शुरू कर सकते हैं।" | |
| # Gradio UI | |
| iface = gr.Blocks() | |
| with iface: | |
| gr.Markdown("## वीडियो और लाइव फीड चार्ट एनालिसिस टूल") | |
| with gr.Row(): | |
| video_input = gr.Video(label="वीडियो अपलोड करें") | |
| upload_button = gr.Button("वीडियो अपलोड करें") | |
| live_button = gr.Button("लाइव फीड शुरू करें") | |
| upload_output = gr.Textbox(label="अपलोड स्थिति") | |
| upload_button.click(upload_video, inputs=video_input, outputs=upload_output) | |
| live_button.click(start_live_feed, outputs=upload_output) | |
| with gr.Row(): | |
| process_button = gr.Button("वीडियो प्रोसेस करें") | |
| end_button = gr.Button("प्रसंस्करण समाप्त करें") | |
| process_output = gr.Image(label="प्रसंस्कृत वीडियो") | |
| process_status = gr.Textbox(label="प्रसंस्करण स्थिति") | |
| end_output = gr.Textbox(label="प्रसंस्करण स्थिति") | |
| process_button.click(process_video, outputs=[process_status, process_output]) | |
| end_button.click(end_processing, outputs=end_output) | |
| iface.launch() | |