Spaces:
Running
Running
Add number extraction feature and update instructions
Browse filesAdded 'extract_numbers_in_brackets' function in utils.py for efficient extraction of numbers enclosed in square brackets from a given string.
app.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
import os
|
| 2 |
-
from typing import List, Dict
|
| 3 |
|
| 4 |
import cv2
|
| 5 |
import gradio as gr
|
|
@@ -16,6 +16,7 @@ HOME = os.getenv("HOME")
|
|
| 16 |
DEVICE = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
|
| 17 |
|
| 18 |
SAM_CHECKPOINT = os.path.join(HOME, "app/weights/sam_vit_h_4b8939.pth")
|
|
|
|
| 19 |
SAM_MODEL_TYPE = "vit_h"
|
| 20 |
|
| 21 |
MARKDOWN = """
|
|
@@ -44,7 +45,7 @@ def inference(
|
|
| 44 |
image_and_mask: Dict[str, np.ndarray],
|
| 45 |
annotation_mode: List[str],
|
| 46 |
mask_alpha: float
|
| 47 |
-
) -> np.ndarray:
|
| 48 |
image = image_and_mask['image']
|
| 49 |
mask = cv2.cvtColor(image_and_mask['mask'], cv2.COLOR_RGB2GRAY)
|
| 50 |
is_interactive = not np.all(mask == 0)
|
|
@@ -68,7 +69,7 @@ def inference(
|
|
| 68 |
with_mask="Mask" in annotation_mode,
|
| 69 |
with_polygon="Polygon" in annotation_mode,
|
| 70 |
with_label="Mark" in annotation_mode)
|
| 71 |
-
return cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)
|
| 72 |
|
| 73 |
|
| 74 |
def prompt(message, history, image: np.ndarray, api_key: str) -> str:
|
|
@@ -83,6 +84,10 @@ def prompt(message, history, image: np.ndarray, api_key: str) -> str:
|
|
| 83 |
)
|
| 84 |
|
| 85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
image_input = gr.Image(
|
| 87 |
label="Input",
|
| 88 |
type="numpy",
|
|
@@ -100,9 +105,8 @@ slider_mask_alpha = gr.Slider(
|
|
| 100 |
maximum=1,
|
| 101 |
value=0.05,
|
| 102 |
label="Mask Alpha")
|
| 103 |
-
image_output = gr.
|
| 104 |
-
label="SoM Visual Prompt"
|
| 105 |
-
type="numpy")
|
| 106 |
openai_api_key = gr.Textbox(
|
| 107 |
show_label=False,
|
| 108 |
placeholder="Before you start chatting, set your OpenAI API key here",
|
|
@@ -115,6 +119,7 @@ run_button = gr.Button("Run")
|
|
| 115 |
|
| 116 |
with gr.Blocks() as demo:
|
| 117 |
gr.Markdown(MARKDOWN)
|
|
|
|
| 118 |
with gr.Row():
|
| 119 |
with gr.Column():
|
| 120 |
image_input.render()
|
|
@@ -139,6 +144,10 @@ with gr.Blocks() as demo:
|
|
| 139 |
run_button.click(
|
| 140 |
fn=inference,
|
| 141 |
inputs=[image_input, checkbox_annotation_mode, slider_mask_alpha],
|
| 142 |
-
outputs=image_output)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
|
| 144 |
demo.queue().launch(debug=False, show_error=True)
|
|
|
|
| 1 |
import os
|
| 2 |
+
from typing import List, Dict, Tuple, Any
|
| 3 |
|
| 4 |
import cv2
|
| 5 |
import gradio as gr
|
|
|
|
| 16 |
DEVICE = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
|
| 17 |
|
| 18 |
SAM_CHECKPOINT = os.path.join(HOME, "app/weights/sam_vit_h_4b8939.pth")
|
| 19 |
+
# SAM_CHECKPOINT = "weights/sam_vit_h_4b8939.pth"
|
| 20 |
SAM_MODEL_TYPE = "vit_h"
|
| 21 |
|
| 22 |
MARKDOWN = """
|
|
|
|
| 45 |
image_and_mask: Dict[str, np.ndarray],
|
| 46 |
annotation_mode: List[str],
|
| 47 |
mask_alpha: float
|
| 48 |
+
) -> Tuple[Tuple[np.ndarray, List[Any]], sv.Detections]:
|
| 49 |
image = image_and_mask['image']
|
| 50 |
mask = cv2.cvtColor(image_and_mask['mask'], cv2.COLOR_RGB2GRAY)
|
| 51 |
is_interactive = not np.all(mask == 0)
|
|
|
|
| 69 |
with_mask="Mask" in annotation_mode,
|
| 70 |
with_polygon="Polygon" in annotation_mode,
|
| 71 |
with_label="Mark" in annotation_mode)
|
| 72 |
+
return (cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB), []), detections
|
| 73 |
|
| 74 |
|
| 75 |
def prompt(message, history, image: np.ndarray, api_key: str) -> str:
|
|
|
|
| 84 |
)
|
| 85 |
|
| 86 |
|
| 87 |
+
def on_image_input_clear():
|
| 88 |
+
return None, None
|
| 89 |
+
|
| 90 |
+
|
| 91 |
image_input = gr.Image(
|
| 92 |
label="Input",
|
| 93 |
type="numpy",
|
|
|
|
| 105 |
maximum=1,
|
| 106 |
value=0.05,
|
| 107 |
label="Mask Alpha")
|
| 108 |
+
image_output = gr.AnnotatedImage(
|
| 109 |
+
label="SoM Visual Prompt")
|
|
|
|
| 110 |
openai_api_key = gr.Textbox(
|
| 111 |
show_label=False,
|
| 112 |
placeholder="Before you start chatting, set your OpenAI API key here",
|
|
|
|
| 119 |
|
| 120 |
with gr.Blocks() as demo:
|
| 121 |
gr.Markdown(MARKDOWN)
|
| 122 |
+
detections_state = gr.State()
|
| 123 |
with gr.Row():
|
| 124 |
with gr.Column():
|
| 125 |
image_input.render()
|
|
|
|
| 144 |
run_button.click(
|
| 145 |
fn=inference,
|
| 146 |
inputs=[image_input, checkbox_annotation_mode, slider_mask_alpha],
|
| 147 |
+
outputs=[image_output, detections_state])
|
| 148 |
+
image_input.clear(
|
| 149 |
+
fn=on_image_input_clear,
|
| 150 |
+
outputs=[image_output, detections_state]
|
| 151 |
+
)
|
| 152 |
|
| 153 |
demo.queue().launch(debug=False, show_error=True)
|
gpt4v.py
CHANGED
|
@@ -6,7 +6,10 @@ import numpy as np
|
|
| 6 |
|
| 7 |
|
| 8 |
META_PROMPT = '''
|
| 9 |
-
|
|
|
|
|
|
|
|
|
|
| 10 |
'''
|
| 11 |
API_URL = "https://api.openai.com/v1/chat/completions"
|
| 12 |
|
|
|
|
| 6 |
|
| 7 |
|
| 8 |
META_PROMPT = '''
|
| 9 |
+
For any labels or markings on an image that you reference in your response, please
|
| 10 |
+
enclose them in square brackets ([]) and list them explicitly. Do not use ranges; for
|
| 11 |
+
example, instead of '1 - 4', list as '[1], [2], [3], [4]'. These labels could be
|
| 12 |
+
numbers or letters and typically correspond to specific segments or parts of the image.
|
| 13 |
'''
|
| 14 |
API_URL = "https://api.openai.com/v1/chat/completions"
|
| 15 |
|
utils.py
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import cv2
|
| 2 |
|
| 3 |
import numpy as np
|
|
@@ -205,3 +208,18 @@ def postprocess_masks(
|
|
| 205 |
xyxy=sv.mask_to_xyxy(masks),
|
| 206 |
mask=masks
|
| 207 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import re
|
| 2 |
+
from typing import List
|
| 3 |
+
|
| 4 |
import cv2
|
| 5 |
|
| 6 |
import numpy as np
|
|
|
|
| 208 |
xyxy=sv.mask_to_xyxy(masks),
|
| 209 |
mask=masks
|
| 210 |
)
|
| 211 |
+
|
| 212 |
+
|
| 213 |
+
def extract_numbers_in_brackets(text: str) -> List[int]:
|
| 214 |
+
"""
|
| 215 |
+
Extracts all numbers enclosed in square brackets from a given string.
|
| 216 |
+
|
| 217 |
+
Args:
|
| 218 |
+
text (str): The string to be searched.
|
| 219 |
+
|
| 220 |
+
Returns:
|
| 221 |
+
List[int]: A list of integers found within square brackets.
|
| 222 |
+
"""
|
| 223 |
+
pattern = r'\[(\d+)\]'
|
| 224 |
+
numbers = [int(num) for num in re.findall(pattern, text)]
|
| 225 |
+
return numbers
|