Quazim0t0 commited on
Commit
eeca7cc
·
verified ·
1 Parent(s): a162379

Upload 51 files

Browse files
src/components/MultiSourceCaptioningView.tsx CHANGED
@@ -6,7 +6,7 @@ const MODES = ["Webcam", "URL", "File"] as const;
6
  type Mode = typeof MODES[number];
7
 
8
  const EXAMPLE_VIDEO_URL = "/space/videos/1.mp4";
9
- const EXAMPLE_PROMPT = "Detect all birds in the image. For each bird, output a JSON array of objects with fields: 'label' (string) and 'bbox_2d' ([x1, y1, x2, y2]) where coordinates are in pixel values. This is only an example use your own values (Do not use these values [100, 50, 200, 300]) Example: [{\"label\": \"bird\", \"bbox_2d\": [100, 50, 200, 300]}]";
10
 
11
  function parseFlatBoxArray(arr: any[]): { label: string, bbox_2d: number[] }[] {
12
  if (typeof arr[0] === "string" && Array.isArray(arr[1])) {
@@ -62,6 +62,19 @@ function isVideoFile(file: File) {
62
  return file.type.startsWith("video/");
63
  }
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  export default function MultiSourceCaptioningView() {
66
  const [mode, setMode] = useState<Mode>("File");
67
  const [videoUrl, setVideoUrl] = useState<string>(EXAMPLE_VIDEO_URL);
@@ -337,7 +350,12 @@ export default function MultiSourceCaptioningView() {
337
  if (boxHistory.length > 0) {
338
  const scaleX = canvas.width / overlayVideo.videoWidth;
339
  const scaleY = canvas.height / overlayVideo.videoHeight;
340
- drawBoundingBoxesOnCanvas(ctx, boxHistory, { color: "#FF00FF", lineWidth: 4, font: "20px Arial", scaleX, scaleY });
 
 
 
 
 
341
  }
342
  };
343
  draw();
 
6
  type Mode = typeof MODES[number];
7
 
8
  const EXAMPLE_VIDEO_URL = "/space/videos/1.mp4";
9
+ const EXAMPLE_PROMPT = "Detect all birds in the image. For each bird, output a JSON array of objects with fields: 'label' (string) and 'bbox_2d' ([x1, y1, x2, y2]) where coordinates are in pixel values. Example: [{\"label\": \"bird\", \"bbox_2d\": [x1, y1, x2, y2]}]";
10
 
11
  function parseFlatBoxArray(arr: any[]): { label: string, bbox_2d: number[] }[] {
12
  if (typeof arr[0] === "string" && Array.isArray(arr[1])) {
 
62
  return file.type.startsWith("video/");
63
  }
64
 
65
+ function denormalizeBox(box: number[], width: number, height: number) {
66
+ // If all values are between 0 and 1, treat as normalized
67
+ if (box.length === 4 && box.every(v => v >= 0 && v <= 1)) {
68
+ return [
69
+ box[0] * width,
70
+ box[1] * height,
71
+ box[2] * width,
72
+ box[3] * height
73
+ ];
74
+ }
75
+ return box;
76
+ }
77
+
78
  export default function MultiSourceCaptioningView() {
79
  const [mode, setMode] = useState<Mode>("File");
80
  const [videoUrl, setVideoUrl] = useState<string>(EXAMPLE_VIDEO_URL);
 
350
  if (boxHistory.length > 0) {
351
  const scaleX = canvas.width / overlayVideo.videoWidth;
352
  const scaleY = canvas.height / overlayVideo.videoHeight;
353
+ // Denormalize boxes if needed
354
+ const denormalizedBoxes = boxHistory.map(b => ({
355
+ ...b,
356
+ bbox_2d: denormalizeBox(b.bbox_2d, canvas.width, canvas.height)
357
+ }));
358
+ drawBoundingBoxesOnCanvas(ctx, denormalizedBoxes, { color: "#FF00FF", lineWidth: 4, font: "20px Arial", scaleX, scaleY });
359
  }
360
  };
361
  draw();