Ashegh-Sad-Warrior commited on
Commit
9d5366d
1 Parent(s): 079b30d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -18
app.py CHANGED
@@ -54,10 +54,10 @@ def detect_and_draw_image(input_image):
54
 
55
  # اجرای مدل روی تصویر با سطح اطمینان پایین‌تر برای اطمینان از شناسایی بیشتر اشیاء
56
  results = model.predict(source=input_image_np, conf=0.3)
57
- detections = results[0].boxes
58
 
59
  # بررسی وجود جعبه‌های شناسایی شده
60
- if detections is None or len(detections) == 0:
61
  print("هیچ شیء شناسایی نشده است.")
62
  df = pd.DataFrame({
63
  'Label (English)': [],
@@ -70,20 +70,23 @@ def detect_and_draw_image(input_image):
70
  image_np = np.array(input_image.convert('RGB'))[:, :, ::-1] # تبدیل PIL به OpenCV
71
 
72
  counts = {}
73
- for box in detections:
74
  # دسترسی به مختصات جعبه و اطمینان
75
- xmin, ymin, xmax, ymax = box.xyxy[0].tolist()
76
- conf = box.conf[0].item()
77
- class_id = int(box.cls[0].item())
78
 
79
  # دریافت برچسب‌های انگلیسی و فارسی
80
  label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
81
  counts[label_en] = counts.get(label_en, 0) + 1
82
 
83
- # رسم مستطیل با استفاده از OpenCV
 
 
 
84
  color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
85
- cv2.rectangle(image_np, (int(xmin), int(ymin)), (int(xmax), int(ymax)), color, 2)
86
- cv2.putText(image_np, f'{label_en}: {conf:.2f}', (int(xmin), int(ymin) - 10),
87
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1, cv2.LINE_AA)
88
 
89
  # تبدیل تصویر به RGB برای Gradio
@@ -113,15 +116,15 @@ def detect_and_draw_video(video_path):
113
 
114
  frame = cv2.resize(frame, (640, 480))
115
  results = model.predict(source=frame, conf=0.3)
116
- detections = results[0].boxes
117
 
118
- if detections is not None and len(detections) > 0:
119
- for box in detections:
120
- xmin, ymin, xmax, ymax = box.xyxy[0].tolist()
121
- conf = box.conf[0].item()
122
- class_id = int(box.cls[0].item())
123
  label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
124
- current_object = (label_en, int(xmin), int(ymin), int(xmax), int(ymax))
125
 
126
  # بررسی وجود شیء در لیست seen_objects
127
  if not any(existing[0] == label_en and
@@ -131,9 +134,12 @@ def detect_and_draw_video(video_path):
131
  overall_counts[label_en] = overall_counts.get(label_en, 0) + 1
132
 
133
  # رسم مستطیل و نام شیء بر روی فریم
 
 
 
134
  color = colors.get(class_id, (0, 255, 0))
135
- cv2.rectangle(frame, (int(xmin), int(ymin)), (int(xmax), int(ymax)), color, 2)
136
- cv2.putText(frame, f"{label_en}: {conf:.2f}", (int(xmin), int(ymin) - 10),
137
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
138
 
139
  frames.append(frame)
 
54
 
55
  # اجرای مدل روی تصویر با سطح اطمینان پایین‌تر برای اطمینان از شناسایی بیشتر اشیاء
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)': [],
 
70
  image_np = np.array(input_image.convert('RGB'))[:, :, ::-1] # تبدیل PIL به OpenCV
71
 
72
  counts = {}
73
+ for obb, conf, cls in zip(obb_results.data.cpu().numpy(), obb_results.conf.cpu().numpy(), obb_results.cls.cpu().numpy()):
74
  # دسترسی به مختصات جعبه و اطمینان
75
+ x_center, y_center, width, height, rotation = obb[:5]
76
+ class_id = int(cls)
77
+ confidence = float(conf)
78
 
79
  # دریافت برچسب‌های انگلیسی و فارسی
80
  label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
81
  counts[label_en] = counts.get(label_en, 0) + 1
82
 
83
+ # رسم جعبه چرخان با استفاده از OpenCV
84
+ rect = ((x_center, y_center), (width, height), rotation * 180.0 / np.pi) # تبدیل رادیان به درجه
85
+ box = cv2.boxPoints(rect)
86
+ box = np.int0(box)
87
  color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
88
+ cv2.drawContours(image_np, [box], 0, color, 2)
89
+ cv2.putText(image_np, f'{label_en}: {confidence:.2f}', (int(x_center), int(y_center)),
90
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1, cv2.LINE_AA)
91
 
92
  # تبدیل تصویر به RGB برای Gradio
 
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
 
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)),
143
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
144
 
145
  frames.append(frame)