syubraj commited on
Commit
3be49b0
1 Parent(s): 528ba5c

Upload folder using huggingface_hub

Browse files
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Gradio_Images
2
+ flagged
3
+
.idea/.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
.idea/Oxygen Level Intensity Mapper.iml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="jdk" jdkName="teleplant" jdkType="Python SDK" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ <component name="PyDocumentationSettings">
9
+ <option name="format" value="PLAIN" />
10
+ <option name="myDocStringFormat" value="Plain" />
11
+ </component>
12
+ </module>
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
5
+ <option name="ignoredPackages">
6
+ <value>
7
+ <list size="14">
8
+ <item index="0" class="java.lang.String" itemvalue="scipy" />
9
+ <item index="1" class="java.lang.String" itemvalue="protobuf" />
10
+ <item index="2" class="java.lang.String" itemvalue="thop" />
11
+ <item index="3" class="java.lang.String" itemvalue="opencv-python" />
12
+ <item index="4" class="java.lang.String" itemvalue="PyYAML" />
13
+ <item index="5" class="java.lang.String" itemvalue="ipython" />
14
+ <item index="6" class="java.lang.String" itemvalue="numpy" />
15
+ <item index="7" class="java.lang.String" itemvalue="requests" />
16
+ <item index="8" class="java.lang.String" itemvalue="psutil" />
17
+ <item index="9" class="java.lang.String" itemvalue="tqdm" />
18
+ <item index="10" class="java.lang.String" itemvalue="pandas" />
19
+ <item index="11" class="java.lang.String" itemvalue="tensorboard" />
20
+ <item index="12" class="java.lang.String" itemvalue="seaborn" />
21
+ <item index="13" class="java.lang.String" itemvalue="matplotlib" />
22
+ </list>
23
+ </value>
24
+ </option>
25
+ </inspection_tool>
26
+ </profile>
27
+ </component>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/misc.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Black">
4
+ <option name="sdkName" value="teleplant" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="teleplant" project-jdk-type="Python SDK" />
7
+ </project>
.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/Oxygen Level Intensity Mapper.iml" filepath="$PROJECT_DIR$/.idea/Oxygen Level Intensity Mapper.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
.idea/workspace.xml ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="AutoImportSettings">
4
+ <option name="autoReloadType" value="SELECTIVE" />
5
+ </component>
6
+ <component name="ChangeListManager">
7
+ <list default="true" id="2d98c80b-c1bc-4875-942c-d13799747515" name="Changes" comment="" />
8
+ <option name="SHOW_DIALOG" value="false" />
9
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
10
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
11
+ <option name="LAST_RESOLUTION" value="IGNORE" />
12
+ </component>
13
+ <component name="FileTemplateManagerImpl">
14
+ <option name="RECENT_TEMPLATES">
15
+ <list>
16
+ <option value="Python Script" />
17
+ </list>
18
+ </option>
19
+ </component>
20
+ <component name="Git.Settings">
21
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
22
+ </component>
23
+ <component name="ProjectColorInfo"><![CDATA[{
24
+ "associatedIndex": 8
25
+ }]]></component>
26
+ <component name="ProjectId" id="2iAkUe6fUvTFkpeqnkXGlbeGHqK" />
27
+ <component name="ProjectViewState">
28
+ <option name="hideEmptyMiddlePackages" value="true" />
29
+ <option name="showLibraryContents" value="true" />
30
+ </component>
31
+ <component name="PropertiesComponent"><![CDATA[{
32
+ "keyToString": {
33
+ "Python.app.executor": "Run",
34
+ "Python.main.executor": "Run",
35
+ "RunOnceActivity.ShowReadmeOnStart": "true",
36
+ "git-widget-placeholder": "master",
37
+ "last_opened_file_path": "/home/ubuntu/Documents/Fold1/Oxygen Level Intensity Mapper"
38
+ }
39
+ }]]></component>
40
+ <component name="RunManager" selected="Python.app">
41
+ <configuration name="app" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
42
+ <module name="Oxygen Level Intensity Mapper" />
43
+ <option name="ENV_FILES" value="" />
44
+ <option name="INTERPRETER_OPTIONS" value="" />
45
+ <option name="PARENT_ENVS" value="true" />
46
+ <envs>
47
+ <env name="PYTHONUNBUFFERED" value="1" />
48
+ </envs>
49
+ <option name="SDK_HOME" value="" />
50
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
51
+ <option name="IS_MODULE_SDK" value="true" />
52
+ <option name="ADD_CONTENT_ROOTS" value="true" />
53
+ <option name="ADD_SOURCE_ROOTS" value="true" />
54
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/app.py" />
55
+ <option name="PARAMETERS" value="" />
56
+ <option name="SHOW_COMMAND_LINE" value="false" />
57
+ <option name="EMULATE_TERMINAL" value="false" />
58
+ <option name="MODULE_MODE" value="false" />
59
+ <option name="REDIRECT_INPUT" value="false" />
60
+ <option name="INPUT_FILE" value="" />
61
+ <method v="2" />
62
+ </configuration>
63
+ <configuration name="main" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
64
+ <module name="Oxygen Level Intensity Mapper" />
65
+ <option name="ENV_FILES" value="" />
66
+ <option name="INTERPRETER_OPTIONS" value="" />
67
+ <option name="PARENT_ENVS" value="true" />
68
+ <envs>
69
+ <env name="PYTHONUNBUFFERED" value="1" />
70
+ </envs>
71
+ <option name="SDK_HOME" value="" />
72
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
73
+ <option name="IS_MODULE_SDK" value="true" />
74
+ <option name="ADD_CONTENT_ROOTS" value="true" />
75
+ <option name="ADD_SOURCE_ROOTS" value="true" />
76
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/main.py" />
77
+ <option name="PARAMETERS" value="" />
78
+ <option name="SHOW_COMMAND_LINE" value="false" />
79
+ <option name="EMULATE_TERMINAL" value="false" />
80
+ <option name="MODULE_MODE" value="false" />
81
+ <option name="REDIRECT_INPUT" value="false" />
82
+ <option name="INPUT_FILE" value="" />
83
+ <method v="2" />
84
+ </configuration>
85
+ <recent_temporary>
86
+ <list>
87
+ <item itemvalue="Python.app" />
88
+ <item itemvalue="Python.main" />
89
+ </list>
90
+ </recent_temporary>
91
+ </component>
92
+ <component name="SharedIndexes">
93
+ <attachedChunks>
94
+ <set>
95
+ <option value="bundled-python-sdk-5b207ade9991-746f403e7f0c-com.jetbrains.pycharm.community.sharedIndexes.bundled-PC-241.17890.14" />
96
+ </set>
97
+ </attachedChunks>
98
+ </component>
99
+ <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
100
+ <component name="TaskManager">
101
+ <task active="true" id="Default" summary="Default task">
102
+ <changelist id="2d98c80b-c1bc-4875-942c-d13799747515" name="Changes" comment="" />
103
+ <created>1718940786006</created>
104
+ <option name="number" value="Default" />
105
+ <option name="presentableId" value="Default" />
106
+ <updated>1718940786006</updated>
107
+ </task>
108
+ <servers />
109
+ </component>
110
+ </project>
Heatmap_Images/D1 AH 24 2_heatmap.jpg ADDED
Heatmap_Images/Image_01_heatmap.jpg ADDED
Heatmap_Images/Image_4180_heatmap.jpg ADDED
Heatmap_Images/Image_4185_heatmap.jpg ADDED
Heatmap_Images/heatmap_7d9bd02e-d124-4364-a132-9b6b7e63067c.jpg ADDED
Heatmap_Images/heatmap_90bbc842-671a-4231-99c5-fad12a6426a8.jpg ADDED
Heatmap_Images/heatmap_98efe41e-60a6-41e0-b075-fd618e43770b.jpg ADDED
README.md CHANGED
@@ -1,12 +1,55 @@
1
  ---
