Pertanyaan Menggunakan MATLAB untuk memproses file secara real-time setelah setiap instance file dibuat oleh program terpisah


Saya menggunakan MATLAB untuk memproses file gambar yang dibuat oleh kamera dan disimpan dalam direktori di Windows. Saya mencoba memasukkan umpan balik ke dalam kontrol kamera dan oleh karena itu memerlukan MATLAB untuk memproses gambar setiap kali gambar baru dibuat dan muncul di direktori. Saya tidak pernah membuat program MATLAB yang berjalan terus menerus dan menunggu suatu peristiwa terjadi.

Dari apa yang saya baca online, pilihan terbaik saya adalah menggunakan objek pengatur waktu dan program MATLAB membaca isi direktori berulang kali. Apakah ini pendekatan yang baik atau adakah pendekatan alternatif yang dapat saya terapkan? 

Saya bertanya-tanya apakah ada cara program MATLAB dapat "dipicu" oleh tampilan file di direktori yang bertentangan dengan terus-menerus mensurvei isi direktori ini. Saya harap ada karena sebagai direktori mengisi saya menemukan bahwa perintah "dir" di MATLAB benar-benar lambat; cukup lambat sehingga saya tidak dapat memproses gambar secepat yang saya butuhkan.

Sebagai tindak lanjut. Apakah ada rekomendasi tentang cara menyebarkan program ini? Ide yang saya suka adalah GUI sederhana dengan tombol "start" dan "stop".

Terima kasih.


4
2017-09-23 17:37


asal


Jawaban:


Anda dapat melakukan hal berikut:

Buat objek penghitung waktu, yang akan memeriksa direktori Anda setiap 10 detik:

t = timer('TimerFcn', @mycallback, 'Period', 10.0, 'ExecutionMode', 'fixedSpacing');

anda 'mycallback' fungsi harus terlihat seperti ini:

DIR_TO_READ = 'C:\incoming-files';
DIR_TO_MOVE_PROCESSED = 'C:\processed-files';

% get list of files.
file_struct = dir(DIR_TO_READ)
% remove '.' and '..' directories
file_struct([file_struct.isdir]) = [];
for j = 1 : numel(file_struct)
    current_file = file_struct(j).name;
    full_filename = fullfile(DIR_TO_READ, current_file)

    % add your processing of the file here
    % e.g.
    bla = imread(full_filename);

    % now move the processed file to the processed file folder
    movefile(full_filename, fullfile(DIR_TO_MOVE_PROCESSED, current_file))

end       

Sekarang Anda perlu memulai objek pengatur waktu

start(t);

Anda dapat menghentikan objek pengatur waktu

stop(t);

5
2017-09-23 18:14



Itu benar cara untuk melakukan ini adalah dengan membeli MATLAB Image Acquisition Toolbox (http://www.mathworks.com/products/imaq/). Fungsi ini sengaja tidak termasuk dalam lingkungan dasar Matlab.

Atau, dengan beberapa pemrograman pintar Anda bisa menerapkan kerja-sekitar. Fungsi MATLAB build-in kemungkinan akan terlalu lambat. Taruhan terbaik Anda adalah menulis fungsionalitas yang Anda butuhkan di Java (Lihat http://www.exampledepot.com/egs/java.io/GetFiles.html) dan kemudian memanggil kode Java Anda langsung dari Matlab (lihat http://www.mathworks.com/help/techdoc/matlab_external/f44062.html).

Pada dasarnya, kecuali Anda mengakses driver kamera atau framegrabber secara langsung, Anda akan selalu perlu mengimplementasikan beberapa jenis polling direktori.


1
2017-09-24 01:12