Spaces:
				
			
			
	
			
			
		Build error
		
	
	
	
			
			
	
	
	
	
		
		
		Build error
		
	Update app.py
Browse files
    	
        app.py
    CHANGED
    
    | @@ -1,90 +1,95 @@ | |
| 1 | 
             
            import gradio as gr
         | 
| 2 | 
            -
            import requests
         | 
| 3 | 
             
            import yt_dlp
         | 
| 4 | 
             
            import cv2
         | 
| 5 | 
             
            from google_img_source_search import ReverseImageSearcher
         | 
| 6 | 
             
            from PIL import Image
         | 
| 7 | 
            -
            import os
         | 
| 8 | 
             
            import uuid
         | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
            uid = uuid.uuid4()
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            # JavaScript for displaying image dimensions
         | 
| 14 | 
            -
            size_js = """
         | 
| 15 | 
             
                function imgSize(){
         | 
| 16 | 
             
                    var myImg = document.getElementsByClassName("my_im");
         | 
| 17 | 
             
                    var realWidth = myImg.naturalWidth;
         | 
| 18 | 
             
                    var realHeight = myImg.naturalHeight;
         | 
| 19 | 
             
                    alert("Original width=" + realWidth + ", " + "Original height=" + realHeight);
         | 
| 20 | 
            -
                }
         | 
| 21 | 
            -
            """
         | 
| 22 |  | 
| 23 | 
             
            def dl(inp):
         | 
| 24 | 
             
                out = None
         | 
|  | |
| 25 | 
             
                try:
         | 
| 26 | 
            -
                    inp_out | 
|  | |
| 27 | 
             
                    if "twitter" in inp:
         | 
| 28 | 
            -
                        os.system(f'yt-dlp "{inp}" --extractor-arg "twitter:api=syndication" --trim-filenames 160 -o "{uid}/{inp_out}.mp4" -S res,mp4 --recode mp4')
         | 
| 29 | 
             
                    else:
         | 
| 30 | 
            -
                        os.system(f'yt-dlp "{inp}" --trim-filenames 160 -o "{uid}/{inp_out}.mp4" -S res,mp4 --recode mp4')
         | 
| 31 |  | 
|  | |
| 32 | 
             
                    out = f"{uid}/{inp_out}.mp4"
         | 
| 33 | 
            -
                     | 
|  | |
|  | |
| 34 | 
             
                except Exception as e:
         | 
| 35 | 
            -
                    print(e)
         | 
| 36 | 
            -
             | 
