Zok213 commited on
Commit
af13b2f
·
1 Parent(s): e50d91b

fix: Update upload-survey endpoint with working detection flow

Browse files
Files changed (1) hide show
  1. src/api/main.py +19 -49
src/api/main.py CHANGED
@@ -558,12 +558,13 @@ async def analyze_survey(request: AnalysisRequest):
558
  @app.post("/upload-survey")
559
  async def upload_survey(files: List[UploadFile] = File(...)):
560
  """
561
- Upload survey images, extract GPS data, AND run YOLO detection.
562
- Returns detection results with GPS coordinates for map display.
 
563
  """
564
  results = []
565
 
566
- print(f"[UPLOAD] Processing {len(files)} survey files with YOLO detection...")
567
 
568
  for file in files:
569
  # Skip non-image files
@@ -595,59 +596,28 @@ async def upload_survey(files: List[UploadFile] = File(...)):
595
  gps_data = extract_gps_from_image(contents)
596
  base_lat = gps_data["latitude"]
597
  base_lon = gps_data["longitude"]
598
- print(f"[GPS] GPS from {file.filename}: lat={base_lat}, lon={base_lon}")
599
 
600
- # Run YOLO detection
601
- image_array = np.array(image)
602
- ensemble_results = ensemble.predict(image_array)
603
-
604
- if not ensemble_results:
605
- # No damage detected - return single "No Damage" point
606
- results.append({
607
- "x1": 0, "y1": 0, "x2": 0, "y2": 0,
608
- "class_name": "No Damage",
609
- "class_id": -1,
610
- "confidence": 1.0,
611
- "severity": "none",
612
- "latitude": float(base_lat),
613
- "longitude": float(base_lon),
614
- "image_url": image_url,
615
- "filename": unique_name
616
- })
617
- else:
618
- # Add all detections found
619
- for det in ensemble_results:
620
- # Classify severity based on size or confidence
621
- conf = float(det["confidence"])
622
- if conf >= 0.8:
623
- severity = "heavy"
624
- elif conf >= 0.5:
625
- severity = "medium"
626
- else:
627
- severity = "light"
628
-
629
- results.append({
630
- "x1": int(det["box"][0]), "y1": int(det["box"][1]),
631
- "x2": int(det["box"][2]), "y2": int(det["box"][3]),
632
- "class_name": det["class_name"],
633
- "class_id": det.get("class_id", 0),
634
- "confidence": conf,
635
- "severity": severity,
636
- "latitude": float(base_lat),
637
- "longitude": float(base_lon),
638
- "image_url": image_url,
639
- "filename": unique_name
640
- })
641
- print(f"[DETECT] {file.filename}: Found {len(ensemble_results)} damages")
642
 
643
  except Exception as e:
644
  import traceback
645
- print(f"[ERROR] Error processing {file.filename}: {e}")
646
  traceback.print_exc()
647
  continue
648
 
649
- print(f"[DONE] Processed {len(files)} files, {len(results)} detections total")
650
-
651
  return {
652
  "success": True,
653
  "total_files": len(files),
 
558
  @app.post("/upload-survey")
559
  async def upload_survey(files: List[UploadFile] = File(...)):
560
  """
561
+ Upload survey images and extract GPS data only.
562
+ Returns 'Pending' points for map display.
563
+ Use /analyze-survey to run AI detection later.
564
  """
565
  results = []
566
 
567
+ print(f"[UPLOAD] Uploading {len(files)} survey files...")
568
 
569
  for file in files:
570
  # Skip non-image files
 
596
  gps_data = extract_gps_from_image(contents)
597
  base_lat = gps_data["latitude"]
598
  base_lon = gps_data["longitude"]
599
+ print(f"[GPS] GPS from {file.filename}: lat={base_lat}, lon={base_lon}, success={gps_data.get('success')}")
600
 
601
+ # Return "Pending" point for map
602
+ results.append({
603
+ "x1": 0, "y1": 0, "x2": 0, "y2": 0,
604
+ "class_name": "Pending",
605
+ "class_id": -2,
606
+ "confidence": 0.0,
607
+ "severity": "none",
608
+ "latitude": float(base_lat),
609
+ "longitude": float(base_lon),
610
+ "image_url": image_url,
611
+ "filename": unique_name
612
+ })
613
+ print(f"[OK] Uploaded: {file.filename} -> {unique_name}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
614
 
615
  except Exception as e:
616
  import traceback
617
+ print(f"[ERROR] Error uploading {file.filename}: {e}")
618
  traceback.print_exc()
619
  continue
620
 
 
 
621
  return {
622
  "success": True,
623
  "total_files": len(files),