Ashegh-Sad-Warrior
commited on
Commit
•
588649f
1
Parent(s):
addcb32
Update app.py
Browse files
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 |
-
#
|
41 |
-
|
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 |
-
|
64 |
-
|
65 |
-
|
|
|
|
|
|
|
|
|
|
|
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
|
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)
|