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)
31.7k
1import cv2
2import numpy as np
3from sklearn.neighbors import KNeighborsClassifier
4
5# استفاده از الگوریتم پیشرفته KNN برای background subtraction
6back_sub = cv2.createBackgroundSubtractorKNN(history=500, dist2Threshold=400, detectShadows=True)
7
8# تابع برای محاسبه مرکز (centroid)
9def get_centroid(x, y, w, h):
10 return (int(x + w / 2), int(y + h / 2))
11
12# گرفتن تصویر از دوربین
13cap = cv2.VideoCapture(0)
14
15# مدل KNN
16knn = KNeighborsClassifier(n_neighbors=3)
17
18# دادههای آموزشی و برچسبها
19object_features = []
20object_labels = []
21
22# تنظیمات برای آموزش دورهای
23learning_interval = 30 # هر 30 فریم یک بار آموزش انجام شود
24frame_count = 0
25
26while True:
27 ret, frame = cap.read()
28 if not ret:
29 break
30
31 # تبدیل تصویر به خاکستری
32 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
33
34 # دریافت ماسک اشیاء متحرک
35 fg_mask = back_sub.apply(frame)
36
37 # اعمال عملیات مورفولوژیکی برای حذف سایهها و نویز
38 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
39 fg_mask = cv2.morphologyEx(fg_mask, cv2.MORPH_OPEN, kernel, iterations=1)
40 fg_mask = cv2.dilate(fg_mask, kernel, iterations=1)
41
42 # پیدا کردن کانتورها
43 contours, _ = cv2.findContours(fg_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
44
45 for cnt in contours:
46 area = cv2.contourArea(cnt)
47 if area > 100: # فقط اشیاء بزرگتر از این اندازه رو بررسی کن
48 x, y, w, h = cv2.boundingRect(cnt)
49 centroid = get_centroid(x, y, w, h)
50
51 # استخراج ویژگیها
52 features = [w, h, centroid[0], centroid[1]]
53 object_features.append(features)
54 object_labels.append(1) # فرض میکنیم همه اشیاء متحرک به کلاس 1 تعلق دارند
55
56 # رسم باکس و مرکز
57 cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
58 cv2.circle(frame, centroid, 4, (0, 0, 255), -1)
59
60 # آموزش مدل به صورت دورهای
61 frame_count += 1
62 if frame_count % learning_interval == 0 and len(object_features) > 5:
63 # آموزش مدل فقط زمانی که دادهها کافی باشند
64 knn.fit(object_features, object_labels)
65 print("Model updated!")
66
67 # پیشبینی با مدل KNN برای اشیاء جدید
68 if len(object_features) > 5 and frame_count % learning_interval == 0:
69 # اطمینان حاصل میکنیم که مدل آموزش داده شده است قبل از پیشبینی
70 predicted_label = knn.predict([features])[0]
71 cv2.putText(frame, f"Predicted: {predicted_label}", (x, y - 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
72
73 cv2.imshow('Optimized Object Tracking', frame)
74
75 # خروج از برنامه با کلید ESC
76 if cv2.waitKey(1) & 0xFF == 27:
77 break
78
79cap.release()
80cv2.destroyAllWindows()
81 