কম্পিউটার টিউটোরিয়াল

পাইথনে ওয়েবক্যাম মোশন ডিটেক্টর প্রোগ্রাম

এখানে আমরা একটি পাইথন প্রোগ্রাম লিখব যা ওয়েবক্যাম থেকে ছবি নিয়ে গতিবিদ্যা বিশ্লেষণ করবে এবং গতিবিদ্যার সময়-অन्तরাল CSV ফাইলে সংরক্ষণ করবে।

প্রয়োজনীয় লাইব্রেরি

এখানে OpenCV এবং pandas লাইব্রেরি ব্যবহার করা হবে। যদি ইতিমধ্যে ইনস্টল না থাকে, তবে পিপ দিয়ে ইন্সটল করুন:

$pip install opencv2, pandas

উদাহরণ কোড

# প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করুন
import cv2
import pandas as pd
import time
from datetime import datetime

# ভেরিয়েবল ইনিশিয়ালাইজ করুন
stillImage = None
motionImage = [None, None]
time_list = []

# শুরুর ও শেষ সময়ের জন্য DataFrame ইনিশিয়ালাইজ করুন
df = pd.DataFrame(columns=["start", "end"])

# ভিডিও ক্যাপচার করুন
video = cv2.VideoCapture(0)

while True:
    # ভিডিও থেকে ছবি পড়া শুরু করুন
    check, frame = video.read()
    motion = 0
    
    # রঙিন ছবিকে গ্রে-স্কেলে রূপান্তর করুন
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (21, 21), 0)
    
    if stillImage is None:
        stillImage = gray
        continue
    
    # স্টিল ইমেজ ও বর্তমান ছবির পার্থক্য
    diff_frame = cv2.absdiff(stillImage, gray)
    
    # স্ট্যাটিক ব্যাকগ্রাউন্ড ও বর্তমান ফ্রেমের পার্থক্য ২৫-এর বেশি হলে সাদা করুন
    thresh_frame = cv2.threshold(diff_frame, 25, 255, cv2.THRESH_BINARY)[1]
    thresh_frame = cv2.dilate(thresh_frame, None, iterations=2)
    
    # চলমান বস্তু থেকে কন্টুর ও হায়ারার্কি খুঁজুন
    contours, hierarchy = cv2.findContours(thresh_frame.copy(),
                                           cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    for contour in contours:
        if cv2.contourArea(contour) < 10000:
            continue
        motion = 1
        (x, y, w, h) = cv2.boundingRect(contour)
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 3)
    
    # গতিবিদ্যার বর্তমান স্ট্যাটাস যুক্ত করুন
    motionImage.append(motion)
    motionImage = motionImage[-2:]
    
    # গতিবিদ্যার শুরুর সময় যুক্ত করুন
    if motionImage[-1] == 1 and motionImage[-2] == 0:
        time_list.append(datetime.now())
    
    # গতিবিদ্যের শেষ সময় যুক্ত করুন
    if motionImage[-1] == 0 and motionImage[-2] == 1:
        time_list.append(datetime.now())
    
    # গ্রে-স্কেল ছবি প্রদর্শন করুন
    cv2.imshow("Gray_Frame", gray)
    
    # ব্ল্যাক অ্যান্ড হোয়াইট ফ্রেম প্রদর্শন করুন (পার্থক্য > ২৫ হলে সাদা)
    cv2.imshow("Threshold Frame", thresh_frame)
    
    # রঙিন ফ্রেম প্রদর্শন করুন
    cv2.imshow("Colored_Frame", frame)
    
    key = cv2.waitKey(1)
    
    # 'q' চাপলে প্রক্রিয়া বন্ধ করুন
    if key == ord('q'):
        if motion == 1:
            time_list.append(datetime.now())
        break

# গতিবিদ্যার সময় CSV ফাইলে সংরক্ষণ করুন
for i in range(0, len(time_list), 2):
    df = df.append({"Start": time_list[i], "End": time_list[i + 1]}, ignore_index=True)

# গতিবিদ্যার সময় সংরক্ষণের জন্য CSV ফাইল তৈরি করুন
df.to_csv("FrameInMotion_time.csv")

video.release()  # ভিডিও রিলিজ করুন
cv2.destroyAllWindows()  # উইন্ডো বন্ধ করুন

আউটপুট

পাইথনে ওয়েবক্যাম মোশন ডিটেক্টর প্রোগ্রাম

এখানে ৩টি আলাদা উইন্ডো দেখাবে যা ওয়েবক্যাম থেকে বর্তমান গতিবিদ্যাকে তিনটি মোডে (গ্রে-স্কেল, রঙিন ও ব্ল্যাক অ্যান্ড হোয়াইট) প্রদর্শন করবে।

এছাড়া ওয়েবক্যাম গতিবিদ্যের ডেটাটাইম CSV ফাইলে সংরক্ষণ করবে, যার আউটপুট নিচের মতো হবে:

FrameMotion_time.csv (আউটপুট)

start                    end
0  2019-02-21 18:10:59.718005  2019-02-21 18:08:35.791487
  1. পাইথনে সিম্পল ইন্টারেস্ট (Simple Interest) ক্যালকুলেটর

  2. পাইথনে সিলেকশন সর্ট (Selection Sort)

  3. OpenCV পাইথন প্রোগ্রাম ইমেজ ব্লার (Blur) করার জন্য

  4. পাইথন প্রোগ্রাম: OpenCV ব্যবহার করে ইমেজের এজ ডিটেকশন