AI-Розпізнавання мебелі й пошук аналогів у мобільних застосунках
На відміну від одягу, мебель має жорстку геометрію й впізнавані форми—що спрощує класифікацію. Але пошук «подібного за менші гроші» вимагає не тільки візуального збігу, але й розуміння стилю (скандинавський мінімалізм, лофт, класика) та масштабу. Диван на фото без контексту—не дозволяє зрозуміти, трьохмісцевий він чи двомісцевий.
Стек розпізнавання
Для класифікації мебелі добре працюють загальні моделі—Google Cloud Vision, AWS Rekognition—вони натреновані на широких датасетах ImageNet, де мебелі достатньо. Додатково: спеціалізовані датасети IKEA (публічно доступні в академічному вигляді) та ADE20K для сегментації.
Точніший варіант для конкретного ритейлера—дообучення EfficientNet або MobileNetV3 на каталозі магазину. 50 000 зображень (по 200–300 на категорію) дають впевнену класифікацію основних категорій: диван, крісло, стіл, стілець, шафа, ліжко, тумба.
// Android: TFLite класифікація мебелі
class FurnitureClassifier(context: Context) {
private val interpreter: Interpreter by lazy {
val model = FileUtil.loadMappedFile(context, "furniture_classifier_v2.tflite")
Interpreter(model, Interpreter.Options().apply {
numThreads = 4
useXNNPACK = true
})
}
fun classify(bitmap: Bitmap): List<FurnitureClassification> {
val resized = Bitmap.createScaledBitmap(bitmap, 224, 224, true)
val input = TensorImage.fromBitmap(resized)
val output = TensorBuffer.createFixedSize(intArrayOf(1, NUM_CLASSES), DataType.FLOAT32)
interpreter.run(input.buffer, output.buffer)
return output.floatArray
.mapIndexed { index, score -> FurnitureClassification(LABELS[index], score) }
.filter { it.score > 0.1f }
.sortedByDescending { it.score }
}
}
Визначення стилю
Категорія («диван»)—тільки перший крок. Для пошуку аналогів важливий стиль. Можна натренувати окремий класифікатор на стильові категорії або використовувати CLIP—він розуміє текстові описи стилів:
// iOS: CLIP-based визначення стилю через Core ML
// CLIP модель конвертована в .mlpackage
func detectStyle(_ image: UIImage) async throws -> [StyleScore] {
let styleDescriptions = [
"scandinavian minimalist furniture",
"industrial loft style furniture",
"classic traditional furniture",
"mid-century modern furniture",
"boho eclectic furniture"
]
// CLIP порівнює image embedding з text embeddings стилів
let imageEmbedding = try await clipEncoder.encodeImage(image)
return styleDescriptions.enumerated().map { i, desc in
let textEmbedding = clipEncoder.encodeText(desc)
let similarity = cosineSimilarity(imageEmbedding, textEmbedding)
return StyleScore(style: desc, score: similarity)
}.sorted { $0.score > $1.score }
}
Пошук аналогів по каталогу
Архітектура та ж, що й для одягу: embedding → vector search. Але для мебелі важна додаткова фільтрація за атрибутами: матеріал (дерево, метал, текстиль), колір, розмірний клас.
struct FurnitureSearchFilters {
let category: FurnitureCategory
let style: StyleTag?
let colorFamily: ColorFamily? // warm, cool, neutral
let material: MaterialType? // wood, metal, upholstered
let maxDimensionClass: SizeClass? // compact, standard, large
let priceRange: ClosedRange<Int>?
let inStockOnly: Bool
}
Розмірний клас без AR визначається приблизно—за співвідношенням сторін і типовими пропорціями для категорії. Точні розміри через ARKit LiDAR (доступен з iPhone 12 Pro)—але це окрема сторінка.
Орієнтири за часом
Інтеграція з готовим API класифікації й пошуком по зовнішньому каталогу (IKEA API, Amazon Product API)—1 тиждень. Реалізація з власною TFLite/CoreML моделлю на каталозі ритейлера, CLIP-based визначенням стилю, vector search з фільтрацією й AR-розмірами—1–2 місяці.







