Ashegh-Sad-Warrior
commited on
Commit
•
42fe02f
1
Parent(s):
ad41e33
Update app.py
Browse files
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 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
|
|
|
|
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,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=
|
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
|
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 |
)
|