Для использования Keras.js необходимо подключить библиотеку в проект на JavaScript. Библиотека предоставляется в виде npm-пакета и также доступна через CDN.
Установка через npm:
npm install keras-js
Подключение через CDN:
<script src="https://cdn.jsdelivr.net/npm/keras-js/dist/keras.min.js"></script>
После подключения можно создавать модели и выполнять их загрузку в браузере без необходимости установки Python или TensorFlow на клиентской стороне.
Keras.js работает с моделями, экспортированными из Python Keras. Для
этого используется формат JSON и бинарные файлы весов .bin.
Экспорт модели в Keras Python:
from keras.models import model_from_json
# Сохранение структуры модели
model_json = model.to_json()
with open("model.json", "w") as json_file:
json_file.write(model_json)
# Сохранение весов
model.save_weights("model_weights.h5")
Для использования в Keras.js веса необходимо конвертировать в
бинарный формат с помощью встроенного инструмента
kerasjs-converter.
kerasjs-converter --input_model model.h5 --output_path ./kerasjs_model
В результате получаем model.json и папку с весами.
const KerasJS = require('keras-js');
const model = new KerasJS.Model({
filepath: 'path/to/model.json',
gpu: true
});
Параметр gpu: true позволяет использовать WebGL для
ускорения вычислений, что критично для больших моделей.
Для задачи локализации объектов модель обычно предсказывает
координаты прямоугольника, ограничивающего объект. Выходные данные —
вектор [x_min, y_min, x_max, y_max] или
[x_center, y_center, width, height].
Входные данные должны быть представлены в формате тензора
Float32Array. Для изображений размерность обычно
[каналы, высота, ширина]. Пример подготовки
изображения:
function preprocessImage(image, width, height) {
// Создание канала для RGB
const tensor = new Float32Array(3 * width * height);
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0, width, height);
const imageData = ctx.getImageData(0, 0, width, height).data;
for (let i = 0; i < width * height; i++) {
tensor[i] = imageData[i * 4] / 255; // R
tensor[i + width * height] = imageData[i * 4 + 1] / 255; // G
tensor[i + 2 * width * height] = imageData[i * 4 + 2] / 255; // B
}
return tensor;
}
Предсказание выполняется методом model.predict() и
возвращает промис. Пример:
const inputTensor = preprocessImage(imageElement, 224, 224);
model.ready().then(() => {
return model.predict({ input: inputTensor });
}).then(outputData => {
const coordinates = outputData.output; // [x_min, y_min, x_max, y_max]
console.log('Предсказанные координаты:', coordinates);
});
Важно учитывать нормализацию координат: если модель обучалась на
нормализованных значениях [0,1], необходимо масштабировать
их обратно до размеров изображения.
const x_min = coordinates[0] * imageWidth;
const y_min = coordinates[1] * imageHeight;
const x_max = coordinates[2] * imageWidth;
const y_max = coordinates[3] * imageHeight;
Для проверки корректности работы модели координаты можно визуализировать на изображении:
const ctx = canvas.getContext('2d');
ctx.strokeStyle = 'red';
ctx.lineWidth = 2;
ctx.strokeRect(x_min, y_min, x_max - x_min, y_max - y_min);
Это позволит мгновенно оценить точность регрессии координат.
Keras.js легко интегрируется с существующими фронтенд-фреймворками,
такими как React или Vue. Модель можно загружать один раз при
инициализации компонента и вызывать метод predict() при
каждом новом изображении, что обеспечивает интерактивную работу в
браузере без серверной обработки.
Keras.js возвращает ошибки при неправильном формате данных или несовпадении структуры модели. Основные рекомендации:
Для сложных моделей локализации иногда применяются нестандартные
слои, которых нет в Keras.js по умолчанию. В этом случае необходимо либо
переписать модель с использованием стандартных слоёв, либо реализовать
кастомный слой на JavaScript, используя API
KerasJS.layers.
Правильная подготовка входных данных, точная нормализация координат и оптимизация выполнения модели позволяют Keras.js эффективно использовать для задачи локализации объектов прямо в браузере, обеспечивая высокую скорость предсказания и визуальный контроль результатов.