|  | |
| 37 |  | 
| 38 | 
            -
            def process_vid(file, | 
| 39 | 
             
                new_video_in = str(file)
         | 
| 40 | 
            -
                 | 
| 41 | 
            -
                    print(f"Video file {new_video_in} does not exist.")
         | 
| 42 | 
            -
                    return (gr.HTML('Video file not found.'), "", "")
         | 
| 43 | 
            -
                
         | 
| 44 | 
            -
                capture = cv2.VideoCapture(new_video_in)
         | 
| 45 | 
             
                frame_count = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
         | 
| 46 | 
             
                rev_img_searcher = ReverseImageSearcher()
         | 
| 47 | 
            -
                html_out | 
| 48 | 
             
                count = int(every_n)
         | 
| 49 | 
            -
                 | 
| 50 | 
            -
             | 
|  | |
|  | |
| 51 | 
             
                try:
         | 
| 52 | 
            -
                    for i in range(start_frame, frame_count | 
| 53 | 
             
                        if count == int(every_n):
         | 
| 54 | 
             
                            count = 1
         | 
| 55 | 
             
                            print(i)
         | 
| 56 | 
             
                            capture.set(cv2.CAP_PROP_POS_FRAMES, i)
         | 
| 57 | 
            -
                            ret, frame_f = capture.read()
         | 
| 58 | 
            -
                            if not ret:
         | 
| 59 | 
            -
                                print(f"Failed to read frame {i}")
         | 
| 60 | 
            -
                                continue
         | 
| 61 | 
            -
                            
         | 
| 62 | 
             
                            cv2.imwrite(f"{uid}-vid_tmp{i}.png", frame_f)
         | 
| 63 | 
             
                            out = os.path.abspath(f"{uid}-vid_tmp{i}.png")
         | 
| 64 | 
             
                            out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
         | 
| 65 | 
             
                            print(out)
         | 
| 66 | 
            -
                            
         | 
| 67 | 
             
                            res = rev_img_searcher.search(out_url)
         | 
| 68 | 
            -
                             | 
| 69 | 
            -
                             | 
|  | |
|  | |
| 70 | 
             
                                for search_item in res:
         | 
| 71 | 
            -
                                     | 
| 72 | 
            -
                                     | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 73 | 
             
                                    <div>
         | 
| 74 | 
             
                                    Title: {search_item.page_title}<br>
         | 
| 75 | 
             
                                    Site: <a href='{search_item.page_url}' target='_blank' rel='noopener noreferrer'>{search_item.page_url}</a><br>
         | 
| 76 | 
             
                                    Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
         | 
| 77 | 
             
                                    <img class='my_im' src='{search_item.image_url}'><br>
         | 
| 78 | 
             
                                    </div>"""
         | 
| 79 | 
            -
                                return gr.HTML(f'<h1>Total Found: {out_cnt}</h1><br>{html_out}'), f"Found frame: {i}", i | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
|  | |
|  | |
|  | |
| 82 | 
             
                except Exception as e:
         | 
| 83 | 
            -
                    return gr.HTML(f'{e}'), | 
| 84 | 
            -
                
         | 
| 85 | 
            -
                return gr.HTML('No frame matches found.'), "", ""
         | 
| 86 |  | 
| 87 | 
            -
            def process_im(file, | 
| 88 | 
             
                if not url.startswith("https://nymbo"):
         | 
| 89 | 
             
                    return url
         | 
| 90 | 
             
                else:
         | 
| @@ -93,14 +98,14 @@ def process_im(file, url): | |
| 93 | 
             
                    action_input = f"{uid}-tmp.png"
         | 
| 94 | 
             
                    out = os.path.abspath(action_input)
         | 
| 95 | 
             
                    out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
         | 
| 96 | 
            -
                    return out_url
         | 
| 97 |  | 
| 98 | 
             
            def rev_im(image):
         | 
| 99 | 
            -
                 | 
| 100 | 
            -
                 | 
| 101 | 
            -
                 | 
| 102 | 
            -
             | 
| 103 | 
            -
                
         | 
| 104 | 
             
                cv2.imwrite(f"{uid}-im_tmp.png", image)
         | 
| 105 | 
             
                out = os.path.abspath(f"{uid}-im_tmp.png")
         | 
| 106 | 
             
                out_url = f'https://nymbo-reverse-image.hf.space/file={out}'    
         | 
| @@ -108,8 +113,14 @@ def rev_im(image): | |
| 108 | 
             
                res = rev_img_searcher.search(out_url)
         | 
| 109 | 
             
                count = 0
         | 
| 110 | 
             
                for search_item in res:
         | 
| 111 | 
            -
                    count | 
| 112 | 
            -
                     | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 113 | 
             
                    <div>
         | 
| 114 | 
             
                    Title: {search_item.page_title}<br>
         | 
| 115 | 
             
                    Site: <a href='{search_item.page_url}' target='_blank' rel='noopener noreferrer'>{search_item.page_url}</a><br>
         | 
| @@ -117,46 +128,54 @@ def rev_im(image): | |
| 117 | 
             
                    <img class='my_im' src='{search_item.image_url}'><br>
         | 
| 118 | 
             
                    </div>"""
         | 
| 119 |  | 
| 120 | 
            -
                return gr.HTML(f'<h1>Total Found: {count}</h1><br>{html_out}')
         | 
|  | |
|  | |
|  | |
|  | |
| 121 |  | 
| 122 | 
             
            with gr.Blocks() as app:
         | 
| 123 | 
             
                with gr.Row():
         | 
| 124 | 
             
                    gr.Column()
         | 
| 125 | 
             
                    with gr.Column():
         | 
| 126 | 
            -
                         | 
|  | |
| 127 | 
             
                        with gr.Box(visible=True) as im_box:
         | 
| 128 | 
            -
                            inp_url | 
| 129 | 
            -
                            load_im_btn | 
| 130 | 
            -
                            inp_im | 
| 131 | 
            -
                            go_btn_im | 
| 132 | 
             
                        with gr.Box(visible=False) as vid_box:
         | 
| 133 | 
            -
                            vid_url | 
| 134 | 
            -
                            vid_url_btn | 
| 135 | 
            -
                            inp_vid | 
| 136 | 
             
                            with gr.Row():
         | 
| 137 | 
            -
                                every_n | 
| 138 | 
            -
                            stat_box | 
| 139 | 
             
                            with gr.Row():
         | 
| 140 | 
            -
                                go_btn_vid | 
| 141 | 
            -
                                next_btn | 
| 142 |  | 
| 143 | 
            -
                    gr.Column()
         | 
|  | |
| 144 | 
             
                with gr.Row():
         | 
| 145 | 
            -
                    html_out = gr.HTML("")
         | 
| 146 | 
             
                with gr.Row(visible=False):
         | 
| 147 | 
            -
                    hid_box | 
| 148 | 
            -
             | 
| 149 | 
             
                def shuf(tog):
         | 
| 150 | 
            -
                     | 
| 151 | 
            -
             | 
|  | |
|  | |
| 152 | 
             
                def load_image(url):
         | 
| 153 | 
             
                    return url
         | 
| 154 | 
            -
                
         | 
| 155 | 
            -
                 | 
| 156 | 
            -
                 | 
| 157 | 
            -
                 | 
| 158 | 
            -
                vid_proc = go_btn_vid.click(process_vid, | 
| 159 | 
            -
                im_proc = go_btn_im.click(rev_im, | 
| 160 | 
            -
                source_tog.change(shuf, | 
| 161 |  | 
|  | |
| 162 | 
             
            app.queue(concurrency_count=20).launch()
         | 
|  | |
| 1 | 
             
            import gradio as gr
         | 
| 2 | 
            +
            import requests 
         | 
| 3 | 
             
            import yt_dlp
         | 
| 4 | 
             
            import cv2
         | 
| 5 | 
             
            from google_img_source_search import ReverseImageSearcher
         | 
| 6 | 
             
            from PIL import Image
         | 
| 7 | 
            +
            import os 
         | 
| 8 | 
             
            import uuid
         | 
| 9 | 
            +
            uid=uuid.uuid4()
         | 
| 10 | 
            +
            size_js="""
         | 
|  | |
|  | |
|  | |
|  | |
| 11 | 
             
                function imgSize(){
         | 
| 12 | 
             
                    var myImg = document.getElementsByClassName("my_im");
         | 
| 13 | 
             
                    var realWidth = myImg.naturalWidth;
         | 
| 14 | 
             
                    var realHeight = myImg.naturalHeight;
         | 
| 15 | 
             
                    alert("Original width=" + realWidth + ", " + "Original height=" + realHeight);
         | 
| 16 | 
            +
                }"""
         | 
|  | |
| 17 |  | 
| 18 | 
             
            def dl(inp):
         | 
| 19 | 
             
                out = None
         | 
| 20 | 
            +
                out_file=[]
         | 
| 21 | 
             
                try:
         | 
| 22 | 
            +
                    inp_out=inp.replace("https://","")
         | 
| 23 | 
            +
                    inp_out=inp_out.replace("/","_").replace(".","_").replace("=","_").replace("?","_")
         | 
| 24 | 
             
                    if "twitter" in inp:
         | 
| 25 | 
            +
                        os.system(f'yt-dlp "{inp}" --extractor-arg "twitter:api=syndication" --trim-filenames 160 -o "{uid}/{inp_out}.mp4" -S res,mp4 --recode mp4')  
         | 
| 26 | 
             
                    else:
         | 
| 27 | 
            +
                        os.system(f'yt-dlp "{inp}" --trim-filenames 160 -o "{uid}/{inp_out}.mp4" -S res,mp4 --recode mp4')          
         | 
| 28 |  | 
| 29 | 
            +
                    #os.system(f'yt-dlp "{inp}" --trim-filenames 160 -o "{inp_out}.mp4" -S res,mp4 --recode mp4')  
         | 
| 30 | 
             
                    out = f"{uid}/{inp_out}.mp4"
         | 
| 31 | 
            +
                    #out_ap = os.path.abspath(out_f)
         | 
| 32 | 
            +
                    #out = f'https://nymbo-reverse-image.hf.space/file={out_ap}'
         | 
| 33 | 
            +
                    print (out)
         | 
| 34 | 
             
                except Exception as e:
         | 
| 35 | 
            +
                    print (e)
         | 
| 36 | 
            +
                    #out = f'{e}'
         | 
| 37 | 
            +
                return out,gr.HTML(""),"",""
         | 
| 38 |  | 
| 39 | 
            +
            def process_vid(file,cur_frame,every_n):
         | 
| 40 | 
             
                new_video_in = str(file)
         | 
| 41 | 
            +
                capture = cv2.VideoCapture(new_video_in)    
         | 
|  | |
|  | |
|  | |
|  | |
| 42 | 
             
                frame_count = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
         | 
| 43 | 
             
                rev_img_searcher = ReverseImageSearcher()
         | 
| 44 | 
            +
                html_out=""
         | 
| 45 | 
             
                count = int(every_n)
         | 
| 46 | 
            +
                if cur_frame == "" or cur_frame==None:
         | 
| 47 | 
            +
                    start_frame = 0
         | 
| 48 | 
            +
                elif cur_frame != "" and cur_frame!=None:
         | 
| 49 | 
            +
                    start_frame = int(cur_frame)
         | 
| 50 | 
             
                try:
         | 
| 51 | 
            +
                    for i in range(start_frame, frame_count-1):
         | 
| 52 | 
             
                        if count == int(every_n):
         | 
| 53 | 
             
                            count = 1
         | 
| 54 | 
             
                            print(i)
         | 
| 55 | 
             
                            capture.set(cv2.CAP_PROP_POS_FRAMES, i)
         | 
| 56 | 
            +
                            ret, frame_f = capture.read(i)
         | 
|  | |
|  | |
|  | |
|  | |
| 57 | 
             
                            cv2.imwrite(f"{uid}-vid_tmp{i}.png", frame_f)
         | 
| 58 | 
             
                            out = os.path.abspath(f"{uid}-vid_tmp{i}.png")
         | 
| 59 | 
             
                            out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
         | 
| 60 | 
             
                            print(out)
         | 
|  | |
| 61 | 
             
                            res = rev_img_searcher.search(out_url)
         | 
| 62 | 
            +
                            #print (res)
         | 
| 63 | 
            +
                            out_cnt =0
         | 
| 64 | 
            +
                            if len(res) > 0:
         | 
| 65 | 
            +
                                #count = 0
         | 
| 66 | 
             
                                for search_item in res:
         | 
| 67 | 
            +
                                    print (f'counting {count}')
         | 
| 68 | 
            +
                                    out_cnt+=1
         | 
| 69 | 
            +
                                    out_dict={
         | 
| 70 | 
            +
                                        'Title': f'{search_item.page_title}',
         | 
| 71 | 
            +
                                        'Site': f'{search_item.page_url}',
         | 
| 72 | 
            +
                                        'Img': f'{search_item.image_url}',
         | 
| 73 | 
            +
                                    }
         | 
| 74 | 
            +
                                    print (dir(search_item))
         | 
| 75 | 
            +
                                    html_out = f"""{html_out}
         | 
| 76 | 
             
                                    <div>
         | 
| 77 | 
             
                                    Title: {search_item.page_title}<br>
         | 
| 78 | 
             
                                    Site: <a href='{search_item.page_url}' target='_blank' rel='noopener noreferrer'>{search_item.page_url}</a><br>
         | 
| 79 | 
             
                                    Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
         | 
| 80 | 
             
                                    <img class='my_im' src='{search_item.image_url}'><br>
         | 
| 81 | 
             
                                    </div>"""
         | 
| 82 | 
            +
                                return (gr.HTML(f'<h1>Total Found: {out_cnt}</h1><br>{html_out}'), f"Found frame: {i}", i+int(every_n))
         | 
| 83 | 
            +
                            else:
         | 
| 84 | 
            +
                                pass
         | 
| 85 | 
            +
                        count +=1
         | 
| 86 | 
            +
                        print (i+1)
         | 
| 87 | 
            +
                        #return (None,f"Searching Frame: {i}", "")
         | 
| 88 | 
             
                except Exception as e:
         | 
| 89 | 
            +
                    return (gr.HTML(f'{e}'),"","")
         | 
| 90 | 
            +
                return (gr.HTML('No frame matches found.'),"","")
         | 
|  | |
| 91 |  | 
| 92 | 
            +
            def process_im(file,url):
         | 
| 93 | 
             
                if not url.startswith("https://nymbo"):
         | 
| 94 | 
             
                    return url
         | 
| 95 | 
             
                else:
         | 
|  | |
| 98 | 
             
                    action_input = f"{uid}-tmp.png"
         | 
| 99 | 
             
                    out = os.path.abspath(action_input)
         | 
| 100 | 
             
                    out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
         | 
| 101 | 
            +
                    return (out_url)
         | 
| 102 |  | 
| 103 | 
             
            def rev_im(image):
         | 
| 104 | 
            +
                #image_url = 'https://i.pinimg.com/originals/c4/50/35/c450352ac6ea8645ead206721673e8fb.png'
         | 
| 105 | 
            +
                out_list = []
         | 
| 106 | 
            +
                out_im = []
         | 
| 107 | 
            +
                html_out = """"""
         | 
| 108 | 
            +
                image=cv2.imread(image)
         | 
| 109 | 
             
                cv2.imwrite(f"{uid}-im_tmp.png", image)
         | 
| 110 | 
             
                out = os.path.abspath(f"{uid}-im_tmp.png")
         | 
| 111 | 
             
                out_url = f'https://nymbo-reverse-image.hf.space/file={out}'    
         | 
|  | |
| 113 | 
             
                res = rev_img_searcher.search(out_url)
         | 
| 114 | 
             
                count = 0
         | 
| 115 | 
             
                for search_item in res:
         | 
| 116 | 
            +
                    count+=1
         | 
| 117 | 
            +
                    out_dict={
         | 
| 118 | 
            +
                        'Title': f'{search_item.page_title}',
         | 
| 119 | 
            +
                        'Site': f'{search_item.page_url}',
         | 
| 120 | 
            +
                        'Img': f'{search_item.image_url}',
         | 
| 121 | 
            +
                    }
         | 
| 122 | 
            +
                    print (dir(search_item))
         | 
| 123 | 
            +
                    html_out = f"""{html_out}
         | 
| 124 | 
             
                    <div>
         | 
| 125 | 
             
                    Title: {search_item.page_title}<br>
         | 
| 126 | 
             
                    Site: <a href='{search_item.page_url}' target='_blank' rel='noopener noreferrer'>{search_item.page_url}</a><br>
         | 
|  | |
| 128 | 
             
                    <img class='my_im' src='{search_item.image_url}'><br>
         | 
| 129 | 
             
                    </div>"""
         | 
| 130 |  | 
| 131 | 
            +
                return (gr.HTML(f'<h1>Total Found: {count}</h1><br>{html_out}'))
         | 
| 132 | 
            +
             | 
| 133 | 
            +
             | 
| 134 | 
            +
             | 
| 135 | 
            +
             | 
| 136 |  | 
| 137 | 
             
            with gr.Blocks() as app:
         | 
| 138 | 
             
                with gr.Row():
         | 
| 139 | 
             
                    gr.Column()
         | 
| 140 | 
             
                    with gr.Column():
         | 
| 141 | 
            +
                        
         | 
| 142 | 
            +
                        source_tog=gr.Radio(choices=["Image","Video"],value="Image")
         | 
| 143 | 
             
                        with gr.Box(visible=True) as im_box:
         | 
| 144 | 
            +
                            inp_url=gr.Textbox(label="Image URL")
         | 
| 145 | 
            +
                            load_im_btn=gr.Button("Load Image")
         | 
| 146 | 
            +
                            inp_im=gr.Image(label="Search Image",type='filepath')
         | 
| 147 | 
            +
                            go_btn_im=gr.Button()
         | 
| 148 | 
             
                        with gr.Box(visible=False) as vid_box:
         | 
| 149 | 
            +
                            vid_url=gr.Textbox(label="Video URL")
         | 
| 150 | 
            +
                            vid_url_btn=gr.Button("Load URL")
         | 
| 151 | 
            +
                            inp_vid=gr.Video(label="Search Video")
         | 
| 152 | 
             
                            with gr.Row():
         | 
| 153 | 
            +
                                every_n=gr.Number(label = "Every /nth frame", value = 10)
         | 
| 154 | 
            +
                            stat_box=gr.Textbox(label="Status")
         | 
| 155 | 
             
                            with gr.Row():
         | 
| 156 | 
            +
                                go_btn_vid=gr.Button("Start")
         | 
| 157 | 
            +
                                next_btn=gr.Button("Next")
         | 
| 158 |  | 
| 159 | 
            +
                    gr.Column()            
         | 
| 160 | 
            +
                        #paste_clip = gr.Button("Paste from Clipboard")
         | 
| 161 | 
             
                with gr.Row():
         | 
| 162 | 
            +
                    html_out = gr.HTML("""""")
         | 
| 163 | 
             
                with gr.Row(visible=False):
         | 
| 164 | 
            +
                    hid_box=gr.Textbox()
         | 
|  | |
| 165 | 
             
                def shuf(tog):
         | 
| 166 | 
            +
                    if tog == "Image":
         | 
| 167 | 
            +
                        return gr.update(visible=True),gr.update(visible=False)
         | 
| 168 | 
            +
                    if tog == "Video":
         | 
| 169 | 
            +
                        return gr.update(visible=False),gr.update(visible=True)    
         | 
| 170 | 
             
                def load_image(url):
         | 
| 171 | 
             
                    return url
         | 
| 172 | 
            +
                im_load = load_im_btn.click(load_image,inp_url,inp_im)
         | 
| 173 | 
            +
                next_btn.click(process_vid,[inp_vid,hid_box,every_n],[html_out,stat_box,hid_box])
         | 
| 174 | 
            +
                vid_load = vid_url_btn.click(dl,vid_url,[inp_vid,html_out,stat_box,hid_box])
         | 
| 175 | 
            +
                #inp_im.change(process_im,[inp_im,inp_url],[inp_url])
         | 
| 176 | 
            +
                vid_proc = go_btn_vid.click(process_vid,[inp_vid,hid_box,every_n],[html_out,stat_box,hid_box])
         | 
| 177 | 
            +
                im_proc = go_btn_im.click(rev_im,inp_im,[html_out])
         | 
| 178 | 
            +
                source_tog.change(shuf,[source_tog],[im_box,vid_box],cancels=[vid_proc,im_proc,im_load,vid_load])
         | 
| 179 |  | 
| 180 | 
            +
                #go_btn_url.click(rev_im,inp_url,[html_out])
         | 
| 181 | 
             
            app.queue(concurrency_count=20).launch()
         | 
 
			
