Có ai đã làm việc với ghi lại các luồng video từ các camera IP trong MATLAB không? Ví dụ để lấy khung trong MATLAB từ rtsp: //10.10.10.10: 554/live.sdp (luồng rtsp) hoặc từ http://x.x.x.x/axis-cgi/mjpg/video.cgi (luồng mjpeg). Hộp công cụ chuyển đổi hình ảnh của MATLAB hiện không hỗ trợ điều này. Tôi đã tìm thấy 2 tùy chọn: 1) sử dụng mmread. Tuy nhiên đọc luồng http không được hỗ trợ theo MATLAB 64 bit hoặc 2) để viết hàm C++ của riêng tôi lấy khung (tôi sử dụng thư viện OpenCV) và sau đó biên dịch nó thành hàm MATLAB MEX. Mọi đề xuất đều được đánh giá cao.MATLAB - ghi lại các luồng video (MJPEG, rtsp, mpeg)
Trả lời
Đây là câu trả lời tôi nhận được từ sự ủng hộ MATLAB:
Thật không may, bạn là chính xác hiện Image Acquisition Toolbox không hỗ trợ camera IP. Về cách khắc phục: 1. Nếu mmread hoạt động cho bạn, có lẽ bạn có thể cài đặt MATLAB 32 bit trên máy 64 bit của mình. 2. Viết trình điều khiển MEX của riêng bạn phải là một lựa chọn có thể. 3. IMREAD có thể lấy khung từ camera IP. Có thể sử dụng khả năng này và xây dựng một hàm để tạo luồng video. Mặc dù tốc độ khung hình có thể là một vấn đề.
Tôi đề xuất triển khai chức năng Matlab mex của riêng bạn để lấy khung hình video. Dưới đây là một số gợi ý để làm như vậy:
- Thư viện OpenCV được sử dụng để ghi lại luồng video từ máy ảnh mạng, xem OpenCV with Network Cameras. Mỗi camera IP có thể có một API khác nhau để truy cập các luồng video (tức là địa chỉ URL). Ví dụ:
http://10.10.10.10/axis-cgi/mjpg/video.cgi?resolution=800x600&.mjpg
. Dưới đây là liên kết đến bộ sưu tập và phát triển bộ chức năng matlab mex cho thư viện OpenCV (nhờ có Kota Yamaguchi): https://github.com/kyamagu/mexopencv. Thư viện này giúp dễ dàng chuyển đổi giữa các kiểu dữ liệu OpenCV và mxArray. Dưới đây là một ví dụ:
#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); }
Ứng dụng này có thể được thực hiện không đồng bộ bằng cách sử dụng đề, nơi sản xuất chủ đề lấy khung hình từ máy ảnh và đặt nó vào một bộ đệm tròn. Chủ đề tiêu dùng, mặt khác, lấy khung từ bộ đệm và chuyển đổi chúng thành đầu ra mxArray (ma trận). Xem How to implement a circular buffer of cv::Mat objects (OpenCV)?. Bộ đệm tròn cần phải được làm an toàn chỉ, xem Thread safe implementation of circular buffer.
Kể từ MATLAB R2015a nó trở nên rất dễ dàng với các chức năng 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;
Lần đầu tiên bạn gọi đó là chức năng MATLAB có thể nhắc bạn tải về nó. Tin vui là giải pháp thậm chí không cần giấy phép cho hộp công cụ chuyển đổi máy ảnh.
- 1. Thông tin luồng MJPEG
- 2. Android VideoView lưu luồng RTSP
- 3. Đóng luồng luồng MJPEG qua proxy Node.js
- 4. Đọc Khung từ Luồng RTSP bằng Python
- 5. Nhận luồng RTSP bằng thư viện FFMPEG
- 6. tạo luồng MJPEG của riêng tôi
- 7. luồng truyền tải & định dạng tệp mpeg
- 8. Giải mã luồng RTSP trực tiếp: độ trễ video lớn bằng MediaPlayer trên Android
- 9. Phát trực tuyến video bằng RTSP: Android
- 10. Xem luồng video RTSP thông qua WebView trong Ứng dụng Android
- 11. Sự khác nhau giữa video H.264 và video MPEG-4 là gì?
- 12. mpeg 2 giải mã
- 13. Trích xuất dữ liệu khác từ luồng mjpeg qua http
- 14. Loại MIME đúng cho luồng MJPEG nhiều hơn http?
- 15. AVCaptureSession Ghi lại Video Với Âm thanh
- 16. Đa luồng với Matlab
- 17. AVAudioRecorder ghi lại âm thanh luồng
- 18. MPEG-TS Encoding
- 19. Tệp luồng dưới dạng RTSP bằng cách sử dụng VLC
- 20. H.264 qua RTP/RTSP (iPhone)
- 21. Gstreamer - vaapidecode với mpeg ts không phát
- 22. RTSP youtube link
- 23. Có thể phát trực tiếp các luồng mm, ASX, RTSP trên iPhone không?
- 24. Ghi lại luồng từ micrô ở định dạng WAV
- 25. Không thể chơi RTSP video trong VideoView trong Samsung Galaxy S2
- 26. Cách nhúng tệp mjpeg trên trang web
- 27. Có phải một luồng ghi phải được đóng lại không?
- 28. Theo dõi luồng RTMP, ghi lại nếu có sẵn
- 29. Ghi âm Video Lưới Selenium
- 30. Có thể sử dụng HTML5 để hiển thị video truyền tải MPEG không?
FYI, đây là câu trả lời từ hỗ trợ MATLAB "Thật không may, bạn là chính xác hiện Image Acquisition Toolbox không hỗ trợ camera IP cách giải quyết Về:.. 1. Nếu mmread làm việc cho bạn, có lẽ đó là khả thi cho bạn để cài đặt một MATLAB 32 bit trên máy tính 64 bit của bạn 2. Viết trình điều khiển MEX của riêng bạn nên là một lựa chọn có thể. 3. IMREAD có thể lấy khung từ máy ảnh IP. khả năng và xây dựng một hàm xây dựng luồng video Mặc dù tốc độ khung hình có thể là một vấn đề." – Alexey
Tốc độ khung hình là một vấn đề với chức năng IMREAD trong MATLAB - nó chỉ lấy các hình ảnh đơn lẻ, chứ không phải một luồng. Tôi đang định tuyến biên dịch mã OpenCV C++ thành chức năng Matlab mex. Dưới đây là liên kết đến bộ sưu tập và phát triển của chức năng mex matlab cho thư viện OpenCV (nhờ có Kota Yamaguchi): https://github.com/kyamagu/mexopencv – Alexey
THANKs cho liên kết mexopencv.Tôi đang sử dụng thư viện videoio từ 2 năm nay và khá hài lòng với nó. Việc cài đặt mexopencv rất đơn giản Các ví dụ rất tuyệt vời khi thư viện mex được thực hiện một cách tuyệt vời Tôi nghĩ rằng tôi sẽ chuyển sang mexopencv và opencv ngay bây giờ – georg