OpenCV İp Kameradan Görüntü Okuma

OpenCV İp Kameradan Görüntü Okuma

İp kameralar sağladığı kullanım kolaylığı, sunucu üzerinde görüntü işlemek veya kamera sisteminin kurulduğu alan dışında görüntüleri yorumlamak amacıyla sıklıkla tercih edilirler. Bazı kamera aygıtları üzerinde kendi mikro işlemcisi olabilir ve görüntü aktarmaya ihityac duymadan burada işlenebilir. Bizim konumuz bu kameralar değil, yakaladığı görüntüyü üzerinde bulunan web sunucu aracılığıyla ağ üzerinde yayınlayabilen kameralar. Bu kameralar sabit ip adresi üzerinden yayın yaparlar. Benim kullandığım ip kamera 192.168.1.51 ip adresinden yayın yapıyor, bu adrese tarayıcı aracılığıyla bağlantığımızda 8080 veya sizin atadığınız varsayılanın dışında bir portt ile üzerindeki web sunucusuna erişiriz. Burada görüntü ayarları içerisinde format kısmını mjpg olarak değiştiriyoruz. Bir çok yüksek çözünürlüklü kamera farklı formatlarda yayın yapıyor ve bu formatları OpenCV aracılığıyla okumak zor olduğu için aygıtınız destekliyorsa mjpg yapmanızda fayda var. Kamera yayın için bir adres vercektir benim kameram adresinden yayın yapıyor. Bu kısımdan sonra bu görüntüyü dosya sisteminden okur gibi okuyabiliyoruz. Şimdi ip kameraya bağlanalım ve bir kare yakalayalım.

Java

public static void main(String[] args) {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
		Mat imageArray = new Mat();
		VideoCapture videoDevice = new VideoCapture();
		// verilen adresteki yayını yakalar
		videoDevice.open("http://192.168.1.51/mjpg/stream.cgi");
                // Kullanıcı girişi gerektiren yayınlar için aşağıdaki gibi düzenlemeniz gerekmekte
		//videoDevice.open("http://<username:password>@<ip_address>/video.cgi?.mjpg")
		if (videoDevice.isOpened()) {
		// video aygıtından bir kare oku ve mat nesnesine yerleştir
			videoDevice.read(imageArray);
			videoDevice.release();
		} else {
			System.out.println("IP kamera aygıtına bağlanılamadı.");
		}
	}

Python

import cv2
cap = cv2.VideoCapture('http://admin:admin@192.168.1.51/cgi/stream.mjpg')

while True:
  ret, frame = cap.read()
  cv2.imshow('Video', frame)

  if cv2.waitKey(1) == 27:
    exit(0)

VideoCapture sınıfında bulunan set() metodu ile video aygıtları için bazı ayarları yapılandırabiliriz. int tipinde id ve paramtere değerini alır. get() metodu ile de değerleri görebilirsiniz. propId olarak tanımlanan int tipinde verilecek atanacak olan özelliğin id değeridir. Doğrudan int tipinde id değeri verilebileceği gibi 3.x öncesi sürümlerde Highgui 3.x sürümlerde ise Videoio içerisindeki int değişkenleride doğrudan kullanabilirsiniz. VideoCapture sınıfında kullanılabilecek bazı parametrelere göz atalım.

VideoCapture videoDevice = new VideoCapture(0);

//Özellik id ve değer olarak atanır
videoDevice.set(propId, value);

//Doğrudan değişlen ismi kullanarak da atanabilir
videoDevice.set(Videoio.CV_CAP_PROP_FRAME_WIDTH, 1024);

Kullandığınız IDE ile OpenCV paketleri içerisinde yer alan Videoio sınıfına eğerki eski bir OpenCV sürümü kullanıyorsanız Highgui sınıfına giderek buradaki parametrelere göz atabilirsiniz. Kullanabileceğiniz tüm parametreler ve id değerleri burada yer almaktadır. Veya aşağıdaki bağlantıdan direk olarak videoio sınıfına göz atabilirsiniz.

http://docs.opencv.org/java/3.0.0/org/opencv/videoio/Videoio.html

NOT: Paket dahilindeki sınıflara göz atmak için sınıf üzerine sağ tıklayarak Open Declaration demeniz yeterli olacaktır.

 

CV_CAP_PROP_POS_MSEC

Video dosyasından okuma yaparken mili saniye cinsinden o anki video zamanını yönetir.

CV_CAP_PROP_FRAME_WIDTH

Okunan görüntünün genişliğini yönetir. Görüntü genişliği değiştirilebilir yada okunan görüntünün genişliği öğrenilebilir.

CV_CAP_PROP_FRAME_HEIGHT

Okunan görüntünün yüksekliğini yönetir. Görüntü yüksekliği değiştirilebilir yada okunan görüntünün yüksekliği öğrenilebilir.

CV_CAP_PROP_FPS

Görüntünün saniyedeki kare hızını ifade eden FPS değeri değiştirilebilir.

CV_CAP_PROP_FOURCC

Kodek değiştirilebilir. Kodek dört karakterlik kod ile ifade edilir.

CV_CAP_PROP_FRAME_COUNT

Görüntünün çerçeve (frame) sayısına erişilebilir.

CV_CAP_PROP_FORMAT

Mat nesnesinin formatı değiştirilebilir.

CV_CAP_PROP_BRIGHTNESS

Görüntünün parlaklık değeri değiştirilebilir. Bu parametre sadece kamera aygıtları için geçerlidir.

CV_CAP_PROP_CONTRAST

Görüntünün kontrast değeri değiştirilebilir. Bu parametre sadece kamera aygıtları için geçerlidir.

CV_CAP_PROP_SATURATION

Görüntünün doygunluk değeri değiştirilebilir. Bu parametre sadece kamera aygıtları için geçerlidir.

CV_CAP_PROP_HUE

Görüntünün renk tonu değiştirilebilir. Bu parametre sadece kamera aygıtları için geçerlidir.

CV_CAP_PROP_CONVERT_RGB

Görüntünün RGB renk uzayına dönüştürülmesi gerekiyor ise kullanılır.

CV_CAP_PROP_WHITE_BALANCE

Görüntünün beyaz dengesi değiştirilebilir.

CV_CAP_PROP_ISO_SPEED

Kamera aygtının ISO hızı değiştirilebilir. Tüm aygıtlar için desteklenmemektedir.

CV_CAP_PROP_BUFFERSIZE

Ara belleğe alınacak olan çerçeve (frame) miktarı değiştirilebilir.

 

Bir kameranın yayın adresi nasıl bulunur?

İp kameranızın yayın adresini bulamıyorsanız bunun için iSpy yazılımını kullanabilirsiniz. iSpy açık kaynak ücretsiz bir yazılımdır. Bu yazılım ile bir çok kameranın yayın adreslerini bulabilir ve test edebilirsiniz, ayrıca buradaki bağlantıdan da iSpy kamera bağlantı arşivine ulaşabilirsiniz. iSpy indirme bağlantısı: https://www.ispyconnect.com/download.aspx

 

VİDEO ANLATIM