Gabriel commited on
Commit
f31f6ca
·
verified ·
1 Parent(s): c662fe8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -14
app.py CHANGED
@@ -116,16 +116,14 @@ PIPELINE_CONFIGS = {
116
  }
117
 
118
  @spaces.GPU
119
- def process_htr(image: Image.Image, document_type: Literal["letter_english", "letter_swedish", "spread_english", "spread_swedish"] = "letter_english", output_format: Literal["txt", "alto", "page", "json"] = DEFAULT_OUTPUT, custom_settings: Optional[str] = None):
120
  """Process handwritten text recognition and return extracted text with specified format file."""
121
- if image is None:
122
  return "Error: No image provided", None
123
 
124
- with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as temp_file:
125
- image.save(temp_file.name, "PNG")
126
- temp_image_path = temp_file.name
127
-
128
  try:
 
 
129
  if custom_settings:
130
  try:
131
  config = json.loads(custom_settings)
@@ -134,7 +132,7 @@ def process_htr(image: Image.Image, document_type: Literal["letter_english", "le
134
  else:
135
  config = PIPELINE_CONFIGS[document_type]
136
 
137
- collection = Collection([temp_image_path])
138
  pipeline = Pipeline.from_config(config)
139
 
140
  try:
@@ -149,7 +147,12 @@ def process_htr(image: Image.Image, document_type: Literal["letter_english", "le
149
  output_file_path = None
150
  for root, _, files in os.walk(export_dir):
151
  for file in files:
152
- output_file_path = os.path.join(root, file)
 
 
 
 
 
153
  break
154
 
155
  extracted_text = extract_text_from_collection(processed_collection)
@@ -158,12 +161,8 @@ def process_htr(image: Image.Image, document_type: Literal["letter_english", "le
158
 
159
  except Exception as e:
160
  return f"Error: HTR processing failed: {str(e)}", None
161
- finally:
162
- if os.path.exists(temp_image_path):
163
- os.unlink(temp_image_path)
164
 
165
  def extract_text_from_collection(collection: Collection) -> str:
166
- """Extract plain text from processed collection."""
167
  text_lines = []
168
  for page in collection.pages:
169
  for node in page.traverse():
@@ -175,7 +174,7 @@ def create_htrflow_mcp_server():
175
  demo = gr.Interface(
176
  fn=process_htr,
177
  inputs=[
178
- gr.Image(type="pil", label="Upload Image"),
179
  gr.Dropdown(choices=["letter_english", "letter_swedish", "spread_english", "spread_swedish"], value="letter_english", label="Document Type"),
180
  gr.Dropdown(choices=CHOICES, value=DEFAULT_OUTPUT, label="Output Format"),
181
  gr.Textbox(label="Custom Settings (JSON)", placeholder="Optional custom pipeline settings"),
@@ -185,7 +184,7 @@ def create_htrflow_mcp_server():
185
  gr.File(label="Download Output File")
186
  ],
187
  title="HTRflow MCP Server",
188
- description="Process handwritten text and get extracted text with output file in specified format",
189
  api_name="process_htr",
190
  )
191
  return demo
 
116
  }
117
 
118
  @spaces.GPU
119
+ def process_htr(image_path: str, document_type: Literal["letter_english", "letter_swedish", "spread_english", "spread_swedish"] = "letter_english", output_format: Literal["txt", "alto", "page", "json"] = DEFAULT_OUTPUT, custom_settings: Optional[str] = None):
120
  """Process handwritten text recognition and return extracted text with specified format file."""
121
+ if image_path is None:
122
  return "Error: No image provided", None
123
 
 
 
 
 
124
  try:
125
+ original_filename = Path(image_path).stem or "output"
126
+
127
  if custom_settings:
128
  try:
129
  config = json.loads(custom_settings)
 
132
  else:
133
  config = PIPELINE_CONFIGS[document_type]
134
 
135
+ collection = Collection([image_path])
136
  pipeline = Pipeline.from_config(config)
137
 
138
  try:
 
147
  output_file_path = None
148
  for root, _, files in os.walk(export_dir):
149
  for file in files:
150
+ old_path = os.path.join(root, file)
151
+ file_ext = Path(file).suffix
152
+ new_filename = f"{original_filename}.{output_format}" if not file_ext else f"{original_filename}{file_ext}"
153
+ new_path = os.path.join(root, new_filename)
154
+ os.rename(old_path, new_path)
155
+ output_file_path = new_path
156
  break
157
 
158
  extracted_text = extract_text_from_collection(processed_collection)
 
161
 
162
  except Exception as e:
163
  return f"Error: HTR processing failed: {str(e)}", None
 
 
 
164
 
165
  def extract_text_from_collection(collection: Collection) -> str:
 
166
  text_lines = []
167
  for page in collection.pages:
168
  for node in page.traverse():
 
174
  demo = gr.Interface(
175
  fn=process_htr,
176
  inputs=[
177
+ gr.Image(type="filepath", label="Upload Image or Enter URL"),
178
  gr.Dropdown(choices=["letter_english", "letter_swedish", "spread_english", "spread_swedish"], value="letter_english", label="Document Type"),
179
  gr.Dropdown(choices=CHOICES, value=DEFAULT_OUTPUT, label="Output Format"),
180
  gr.Textbox(label="Custom Settings (JSON)", placeholder="Optional custom pipeline settings"),
 
184
  gr.File(label="Download Output File")
185
  ],
186
  title="HTRflow MCP Server",
187
+ description="Process handwritten text from uploaded file or URL and get extracted text with output file in specified format",
188
  api_name="process_htr",
189
  )
190
  return demo