Ashegh-Sad-Warrior
commited on
Commit
•
7062f02
1
Parent(s):
18ef6f9
Update app.py
Browse files
app.py
CHANGED
@@ -55,20 +55,22 @@ colors = {
|
|
55 |
# تابع برای تشخیص اشیاء در تصاویر
|
56 |
def detect_and_draw_image(input_image):
|
57 |
try:
|
58 |
-
#
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
|
|
64 |
print("Model prediction completed.")
|
65 |
|
66 |
# دسترسی به نتایج OBB
|
67 |
-
if hasattr(results[0], '
|
68 |
-
obb_results = results[0].
|
69 |
print("Accessed obb_results.")
|
70 |
else:
|
71 |
-
print("No '
|
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.
|
86 |
-
print("Image
|
87 |
|
88 |
counts = {}
|
89 |
-
for
|
90 |
-
|
91 |
-
|
92 |
-
|
|
|
|
|
|
|
|
|
93 |
|
94 |
# رسم جعبه چرخان با استفاده از OpenCV
|
95 |
rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
|
96 |
-
|
97 |
-
|
98 |
color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
|
99 |
-
cv2.drawContours(image_cv, [
|
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], '
|
164 |
-
obb_results = results[0].
|
165 |
print("Accessed obb_results for frame.")
|
166 |
else:
|
167 |
-
print("No '
|
168 |
obb_results = None
|
169 |
|
170 |
if obb_results is not None and len(obb_results.data) > 0:
|
171 |
-
for
|
172 |
-
|
173 |
-
|
174 |
-
|
|
|
|
|
|
|
|
|
175 |
|
176 |
# رسم جعبه چرخان با استفاده از OpenCV
|
177 |
rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
|
178 |
-
|
179 |
-
|
180 |
color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
|
181 |
-
cv2.drawContours(frame, [
|
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:
|