Ashegh-Sad-Warrior commited on
Commit
7062f02
1 Parent(s): 18ef6f9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -30
app.py CHANGED
@@ -55,20 +55,22 @@ colors = {
55
  # تابع برای تشخیص اشیاء در تصاویر
56
  def detect_and_draw_image(input_image):
57
  try:
58
- # تبدیل تصویر PIL به آرایه NumPy (RGB)
59
- input_image_np = np.array(input_image)
60
- print("Image converted to NumPy array.")
61
-
62
- # اجرای مدل روی تصویر
63
- results = model.predict(source=input_image_np, conf=0.3)
 
 
64
  print("Model prediction completed.")
65
 
66
  # دسترسی به نتایج OBB
67
- if hasattr(results[0], 'obb') and results[0].obb is not None:
68
- obb_results = results[0].obb
69
  print("Accessed obb_results.")
70
  else:
71
- print("No 'obb' attribute found in results[0].")
72
  obb_results = None
73
 
74
  # بررسی وجود جعبه‌های شناسایی شده
@@ -79,24 +81,30 @@ def detect_and_draw_image(input_image):
79
  'Label (Persian)': [],
80
  'Object Count': []
81
  })
 
 
82
  return input_image, df
83
 
84
  # بارگذاری تصویر اصلی به صورت OpenCV برای رسم جعبه‌ها (BGR)
85
- image_cv = cv2.cvtColor(input_image_np, cv2.COLOR_RGB2BGR)
86
- print("Image converted to BGR for OpenCV.")
87
 
88
  counts = {}
89
- for obb, conf, cls in zip(obb_results.data.cpu().numpy(), obb_results.conf.cpu().numpy(), obb_results.cls.cpu().numpy()):
90
- x_center, y_center, width, height, rotation = obb[:5]
91
- class_id = int(cls)
92
- confidence = float(conf)
 
 
 
 
93
 
94
  # رسم جعبه چرخان با استفاده از OpenCV
95
  rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
96
- box = cv2.boxPoints(rect)
97
- box = np.int0(box)
98
  color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
99
- cv2.drawContours(image_cv, [box], 0, color, 2)
100
  print(f"Drawn OBB for class_id {class_id} with confidence {confidence}.")
101
 
102
  # رسم برچسب
@@ -121,6 +129,9 @@ def detect_and_draw_image(input_image):
121
  })
122
  print("DataFrame created.")
123
 
 
 
 
124
  return output_image, df
125
 
126
  except Exception as e:
@@ -160,25 +171,29 @@ def detect_and_draw_video(video_path):
160
  print(f"Model prediction completed for frame {frame_count}.")
161
 
162
  # دسترسی به نتایج OBB
163
- if hasattr(results[0], 'obb') and results[0].obb is not None:
164
- obb_results = results[0].obb
165
  print("Accessed obb_results for frame.")
166
  else:
167
- print("No 'obb' attribute found in results[0] for frame.")
168
  obb_results = None
169
 
170
  if obb_results is not None and len(obb_results.data) > 0:
171
- for obb, conf, cls in zip(obb_results.data.cpu().numpy(), obb_results.conf.cpu().numpy(), obb_results.cls.cpu().numpy()):
172
- x_center, y_center, width, height, rotation = obb[:5]
173
- class_id = int(cls)
174
- confidence = float(conf)
 
 
 
 
175
 
176
  # رسم جعبه چرخان با استفاده از OpenCV
177
  rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
178
- box = cv2.boxPoints(rect)
179
- box = np.int0(box)
180
  color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
181
- cv2.drawContours(frame, [box], 0, color, 2)
182
  print(f"Drawn OBB for class_id {class_id} with confidence {confidence} in frame {frame_count}.")
183
 
184
  # رسم برچسب
@@ -199,10 +214,9 @@ def detect_and_draw_video(video_path):
199
  # ذخیره ویدئو پردازش‌شده در یک فایل موقت
200
  with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as tmpfile:
201
  output_path = tmpfile.name
202
-
203
- out = cv2.VideoWriter(output_path, cv2.VideoWriter_fourcc(*'mp4v'), 20.0, (640, 480))
204
  print(f"Saving processed video to {output_path}")
205
 
 
206
  for idx, frame in enumerate(frames):
207
  out.write(frame)
208
  if idx % 100 == 0:
 
55
  # تابع برای تشخیص اشیاء در تصاویر
56
  def detect_and_draw_image(input_image):
57
  try:
58
+ # ذخیره تصویر ورودی به یک فایل موقت
59
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmpfile:
60
+ input_image.save(tmpfile.name)
61
+ temp_image_path = tmpfile.name
62
+ print("Image saved to temporary file:", temp_image_path)
63
+
64
+ # اجرای مدل روی تصویر با استفاده از مسیر فایل
65
+ results = model.predict(source=temp_image_path, conf=0.3)
66
  print("Model prediction completed.")
67
 
68
  # دسترسی به نتایج OBB
69
+ if hasattr(results[0], 'boxes') and results[0].boxes is not None:
70
+ obb_results = results[0].boxes # استفاده از boxes که شامل OBB است
71
  print("Accessed obb_results.")
72
  else:
73
+ print("No 'boxes' attribute found in results[0].")
74
  obb_results = None
75
 
76
  # بررسی وجود جعبه‌های شناسایی شده
 
81
  'Label (Persian)': [],
82
  'Object Count': []
83
  })
84
+ # حذف فایل موقت
85
+ os.remove(temp_image_path)
86
  return input_image, df
87
 
88
  # بارگذاری تصویر اصلی به صورت OpenCV برای رسم جعبه‌ها (BGR)
89
+ image_cv = cv2.imread(temp_image_path)
90
+ print("Image loaded with OpenCV.")
91
 
92
  counts = {}
93
+ for box in obb_results:
94
+ # دسترسی به داده‌های جعبه
95
+ if hasattr(box, 'xywhn'):
96
+ x_center, y_center, width, height, rotation = box.xywhn.tolist()
97
+ else:
98
+ x_center, y_center, width, height, rotation = box.tolist()[:5]
99
+ class_id = int(box.cls.tolist()[0]) if hasattr(box, 'cls') else 0
100
+ confidence = float(box.conf.tolist()[0]) if hasattr(box, 'conf') else 0.0
101
 
102
  # رسم جعبه چرخان با استفاده از OpenCV
103
  rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
104
+ box_points = cv2.boxPoints(rect)
105
+ box_points = np.int0(box_points)
106
  color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
107
+ cv2.drawContours(image_cv, [box_points], 0, color, 2)
108
  print(f"Drawn OBB for class_id {class_id} with confidence {confidence}.")
109
 
110
  # رسم برچسب
 
129
  })
130
  print("DataFrame created.")
131
 
132
+ # حذف فایل موقت
133
+ os.remove(temp_image_path)
134
+
135
  return output_image, df
136
 
137
  except Exception as e:
 
171
  print(f"Model prediction completed for frame {frame_count}.")
172
 
173
  # دسترسی به نتایج OBB
174
+ if hasattr(results[0], 'boxes') and results[0].boxes is not None:
175
+ obb_results = results[0].boxes # استفاده از boxes که شامل OBB است
176
  print("Accessed obb_results for frame.")
177
  else:
178
+ print("No 'boxes' attribute found in results[0] for frame.")
179
  obb_results = None
180
 
181
  if obb_results is not None and len(obb_results.data) > 0:
182
+ for box in obb_results:
183
+ # دسترسی به داده‌های جعبه
184
+ if hasattr(box, 'xywhn'):
185
+ x_center, y_center, width, height, rotation = box.xywhn.tolist()
186
+ else:
187
+ x_center, y_center, width, height, rotation = box.tolist()[:5]
188
+ class_id = int(box.cls.tolist()[0]) if hasattr(box, 'cls') else 0
189
+ confidence = float(box.conf.tolist()[0]) if hasattr(box, 'conf') else 0.0
190
 
191
  # رسم جعبه چرخان با استفاده از OpenCV
192
  rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
193
+ box_points = cv2.boxPoints(rect)
194
+ box_points = np.int0(box_points)
195
  color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
196
+ cv2.drawContours(frame, [box_points], 0, color, 2)
197
  print(f"Drawn OBB for class_id {class_id} with confidence {confidence} in frame {frame_count}.")
198
 
199
  # رسم برچسب
 
214
  # ذخیره ویدئو پردازش‌شده در یک فایل موقت
215
  with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as tmpfile:
216
  output_path = tmpfile.name
 
 
217
  print(f"Saving processed video to {output_path}")
218
 
219
+ out = cv2.VideoWriter(output_path, cv2.VideoWriter_fourcc(*'mp4v'), 20.0, (640, 480))
220
  for idx, frame in enumerate(frames):
221
  out.write(frame)
222
  if idx % 100 == 0: