Вопрос:
Я использую IP Webcam APP для Android и потоковое видео MJPEG через локальный URL:
Я смог показать видео с помощью проигрывателя VLC и этого фрагмента кода в C++. На OpenCV 2.2 я открыл URL-адрес, используя:
VideoCapture cap; cap.open(«http://192.168.0.2:8080/video?dummy=param.mjpg»);
Он работал в C++, но я хочу, чтобы он работал на Java. Я смог запустить OpenCV2.4.9 с помощью Java при съемке с моей встроенной веб-камеры. Это мой код для получения изображений с URL-адреса на Java.
System.loadLibrary(«opencv_java249»); VideoCapture capture = new VideoCapture(); capture.open(«http://192.168.0.2:8080/video?dummy=param.mjpg»);
Но capture.open не открывает потоковое вещание, и я не мог его отлаживать должным образом. Я знаю, что это может быть проблемой с ffmpeg, поскольку он работает на OpenCV2.2. Я также знаю, что мой OpenCV2.2 специфичен для MS 2010 и может быть более полным.
Помогло бы мне скомпилировать OpenCV2.4.9 из источников? Есть ли файл, который я мог бы добавить, чтобы решить эту проблему? Есть ли другой способ получения видео с IP-камеры и использования на OpenCV?
Ответ №1
Я потратил некоторое время, чтобы понять это. Я не смог получить поток непосредственно из OpenCVJava.I скачал
http://www.mediafire.com/download/ayxwnwnqv3mpg39/javacv-0.7-bin.zip http://www.mediafire.com/download/2rkk0rjwxov7ale/javacv-0.7-cppjars.zip
Я считаю, что это Java-оболочка в OpenCV на C. Я взял эту ссылку из этого видео.
htttp://www.youtube.com/watch? v = mIYaHCyZICI
После распаковки zip я добавил банки в свой проект и использовал этот код:
package javaapplication7; import java.io.IOException; import com.googlecode.javacv.OpenCVFrameGrabber; import com.googlecode.javacv.CanvasFrame; import com.googlecode.javacv.cpp.opencv_core.IplImage; public class JavaApplication7 { public static void main(String[] args) throws Exception { OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(«http://192.168.0.2:8080/video?dummy=param.mjpg»); grabber.setFormat(«mjpeg»); grabber.start(); for (int k=0; k<20000; k++){ System.out.print(k); } IplImage frame = grabber.grab(); CanvasFrame canvasFrame = new CanvasFrame(«Camera»); canvasFrame.setCanvasSize(frame.width(), frame.height()); while (canvasFrame.isVisible() && (frame = grabber.grab()) != null) { canvasFrame.showImage(frame); } grabber.stop(); canvasFrame.dispose(); System.exit(0); } }
Что я получил от:
htttp://stackoverflow.com/questions/14251290/cvcreatefilecapture-error-could-not-create-camera-capture-with-javacv
Для начала перехвата требуется 15-20 секунд. Но я был впечатлен задержкой, которая намного меньше, чем VLC. Это 1-2 секунды по сравнению с 3-4 секундами на VLC. Я хотел бы поддержать парня, на которого я ответил, но у меня нет достаточной репутации /
Ответ №2
Я также столкнулся с той же проблемой, что и вы, но самым простым методом, который я понял, было использование камеры дроида вместо приложения веб-камеры Ip. Проверьте это здесь