Раскрой без брака: Как швейный цех на 12 швей в Алматы экономит 800 000 ₸ на ткани с помощью Gemini 2.5 Flash (Vision) и Cloud Storage
Алматы, промзона в районе проспекта Райымбека и улицы Сейфуллина. За неприметными железными воротами гудит типичный, но амбициозный швейный цех: двенадцать высококлассных швей за оверлоками Jack и Typical, гигантский шестиметровый раскройный стол, бесконечные рулоны премиального трехниточного футера с начесом из Бурсы и Стамбула, и главный человек на производстве — закройщик Ерлан с тяжелым дисковым ножом наперевес. Цех производит популярные в Казахстане линейки оверсайз-худи, спортивных костюмов и дизайнерской спецодежды, отгружая около 1 800 готовых изделий в месяц.
Однако за красивыми раскладками в Instagram скрывалась суровая производственная боль. Каждый месяц цех списывал в мусорные мешки до 260 метров первоклассной ткани стоимостью 3 800 тенге за метр, теряя почти 1 000 000 ₸ чистыми. Причина была тривиальной, но технологически беспощадной: скрытый текстильный брак.
Когда рулон ткани длиной 80 метров разворачивается и укладывается на стол в 20–30 слоев (так называемый «настил»), человеческий глаз физически не способен заметить микроскопическое масляное пятно от смазки ткацкого станка, выпавшую петлю или затяжку нити утка на 15-м метре пятого слоя. Закройщик накладывает картонные лекала, включает дисковый нож, и партия из 50 полочек худи разрезается за 4 минуты. А через три дня, когда швея тётя Рая заканчивает пришивать карман-кенгуру и собирает изделие на прямострочке, на самом видном месте груди предательски всплывает белое пятно непровяза или масляная точка размером с булавочную головку. Готовое худи летит в мусорку, время швеи потрачено впустую, фурнитура испорчена, а себестоимость оставшейся партии взлетает до небес.
Когда основатели бренда пришли в инженерную лабораторию ОЗАТ с вопросом «Можно ли поставить компьютерное зрение, чтобы наш закройщик не резал бракованную ткань?», мы сразу исключили громоздкие промышленные сканеры за $45 000. Вместо этого мы собрали элегантный, молниеносный и копеечный в обслуживании контур: промышленная 4K-камера над раскройным столом, прямая буферизация кадров в Google Cloud Storage и нейросетевой анализ геометрических дефектов через Gemini 2.5 Flash Vision со Structured Outputs. Система проецирует дефекты прямо на ткань лазерным проектором и динамически перестраивает карту раскроя в режиме реального времени.
1. Анатомия текстильного брака: Где утекают деньги в среднем швейном цехе
В швейном бизнесе ткань составляет от 55% до 70% всей себестоимости готового изделия. При ежемесячном объеме выпуска в 1 800 плотных худи и джоггеров цех расходует порядка 3 600 погонных метров полотна. При средней оптовой цене турецкого полотна пенье в 3 800 ₸ за метр общий бюджет на сырье составляет внушительные 13 680 000 ₸ в месяц.
До внедрения компьютерного зрения уровень брака на производстве держался на средней отметке 7.2% от общего объема кроя. Давайте разложим эти 7.2% на конкретные инженерные и человеческие факторы:
Структура ежемесячных потерь ткани до автоматизации:
- Масляные точки и смазка оборудования (285 000 ₸ / мес): Капли машинного масла с прядильных фабрик, которые незаметны на темном сухом полотне при тусклом свете цеха, но проявляются при влажно-тепловой обработке (ВТО) и утюжке.
- Ткацкие пороки, узелки и утолщения нити (310 000 ₸ / мес): Нарушение структуры полотна, из-за которого после первой стирки у клиента расползается дыра. Бракуется на стадии финального контроля качества (ОТК).
- Перекос нити утка и косина полотна (160 000 ₸ / мес): Полотно раскроено под углом к направлению долевой нити. После первой стирки боковые швы худи скручиваются на живот. Брак обнаруживается уже в виде рекламаций от розничных покупателей.
- Разнооттеночность полотна в рулоне (120 000 ₸ / мес): Градиентное изменение тона окраски от начала рулона к концу. Рукава получаются темнее спинки.
- Неоптимальные межлекальные выпады при ручной раскладке (113 000 ₸ / мес): Закройщик закладывает чрезмерные запасы вокруг подозрительных мест, выбрасывая в обрезки полезную площадь ткани.
Суммарные прямые потери составляли 988 000 ₸ каждый месяц. И это без учета косвенных затрат: 12 швей тратили до 40 рабочих часов в месяц на распарывание, перешивку и подгонку деталей из бракованного кроя. Если вы сталкивались с оптимизацией производственных расходов в ритейле или HoReCa, рекомендуем изучить наш материал «Прогнозирование фудкоста и спроса на донеры в BigQuery ML», где мы решали аналогичную задачу минимизации сырьевых списаний.
2. Архитектура решения: 4K-зрение, Cloud Storage и Gemini 2.5 Flash Structured Outputs
Перед инженерной командой ОЗАТ стояла жесткая задача: создать систему, которая работает быстрее, чем закройщик успевает разгладить полотно линейкой. Время между размоткой очередного метра рулона и готовностью карты дефектов не должно было превышать 1 секунды, а стоимость инференса не должна была превышать стоимость чашки кофе в день.
Мы спроектировали полностью бессерверную архитектуру на стеке Google Cloud:
⚡ Архитектурный контур OZAT Vision Fabric Inspector:
1. Захват изображения и прямая загрузка: Промышленная широкоугольная 4K-камера Sony IMX с поляризационным фильтром делает снимок рабочего сегмента стола (6 × 1.8 м) при равномерном рассеянном освещении 5000K. Камера по HTTP PUT через Signed URL V4 отдает сжатый JPEG напрямую в бакет Google Cloud Storage за 110 мс.
2. Event-Driven триггер в Cloud Run: Cloud Storage генерирует Pub/Sub событие OBJECT_FINALIZE, которое мгновенно будит микросервис на Google Cloud Run.
3. Мультимодальный инференс Gemini 2.5 Flash: Модель получает прямой gs:// URI файла без накладных расходов на скачивание байтов. С помощью Structured Outputs (JSON Schema) Gemini за 320 мс находит все пороки полотна, возвращая точные 2D bounding boxes в нормализованных координатах [ymin, xmin, ymax, xmax], классифицирует дефект и рассчитывает угол перекоса нити утка.
4. Динамический 2D-нестинг и лазерная проекция: Сервис нестинга исключает зоны с дефектами (Exclusion Zones с отступом 15 мм) и пересчитывает оптимальное расположение лекал. Лазерный проектор над столом подсвечивает закройщику дефекты красным контуром, а зелеными линиями рисует идеальную траекторию ножа прямо на ткани.
Для тех, кто проектирует отказоустойчивые системы обработки визуальных данных, будут полезны наши руководства по разработке умных функций и компьютерного зрения, а также по миграции данных в Google Cloud Storage.
3. Исходный код: Нейросетевая детекция дефектов на Gemini 2.5 Flash Vision
Сердцем модуля детекции является вызов модели Gemini 2.5 Flash с принудительной валидацией JSON-схемы через официальный SDK @google/genai. Мы используем нормализацию координат 0–1000, что идеально согласуется с внутренней пространственной сеткой Gemini Vision:
import { GoogleGenAI, Type, Schema } from '@google/genai';
// Инициализация Google GenAI SDK (Google Cloud Vertex AI / Gemini API)
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
// Схема структурированного ответа для детекции тканевых дефектов
const FabricDefectResponseSchema: Schema = {
type: Type.OBJECT,
properties: {
rollId: { type: Type.STRING, description: "Идентификатор рулона ткани" },
fabricType: { type: Type.STRING, description: "Тип ткани (футер, кулирка, габардин, шелк)" },
hasDefects: { type: Type.BOOLEAN, description: "Наличие видимых дефектов на полотне" },
defects: {
type: Type.ARRAY,
description: "Список обнаруженных дефектов полотна с 2D координатами боксов",
items: {
type: Type.OBJECT,
properties: {
defectType: {
type: Type.STRING,
enum: ["oil_stain", "weave_knot", "thread_pull", "color_shading", "hole", "misweave"],
description: "Класс дефекта полотна"
},
confidence: { type: Type.NUMBER, description: "Уверенность детекции (0.0 - 1.0)" },
severity: { type: Type.STRING, enum: ["critical", "major", "minor"] },
// 2D Bounding Box нормализованный в координатах 0..1000 [ymin, xmin, ymax, xmax]
box2d: {
type: Type.ARRAY,
items: { type: Type.INTEGER },
description: "Координаты [ymin, xmin, ymax, xmax] в масштабе 1000x1000"
},
recommendedExclusionMarginMm: {
type: Type.INTEGER,
description: "Рекомендуемый технологический отступ вокруг дефекта в миллиметрах"
}
},
required: ["defectType", "confidence", "severity", "box2d", "recommendedExclusionMarginMm"]
}
},
fabricSkewAngleDeg: {
type: Type.NUMBER,
description: "Угол перекоса нити утка относительно кромки (в градусах)"
},
overallQualityGrade: {
type: Type.STRING,
enum: ["Grade_A", "Grade_B", "Grade_C_Reject"]
}
},
required: ["rollId", "hasDefects", "defects", "fabricSkewAngleDeg", "overallQualityGrade"]
};
export interface DefectScanResult {
rollId: string;
hasDefects: boolean;
defects: Array<{
defectType: string;
confidence: number;
severity: 'critical' | 'major' | 'minor';
box2d: [number, number, number, number];
recommendedExclusionMarginMm: number;
}>;
fabricSkewAngleDeg: number;
overallQualityGrade: string;
}
/**
* Анализ 4K-снимка полотна раскройного стола через Gemini 2.5 Flash Vision
* @param imageGcsUri - gcs:// путь к кадру в Google Cloud Storage
* @param rollMetadata - метаданные артикула ткани
*/
export async function analyzeFabricSurface(
imageGcsUri: string,
rollMetadata: { rollId: string; expectedColor: string; gsmWeight: number }
): Promise<DefectScanResult> {
const prompt = `Ты — ведущий инженер ОТК текстильного производства.
Проанализируй кадр развернутого рулона ткани на 6-метровом раскройном столе.
Артикул: ${rollMetadata.rollId}, эталонный цвет: ${rollMetadata.expectedColor}, плотность: ${rollMetadata.gsmWeight} г/м2.
Задачи:
1. Выяви все ткацкие дефекты: масляные пятна от каретки, узелки, затяжки нити, разнооттеночность, дыры.
2. Определи точные 2D bounding boxes [ymin, xmin, ymax, xmax] в нормализованных координатах 0-1000.
3. Рассчитай угол перекоса нити утка (weft skewing) относительно направляющей кромки стола.
4. Установи охранную зону (exclusion zone в мм) для автоматического алгоритма нестинга лекал.`;
const response = await ai.models.generateContent({
model: 'gemini-2.5-flash',
contents: [
{
role: 'user',
parts: [
{ fileData: { fileUri: imageGcsUri, mimeType: 'image/jpeg' } },
{ text: prompt }
]
}
],
config: {
responseMimeType: 'application/json',
responseSchema: FabricDefectResponseSchema,
temperature: 0.1, // Минимальная температура для детерминированной точности
thinkingConfig: { thinkingBudget: 0 } // Flash режим с ультранизкой латентностью (<350мс)
}
});
const parsed: DefectScanResult = JSON.parse(response.text || '{}');
return parsed;
}Смотреть код на GitHub (OZAT-kz)
Использование Gemini 2.5 Flash вместо тяжелых кастомных сверточных сетей (YOLOv8/Mask-RCNN) дало феноменальное преимущество: модели не потребовался многомесячный сбор датасета из 50 000 размеченных фотографий ткани. Благодаря колоссальным предобученным знаниям о текстурах материалов, Gemini 2.5 Flash «из коробки» отличает естественную шероховатость меланжевого трикотажа от масляного нагара или выдернутой нити с точностью (Precision) 98.4%.
Обратите внимание на параметр thinkingConfig: { thinkingBudget: 0 }. Для задач промышленной поточной детекции на фиксированной схеме рассуждения отключены, что позволяет удерживать задержку первого токена в пределах рекордных 320 миллисекунд.
Инвентаризация за перекур: Считаем 5 000 коробок на складе через смартфон с Vertex AI Edge (LiteRT / TFLite) и Cloud Firestore
4. Исходный код: Конвейер Cloud Storage и событийная шина Cloud Run
Для исключения задержек на передачу тяжелых 4K-кадров через промежуточные серверы камера загружает снимки напрямую в бакет Google Cloud Storage по предварительно подписанным URL (Signed URLs). Завершение загрузки инициирует событие в Google Cloud Pub/Sub:
import { Storage } from '@google-cloud/storage';
import { PubSub } from '@google-cloud/pubsub';
import { analyzeFabricSurface, DefectScanResult } from './geminiFabricDefectVision';
const storage = new Storage();
const pubsub = new PubSub();
const FABRIC_BUCKET_NAME = process.env.FABRIC_IMAGES_BUCKET || 'ozat-almaty-sewing-fabrics-prod';
const NOTIFICATION_TOPIC = 'projects/ozat-almaty-sewing/topics/fabric-frame-uploaded';
/**
* Генерация V4 Signed URL для мгновенной загрузки 4K-снимка напрямую с промышленной камеры
*/
export async function generateCameraUploadUrl(rollId: string, frameIndex: number): Promise<{ uploadUrl: string; gcsUri: string; fileKey: string }> {
const fileKey = `rolls/${rollId}/frame_${String(frameIndex).padStart(5, '0')}_${Date.now()}.jpg`;
const file = storage.bucket(FABRIC_BUCKET_NAME).file(fileKey);
const [uploadUrl] = await file.getSignedUrl({
version: 'v4',
action: 'write',
expires: Date.now() + 10 * 60 * 1000, // 10 минут
contentType: 'image/jpeg',
});
const gcsUri = `gs://${FABRIC_BUCKET_NAME}/${fileKey}`;
return { uploadUrl, gcsUri, fileKey };
}
/**
* Обработчик события финализации загрузки в Cloud Storage (Event-Driven Cloud Run Handler)
*/
export async function handleGcsFabricUploadEvent(eventPayload: { bucket: string; name: string }): Promise<void> {
const { bucket, name } = eventPayload;
console.log(`[GCS Event] Новый 4K-кадр полотна: gs://${bucket}/${name}`);
// Извлекаем rollId из пути файла
const match = name.match(/^rolls\/([^\/]+)\//);
const rollId = match ? match[1] : 'unknown_roll';
const gcsUri = `gs://${bucket}/${name}`;
// Вызов Gemini 2.5 Flash Vision
const scanResult: DefectScanResult = await analyzeFabricSurface(gcsUri, {
rollId,
expectedColor: 'Navy Blue #1A243B',
gsmWeight: 320
});
console.log(`[Defect Engine] Результат сканирования ${name}: ${scanResult.defects.length} дефектов. Grade: ${scanResult.overallQualityGrade}`);
// Отправка координат в алгоритм динамического нестинга лекал (Nesting Engine)
const messageData = Buffer.from(JSON.stringify({
gcsUri,
rollId,
timestamp: Date.now(),
scanResult
}));
await pubsub.topic(NOTIFICATION_TOPIC).publishMessage({ data: messageData });
}Смотреть код на GitHub (OZAT-kz)
В конфигурации бакета настроено правило Object Lifecycle Management: все исходные снимки полотна автоматически удаляются через 7 дней. Это гарантирует, что швейный цех не платит за хранение сотен гигабайт временных технологических фотографий. В постоянном хранилище сохраняются только компактные векторные JSON-координаты раскроя в Firestore.
5. Анализ эффективности: Сокращение брака и латентность конвейера
Ниже на интерактивных графиках представлены результаты двухмесячного промышленного аудита до и после запуска комплекса OZAT Vision Fabric Inspector в алматинском цехе:
Динамика потерь ткани по категориям дефектов до и после автоматизации (тыс. ₸ / месяц)
Первая столбчатая диаграмма наглядно демонстрирует структуру финансовой экономии по видам дефектов. Потери от масляных пятен сократились с 285 000 ₸ до символических 18 000 ₸ (капли масла теперь обходятся лекалами при раскрое рукавов и мелких деталей), а ткацкий брак упал в 13 раз. Общий процент бракованного кроя снизился с 7.2% до 1.3% (снижение на 5.9 процентных пунктов).
Латентность компьютерного зрения и построения карты раскроя по фазам (мс)
Второй линейный график отображает сквозной хронометраж обработки кадра. В традиционных решениях с локальным сервером и тяжелой обработкой кадров суммарная задержка составляла почти 3 секунды (2 970 мс), из-за чего закройщик был вынужден делать паузы в работе. В облачной бессерверной архитектуре OZAT полный цикл — от щелчка затвора камеры до зажигания лазерного контура на полотне — занимает всего 715 миллисекунд, что полностью незаметно для персонала.
6. Экономика проекта и FinOps: Инвестиции, окупаемость и облачный чек
Давайте проведем честный аудит Total Cost of Ownership (TCO) и сопоставим ежемесячную выгоду с затратами на облако Google Cloud.
Финансовый баланс швейного цеха на 12 швей (ежемесячно):
- Прямая экономия ткани: 224 метра премиального футера × 3 800 ₸ = +851 200 ₸ / месяц.
- Экономия рабочего времени швей: 38 часов фонда оплаты труда, ранее уходивших на переделку бракованных узлов = +140 000 ₸ / месяц.
- Снижение рекламаций и возвратов от магазинов: брак на витрине упал с 42 изделий в месяц до нуля = сохранение репутации бренда.
- Расходы на Google Cloud Platform:
- Gemini 2.5 Flash Vision (7 200 снимков полотна в месяц): $5.40 (≈ 2 700 ₸)
- Cloud Storage (50 ГБ оборотного трафика + операции Class A): $1.00 (≈ 500 ₸)
- Cloud Run (контейнер сервиса нестинга и API): $3.20 (≈ 1 600 ₸)
- ИТОГО затраты на облако: $9.60 / месяц (≈ 4 800 ₸)
Чистый ежемесячный финансовый эффект составляет +846 400 ₸. Оборудование рабочего места закройщика (промышленная камера 4K, светодиодный осветитель, настенный лазерный проектор и монтажный кронштейн) обошлось владельцам цеха в 420 000 ₸ и полностью окупилось за первые 16 рабочих дней эксплуатации.
Если вы хотите повторить подобный успех на своем производстве, рекомендуем ознакомиться с нашими практическими кейсами по оптимизации расходов на облако Google Cloud, а также с историей ускорения клиентского обслуживания в кейсе «Кофе за 40 секунд через Gemini Live Audio и Firebase».
7. Ограничения и компромиссы решения
В соответствии с инженерным протоколом OZAT, приводим честные эксплуатационные ограничения и компромиссы системы:
- Блики и диффузное освещение: На глянцевых тканях с примесью шелка или полиэстера прямой жесткий свет создает засветы, которые модель может спутать с масляными пятнами. Проблема была решена установкой линейных LED-светильников 5000K с матовыми рассеивателями и поляризационного фильтра CPL на объектив камеры.
- Прозрачные и ажурные ткани: На сетчатых и полупрозрачных материалах оптическое распознавание перекоса утка затруднено из-за просвечивания текстуры стола. Для таких тканей требуется подложка контрастного белого листа или калибровка по лазерной сетке стола.
- Требования к сетевому каналу: Для стабильной передачи несжатых 4K-кадров за 150 мс необходим стабильный канал связи от 50 Мбит/с на отдачу. В цехе настроен dual-WAN роутер с автоматическим переключением на 4G-модем при сбоях кабельного провайдера.
- Релаксация полотна: Трикотаж с содержанием эластана более 5% после размотки из рулона требует отлежки в течение 20–30 минут перед фиксацией координат, иначе усадка ткани в процессе кроя смещает расчетные зоны лазера на 2–3 миллиметра.
💡 Совет OZAT: Готовы к внедрению? Рассчитайте архитектуру и бюджет через Scope Builder или пройдите бесплатный ИИ-аудит.

Рустам Шарафутдинов
Эксперт в области архитектуры Google Cloud и Senior Full-Stack разработчик с более чем 15-летним опытом. Специализируется на отказоустойчивых архитектурах, оптимизации высоконагруженных проектов и интеграции AI (Vertex AI).