mattiagatti commited on
Commit
0d7318b
·
0 Parent(s):

Initial commit

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
.gitattributes ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.model filter=lfs diff=lfs merge=lfs -text
12
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
13
+ *.onnx filter=lfs diff=lfs merge=lfs -text
14
+ *.ot filter=lfs diff=lfs merge=lfs -text
15
+ *.parquet filter=lfs diff=lfs merge=lfs -text
16
+ *.pb filter=lfs diff=lfs merge=lfs -text
17
+ *.pt filter=lfs diff=lfs merge=lfs -text
18
+ *.pth filter=lfs diff=lfs merge=lfs -text
19
+ *.rar filter=lfs diff=lfs merge=lfs -text
20
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
21
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
22
+ *.tflite filter=lfs diff=lfs merge=lfs -text
23
+ *.tgz filter=lfs diff=lfs merge=lfs -text
24
+ *.wasm filter=lfs diff=lfs merge=lfs -text
25
+ *.xz filter=lfs diff=lfs merge=lfs -text
26
+ *.zip filter=lfs diff=lfs merge=lfs -text
27
+ *.zstandard filter=lfs diff=lfs merge=lfs -text
28
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
29
+ *.jpg filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Mars DTM Estimation
3
+ emoji: ⚡
4
+ colorFrom: yellow
5
+ colorTo: purple
6
+ python_version: 3.11
7
+ sdk: gradio
8
+ sdk_version: 4.36.1
9
+ app_file: app.py
10
+ pinned: false
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
14
+
15
+ ```
16
+ pip install -r requirements.txt
17
+ python3.11 app.py
18
+ ```
app.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from pathlib import Path
3
+ import gradio as gr
4
+ import matplotlib.pyplot as plt
5
+ import numpy as np
6
+ from PIL import Image
7
+ import torch
8
+ from torchvision import transforms
9
+ from model.model import GLPDepth
10
+ import open3d as o3d
11
+
12
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
13
+ W, H = 512, 512
14
+
15
+
16
+ def load_model(path):
17
+ model = GLPDepth(max_depth=700.0).to(device)
18
+ weights = torch.load(path, map_location=torch.device('cpu'))
19
+ model.load_state_dict(weights)
20
+ model.eval()
21
+ return model
22
+
23
+
24
+ def generate_mesh(dtm, image, image_path):
25
+ # prepare points
26
+ points = np.zeros(shape=(W * H, 3), dtype='float32')
27
+ colors = np.zeros(shape=(W * H, 3), dtype='float32')
28
+ for i in range(H):
29
+ for j in range(W):
30
+ points[i * H + j, 0] = j
31
+ points[i * H + j, 1] = i
32
+ points[i * H + j, 2] = dtm[i, j]
33
+ colors[i * H + j, :3] = image[i, j]
34
+ # point cloud
35
+ pcd = o3d.geometry.PointCloud()
36
+ pcd.points = o3d.utility.Vector3dVector(points)
37
+ pcd.colors = o3d.utility.Vector3dVector(colors)
38
+ # normals
39
+ pcd.estimate_normals()
40
+ pcd.orient_normals_to_align_with_direction()
41
+ # surface reconstruction
42
+ mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=7, n_threads=1)[0]
43
+ # mesh transformations
44
+ rotation = mesh.get_rotation_matrix_from_xyz((np.pi, 0, 0))
45
+ mesh.rotate(rotation, center=(0, 0, 0))
46
+ mesh.compute_vertex_normals()
47
+ # remove weird artifacts
48
+ mesh.remove_degenerate_triangles()
49
+ mesh.remove_duplicated_triangles()
50
+ mesh.remove_duplicated_vertices()
51
+ mesh.remove_non_manifold_edges()
52
+ # save mesh
53
+ out_path = f'./{image_path.stem}.obj'
54
+ o3d.io.write_triangle_mesh(out_path, mesh)
55
+ return out_path
56
+
57
+
58
+ def predict(image_path):
59
+ image_path = Path(image_path)
60
+ pil_image = Image.open(image_path).convert('L')
61
+ # transform image to torch
62
+ to_tensor = transforms.ToTensor()
63
+ torch_image = to_tensor(pil_image).to(device).unsqueeze(0)
64
+ # model predict
65
+ with torch.no_grad():
66
+ pred_dtm = model(torch_image)
67
+ # transform torch to numpy
68
+ pred_dtm = pred_dtm.squeeze().cpu().detach().numpy()
69
+ pred_dtm = pred_dtm.max() - pred_dtm
70
+ # create 3d model
71
+ image_scaled = np.asarray(pil_image) / 255.0
72
+ obj_path = generate_mesh(pred_dtm, image_scaled, image_path)
73
+
74
+ # return correct image
75
+ fig, ax = plt.subplots()
76
+ im = ax.imshow(pred_dtm, cmap='jet', vmin=0, vmax=np.max(pred_dtm))
77
+ plt.colorbar(im, ax=ax)
78
+
79
+ fig.canvas.draw()
80
+ data = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)
81
+ data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
82
+
83
+ return [data, obj_path]
84
+
85
+
86
+ model = load_model('best_model.pth')
87
+
88
+ title = 'Mars DTM Estimation'
89
+ description = 'This demo predicts a DTM from an image of the martian surface. Then, by using a surface reconstruction ' \
90
+ 'algorithm, the 3D model is generated and it can also be downloaded. Uploaded images must have a ' \
91
+ '<i>1m/px</i> resolution to get predictions in the correct range. You can download the mesh by clicking ' \
92
+ 'the top-right button on the 3D viewer. '
93
+ examples = [f'examples/{name}' for name in sorted(os.listdir('examples'))]
94
+
95
+ iface = gr.Interface(
96
+ fn=predict,
97
+ inputs=gr.Image(type='filepath', label='Input Image', sources=['upload', 'clipboard']),
98
+ outputs=[
99
+ gr.Image(label='DTM'),
100
+ gr.Model3D(label='3D Model', clear_color=[0.0, 0.0, 0.0, 0.0])
101
+ ],
102
+ examples=examples,
103
+ allow_flagging='never',
104
+ cache_examples=False,
105
+ title=title,
106
+ description=description
107
+ )
108
+ iface.launch()
best_model.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:48dac038a70efe5a8e5887e41aac49117ff216cba67bd3ab5f4da5813972dec1
3
+ size 245133901
examples/example_1.jpg ADDED

Git LFS Details

  • SHA256: 6c15354984cd8481872ee30423cf9d299383c8525cd4cf6c8d0a6455c7bce52e
  • Pointer size: 130 Bytes
  • Size of remote file: 15.2 kB
examples/example_10.jpg ADDED

Git LFS Details

  • SHA256: f07f9dc14d4e06b764038e2c5ca4b45d88e20b582a5983e7b21239541f1adc64
  • Pointer size: 130 Bytes
  • Size of remote file: 39.8 kB
examples/example_100.jpg ADDED

Git LFS Details

  • SHA256: a84b34d0f622db24cc33b17b7da038a060e6aaa56ad265ca055dff9806d4046c
  • Pointer size: 130 Bytes
  • Size of remote file: 37.3 kB
examples/example_11.jpg ADDED

Git LFS Details

  • SHA256: 6f3c99c7182507503439da83e49021c2562539b6e43a2edc81154a520d8f4fff
  • Pointer size: 130 Bytes
  • Size of remote file: 36.8 kB
examples/example_12.jpg ADDED

Git LFS Details

  • SHA256: feff575d50024098001ca1c771d27b7a263cd5fd40e2ba1c2f67b53033698fb8
  • Pointer size: 130 Bytes
  • Size of remote file: 37.2 kB
examples/example_13.jpg ADDED

Git LFS Details

  • SHA256: 120063c1cb2a9dc8b6f639bb69d5ce9665774897cc4cbd06e718e8117cd112c9
  • Pointer size: 130 Bytes
  • Size of remote file: 42 kB
examples/example_14.jpg ADDED

Git LFS Details

  • SHA256: abd1246d8f668ac7de50b047388853f386e2e33c45c9ebf4201226583c3eff30
  • Pointer size: 130 Bytes
  • Size of remote file: 35.7 kB
examples/example_15.jpg ADDED

Git LFS Details

  • SHA256: f201b77b25abea22e50c93c87581296f205ba64f9d455d00033ec68c899ab5f5
  • Pointer size: 130 Bytes
  • Size of remote file: 25.6 kB
examples/example_16.jpg ADDED

Git LFS Details

  • SHA256: 25d4f76fb566043792e2dd4bb21ba1774be3940285747de23c56a42271a03fa2
  • Pointer size: 130 Bytes
  • Size of remote file: 36.7 kB
examples/example_17.jpg ADDED

Git LFS Details

  • SHA256: c5f8f0f33ba1754ecfc85f841cf7382559738b8493d4b509c6cddc261b6846c7
  • Pointer size: 130 Bytes
  • Size of remote file: 30.3 kB
examples/example_18.jpg ADDED

Git LFS Details

  • SHA256: 9741a1edb448b1cc3d04a7ff9cea8d297940ed6501c0ecde70351ec0dd341487
  • Pointer size: 130 Bytes
  • Size of remote file: 20.4 kB
examples/example_19.jpg ADDED

