Ashegh-Sad-Warrior commited on
Commit
588649f
1 Parent(s): addcb32

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -12
app.py CHANGED
@@ -28,6 +28,25 @@ class_names = {
28
  14: ('swimming pool', 'استخر شنا')
29
  }
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  # تابع برای تشخیص اشیاء در تصاویر
32
  def detect_and_draw_image(input_image):
33
  # تبدیل تصویر PIL به آرایه NumPy
@@ -37,13 +56,8 @@ def detect_and_draw_image(input_image):
37
  results = model.predict(source=input_image_np, conf=0.3)
38
  obb_results = results[0].obb
39
 
40
- # تبدیل تصویر به PIL برای رسم
41
- draw = ImageDraw.Draw(input_image)
42
- # بارگذاری یک فونت برای نوشتن متن
43
- try:
44
- font = ImageFont.truetype("arial.ttf", size=15)
45
- except IOError:
46
- font = ImageFont.load_default()
47
 
48
  counts = {}
49
  for obb, conf, cls in zip(obb_results.data.cpu().numpy(), obb_results.conf.cpu().numpy(), obb_results.cls.cpu().numpy()):
@@ -60,9 +74,14 @@ def detect_and_draw_image(input_image):
60
  rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
61
  box = cv2.boxPoints(rect)
62
  box = np.int0(box)
63
- draw.polygon([tuple(point) for point in box], outline="red")
64
- # نوشتن برچسب و اطمینان
65
- draw.text((x_center, y_center - 10), f"{label_en}: {confidence:.2f}", fill="red", font=font)
 
 
 
 
 
66
 
67
  # ایجاد DataFrame برای نمایش نتایج
68
  df = pd.DataFrame({
@@ -71,7 +90,7 @@ def detect_and_draw_image(input_image):
71
  'Object Count': list(counts.values())
72
  })
73
 
74
- return input_image, df
75
 
76
  # رابط کاربری تصویر
77
  image_interface = gr.Interface(
@@ -84,4 +103,4 @@ image_interface = gr.Interface(
84
  )
85
 
86
  # اجرای برنامه با استفاده از رابط کاربری
87
- image_interface.launch(debug=True, share=True)
 
28
  14: ('swimming pool', 'استخر شنا')
29
  }
30
 
31
+ # رنگ‌ها برای هر کلاس
32
+ colors = {
33
+ 0: (255, 0, 0), # Red
34
+ 1: (0, 255, 0), # Green
35
+ 2: (0, 0, 255), # Blue
36
+ 3: (255, 255, 0), # Yellow
37
+ 4: (255, 0, 255), # Magenta
38
+ 5: (0, 255, 255), # Cyan
39
+ 6: (128, 0, 128), # Purple
40
+ 7: (255, 165, 0), # Orange
41
+ 8: (0, 128, 0), # Dark Green
42
+ 9: (128, 128, 0), # Olive
43
+ 10: (128, 0, 0), # Maroon
44
+ 11: (0, 128, 128), # Teal
45
+ 12: (0, 0, 128), # Navy
46
+ 13: (75, 0, 130), # Indigo
47
+ 14: (199, 21, 133) # MediumVioletRed
48
+ }
49
+
50
  # تابع برای تشخیص اشیاء در تصاویر
51
  def detect_and_draw_image(input_image):
52
  # تبدیل تصویر PIL به آرایه NumPy
 
56
  results = model.predict(source=input_image_np, conf=0.3)
57
  obb_results = results[0].obb
58
 
59
+ # بارگذاری تصویر اصلی به صورت OpenCV برای رسم جعبه‌ها
60
+ image_np = np.array(input_image.convert('RGB'))[:, :, ::-1] # تبدیل PIL به OpenCV
 
 
 
 
 
61
 
62
  counts = {}
63
  for obb, conf, cls in zip(obb_results.data.cpu().numpy(), obb_results.conf.cpu().numpy(), obb_results.cls.cpu().numpy()):
 
74
  rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
75
  box = cv2.boxPoints(rect)
76
  box = np.int0(box)
77
+ color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
78
+ cv2.drawContours(image_np, [box], 0, color, 2)
79
+ cv2.putText(image_np, f'{label_en}: {confidence:.2f}', (int(x_center), int(y_center)),
80
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1, cv2.LINE_AA)
81
+
82
+ # تبدیل تصویر به RGB برای Gradio
83
+ image_rgb = cv2.cvtColor(image_np, cv2.COLOR_BGR2RGB)
84
+ output_image = Image.fromarray(image_rgb)
85
 
86
  # ایجاد DataFrame برای نمایش نتایج
87
  df = pd.DataFrame({
 
90
  'Object Count': list(counts.values())
91
  })
92
 
93
+ return output_image, df
94
 
95
  # رابط کاربری تصویر
96
  image_interface = gr.Interface(
 
103
  )
104
 
105
  # اجرای برنامه با استفاده از رابط کاربری
106
+ image_interface.launch(debug=True, share=True)