2
- title: Oxygen Level Intensity Mapper
3
- emoji: 🏆
4
- colorFrom: blue
5
- colorTo: green
6
  sdk: gradio
7
  sdk_version: 4.36.1
8
- app_file: app.py
9
- pinned: false
10
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: oxygen_level_intensity_mapper
3
+ app_file: app.py
 
 
4
  sdk: gradio
5
  sdk_version: 4.36.1
 
 
6
  ---
7
+ # Oxygen Level Heatmap Generator
8
+
9
+ This Python script processes an image to generate a heatmap representing oxygen levels based on the intensity of the image. The image is divided into a 32x32 grid, and the intensity of each grid cell is calculated, normalized, and mapped to oxygen levels using a provided mapping table.
10
+
11
+ ## Features
12
+
13
+ - Divide an image into a 32x32 grid.
14
+ - Calculate the intensity of each grid cell.
15
+ - Normalize the intensity values.
16
+ - Map the normalized intensities to oxygen levels based on a provided table.
17
+ - Generate and save a heatmap showing the oxygen levels.
18
+
19
+ ## Requirements
20
+
21
+ - Python 3.x
22
+ - NumPy
23
+ - Pillow
24
+ - Matplotlib
25
+ - SciPy
26
+
27
+ ## Installation
28
+
29
+ You can install the required Python libraries using `pip`:
30
+
31
+ ```bash
32
+ pip install -r requirements.txt
33
+ ```
34
+
35
+ ## Usage
36
+
37
+ 1. **Prepare the image:**
38
+ Place your image file in the `Raw_Images` directory or any directory of your choice.
39
+
40
+ 2. **Run the script:**
41
+ Update the `image_path` variable in the script to point to your image file and run the script.
42
+
43
+ 3. **Output:**
44
+ The generated heatmap will be saved in the `Heatmap_Images` directory with the filename `{image_name}_heatmap.jpg`.
45
+
46
+
47
+ ## Run Script
48
+
49
+ To run the script you can just run following command in terminal;
50
+
51
+ ```python
52
+ python main.py
53
+ ```
54
 
