نمایش Live Stream

در این مقاله سعی داریم کلیات دریافت ویدیو و نمایش آن بر صفحه نمایش را با استفاده از کتابخانه هایی که در مقاله نصب پایتون نصب شدند بیان کنیم. با توجه به تجربیات واحد بینایی ماشین مانا در استفاده از از برخی از بردهای توسعه و دوربین ها، در نظر داریم تا با به اشتراک گذاری این تجربیات متخصصان تازه وارد به دنیا یادگیری ماشین و پردازش تصویر سریعتر با این دینا آشنا شوند (در این مقاله با فشردن کلید q می توانید نمایش Live Stream را متوقف کنید و از برنامه خارج شوید).

نمایش Live Stream با استفاد از Webcam

می توان گفت استفاده از webcam آسانترین راه نمایش Live Stream است چرا با این دوربین نیازی به نصب کتابخانه جدید و همچنین Error Handling نمی باشد.

import cv2

camera = cv2.VideoCapture(0)

while True:
    has_frame, frame = camera.read()
    
    if not has_frame:
        break
    
    # نمایش فریم
    cv2.imshow("Fames", frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

camera.release()
cv2.destroyAllWindows()

نمایش Live Stream با استفاد از IP Camera

هنگام استفاده از IP Camera برای نمایش Live Stream هر چند دقیقه یکبار ارتباط با IP Camera قطع می شود که این مشکل باعث می شود برنامه متوقف شود برای رفع این خطا از بلاک try/except استفاده خواهیم کرد و همچنین گاهی اوقات ممکن است که سایز خروجی IP Camera Live Stream بزرگتر از صفحه نمایش باشد که در این بخش نشان خواهیم داد که چگونه می توان سایز پنجره نمایش دهنده ویدیو را تنظیم کنیم.

import cv2

camera = cv2.VideoCapture("rtsp://username:password@ip:port/1")
cv2.namedWindow("Window Name", cv2.WINDOW_NORMAL)

# تغییر سایز پنجره نمایش با ابعاد دلخواه
# cv2.resizeWindow("Window Name", WIDTH, HEIGHT)

# تغییر سایز پنجره نمایش با کلمات کلیدی
# cv2.setWindowProperty("Window Name", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

while True:
    try:
        has_frame, frame = camera.read()
    
        cv2.imshow("Window Name", frame)
    except:
        vid.release()
        vid = cv2.VideoCapture("rtsp://admin:password@192.168.77.231:554/1")
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

camera.release()
cv2.destroyAllWindows()

نمایش Live Stream با استفاد از Pi Camera

در این بخش می خواهیم با استفاده از دوربین های مخصوص برد Raspberry Pi که در همین بردها نیز استفاده می شود Live Stream را نمایش دهیم. برای این منظور ابتدا با دستور زیر کتابخانه PiCamera را در سیستم عامل Raspbian نصب می نماییم:

pip3 install PiCamera

حال کد زیر را در هر ویرایشگری که راحت هستید وارد نمایید:

import cv2
from picamera import PiCamera
from picamera.array import PiRGBArray

camera = PiCamera()
camera.resolution = (WIDTH, HEIGHT) # Raspberry Pi Display Size

rawCapture = PiRGBArray(camera, size=(WIDTH, HEIGHT))

for image in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    frame = image.array
    
    cv2.imshow("Window Name", frame)
    
    # خالی کردن بافر برای دریافت فریم بعد
    rawCapture.truncate(0)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    
camera.close()
cv2.destroyAllWindows()

نمایش Live Stream با استفاد از Nano Camera

از Nano Camera برای بردهای توسعه شرکت NVidia با نام NVidia Jetson استفاده می شود. در این زمینه واحد بینایی ماشین مانا تجربه استفاده از برد NVidia Jetson Nano را داشته است. بطور کلی این بردها دارای دو پورت دوربین هستند که می تواند همزمان از هر دو دوربین Stream خواند.برای خواندن Nano Camera Live Stream ابتدا باید با دستور زیر در NVidia Jetson Nano SDK کتابخانه nanoCamera را نصب می نماییم:

pip3 install nanoCamera

حال کد زیر را در هر ویرایشگری که مایل هستید وارد نمایید:

import cv2
import nanoCamera as nano

# خواندن از یک دوربین
# camera = nano.nanoCamera(flip=0, width=WIDTH, height=HEIGHT, fps=FPS)

# خواندن از دو دوربین
# camera_0 = nano.nanoCamera(device_id=0, flip=0, width=WIDTH, height=HEIGHT, fps=FPS)
# camera_1 = nano.nanoCamera(device_id=1, flip=0, width=WIDTH, height=HEIGHT, fps=FPS)

while camera.isReady():
    frame = camera.read()
    
    cv2.imshow("Window Name", frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break 

camera release
del camera

توجه: بطور کلی پیشنهاد می شود از یک دوربین برای دریافت Live Stream استفاده شود، به جز در بردهای توسعه ای که همانند NVidia Jetson Nano دارای دو پورت Camera هستند.

دیدگاهتان را بنویسید

آدرس ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *