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