Ashegh-Sad-Warrior commited on
Commit
42fe02f
1 Parent(s): ad41e33

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -35
app.py CHANGED
@@ -11,7 +11,6 @@ import tempfile
11
  import os
12
 
13
  # بارگذاری مدل آموزش‌دیده شما
14
- # اطمینان حاصل کنید که مسیر مدل صحیح است و فقط یک بار مدل را بارگذاری می‌کنید
15
  model = YOLO('weights/best.pt') # یا '/content/best.pt' بر اساس مدل مورد نظر شما
16
 
17
  # تعریف نام کلاس‌ها به انگلیسی و فارسی
@@ -51,23 +50,24 @@ colors = {
51
  13: (75, 0, 130), # ایندیگو
52
  14: (199, 21, 133) # رز متوسط
53
  }
54
-
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], 'obb') and results[0].obb is not None:
70
- obb_results = results[0].obb # استفاده از obb برای مدل OBB
71
  print("Accessed obb_results.")
72
  else:
73
  print("No 'obb' attribute found in results[0].")
@@ -81,15 +81,10 @@ def detect_and_draw_image(input_image):
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 obb, conf, cls in zip(obb_results.data.cpu().numpy(), obb_results.conf.cpu().numpy(), obb_results.cls.cpu().numpy()):
94
  x_center, y_center, width, height, rotation = obb[:5]
95
  class_id = int(cls)
@@ -99,14 +94,14 @@ def detect_and_draw_image(input_image):
99
  rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
100
  box_points = cv2.boxPoints(rect)
101
  box_points = np.int0(box_points)
102
- color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
103
  cv2.drawContours(image_cv, [box_points], 0, color, 2)
104
  print(f"Drawn OBB for class_id {class_id} with confidence {confidence}.")
105
 
106
  # رسم برچسب
107
  label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
108
- cv2.putText(image_cv, f'{label_en}: {confidence:.2f}',
109
- (int(x_center), int(y_center)),
110
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2, cv2.LINE_AA)
111
 
112
  # شمارش اشیاء
@@ -125,9 +120,6 @@ def detect_and_draw_image(input_image):
125
  })
126
  print("DataFrame created.")
127
 
128
- # حذف فایل موقت
129
- os.remove(temp_image_path)
130
-
131
  return output_image, df
132
 
133
  except Exception as e:
@@ -145,7 +137,6 @@ def detect_and_draw_video(video_path):
145
  cap = cv2.VideoCapture(video_path)
146
  frames = []
147
  overall_counts = {}
148
- seen_objects = [] # لیست برای دنبال کردن اشیاء شناسایی شده
149
  frame_count = 0
150
 
151
  while cap.isOpened():
@@ -159,16 +150,13 @@ def detect_and_draw_video(video_path):
159
  # تغییر اندازه فریم
160
  frame = cv2.resize(frame, (640, 480))
161
 
162
- # تبدیل BGR به RGB برای مدل
163
- frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
164
-
165
  # اجرای مدل روی فریم
166
- results = model.predict(source=frame_rgb, conf=0.3)
167
  print(f"Model prediction completed for frame {frame_count}.")
168
 
169
  # دسترسی به نتایج OBB
170
  if hasattr(results[0], 'obb') and results[0].obb is not None:
171
- obb_results = results[0].obb # استفاده از obb برای مدل OBB
172
  print("Accessed obb_results for frame.")
173
  else:
174
  print("No 'obb' attribute found in results[0] for frame.")
@@ -181,17 +169,17 @@ def detect_and_draw_video(video_path):
181
  confidence = float(conf)
182
 
183
  # رسم جعبه چرخان با استفاده از OpenCV
184
- rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
185
  box_points = cv2.boxPoints(rect)
186
  box_points = np.int0(box_points)
187
- color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
188
  cv2.drawContours(frame, [box_points], 0, color, 2)
189
  print(f"Drawn OBB for class_id {class_id} with confidence {confidence} in frame {frame_count}.")
190
 
191
  # رسم برچسب
192
  label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
193
- cv2.putText(frame, f"{label_en}: {confidence:.2f}",
194
- (int(x_center), int(y_center)),
195
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2, cv2.LINE_AA)
196
 
197
  # شمارش اشیاء
@@ -244,7 +232,7 @@ image_interface = gr.Interface(
244
  title="تشخیص اشیاء در تصاویر هوایی",
245
  description="یک تصویر هوایی بارگذاری کنید تا اشیاء شناسایی شده و تعداد آن‌ها را ببینید.",
246
  examples=[
247
- 'Examples/images/areial_car.jpg',
248
  'Examples/images/arieal_car_1.jpg',
249
  'Examples/images/t.jpg'
250
  ]
@@ -258,7 +246,7 @@ video_interface = gr.Interface(
258
  title="تشخیص اشیاء در ویدئوها",
259
  description="یک ویدئو بارگذاری کنید تا اشیاء شناسایی شده و تعداد آن‌ها را ببینید.",
260
  examples=[
261
- 'Examples/video/city.mp4',
262
  'Examples/video/airplane.mp4'
263
  ]
264
  )
 
11
  import os
12
 
13
  # بارگذاری مدل آموزش‌دیده شما
 
14
  model = YOLO('weights/best.pt') # یا '/content/best.pt' بر اساس مدل مورد نظر شما
15
 
16
  # تعریف نام کلاس‌ها به انگلیسی و فارسی
 
50
  13: (75, 0, 130), # ایندیگو
51
  14: (199, 21, 133) # رز متوسط
52
  }
 
