Team Ai
Datasetpublic

ysn-rfd/text-dataset-tiny-code-script-py-format

USED of tahamajs/medicine_ds_persian for .parquet file USED of Alijafarixcs2/persian-it-llama2-2k for .parquet file USED of Abirate/english_quotes for .jsonl file NEW FILES (05/12/2025) NEW FILES (12/26/2025) NEW FILES (02/15/2026)

sourceHugging Faceapache-2.0updated 4mo agoView on Hugging Face
3likes1.7kdownloads
untitled7.py139 linesDownload Raw Back to opencv_test
1import cv2
2import numpy as np
3import time
4from sklearn.neighbors import KNeighborsClassifier
5from collections import defaultdict, deque
6
7back_sub = cv2.createBackgroundSubtractorKNN(history=500, dist2Threshold=400, detectShadows=True)
8cap = cv2.VideoCapture(0)
9
10# ذخیره مسیر اشیاء
11object_traces = defaultdict(lambda: deque(maxlen=30))  # آخرین ۳۰ نقطه هر شیء
12object_last_seen = {}
13object_id_counter = 0
14
15# برای یادگیری real-time
16knn = KNeighborsClassifier(n_neighbors=3)
17features_set = []
18labels_set = []
19frame_count = 0
20learning_interval = 30
21
22def apply_noise_reduction(mask):
23    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
24    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=2)
25    mask = cv2.dilate(mask, kernel, iterations=1)
26    return mask
27
28def get_centroid(x, y, w, h):
29    return (int(x + w / 2), int(y + h / 2))
30
31def calculate_direction(trace):
32    if len(trace) < 2:
33        return "-"
34    dx = trace[-1][0] - trace[0][0]
35    dy = trace[-1][1] - trace[0][1]
36    if abs(dx) > abs(dy):
37        return "چپ" if dx < 0 else "راست"
38    else:
39        return "بالا" if dy < 0 else "پایین"
40
41def calculate_speed(trace, duration):
42    if len(trace) < 2 or duration == 0:
43        return 0
44    dist = np.linalg.norm(np.array(trace[-1]) - np.array(trace[0]))
45    return dist / duration
46
47def count_direction_changes(trace):
48    changes = 0
49    for i in range(2, len(trace)):
50        dx1 = trace[i-1][0] - trace[i-2][0]
51        dx2 = trace[i][0] - trace[i-1][0]
52        if dx1 * dx2 < 0:  # تغییر جهت افقی
53            changes += 1
54    return changes
55
56while True:
57    ret, frame = cap.read()
58    if not ret:
59        break
60
61    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
62    fg_mask = back_sub.apply(frame)
63    fg_mask = apply_noise_reduction(fg_mask)
64
65    contours, _ = cv2.findContours(fg_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
66
67    current_ids = []
68    for cnt in contours:
69        area = cv2.contourArea(cnt)
70        if area < 150:
71            continue
72
73        x, y, w, h = cv2.boundingRect(cnt)
74        centroid = get_centroid(x, y, w, h)
75
76        # شناسایی یا ایجاد شناسه جدید
77        matched_id = None
78        for oid, trace in object_traces.items():
79            if np.linalg.norm(np.array(trace[-1]) - np.array(centroid)) < 50:
80                matched_id = oid
81                break
82
83        if matched_id is None:
84            matched_id = object_id_counter
85            object_id_counter += 1
86
87        object_traces[matched_id].append(centroid)
88        object_last_seen[matched_id] = time.time()
89        current_ids.append(matched_id)
90
91        trace = object_traces[matched_id]
92        duration = time.time() - object_last_seen[matched_id] + 0.001
93        speed = calculate_speed(trace, duration)
94        direction = calculate_direction(trace)
95        direction_changes = count_direction_changes(trace)
96        total_move = sum(np.linalg.norm(np.array(trace[i]) - np.array(trace[i-1])) for i in range(1, len(trace)))
97
98        # ویژگی برای مدل
99        feature = [w, h, centroid[0], centroid[1], area, speed, direction_changes]
100        label = 1  # کلاس پیش‌فرض: عادی
101
102        # برچسب‌گذاری خودکار ساده:
103        if speed > 100 or direction_changes > 4:
104            label = 2  # مشکوک
105
106        features_set.append(feature)
107        labels_set.append(label)
108
109        if len(features_set) > 10 and frame_count % learning_interval == 0:
110            knn.fit(features_set, labels_set)
111            print("مدل به‌روزرسانی شد.")
112
113        predicted = "-"
114        if len(features_set) > 10:
115            predicted = knn.predict([feature])[0]
116
117        # رسم اطلاعات روی فریم
118        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0) if label == 1 else (0, 0, 255), 2)
119        cv2.circle(frame, centroid, 4, (255, 255, 255), -1)
120        cv2.putText(frame, f"ID: {matched_id} | جهت: {direction} | سرعت: {int(speed)}", (x, y - 25),
121                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 0), 1)
122        cv2.putText(frame, f"رفتار: {'عادی' if predicted == 1 else 'مشکوک'}", (x, y - 5),
123                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 1)
124
125    frame_count += 1
126
127    # حذف آی‌دی‌های قدیمی
128    for oid in list(object_last_seen):
129        if time.time() - object_last_seen[oid] > 2:
130            object_traces.pop(oid, None)
131            object_last_seen.pop(oid, None)
132
133    cv2.imshow("هوش رفتاری", frame)
134    if cv2.waitKey(1) & 0xFF == 27:
135        break
136
137cap.release()
138cv2.destroyAllWindows()
139