معاينة مختبر آمنة
اكتشاف الحركة بالتدفق البصري
هذي معاينة منقّحة للقراءة فقط؛ ما فيه أي شيء يشتغل داخل الصفحة.
تعليمات المختبر
قراءة فقط
معاينة الدفتر
Movement Detection
سجّل تطبيقك
التسجيل اختياري، يفيدك تتذكر وش طبّقت، ولا يمنع إكمال الدورة.
نسخة هلا جي بي تي
معاينة مختبر آمنة
هذي معاينة منقّحة للقراءة فقط؛ ما فيه أي شيء يشتغل داخل الصفحة.
قراءة فقط
التسجيل اختياري، يفيدك تتذكر وش طبّقت، ولا يمنع إكمال الدورة.
طبّقوا مفاهيم الدرس في هالمختبر الموجّه.
شوفوا هالفيديو، وفيه تتحرك كف شخص يمين ويسار وفوق وتحت قدام خلفية ثابتة.
وصف الشكل: إطار يوضح حركة الكف
هدفكم إنكم تستخدمون التدفق البصري عشان تحددون أي أجزاء من الفيديو فيها حركة لفوق أو تحت أو يمين أو يسار.
الهدف الإضافي إنكم تتتبّعون حركة الكف أو الإصبع فعلًا باستخدام لون البشرة، بالطريقة المشروحة في هالتدوينة أو هالشرح.
ابدؤوا المختبر بفتح MovementDetection.ipynb.
أحيانًا نقدر نحل مهام معقدة نسبيًا، مثل اكتشاف الحركة أو أطراف الأصابع، بأساليب الرؤية الحاسوبية وحدها. عشان كذا يفيدنا نعرف وش تقدر تسوي مكتبات مثل OpenCV.
import matplotlib.pyplot as plt
import numpy as np
frames = []
for frame_index in range(80):
frame = np.zeros((96, 128), dtype=np.float32)
if 12 <= frame_index < 68:
start = 8 + frame_index
frame[38:54, start:start + 16] = 1.0
frames.append(frame)
fig, axes = plt.subplots(1, 3, figsize=(9, 3))
for axis, index in zip(axes, (0, 30, 70)):
axis.imshow(frames[index], cmap="gray", vmin=0, vmax=1)
axis.set_title(f"Frame {index}")
axis.axis("off")
plt.tight_layout()frame_differences = [np.abs(current - previous) for previous, current in zip(frames[:-1], frames[1:])]
motion_energy = np.asarray([difference.sum() for difference in frame_differences])
plt.plot(motion_energy)
plt.title("Frame-to-frame motion energy")
plt.xlabel("Frame")threshold = max(1.0, float(motion_energy.max()) * 0.25)
active_frames = np.flatnonzero(motion_energy > threshold)
segments = []
if len(active_frames):
start = previous = int(active_frames[0])
for frame_index in active_frames[1:]:
frame_index = int(frame_index)
if frame_index != previous + 1:
segments.append((start, previous + 1))
start = frame_index
previous = frame_index
segments.append((start, previous + 1))
print(f"Detected motion segments: {segments}")if not segments:
raise RuntimeError("The generated motion fixture should contain one active segment")
segment_start, segment_stop = segments[0]
representative = (segment_start + segment_stop) // 2
plt.imshow(frames[representative], cmap="gray", vmin=0, vmax=1)
plt.title(f"Representative active frame {representative}")
plt.axis("off")حذفنا المخرجات وعدّادات التشغيل والودجات والمحتوى النشط وقت الاستيراد. شغّل الدفاتر بس في بيئة خارجية تثق فيها.