53
  # تابع برای تشخیص اشیاء در تصاویر
54
  def detect_and_draw_image(input_image):
55
  try:
56
+ # تبدیل تصویر PIL به آرایه NumPy (RGB)
57
+ input_image_np = np.array(input_image)
58
+ print("Image converted to NumPy array.")
59
+
60
+ # تبدیل تصویر به BGR برای OpenCV
61
+ image_cv = cv2.cvtColor(input_image_np, cv2.COLOR_RGB2BGR)
62
+ print("Image converted to OpenCV format.")
63
+
64
+ # اجرای مدل روی تصویر با استفاده از آرایه NumPy
65
+ results = model.predict(source=image_cv, conf=0.3)
66
  print("Model prediction completed.")
67
 
68
  # دسترسی به نتایج OBB
69
  if hasattr(results[0], 'obb') and results[0].obb is not None:
70
+ obb_results = results[0].obb
71
  print("Accessed obb_results.")
72
  else:
73
  print("No 'obb' attribute found in results[0].")
 
81
  'Label (Persian)': [],
82
  'Object Count': []
83
  })
 
 
84
  return input_image, df
85
 
 
 
 
 
86
  counts = {}
87
+ # پردازش نتایج و رسم جعبه‌ها
88
  for obb, conf, cls in zip(obb_results.data.cpu().numpy(), obb_results.conf.cpu().numpy(), obb_results.cls.cpu().numpy()):
89
  x_center, y_center, width, height, rotation = obb[:5]
90
  class_id = int(cls)
 
94
  rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
95
  box_points = cv2.boxPoints(rect)
96
  box_points = np.int0(box_points)
97
+ color = colors.get(class_id, (0, 255, 0))
98
  cv2.drawContours(image_cv, [box_points], 0, color, 2)
99
  print(f"Drawn OBB for class_id {class_id} with confidence {confidence}.")
100
 
101
  # رسم برچسب
102
  label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
103
+ cv2.putText(image_cv, f'{label_en}: {confidence:.2f}',
104
+ (int(x_center), int(y_center)),
105
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2, cv2.LINE_AA)
106
 
107
  # شمارش اشیاء
 
120
  })
121
  print("DataFrame created.")
122
 
 
 
 
123
  return output_image, df
124
 
125
  except Exception as e:
 
137
  cap = cv2.VideoCapture(video_path)
138
  frames = []
139
  overall_counts = {}
 
140
  frame_count = 0
141
 
142
  while cap.isOpened():
 
150
  # تغییر اندازه فریم
151
  frame = cv2.resize(frame, (640, 480))
152
 
 
 
 
153
  # اجرای مدل روی فریم
154
+ results = model.predict(source=frame, conf=0.3)
155
  print(f"Model prediction completed for frame {frame_count}.")
156
 
157
  # دسترسی به نتایج OBB
158
  if hasattr(results[0], 'obb') and results[0].obb is not None:
159
+ obb_results = results[0].obb
160
  print("Accessed obb_results for frame.")
161
  else:
162
  print("No 'obb' attribute found in results[0] for frame.")
 
169
  confidence = float(conf)
170
 
171
  # رسم جعبه چرخان با استفاده از OpenCV
172
+ rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi)
173
  box_points = cv2.boxPoints(rect)
174
  box_points = np.int0(box_points)
175
+ color = colors.get(class_id, (0, 255, 0))
176
  cv2.drawContours(frame, [box_points], 0, color, 2)
177
  print(f"Drawn OBB for class_id {class_id} with confidence {confidence} in frame {frame_count}.")
178
 
179
  # رسم برچسب
180
  label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
181
+ cv2.putText(frame, f"{label_en}: {confidence:.2f}",
182
+ (int(x_center), int(y_center)),
183
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2, cv2.LINE_AA)
184
 
185
  # شمارش اشیاء
 
232
  title="تشخیص اشیاء در تصاویر هوایی",
233
  description="یک تصویر هوایی بارگذاری کنید تا اشیاء شناسایی شده و تعداد آن‌ها را ببینید.",
234
  examples=[
235
+ 'Examples/images/areial_car.jpg',
236
  'Examples/images/arieal_car_1.jpg',
237
  'Examples/images/t.jpg'
238
  ]
 
246
  title="تشخیص اشیاء در ویدئوها",
247
  description="یک ویدئو بارگذاری کنید تا اشیاء شناسایی شده و تعداد آن‌ها را ببینید.",
248
  examples=[
249
+ 'Examples/video/city.mp4',
250
  'Examples/video/airplane.mp4'
251
  ]
252
  )