Ask Your Question

Revision history [back]

openCV js Loading a trained model file

Hello, I had trouble loading a model in openCV js. It came from js lack of access to fileSystem. I didn't find any related issue but I resolved the problem thanks to a bit of help from IRC. I'm posting the answer just beneath.

The trick was loading the file trough XML request then giving it to cv.FS_createDataFile. Then you just CascadeCassifier.load(path) to get your model. I couldn't get it to work with parametrized declaration though, but it may be because of emscripten compilation problem.

// parameters:
// path: string to access loaded file trough cv
// url: path of the actual file on your FS
// callback: what to do when file is loaded
createFileFromUrl = function(path, url, callback) {
    let request = new XMLHttpRequest();
    request.open('GET', url, true);
    request.responseType = 'arraybuffer';
    request.onload = function(ev) {
        request = this;
        if (request.readyState === 4) {
            if (request.status === 200) {
                let data = new Uint8Array(request.response);
                cv.FS_createDataFile('/', path, data, true, false, false);
                callback();
            } else {
                console.error('Failed to load ' + url + ' status: ' + request.status);
            }
        }
    };
    request.send();
}