2011-12-29 33 views
11

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)

+4

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

+1

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

+1

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

Trả lời

1

Đâ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:

  1. 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.
  2. 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); 
    } 
    
  3. Ứ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.

+1

Ở đây tôi chính xác hai năm sau đó cố gắng để làm điều tương tự. bạn đã bao giờ có thể thực hiện điều này? –

+0

@KyleWright Tôi đang ở cùng vị trí. Bất cứ ai có thể giúp tôi với điều này? – Shaked

+0

tôi có cùng một vấn đề. BẤT CỨ AI đã giải quyết vấn đề này chưa? – Gulzar

1

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.

Các vấn đề liên quan