Vấn đề khi perform ứng dụng realtime sử dụng thư viện Opencv trên Android NDK

Xin chào
Mình đang viết 1 ứng dụng nền tảng android ndk có sử dụng thư viên Opencv.
Vấn đề là khì mình dùng hàm resize của opencv thì fps giảm xuống rất thấp. Không biết tại sao. Hàm resize của opencv có 4 kiểu

INTER_NEAREST - a nearest-neighbor interpolation
INTER_LINEAR - a bilinear interpolation (used by default)
INTER_AREA - resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method.
INTER_CUBIC - a bicubic interpolation over 4x4 pixel neighborhood
INTER_LANCZOS4 - a Lanczos interpolation over 8x8 pixel neighborhood

Tuy nhiên kiểu nào cũng làm giảm fps. Có bạn nào từng làm opencv trên android ndk gặp vấn đề này chưa?

Xin cảm ơn

Hi HelloWorld.
Bạn log thử xem nó chạy hết bao lâu. Hoặc chậm ở đâu chứ ?

P/S Resize là phải duyệt qua hết mảng rồi.

Mình đo fps khi chưa dùng và khi dùng resize nó tụt mạnh thấy liền, bình thường 20 - 25 ~
Để mình do time thực hiện xem sao
Mình tự code 1 vài hàm, vẫn thực hiện duyệt hết mạng mà vẫn nhanh mà

Sau khi đo đi đo lại các kiểu. Mình mới phát hiện ra chỗ load file tham số PCA cũng bị chậm.
Thời gian thực hiện: 0.06 ms
FPS dao động: 10-15.
Khi chưa đọc file này lên thì tầm 20fps. File này mình lưu trong internal storage
Mình đọc file tham số như sau:

// string pcaFile= "path/to/file/";
FileStorage fs(pcaFile, FileStorage::READ);
PCA pca;
pca.read(fs.root());
fs.release();

Hoặc

// string pcaFile= "path/to/file/";
FileStorage fs(pcaFile, FileStorage::READ);
PCA pca;
fs["mean"] >> pca.mean ;
fs["e_vectors"] >> pca.eigenvectors ;
fs["e_values"] >> pca.eigenvalues ;
fs.release();

Bạn có từng mắc vấn đề này chưa/

Hi HelloWorld.
Về mặt tổng quát khi bạn cần giao tiếp với các hệ thống có tốc độ đọc ghi khác nhau VD ổ cứng và ram, hay ram và cpu người ta thường dùng các bộ đêm (cá chê). Trước khi chạy bạn đọc hết file hoặc một phần file vào một buffer và tạo một đối tượng để giao tiếp với nó. Khi cần đọc ghi thì đọc ghi qua đối tượng này trên ram đảm bảo tốc độ. Khi bộ đệm đầy thì nó chạy một luồng riêng và đẩy cả khối dữ liệu xuông một thể.

P/S http://genk.vn/giai-ngo-ve-bo-nho-dem-memory-cache-20160410140135327.chn

3 Likes

:grimacing: nhờ gợi ý của bạn mình nghĩ được cách giải quyết rồi, k biết được k, tks bạn

Mình đã sửa lại chỗ đọc file. Mỗi phiên sử dụng chỉ đọc file 1 lần, mà vẫn bị chậm :smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?