File size: 1,644 Bytes
1cbfd2b
 
b578661
626bf47
 
15ac7f4
50ba528
1cbfd2b
307c14f
bc3919a
307c14f
 
bc3919a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20d1027
626bf47
15ac7f4
 
 
626bf47
1cbfd2b
 
50ba528
626bf47
 
50ba528
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import gradio as gr
import kornia as K
from kornia.core import Tensor
from kornia.contrib import ImageStitcher
import kornia.feature as KF
import torch
import numpy as np

def inference(img_1, img_2):
    # Convert numpy arrays to Tensors and ensure correct shape
    img_1: Tensor = K.image_to_tensor(img_1, keepdim=False).float() / 255.0
    img_2: Tensor = K.image_to_tensor(img_2, keepdim=False).float() / 255.0
    
    # Ensure 3D tensors (C, H, W)
    if img_1.ndim == 2:
        img_1 = img_1.unsqueeze(0)
    if img_2.ndim == 2:
        img_2 = img_2.unsqueeze(0)
    
    # Ensure 3 channel images
    if img_1.shape[0] == 1:
        img_1 = img_1.repeat(3, 1, 1)
    if img_2.shape[0] == 1:
        img_2 = img_2.repeat(3, 1, 1)
    
    # Add batch dimension
    img_1 = img_1.unsqueeze(0)
    img_2 = img_2.unsqueeze(0)
    
    IS = ImageStitcher(KF.LoFTR(pretrained='outdoor'), estimator='ransac')
    with torch.no_grad():
        result = IS(img_1, img_2)
        
    return K.tensor_to_image(result[0])

examples = [
    ['examples/foto1B.jpg', 'examples/foto1A.jpg'],
]

with gr.Blocks(theme='huggingface') as demo_app:
    gr.Markdown("# Image Stitching using Kornia and LoFTR")
    with gr.Row():
        input_image1 = gr.Image(label="Input Image 1")
        input_image2 = gr.Image(label="Input Image 2")
    output_image = gr.Image(label="Output Image")
    stitch_button = gr.Button("Stitch Images")
    stitch_button.click(fn=inference, inputs=[input_image1, input_image2], outputs=output_image)
    gr.Examples(examples=examples, inputs=[input_image1, input_image2])

if __name__ == "__main__":
    demo_app.launch()