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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -2
app.py CHANGED
@@ -56,6 +56,16 @@ def detect_and_draw_image(input_image):
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
 
@@ -92,6 +102,66 @@ def detect_and_draw_image(input_image):
92
 
93
  return output_image, df
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  # رابط کاربری تصویر
96
  image_interface = gr.Interface(
97
  fn=detect_and_draw_image,
@@ -102,5 +172,16 @@ image_interface = gr.Interface(
102
  examples=['Examples/images/areial_car.jpg', 'Examples/images/arieal_car_1.jpg','Examples/images/t.jpg']
103
  )
104
 
105
- # اجرای برنامه با استفاده از رابط کاربری
106
- image_interface.launch(debug=True, share=True)
 
 
 
 
 
 
 
 
 
 
 
 
56
  results = model.predict(source=input_image_np, conf=0.3)
57
  obb_results = results[0].obb
58
 
59
+ # بررسی وجود جعبه‌های شناسایی شده
60
+ if obb_results is None or len(obb_results.data) == 0:
61
+ print("هیچ شیء شناسایی نشده است.")
62
+ df = pd.DataFrame({
63
+ 'Label (English)': [],
64
+ 'Label (Persian)': [],
65
+ 'Object Count': []
66
+ })
67
+ return input_image, df
68
+
69
  # بارگذاری تصویر اصلی به صورت OpenCV برای رسم جعبه‌ها
70
  image_np = np.array(input_image.convert('RGB'))[:, :, ::-1] # تبدیل PIL به OpenCV
71
 
 
102
 
103
  return output_image, df
104
 
105
+ # تابع برای تشخیص اشیاء در ویدئوها
106
+ def detect_and_draw_video(video_path):
107
+ cap = cv2.VideoCapture(video_path)
108
+ frames = []
109
+ overall_counts = {}
110
+ seen_objects = [] # لیست برای دنبال کردن اشیاء شناسایی شده
111
+
112
+ while cap.isOpened():
113
+ ret, frame = cap.read()
114
+ if not ret:
115
+ break
116
+
117
+ frame = cv2.resize(frame, (640, 480))
118
+ results = model.predict(source=frame, conf=0.3)
119
+ obb_results = results[0].obb
120
+
121
+ if obb_results is not None and len(obb_results.data) > 0:
122
+ for obb, conf, cls in zip(obb_results.data.cpu().numpy(), obb_results.conf.cpu().numpy(), obb_results.cls.cpu().numpy()):
123
+ x_center, y_center, width, height, rotation = obb[:5]
124
+ class_id = int(cls)
125
+ confidence = float(conf)
126
+ label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
127
+ current_object = (label_en, int(x_center - width / 2), int(y_center - height / 2), int(x_center + width / 2), int(y_center + height / 2))
128
+
129
+ # بررسی وجود شیء در لیست seen_objects
130
+ if not any(existing[0] == label_en and
131
+ (existing[1] < current_object[3] and existing[3] > current_object[1] and
132
+ existing[2] < current_object[4] and existing[4] > current_object[2]) for existing in seen_objects):
133
+ seen_objects.append(current_object)
134
+ overall_counts[label_en] = overall_counts.get(label_en, 0) + 1
135
+
136
+ # رسم مستطیل و نام شیء بر روی فریم
137
+ rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi)
138
+ box = cv2.boxPoints(rect)
139
+ box = np.int0(box)
140
+ color = colors.get(class_id, (0, 255, 0))
141
+ cv2.drawContours(frame, [box], 0, color, 2)
142
+ cv2.putText(frame, f"{label_en}: {confidence:.2f}", (int(x_center), int(y_center) - 10),
143
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
144
+
145
+ frames.append(frame)
146
+
147
+ cap.release()
148
+
149
+ output_path = 'output.mp4'
150
+ out = cv2.VideoWriter(output_path, cv2.VideoWriter_fourcc(*'mp4v'), 20.0, (640, 480))
151
+
152
+ for frame in frames:
153
+ out.write(frame)
154
+ out.release()
155
+
156
+ # ایجاد DataFrame برای ذخیره نتایج
157
+ df = pd.DataFrame({
158
+ 'Label (English)': list(overall_counts.keys()),
159
+ 'Label (Persian)': [class_names.get(k, ('unknown', 'ناشناخته'))[1] for k in overall_counts.keys()],
160
+ 'Object Count': list(overall_counts.values())
161
+ })
162
+
163
+ return output_path, df
164
+
165
  # رابط کاربری تصویر
166
  image_interface = gr.Interface(
167
  fn=detect_and_draw_image,
 
172
  examples=['Examples/images/areial_car.jpg', 'Examples/images/arieal_car_1.jpg','Examples/images/t.jpg']
173
  )
174
 
175
+ # رابط کاربری ویدئو
176
+ video_interface = gr.Interface(
177
+ fn=detect_and_draw_video,
178
+ inputs=gr.Video(label="بارگذاری ویدئو"),
179
+ outputs=[gr.Video(label="ویدئوی پردازش شده"), gr.Dataframe(label="تعداد اشیاء")],
180
+ title="تشخیص اشیاء در ویدئوها",
181
+ description="یک ویدئو بارگذاری کنید تا اشیاء شناسایی شده و تعداد آن‌ها را ببینید.",
182
+ examples=['Examples/video/city.mp4', 'Examples/video/airplane.mp4']
183
+ )
184
+
185
+ # اجرای برنامه با استفاده از رابط کاربری تب‌دار
186
+ app = gr.TabbedInterface([image_interface, video_interface], ["تشخیص تصویر", "تشخیص ویدئو"])
187
+ app.launch(debug=True, share=True)