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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -39
app.py CHANGED
@@ -54,10 +54,7 @@ def detect_and_draw_image(input_image):
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,23 +67,20 @@ def detect_and_draw_image(input_image):
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
@@ -107,7 +101,6 @@ 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()
@@ -116,31 +109,21 @@ def detect_and_draw_video(video_path):
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)),
143
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
144
 
145
  frames.append(frame)
146
 
 
54
 
55
  # اجرای مدل روی تصویر با سطح اطمینان پایین‌تر برای اطمینان از شناسایی بیشتر اشیاء
56
  results = model.predict(source=input_image_np, conf=0.3)
57
+ if not results or not hasattr(results[0], 'boxes') or results[0].boxes is None:
 
 
 
58
  print("هیچ شیء شناسایی نشده است.")
59
  df = pd.DataFrame({
60
  'Label (English)': [],
 
67
  image_np = np.array(input_image.convert('RGB'))[:, :, ::-1] # تبدیل PIL به OpenCV
68
 
69
  counts = {}
70
+ for box in results[0].boxes:
71
  # دسترسی به مختصات جعبه و اطمینان
72
+ xmin, ymin, xmax, ymax, conf, class_id = box.cpu().numpy()
73
+ class_id = int(class_id)
74
  confidence = float(conf)
75
 
76
  # دریافت برچسب‌های انگلیسی و فارسی
77
  label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
78
  counts[label_en] = counts.get(label_en, 0) + 1
79
 
80
+ # رسم مستطیل با استفاده از OpenCV
 
 
 
81
  color = colors.get(class_id, (0, 255, 0)) # استفاده از رنگ مشخص برای هر کلاس
82
+ cv2.rectangle(image_np, (int(xmin), int(ymin)), (int(xmax), int(ymax)), color, 2)
83
+ cv2.putText(image_np, f'{label_en}: {confidence:.2f}', (int(xmin), int(ymin) - 10),
84
  cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1, cv2.LINE_AA)
85
 
86
  # تبدیل تصویر به RGB برای Gradio
 
101
  cap = cv2.VideoCapture(video_path)
102
  frames = []
103
  overall_counts = {}
 
104
 
105
  while cap.isOpened():
106
  ret, frame = cap.read()
 
109
 
110
  frame = cv2.resize(frame, (640, 480))
111
  results = model.predict(source=frame, conf=0.3)
112
+ if not results or not hasattr(results[0], 'boxes') or results[0].boxes is None:
113
+ continue
114
+
115
+ for box in results[0].boxes:
116
+ xmin, ymin, xmax, ymax, conf, class_id = box.cpu().numpy()
117
+ class_id = int(class_id)
118
+ confidence = float(conf)
119
+ label_en, label_fa = class_names.get(class_id, ('unknown', 'ناشناخته'))
120
+ overall_counts[label_en] = overall_counts.get(label_en, 0) + 1
121
+
122
+ # رسم مستطیل و نام ش��ء بر روی فریم
123
+ color = colors.get(class_id, (0, 255, 0))
124
+ cv2.rectangle(frame, (int(xmin), int(ymin)), (int(xmax), int(ymax)), color, 2)
125
+ cv2.putText(frame, f'{label_en}: {confidence:.2f}', (int(xmin), int(ymin) - 10),
126
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
 
 
 
 
 
 
 
 
 
 
127
 
128
  frames.append(frame)
129