¿Alguien ha trabajado con la captura de transmisiones de video desde cámaras IP en MATLAB? Por ejemplo, para tomar marcos en MATLAB desde rtsp: //10.10.10.10: 554/live.sdp (flujo rtsp) o desde http://x.x.x.x/axis-cgi/mjpg/video.cgi (flujo mjpeg). La herramienta de adquisición de imágenes de MATLAB no es compatible con esto. Encontré 2 opciones: 1) usando mmread. Sin embargo, la lectura de flujo http no es compatible con MATLAB de 64 bits o 2) para escribir mi propia función C++ que atrape marcos (uso la biblioteca OpenCV) y luego compilarlo en la función MATLAB MEX. Cualquier sugerencia es apreciada.MATLAB - captura de secuencias de video (MJPEG, rtsp, mpeg)
Respuesta
Esta es la respuesta que obtuve de apoyo MATLAB:
Desafortunadamente, Tiene razón en que actualmente la adquisición de imágenes de la caja de herramientas no es compatible con cámaras IP. En cuanto a soluciones temporales: 1. Si mmread funciona para usted, quizás le sea factible instalar un MATLAB de 32 bits en su máquina de 64 bits. 2. Escribir su propio controlador MEX debería ser una opción posible. 3. IMREAD puede obtener marcos de cámaras IP. Es posible utilizar esta capacidad y crear una función que construya la transmisión de video. Aunque la velocidad de fotogramas puede ser un problema.
Le sugiero que implemente su propia función Matlab mex para captar marcos de video. Éstos son algunos consejos para hacerlo:
- biblioteca OpenCV se utiliza para capturar secuencias de vídeo de las cámaras de red, consulte OpenCV with Network Cameras. Cada cámara IP puede tener una API diferente para acceder a las transmisiones de video (es decir, la dirección URL). Por ejemplo,
http://10.10.10.10/axis-cgi/mjpg/video.cgi?resolution=800x600&.mjpg
. A continuación se muestra un enlace al kit de colección y desarrollo de funciones de matlab mex para la biblioteca OpenCV (gracias a Kota Yamaguchi): https://github.com/kyamagu/mexopencv. Esta biblioteca facilita la conversión entre los tipos de datos OpenCV y mxArray. Aquí está un ejemplo:
#include "mexopencv.hpp" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { // Check arguments if (nlhs!=1 || nrhs!=1) mexErrMsgIdAndTxt("myfunc:invalidArgs", "Wrong number of arguments"); // Convert MxArray to cv::Mat cv::Mat mat = MxArray(prhs[0]).toMat(); // Do whatever you want // Convert cv::Mat back to mxArray* plhs[0] = MxArray(mat); }
La aplicación puede hacerse asíncrona mediante el uso de roscas, donde hilo productor agarra marcos de la cámara y lo pone en una memoria intermedia circular. El hilo consumidor, por otro lado, recupera los marcos del búfer y los convierte en salida mxArray (matriz). Ver How to implement a circular buffer of cv::Mat objects (OpenCV)?. La memoria intermedia circular tendrá que estar segura para la rosca, ver Thread safe implementation of circular buffer.
Desde MATLAB R2015a se ha convertido en muy fácil con la función de la cámara IP :
cam = ipcam('http://172.28.17.193/video.mjpeg', 'admin', 'password');
% preview the camera
preview(cam);
% close preview
closepreview(cam);
% Or get a snapshop...
img = snapshot(cam);
imshow(img);
% release camera
clear cam;
La primera vez que se llama a esa función MATLAB puede pedirle que descargarlo. La buena noticia es que la solución ni siquiera requiere una licencia para la caja de herramientas de adquisición de la cámara.
- 1. MPEG-ES H.264 Video de RTP a MPEG-TS
- 2. C# Microsoft LifeCam HD captura mjpeg
- 3. Transmisión de video usando RTSP: Android
- 4. Creación de una transmisión de video MJPEG en C#
- 5. decodificación mpeg 2
- 6. HTML5 video captura de pantalla
- 7. MJPEG Información de la corriente
- 8. Convierta la transmisión de video rtsp a la secuencia http
- 9. Dispositivo de captura de video DirectShow "Falso"
- 10. MPEG-TS Codificación
- 11. ¿Cuál es la diferencia entre el video H.264 y el video MPEG-4?
- 12. Captura de video ignorando el dilema EXTRA_OUTPUT
- 13. Captura de video MediaRecorder en modo retrato
- 14. DirectShow vs. Media Foundation para captura de video?
- 15. ¿Cómo puedo convertir un archivo de video (mpeg, por ejemplo) en una colección de imágenes?
- 16. RTSP youtube link
- 17. Cliente RTSP en android
- 18. Cómo reproducir secuencias de video con MPMoviePlayerController en iOS
- 19. ¿Es posible usar HTML5 para mostrar un video de MPEG Transport Stream?
- 20. Retraso de VideoView RTSP
- 21. Captura de una captura de pantalla de un video incrustado usando C#
- 22. software de captura de video para iPhone Simulator
- 23. Captura de pantalla de video en iOS programáticamente
- 24. Visualización de la transmisión de video RTSP a través de WebView en la aplicación Android
- 25. Gstreamer - vaapidecode con mpeg ts sin jugar
- 26. Descodificación de transmisión RTSP en vivo: gran retraso de video usando MediaPlayer en Android
- 27. Cómo deshabilitar la captura de video en UIImagePickerController
- 28. android: captura de video en el dispositivo o emulador
- 29. ¿Cómo puedo hacer una captura de video en el navegador?
- 30. La captura de Emgu reproduce el video súper rápido
Para su información, esta es la respuesta del soporte de MATLAB. "Desafortunadamente, tiene razón en que actualmente el Image Acquisition Toolbox no es compatible con cámaras IP. para instalar un MATLAB de 32 bits en su máquina de 64 bits 2. Escribir su propio controlador MEX debería ser una opción posible 3. IMREAD puede obtener marcos de cámaras IP. Puede ser posible utilizar este capacidad y crear una función que construya la secuencia de video. Aunque la velocidad de fotogramas puede ser un problema." – Alexey
La velocidad de fotogramas es un problema con la función IMREAD en MATLAB, solo captura imágenes individuales, pero no una secuencia. Voy por la ruta de compilar mi código OpenCV C++ a la función Matlab mex. A continuación se muestra un enlace al kit de colección y desarrollo de funciones de matlab mex para la biblioteca OpenCV (gracias a Kota Yamaguchi): https://github.com/kyamagu/mexopencv. – Alexey
GRACIAS por el enlace de mexopencv. Estoy usando la biblioteca de video desde hace 2 años y estaba bastante satisfecho con ella. genial, pero compilar fue una molestia. La instalación de mexopencv fue sencilla. Los ejemplos son geniales y la biblioteca mex está hecha de una manera increíble. Creo que cambiaré a mexopencv y opencv en este momento. – georg