Czy ktoś pracował z przechwytywaniem strumieni wideo z kamer IP w programie MATLAB? Na przykład, aby pobrać klatki w MATLAB z rtsp: //10.10.10.10: 554/live.sdp (strumień rtsp) lub z http://x.x.x.x/axis-cgi/mjpg/video.cgi (strumień mjpeg). Oprogramowanie MATLAB Image Acquisition Toolbox obecnie nie obsługuje tego. Znalazłem 2 opcje: 1) przy użyciu mmread. Jednak czytanie strumienia http nie jest obsługiwane przez 64-bitowe MATLAB lub 2), aby napisać własną funkcję C++, która łapie ramki (korzystam z biblioteki OpenCV), a następnie kompiluję je do funkcji MATLAB MEX. Wszelkie sugestie są mile widziane.MATLAB - przechwytywanie strumieni wideo (MJPEG, rtsp, mpeg)
Odpowiedz
Jest to odpowiedź dostałem od wsparcia MATLAB:
Niestety, masz rację, że obecnie Image Acquisition Toolbox nie obsługuje kamery IP. Jeśli chodzi o obejście: 1. Jeśli mmread działa dla ciebie, być może jest możliwe zainstalowanie 32-bitowego MATLAB na 64-bitowym komputerze. 2. Możliwe jest pisanie własnego sterownika MEX. 3. IMREAD jest w stanie uzyskać ramki z kamer IP. Może być możliwe wykorzystanie tej możliwości i zbudowanie funkcji konstruującej strumień wideo. Chociaż liczba klatek na sekundę może być problemem.
Sugeruję wdrożenie własnej funkcji Matlab mex do przechwytywania klatek wideo. Oto kilka wskazówek:
- Biblioteka OpenCV służy do przechwytywania strumieni wideo z kamer sieciowych, patrz: OpenCV with Network Cameras. Każda kamera IP może mieć inny interfejs API do uzyskiwania dostępu do strumieni wideo (tj. Adresu URL). Na przykład:
http://10.10.10.10/axis-cgi/mjpg/video.cgi?resolution=800x600&.mjpg
. Poniżej znajduje się link do zestawu kolekcji i rozwoju funkcji matlab mex dla biblioteki OpenCV (dzięki Kota Yamaguchi): https://github.com/kyamagu/mexopencv. Ta biblioteka ułatwia konwersję między typami danych OpenCV i mxArray. Oto przykład:
#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); }
Aplikacja może być asynchroniczne za pomocą nici, w którym gwint producent chwyta ramek z aparatu i umieszcza je w buforze cyklicznym. Z drugiej strony wątek konsumencki pobiera ramki z bufora i konwertuje je do wyjścia mxArray (macierz). Zobacz How to implement a circular buffer of cv::Mat objects (OpenCV)?. Bufor cykliczny musi być zabezpieczony przed gwintowaniem, patrz Thread safe implementation of circular buffer.
Od MATLAB R2015a to się bardzo proste dzięki funkcji IPCam:
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;
Przy pierwszym wywołać tą funkcję MATLAB może poprosi, aby go pobrać. Dobrą wiadomością jest to, że rozwiązanie to nie wymaga nawet licencji na zestaw narzędzi do pozyskiwania kamer.
- 1. C# Microsoft LifeCam HD przechwytywanie mjpeg
- 2. MPEG-ES H.264 Wideo z RTP na MPEG-TS
- 3. Konwersja strumienia wideo rtsp do strumienia http
- 4. Nakładanie dwóch strumieni kamer internetowych - Matlab
- 5. Rozwiązanie RTSP dla JavaScript/HTML5
- 6. MPEG-TS Kodowanie
- 7. Program do strumienia wideo MPEG-4 programowo na Androidzie
- 8. Jak utworzyć plik MPD MPEG-DASH, aby odtworzyć wideo webm?
- 9. Jak wyłączyć przechwytywanie wideo w UIImagePickerController
- 10. Przechwytywanie ekranu apletu Java do wideo
- 11. Przechwytywanie wideo MediaRecorder w trybie portretowym
- 12. Przechwytywanie ekranu Android i tworzenie wideo programowo
- 13. Jak mogę zrobić przechwytywanie wideo w przeglądarce?
- 14. Przechwytywanie klatek wideo z HTML5 i JavaScriptem
- 15. Nie można odtworzyć RTSP wideo w VideoView Samsung Galaxy S2
- 16. Wyświetlanie strumienia wideo RTSP przez WebView w aplikacji Android
- 17. Tworzenie własnego strumienia MJPEG
- 18. Android i MJPEG
- 19. Liczniki ciągłości strumienia danych MPEG
- 20. Scalanie dwóch strumieni wideo i zapisywanie jako jednego pliku
- 21. WebRTC wiele strumieni wideo w tym samym peerConnection
- 22. Jak osadzić plik mjpeg na stronie internetowej
- 23. RTSP h.264 w przeglądarce Google Chrome
- 24. Android 4.1 - RTSP użyciu VideoView i MediaController
- 25. Przechwytywanie wideo na AR (Vuforia) z jednością w platformie Android
- 26. H.264 przez RTP/RTSP (iPhone)
- 27. Odbieranie strumienia RTSP przy użyciu biblioteki FFMPEG
- 28. Odczytaj ramki ze strumienia RTSP w Pythonie
- 29. MPEG-DASH i fragmentaryczny mp4
- 30. Jak wyświetlać RTSP z kamery IP/CCTV w iOS
FYI, to jest odpowiedź od wsparcia MATLAB "Niestety, masz rację, że obecnie Image Acquisition Toolbox nie obsługuje kamery IP W odniesieniu do obejścia.. 1. Jeśli mmread pracuje dla ciebie, być może jest to wykonalne dla Ciebie zainstalować 32-bitową konsolę MATLAB na 64-bitowej maszynie 2. Możliwe jest zapisanie własnego sterownika MEX: 3. IMREAD może uzyskać ramki z kamer IP. Może być możliwe wykorzystanie tego możliwości i zbuduj funkcję, która tworzy strumień wideo. Chociaż liczba klatek na sekundę może być problemem." – Alexey
Liczba klatek na sekundę to problem z funkcją IMREAD w MATLAB-ie pobiera tylko pojedyncze obrazy, ale nie strumień.Pojawiam trasę kompilacji mojego kodu C++ OpenCV do funkcji Matlab mex. Poniżej znajduje się link do kolekcji i zestawu rozwojowego matlab mex funkcje biblioteki OpenCV (dzięki Kota Yamaguchi): https://github.com/kyamagu/mexopencv. – Alexey
DZIĘKI za link mexopencv. Używam biblioteki videoio od 2 lat i byłem z niej bardzo zadowolony. świetny, ale kompilacja była kłopotliwa, instalacja mexopencv była prosta, przykłady są świetne, a biblioteka mex jest zrobiona w niesamowity sposób.Myślę, że przejdę teraz na mexopencv i opencv – georg