Git LFS Details

  • SHA256: 10440a2fcabaa66e4f24fceeb338710a9da91e42eb753c65fd68c82a394a317c
  • Pointer size: 130 Bytes
  • Size of remote file: 47.8 kB
examples/example_2.jpg ADDED

Git LFS Details

  • SHA256: 06428dff5f08982296a711ea236acd9303a5c33df4645a9fd9ece74f009ea7ca
  • Pointer size: 130 Bytes
  • Size of remote file: 22 kB
examples/example_20.jpg ADDED

Git LFS Details

  • SHA256: ca8d56c8a4e2e752fc33df9849b7d81016efc54ae9b760e1666af2a01378d1b2
  • Pointer size: 130 Bytes
  • Size of remote file: 25.2 kB
examples/example_21.jpg ADDED

Git LFS Details

  • SHA256: aa0a0574067c1078feac3884bd257301ea3f86bf8be590d87ab673af1add1439
  • Pointer size: 130 Bytes
  • Size of remote file: 25.2 kB
examples/example_22.jpg ADDED

Git LFS Details

  • SHA256: 179aa0716e48ac70bdaacad8ec4dcf6d0e8eaa08aba657297f3ef471ba28e88c
  • Pointer size: 130 Bytes
  • Size of remote file: 27.8 kB
examples/example_23.jpg ADDED

Git LFS Details

  • SHA256: bc432b3446ca2b4718c32104ebb4da88705096c9d56912b5141e3ef3c4323597
  • Pointer size: 130 Bytes
  • Size of remote file: 24.8 kB
examples/example_24.jpg ADDED

Git LFS Details

  • SHA256: 1690c259b1c24e309f513cb71b712f96f467f6f2a3d5eb07f9c9f3105600e8d3
  • Pointer size: 130 Bytes
  • Size of remote file: 27 kB
examples/example_25.jpg ADDED

Git LFS Details

  • SHA256: d01f877d4f25a5b4cea6643f3791d2b755801c3f1df1b517daa5c2ec93414d82
  • Pointer size: 130 Bytes
  • Size of remote file: 36.7 kB
examples/example_26.jpg ADDED

Git LFS Details

  • SHA256: 07ae22dd08c3c833ec53e5d6a2127bb6d40a9da0e5fe2063c6b04d4428f78ace
  • Pointer size: 130 Bytes
  • Size of remote file: 24.6 kB
examples/example_27.jpg ADDED

Git LFS Details

  • SHA256: 5acc4406c33e61f90a4fd091980376f0d2d6a430da27cfdfe9a53115a50042d1
  • Pointer size: 130 Bytes
  • Size of remote file: 35.4 kB
examples/example_28.jpg ADDED

Git LFS Details

  • SHA256: 9471ca447354096ed7588ce5a5302aeeede317f08dfe05f9719c8ff1d90982b8
  • Pointer size: 130 Bytes
  • Size of remote file: 23.5 kB
examples/example_29.jpg ADDED

Git LFS Details

  • SHA256: 3e376d09e84d6d116cb11de8419fa4cb9d16b8c14be5f5246d4b47e2d0b87d90
  • Pointer size: 130 Bytes
  • Size of remote file: 37.7 kB
examples/example_3.jpg ADDED

Git LFS Details

  • SHA256: dd34cbe3e3a0812d1cf2805753c49d2ff7066f966bd1a5f4236b810242e1cfee
  • Pointer size: 130 Bytes
  • Size of remote file: 42.4 kB
examples/example_30.jpg ADDED

Git LFS Details

  • SHA256: b2def7f3173adbcf609125f1b990954eab9fd5689c3c43d937c82b64a0abe53d
  • Pointer size: 130 Bytes
  • Size of remote file: 37.5 kB
examples/example_31.jpg ADDED

Git LFS Details

  • SHA256: ab666475b9a6295c5be866d70da3496af8f0061e0d7f1159e69184a5a4881f96
  • Pointer size: 130 Bytes
  • Size of remote file: 32.9 kB
examples/example_32.jpg ADDED

Git LFS Details

  • SHA256: d8462c6acc8d955ceb047490a82ed691c109a704a216d4342823845f06eabadc
  • Pointer size: 130 Bytes
  • Size of remote file: 28.2 kB
examples/example_33.jpg ADDED

Git LFS Details

  • SHA256: f1f5e6ebbae1119fe373ffd8fa58fc6796d2e12603963711920e0d5b4ce7d732
  • Pointer size: 130 Bytes
  • Size of remote file: 30.8 kB
examples/example_34.jpg ADDED

Git LFS Details

  • SHA256: c67feab8c7f27ce4f89349613d33e5ce6f9b530cb5a922e61450d60271cc556f
  • Pointer size: 130 Bytes
  • Size of remote file: 36.7 kB
examples/example_35.jpg ADDED

Git LFS Details

  • SHA256: ccbbc8b9e5a3caf566fa82c0b78907c789b67acef46488420813f775685f91eb
  • Pointer size: 130 Bytes
  • Size of remote file: 42.1 kB
examples/example_36.jpg ADDED

Git LFS Details

  • SHA256: cdb7a30d51453d0252940d614aa74eee7533d2d1fc42fd0ce04589d1ae7a906b
  • Pointer size: 130 Bytes
  • Size of remote file: 29.7 kB
examples/example_37.jpg ADDED

Git LFS Details

  • SHA256: c312bb00ef74f0fcdcca8ff024df821ff292c86580885d2adca401940ff1f5a9
  • Pointer size: 130 Bytes
  • Size of remote file: 49.8 kB
examples/example_38.jpg ADDED

Git LFS Details

  • SHA256: c8090785b4167b2e1a77c244c13387a05d3e850559cf3e695c50ca32fea324aa
  • Pointer size: 130 Bytes
  • Size of remote file: 38.5 kB
examples/example_39.jpg ADDED

Git LFS Details

  • SHA256: 884bf3b94a8be218581ff59d07d839d8ac1d873ed0b94a7890348b3f8f4b4db9
  • Pointer size: 130 Bytes
  • Size of remote file: 27.9 kB
examples/example_4.jpg ADDED

Git LFS Details

  • SHA256: 89c1942305d0232ecdca336cbb4ba3b866f21bcd963080d4d2faf33c088f7fcc
  • Pointer size: 130 Bytes
  • Size of remote file: 37.7 kB
examples/example_40.jpg ADDED

Git LFS Details

  • SHA256: fb03f5cf942bef6fea14e6f4bfdc3fe4f95c52455bf0a47241b7919809ff7857
  • Pointer size: 130 Bytes
  • Size of remote file: 38.4 kB
examples/example_41.jpg ADDED

Git LFS Details

  • SHA256: 24f077b54ae43928546d45542f3515b13862d5e8540a1cfb0c99030fb710daba
  • Pointer size: 130 Bytes
  • Size of remote file: 35.5 kB
examples/example_42.jpg ADDED

Git LFS Details

  • SHA256: 9d79a94b3da8a51583d5f9fdfbe34a0bf835c6f0b3f223d9ab422cba13cfbec4
  • Pointer size: 130 Bytes
  • Size of remote file: 33.1 kB
examples/example_43.jpg ADDED

Git LFS Details

  • SHA256: 502846d7aee6026ec258d783e342e9b8f5e11fe66217c2c43c8d91b2b39069f6
  • Pointer size: 130 Bytes
  • Size of remote file: 38.2 kB
examples/example_44.jpg ADDED

Git LFS Details

  • SHA256: d6bca0dfff4b2d5c24de861f5340f52fdfcda82759b673b96429be6cc4873c3c
  • Pointer size: 130 Bytes
  • Size of remote file: 32.3 kB
examples/example_45.jpg ADDED

Git LFS Details

  • SHA256: 716ba7bf5ebcb920a84329ba62520f49e12b939c78e30063fb6f49fa2cf4ed11
  • Pointer size: 130 Bytes
  • Size of remote file: 36.5 kB
examples/example_46.jpg ADDED

Git LFS Details

  • SHA256: acef3ce41bd418559e39df5cbad1a0ed61c31c9969b3d82eadc1ae742fb11828
  • Pointer size: 130 Bytes
  • Size of remote file: 25.7 kB
examples/example_47.jpg ADDED

Git LFS Details

  • SHA256: 428305c03b08215aef12c27539a6aba475a9b9d2e54029ae52cdf0833df21665
  • Pointer size: 130 Bytes
  • Size of remote file: 25.7 kB
examples/example_48.jpg ADDED

Git LFS Details

  • SHA256: 2786dbfe16c78ee7767c775f54eb2f611d75b9875752aad7a9c8ebad10b6caa4
  • Pointer size: 130 Bytes
  • Size of remote file: 21.9 kB
examples/example_49.jpg ADDED

Git LFS Details

  • SHA256: d23a2d30fdca9d9ba4a5c133c6a8fe1420f836f6fc4542a312c61662ecaac4e7
  • Pointer size: 130 Bytes
  • Size of remote file: 34.2 kB
examples/example_5.jpg ADDED

Git LFS Details

  • SHA256: 7ded0010ca0c18488a58e9f55aa240ff9d1c4f8175d53296cd5569c6ef8c05a7
  • Pointer size: 130 Bytes
  • Size of remote file: 39.4 kB