55
+ Make sure the current working directory shall be the Folder named 'Oxygen-Level-Intensity-Mapper/'
Raw_Images/D1 AH 24 2.jpg ADDED
Raw_Images/Image_01.jpg ADDED
Raw_Images/Image_4180.jpg ADDED
Raw_Images/Image_4185.jpg ADDED
Raw_Images/Image_4304.jpg ADDED
Raw_Images/Image_4337.jpg ADDED
__pycache__/main.cpython-310.pyc ADDED
Binary file (3.03 kB). View file
 
app.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+
3
+ from main import process_and_generate_heatmap
4
+
5
+ if __name__ == "__main__":
6
+ iface = gr.Interface(
7
+ fn=process_and_generate_heatmap,
8
+ inputs=gr.Image(type="pil"),
9
+ outputs=gr.File(label="Heatmap Image"),
10
+ title="Heatmap Generator",
11
+ description="Upload an image to generate a high-resolution heatmap."
12
+ )
13
+
14
+ # Launch the app
15
+ iface.launch(share=True)
main.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ from PIL import Image
3
+ import matplotlib.pyplot as plt
4
+ import matplotlib.colors as mcolors
5
+ from scipy.interpolate import interp1d
6
+ import os
7
+ import uuid
8
+
9
+
10
+ def calculate_intensity(image):
11
+ """
12
+ Calculate the intensity of the image by converting it to grayscale
13
+ and taking the mean value.
14
+ """
15
+ gray_image = image.convert('L') # Convert to grayscale
16
+ intensity = np.mean(np.array(gray_image))
17
+ return intensity
18
+
19
+
20
+ def process_image(image_path):
21
+ """
22
+ Process the image by dividing it into 32x32 grids and calculating normalized intensity.
23
+ """
24
+ # Open the image
25
+ image = Image.open(image_path)
26
+ width, height = image.size
27
+
28
+ # Determine the ideal grid size
29
+ grid_width = width // 32
30
+ grid_height = height // 32
31
+
32
+ intensities = []
33
+
34
+ # Divide the image into grids and calculate intensity for each grid
35
+ for y in range(32):
36
+ row_intensities = []
37
+ for x in range(32):
38
+ left = x * grid_width
39
+ upper = y * grid_height
40
+ right = left + grid_width
41
+ lower = upper + grid_height
42
+
43
+ # Crop the image to the grid
44
+ grid = image.crop((left, upper, right, lower))
45
+ intensity = calculate_intensity(grid)
46
+ row_intensities.append(intensity)
47
+ intensities.append(row_intensities)
48
+
49
+ intensities = np.array(intensities)
50
+
51
+ # Normalize the intensities to the range 0-1
52
+ min_intensity = intensities.min()
53
+ max_intensity = intensities.max()
54
+ normalized_intensities = (intensities - min_intensity) / (max_intensity - min_intensity)
55
+
56
+ return normalized_intensities
57
+
58
+
59
+ def intensity_to_oxygen_level(normalized_intensities):
60
+ """
61
+ Map normalized intensity values to oxygen levels using interpolation.
62
+ """
63
+ # Provided mapping table
64
+ ksv_values = [0, 0.009303080328, 0.19176, 0.5196879311, 0.6252571452, 0.7115134738,
65
+ 0.8476158622, 0.9531850764, 1.039441405, 1.145010619, 1.175543793,
66
+ 1.231266948, 1.281113007, 1.47293855, 1.609040939]
67
+ oxygen_levels = [0, 0.68, 1, 2, 2.5, 3, 4, 5, 6, 7.5, 8, 9, 10, 15, 20]
68
+
69
+ # Normalize intensities to match the range of Ksv values
70
+ min_ksv = min(ksv_values)
71
+ max_ksv = max(ksv_values)
72
+ normalized_intensities = (normalized_intensities * (max_ksv - min_ksv)) + min_ksv
73
+
74
+ # Interpolation function
75
+ interp_func = interp1d(ksv_values, oxygen_levels, kind='linear', fill_value='extrapolate')
76
+ oxygen_levels_mapped = interp_func(normalized_intensities)
77
+
78
+ return oxygen_levels_mapped
79
+
80
+
81
+ def generate_heatmap(data, output_path):
82
+ """
83
+ Generate a high-resolution heatmap from data and save it as an image.
84
+ """
85
+ plt.figure(figsize=(10, 8))
86
+ plt.imshow(data, cmap='RdBu_r', interpolation='nearest', norm=mcolors.Normalize(vmin=0, vmax=20))
87
+ plt.colorbar(label='Oxygen Level (%)')
88
+
89
+ # Save the figure with high resolution
90
+ plt.savefig(output_path, dpi=300)
91
+ plt.close()
92
+
93
+
94
+ def process_and_generate_heatmap(image):
95
+ """
96
+ Process the image and generate a heatmap, saving the result to a file.
97
+ """
98
+ # Generate a unique name for the input image
99
+ unique_id = str(uuid.uuid4())
100
+ input_dir = 'Gradio_Images'
101
+ input_image_path = os.path.join(input_dir, f'uploaded_image_{unique_id}.jpg')
102
+ image.save(input_image_path)
103
+
104
+ # Process the image to get normalized intensities
105
+ normalized_intensities = process_image(input_image_path)
106
+ oxygen_levels = intensity_to_oxygen_level(normalized_intensities)
107
+
108
+ # Generate the output path for the heatmap based on the unique name
109
+ output_dir = 'Heatmap_Images'
110
+
111
+ output_image_path = os.path.join(output_dir, f'heatmap_{unique_id}.jpg')
112
+
113
+ generate_heatmap(oxygen_levels, output_image_path)
114
+
115
+ return output_image_path
116
+
117
+
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ matplotlib==3.8.4
2
+ numpy==1.26.4
3
+ Pillow==10.0.1
4
+ scipy==1.13.1