कल्पना कीजिए कि एक डेटा वैज्ञानिक वन्यजीवों के व्यवहार का अध्ययन कर रहा है, एक सुदूर जंगल में कैमरों से सैकड़ों घंटों के वीडियो फुटेज का विश्लेषण कर रहा है। या एक खेल प्रशिक्षक जिसे नई रणनीति विकसित करने के लिए पूरे सत्र के खेलों से महत्वपूर्ण खेलों की पहचान करने की आवश्यकता है। वैकल्पिक रूप से, एक फिल्म निर्माता पर विचार करें जो एक वृत्तचित्र को एक साथ जोड़ने के लिए एक विशाल वीडियो गैलरी के भीतर विशिष्ट दृश्यों की खोज कर रहा है।
परंपरागत रूप से, इन सभी विशेषज्ञों को अंतहीन घंटों के फुटेज को मैन्युअल रूप से छांटने की समय लेने वाली, त्रुटि-प्रवण और भारी चुनौती का सामना करना पड़ता है।
हालाँकि, कृत्रिम बुद्धिमत्ता और मशीन लर्निंग की प्रगति ने वीडियो खोज अनुप्रयोगों को नाटकीय रूप से बदल दिया है। ये तकनीकें अब हमें अविश्वसनीय परिष्कार के साथ व्यापक वीडियो डेटासेट के भीतर विशिष्ट वस्तुओं और घटनाओं की खोज करने में सक्षम बनाती हैं। डेटा वैज्ञानिक और शोधकर्ता असाधारण सटीकता और दक्षता के साथ प्रासंगिक वीडियो खंडों को इंगित कर सकते हैं।
इसका उद्देश्य उन्नत खोज क्षमताएं प्रदान करके अनुसंधान प्रक्रिया को सरल बनाना था, जिससे उपयोगकर्ता अत्यंत बड़े वीडियो डेटासेट से विशिष्ट सामग्री या गुणों वाले फुटेज को आसानी से ढूंढ सकें।
परिष्कृत खोज एल्गोरिदम और उपयोगकर्ता-अनुकूल इंटरफ़ेस का उपयोग करके, ओपनऑरिजिन्स का लक्ष्य इस मंच को इस समुदाय के लिए एक महत्वपूर्ण उपकरण बनाना था।
ओपनऑरिजिन्स ने इस वीडियो सर्च पेशकश को बनाने के लिए दो तकनीकी दृष्टिकोणों पर विचार किया: इमेज एम्बेडिंग और मल्टीमॉडल एम्बेडिंग का उपयोग करके फ़्रेम सर्च। आइए प्रत्येक विकल्प पर एक नज़र डालें।
जटिल प्रश्नों के उत्तर देने के लिए वीडियो पर अर्थपूर्ण खोज को सक्षम करना, जैसे कि, "कितने मिनट की वीडियो सामग्री है जो हिरणों को उनके प्राकृतिक आवास में दिखाती है?" इसके लिए परिष्कृत खोज क्षमताओं की आवश्यकता होती है जो बुनियादी कीवर्ड मेटाडेटा मिलान से परे वीडियो की सामग्री को समझ और व्याख्या कर सकती है। इसे प्राप्त करने की कुंजी? मल्टीमॉडल एम्बेडिंग।
मल्टीमॉडल एम्बेडिंग मॉडल और मल्टीमॉडल लार्ज लैंग्वेज मॉडल (LLM) को समान समाधान के रूप में देखा जा सकता है। CLIP और Google मल्टीमॉडल एम्बेडिंग जैसे मॉडल टेक्स्ट, इमेज और वीडियो जैसे डेटा प्रकारों के लिए एम्बेडिंग उत्पन्न करते हैं, जो उच्च-आयामी वेक्टर बनाते हैं जो अर्थपूर्ण अर्थ को कैप्चर करते हैं। यह अर्थपूर्ण खोज, सामग्री पुनर्प्राप्ति और समानता पहचान जैसे अनुप्रयोगों को सक्षम बनाता है।
दूसरी ओर, मल्टीमॉडल एलएलएम जैसे जीपीटी-4 (मल्टीमॉडल क्षमताओं के साथ), फ्लेमिंगो और जेमिनी को विभिन्न प्रकार के डेटा को समझने और उसमें सामग्री उत्पन्न करने के लिए डिज़ाइन किया गया है।
ये मॉडल मल्टीमॉडल इनपुट (उदाहरण के लिए पाठ और चित्र) का उपयोग करके और मल्टीमॉडल आउटपुट उत्पन्न करके संवादात्मक एआई और सामग्री निर्माण जैसे जटिल कार्यों में अच्छा प्रदर्शन करते हैं, जिसके परिणामस्वरूप सार्थक और प्रासंगिक रूप से समृद्ध प्रतिक्रियाएं मिलती हैं।
जबकि एम्बेडिंग मॉडल कुशल खोज और पुनर्प्राप्ति पर ध्यान केंद्रित करते हैं, मल्टीमॉडल एलएलएम विविध सामग्री को उत्पन्न करने और समझने के लिए उपयुक्त हैं, जिससे वे चैटबॉट, इंटरैक्टिव सहायक और मल्टी-मॉडल इंटरैक्शन के लिए आदर्श बन जाते हैं।
| मल्टीमॉडल एम्बेडिंग मॉडल | मल्टी-मोडल लार्ज लैंग्वेज मॉडल (एलएलएम) |
---|---|---|
मुख्य उद्देश्य | पाठ और छवि जैसे विभिन्न डेटा मोडैलिटी में खोज और पुनर्प्राप्ति सक्षम करें | विभिन्न तरीकों से सामग्री तैयार करना और समझना |
मुख्य उपयोग मामला | अर्थ खोज, सामग्री पुनर्प्राप्ति, और समानता | संवादात्मक ए.आई., विषय-वस्तु निर्माण और संवाद प्रणालियाँ |
उदाहरण मॉडल | CLIP, गूगल मल्टीमॉडल एम्बेडिंग मॉडल | जीपीटी-4 (मल्टीमॉडल क्षमताओं के साथ), लावा, जेमिनी, फ्लेमिंगो, लाएमडीए |
खोज और पुनर्प्राप्ति | तेज़, सटीक खोज और समानता के लिए अनुकूलित | विभिन्न डेटा प्रकारों में व्यापक समझ और उत्पादन के लिए अनुकूलित। |
अनुप्रयोग | सामग्री मॉडरेशन, अनुशंसा प्रणालियाँ, अर्थ खोज | संवादात्मक एजेंट, सामग्री निर्माण, बहु-मोडल इंटरैक्शन |
ओपनऑरिजिन्स ने जिस पहली विधि पर विचार किया, उसमें इमेज एम्बेडिंग का उपयोग करके वीडियो का फ्रेम-दर-फ्रेम विश्लेषण शामिल था। यह दृष्टिकोण वीडियो को अलग-अलग फ़्रेम में विभाजित करता है, प्रत्येक को वेक्टर एम्बेडिंग में परिवर्तित करके
लाखों वेब छवियों का उनके विवरण के साथ अध्ययन करके, CLIP दृश्य अवधारणाओं को इस तरह से समझता है कि मनुष्य दुनिया को कैसे समझते हैं और उसका वर्णन करते हैं। इसके प्रशिक्षण में "विपरीत शिक्षण" शामिल है, जहाँ यह छवियों को उनके सही विवरण के साथ मिलाना सीखता है, जिससे इसे हम जो देखते हैं और जो शब्द हम इस्तेमाल करते हैं, उनके बीच के संबंध को समझकर विभिन्न कार्यों को संभालने की अनूठी क्षमता मिलती है।
यह CLIP को उन अनुप्रयोगों के लिए अत्यधिक अनुकूलनीय और उपयोगी बनाता है जिनमें छवियों और भाषा दोनों की गहन समझ की आवश्यकता होती है।
इन एम्बेडिंग को वेक्टर डाटाबेस में संग्रहित किया जाता है, जो अर्थगत समानता के आधार पर पाठ से पाठ, पाठ से छवि, या छवि से छवि का मिलान करके तीव्र और सटीक खोज को सक्षम बनाता है।
फ़्रेम एक्सट्रैक्शन वीडियो को निर्दिष्ट अंतराल पर फ़्रेम में विघटित करता है। प्रत्येक फ़्रेम को एक उच्च-आयामी वेक्टर प्रतिनिधित्व उत्पन्न करने के लिए एक छवि एम्बेडिंग मॉडल के माध्यम से संसाधित किया जाता है। इन वेक्टर को डेटास्टैक्स एस्ट्रा डीबी जैसे वेक्टर स्टोर में संग्रहीत किया जाता है, जो कुशल समानता खोजों को सक्षम बनाता है।
यह विधि मल्टीमॉडल सिमेंटिक खोज में उच्च सटीकता प्रदान करती है और विशिष्ट वस्तुओं या दृश्यों की खोज के लिए उपयुक्त है। हालाँकि, यह कम्प्यूटेशनली गहन है, विशेष रूप से लंबे वीडियो के लिए, और समय संबंधी संदर्भ या फ़्रेम के बीच परिवर्तन को याद कर सकता है।
दूसरा दृष्टिकोण मल्टीमॉडल एम्बेडिंग के साथ नवीनतम जनरेटिव एआई तकनीक का लाभ उठाता है, विशेष रूप से गूगल का उपयोग करके
वीडियो को संख्यात्मक रूप से प्रस्तुत करके, ये एम्बेडिंग उन्नत मशीन लर्निंग कार्यों को सक्षम करते हैं, जिससे वीडियो सामग्री को खोजना, विश्लेषण करना और वर्गीकृत करना आसान हो जाता है।
इन एम्बेडिंग को एकीकृत करना
Google की मल्टीमॉडल एम्बेडिंग और CLIP विधि दोनों ही मल्टीमॉडल डेटा को एक सामान्य एम्बेडिंग स्पेस में एम्बेड करती हैं। मुख्य अंतर यह है कि Google की मल्टीमॉडल एम्बेडिंग वीडियो को सपोर्ट करती है, जबकि CLIP नहीं करती।
हमने फ्रेम सर्च वीडियो विश्लेषण और मल्टीमॉडल एम्बेडिंग दोनों के लिए उदाहरणों को स्पष्ट करने और लागू करने के लिए नीचे रिपॉजिटरी को इकट्ठा किया है। ये उदाहरण प्रत्येक दृष्टिकोण को प्रभावी ढंग से लागू करने और उसका मूल्यांकन करने में मदद करने के लिए व्यावहारिक प्रदर्शन और विस्तृत निर्देश प्रदान करते हैं।
इस दृष्टिकोण में, हम एक परिचय देते हैं
get_single_frame_from_scene
फ़ंक्शन फ़्रेम आईडी की गणना करता है और वीडियो कैप्चर को इस फ़्रेम पर सेट करता है और इसे पढ़ता है:
def get_single_frame_from_scene(scene, video_capture): frame_id = (scene[1] - scene[0]).frame_num // 2 + scene[0].frame_num video_capture.set(cv2.CAP_PROP_POS_FRAMES, frame_id) _, frame = video_capture.read() return Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
get_frames_from_video
फ़ंक्शन एक वीडियो को संसाधित करता है, AdaptiveDetector का उपयोग करके दृश्यों का पता लगाता है, और get_single_frame_from_scene को कॉल करके प्रत्येक दृश्य से एक फ़्रेम निकालता है, और इन फ़्रेमों को एक सूची में संग्रहीत करता है:
def get_frames_from_video(video_path): res = [] video_capture = cv2.VideoCapture(video_path) content_list = detect(video_path, AdaptiveDetector()) for scene in content_list: res.append(get_single_frame_from_scene(scene, video_capture)) return res
get_image_embedding फ़ंक्शन एक का उपयोग करता है
def get_image_embedding(image): inputs = clip_processor(images=image, return_tensors="pt") image_embeddings = model.get_image_features(**inputs) return list(image_embeddings[0].detach().numpy().astype(float))
यह कोड एस्ट्रा DB डेटाबेस से जुड़ता है, वेक्टर एम्बेडिंग के साथ JSON ऑब्जेक्ट्स का एक संग्रह बनाता है, और इन ऑब्जेक्ट्स को डेटाबेस में "वीडियो" संग्रह में सम्मिलित करता है:
import json from astrapy import DataAPIClient client = DataAPIClient(ASTRA_DB_TOKEN) database = client.get_database(ASTRA_DB_API_ENDPOINT) collectiondb = database.video json_embedding = [ {"id": f"{i+1}", "$vector": values} for i, values in enumerate(image_embeddings) ] response = collectiondb.insert_many(json_embedding)
OpenAI क्लिप एम्बेडिंग का उपयोग करके किसी निश्चित पाठ की खोज करें:
query_text = "men with white hair" query_embedding = get_text_embedding(query_text) result = collectiondb.find_one({}, vector=query_embedding)
यहां, आप देख सकते हैं कि Google के मल्टीमॉडल एम्बेडिंग मॉडल का उपयोग करके वीडियो एम्बेडिंग कैसे बनाएं और उन्हें एस्ट्रा डीबी में संग्रहीत करें, जिसमें मेटाडेटा जानकारी जैसे कि start_offset_sec और end_offset_sec शामिल है (देखें
import vertexai from vertexai.vision_models import MultiModalEmbeddingModel, Video from astrapy import DataAPIClient import streamlit as st # Initialize Vertex AI vertexai.init(project=st.secrets['PROJECT'], location=st.secrets['REGION']) # Initialize the client client = DataAPIClient(st.secrets['ASTRA_TOKEN']) database = client.get_database(st.secrets['ASTRA_API_ENDPOINT']) my_collection = database.create_collection( "videosearch", dimension=1408, metric=astrapy.constants.VectorMetric.COSINE, ) collectiondb = database.videosearch # Load the pre-trained model and video model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding") video = Video.load_from_file(st.secrets['PATH']) # Get embeddings with the specified contextual text embeddings = model.get_embeddings( video=video, contextual_text="Mixed Content", dimension=1408, ) # Video Embeddings are segmented based on the video_segment_config. for video_embedding in embeddings.video_embeddings: # Check if embedding is a numpy array or a tensor and convert accordingly if isinstance(video_embedding.embedding, (list, tuple)): embedding_list = video_embedding.embedding else: embedding_list = video_embedding.embedding.tolist() embedding_data = { "metadata": { "start_offset_sec": video_embedding.start_offset_sec, "end_offset_sec": video_embedding.end_offset_sec }, "$vector": embedding_list # Ensure embedding is in list format } response = collectiondb.insert_one(embedding_data)
यहाँ, हमने स्थापित किया
import vertexai from vertexai.vision_models import MultiModalEmbeddingModel, Video from vertexai.vision_models import Image as img from astrapy import DataAPIClient import streamlit as st from PIL import Image st.title("Video Search App") user_input_placeholder = st.empty() user_input = user_input_placeholder.text_input( "Describe the content you're looking for:", key="user_input" ) uploaded_file = st.file_uploader("Choose an image file that is similar you're looking for", type="png") if uploaded_file is not None: image = Image.open(uploaded_file) image_path = st.secrets['IMAGE_PATH'] image.save(image_path) saved_image = Image.open(image_path) st.image(saved_image, caption='', use_column_width=True) # Initialize Vertex AI vertexai.init(project=st.secrets['PROJECT'], location=st.secrets['REGION']) # Initialize the client client = DataAPIClient(st.secrets['ASTRA_TOKEN']) database = client.get_database(st.secrets['ASTRA_API_ENDPOINT']) collectiondb = database.videosearch # Load the pre-trained model and video model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding") video = Video.load_from_file(st.secrets['PATH']) # Search action trigger if st.button("Search"): if user_input: embeddings = model.get_embeddings( contextual_text=user_input ) result = collectiondb.find_one({}, vector=embeddings.text_embedding) start_offset_value = result['metadata']['start_offset_sec'] end_offset_value = result['metadata']['end_offset_sec'] st.write("Text input result found between: " + str(start_offset_value) + "-" + str(end_offset_value)) video_file = open(st.secrets['PATH'], 'rb') video_bytes = video_file.read() st.video(video_bytes, start_time=start_offset_value) if uploaded_file is not None: embimage = img.load_from_file(image_path) embeddingsimg = model.get_embeddings( image=embimage ) imgresult = collectiondb.find_one({}, vector=embeddingsimg.image_embedding) start_offset_value = imgresult['metadata']['start_offset_sec'] end_offset_value = imgresult['metadata']['end_offset_sec'] st.write("Image input result found between: " + str(start_offset_value) + "-" + str(end_offset_value)) video_file = open(st.secrets['PATH'], 'rb') video_bytes = video_file.read() st.video(video_bytes, start_time=start_offset_value)
परिणाम कुछ इस प्रकार हैं:
इन दो तरीकों की खोज वीडियो खोज अनुप्रयोगों में आधुनिक एआई तकनीकों की महत्वपूर्ण क्षमता को उजागर करती है। जबकि छवि एम्बेडिंग के साथ फ़्रेम खोज विशिष्ट दृश्य खोजों के लिए उच्च सटीकता प्रदान करती है, मल्टीमॉडल एम्बेडिंग की लचीलापन और शक्ति उन्हें जटिल, मल्टीमॉडल खोज आवश्यकताओं के लिए एक बेहतर विकल्प बनाती है।
एस्ट्रा डीबी का उपयोग करके, एक वीडियो खोज प्लेटफ़ॉर्म उपयोगकर्ताओं को उन्नत खोज क्षमताएँ प्रदान कर सकता है, जिससे बड़े डेटासेट से विशिष्ट वीडियो सामग्री की सटीक और कुशल पुनर्प्राप्ति संभव हो पाती है। यह वीडियो डेटा का विश्लेषण और व्याख्या करने की क्षमता में उल्लेखनीय रूप से सुधार करता है, जिससे तेज़ और अधिक सटीक जानकारी मिलती है।
भविष्य की ओर देखते हुए, चल रहे शोध और विकास के साथ वीडियो खोज का भविष्य उज्ज्वल है। AI और मशीन लर्निंग में प्रगति इन तकनीकों को बेहतर बनाती रहेगी, जिससे वे अधिक सुलभ और कुशल बनेंगे। संवर्धित वास्तविकता और वास्तविक समय वीडियो विश्लेषण जैसी अन्य उभरती प्रौद्योगिकियों के साथ एकीकरण, उनकी क्षमताओं का और विस्तार करेगा।
मैथ्यू पेंडलेबरी , इंजीनियरिंग प्रमुख, ओपनऑरिजिन्स, और बेटुल ओ'रेली , सॉल्यूशन आर्किटेक्ट, डेटास्टैक्स द्वारा