در این مقاله سعی داریم کلیات دریافت ویدیو و نمایش آن بر صفحه نمایش را با استفاده از کتابخانه هایی که در مقاله نصب پایتون نصب شدند بیان کنیم. با توجه به تجربیات واحد بینایی ماشین مانا در استفاده از از برخی از بردهای توسعه و دوربین ها، در نظر داریم تا با به اشتراک گذاری این تجربیات متخصصان تازه وارد به دنیا یادگیری ماشین و پردازش تصویر سریعتر با این دینا آشنا شوند (در این مقاله با فشردن کلید 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 هستند.