Zone Inspect

// documentation & reference

English
0 About the System ▶

Precision.

This is an AI-powered visual inspection platform designed to eliminate human error and bring laboratory-grade accuracy to every check. The system leverages a neural network trained on real-world production data to detect defects, deviations, and anomalies — instantly and consistently.

Speed.

Define zones of interest, capture images, and let the engine do the rest. Every result is logged, traceable, and available for review at any time. Operators get clear pass/fail verdicts with confidence scores; managers get statistics, history, and full audit trails.

Confidence.

Built for the factory floor. Accessible from any device — desktop or mobile. No installation required. Just open the browser and inspect.

Detection Pipeline

Every uploaded photo goes through a multi-stage pipeline to find and analyze the matching zone:

1. Global Alignment — the input image is aligned to the reference using SIFT feature matching (5000 keypoints) with FLANN matcher and RANSAC homography. This warps the photo to overlap precisely with the reference, compensating for camera angle, position, and scale.

2. Zone Matching — each zone is extracted from the warped image and ranked:

  • SSIM pre-ranking — all zones scored quickly; top-3 advance.
  • Neural scoring — EfficientNet-B4 global cosine similarity (pooled layer-7 features) picks the best match above 0.55 threshold.
  • Fallback strategies — if global homography fails: local SIFT per zone, then template matching.

3. Defect Detection — the matched pair (reference vs. extracted) is analyzed:

  • CLAHE contrast normalization on both images.
  • Global similarity — cosine on EfficientNet-B4 layer-7 (semantic level).
  • SSIM map — per-pixel structural similarity to find difference regions.
  • Patch CNN map — layer-5 spatial features compared patch-by-patch, producing a similarity heatmap.
  • Texture weighting — flat regions are down-weighted to reduce false positives.
  • Verdict — weighted defect % vs. sensitivity thresholds: OK / WARN / DEFECT.

Final similarity = 50% global cosine (layer 7) + 50% patch cosine (layer 5).

4. Subzone Analysis — subzones use stricter thresholds plus HSV histogram comparison to catch completely different components. Zone verdict = worst status across all subzones.

5. Reference Blending — the auto-blend module aligns multiple photos via SIFT (with barcode/QR anchor detection) and pixel-averages them into a clean, noise-reduced reference.

OpenCV fallback: when the neural engine is unavailable, the system uses CLAHE + SSIM + edge analysis + contour-based measurement.
1 Getting Started ▶

Login

Open the application URL. Enter your access key on the login page. The key is provided by the administrator and maps to your operator name. The session persists for 30 days.

Interface Overview

Operators work on the inspection screen:

  • Step 1 — Recipe: choose a published recipe (name, version, barcode mask).
  • Step 3 — Check: scan the serial number, take zone photos, review results and save.

Leads and admins also have Recipe Studio (link in the header) to prepare recipes, and a quick check without a recipe (Step 2 — Zones) for trials.

Click the Step 1 indicator at any time to reset and start over.

Strictness

How strict the check is belongs to the recipe (zone and subzone values 0.00–2.00, defaults 0.50 / 0.51; higher = stricter). Operators cannot change it. Leads and admins can tick Override in the header for a trial run; without the tick the recipe's values are used.

2 Reference Image ▶

The reference image belongs to a recipe and is set in Recipe Studio, step 2 (see section 3). Each recipe version keeps its own reference.

Quality check

Every reference is checked for sharpness, exposure and resolution. A red result blocks publishing; yellow is a warning. Use a sharp, evenly lit photo of a known-good board, taken the way operators will shoot.

Blending several photos

"Blend several photos…" aligns 2+ shots of the same board (SIFT, with barcode/QR anchors as a fallback) and averages them. This reduces noise and glare.

Quick check without a recipe (lead / admin)

The inspection screen still has an upload area for trials: upload a reference, draw zones, check. Such results have no recipe version. Operators do not see this area.

3 Recipes & Recipe Studio ▶

A recipe is everything needed to inspect one product: reference image, zones and subzones, strictness, notes for operators, and samples of good and defective boards. Recipes are prepared in Recipe Studio (/studio, lead and admin) and used on the inspection screen.

Versions

Each recipe has versions: draft → live → archived. Operators always inspect with the live version. Editing a live recipe opens a new draft; the line keeps the live version until the draft is published. Any archived version can be put back on the line from the version list. Every inspection result stores the recipe version it was checked with.

Studio steps

  • 1 Details: name, barcode mask, shooting plan (zone by zone or whole board), notes for operators, strictness.
  • 2 Reference: see section 2.
  • 3 Zones: see section 4.
  • 4 Good samples: photos of known-good boards.
  • 5 Defect samples: photos of boards with known defects, each labelled with a box.
  • 6 Calibrate: builds the model of normal variation and shows the report (see below).
  • 7 Publish: shows what blocks publishing and makes the draft live.

Samples

Keep the viewpoint consistent. Tall parts (capacitors, relays) look different from different angles, and no alignment can undo that. Shoot the samples the way operators will shoot the boards, all from about the same position and angle. The reference itself may be shot at an angle; what matters is that photos are similar to the good samples. Calibration measures, for every zone, how far each photo's viewpoint is from the typical viewpoint of the good samples, and lists those more than 20° away. While shooting samples, the phone shows the same measure live (see "Viewpoint hint" in the mobile section).

Photograph boards the way operators will: hand-held, normal light. Connect a phone with the QR code in step 4/5 (the phone uses the same camera settings as inspection), or upload from a computer. Each photo is aligned to the reference; the card shows which zones are fully in the frame and any quality problem. Name the phone model: samples must come from different phones. Exclude a photo to keep it without counting it.

For defect samples, open Label and draw a box around each defect on the aligned photo; zone and subzone are detected from the box. Labels survive later zone edits. Defect types: missing, wrong part, shifted, rotated, contamination, damage, other.

Calibration

Click Calibrate in step 6. For every zone the system learns what normal variation looks like from the good samples (differences between boards, phones, light) and checks each defect sample against it. Every good sample is compared with all the others, so the report shows how many false alarms to expect on good boards; a defect is caught when its score is above the OK limit, and the report shows whether the strongest deviation lies inside the box you drew.

The score shows how unusual the most unusual spot of the zone is compared with the good samples; about 1 is typical. The report is a table: one row per zone with its subzones below. Each zone has its own OK limit: type it, or pick a preset: No false alarms (just above the worst good sample), Catch all defects (just below the weakest defect) or Middle. The counts update at once; then Save limits. Explanations are behind the ? buttons; thumbnails open large on click. By default the limit is the worst good sample × 1.10. Between the OK limit and 1.25 × that limit the result is WARN, above it DEFECT. Subzones follow their zone's limit.

Under each zone the report lists samples worth a second look: good samples shot from a different angle than most good samples or scoring far above them, and defect samples shot from a different angle (their score mixes the angle and the defect). One unusual good photo raises the limit for the whole zone; exclude it if it does not show the zone the usual way, then recalibrate. During inspection, a non-OK verdict on a photo taken from an unusual angle suggests a retake. Changing samples, zones or the reference makes the calibration out of date: recalibrate before publishing.

Requirements for publishing

  • At least 15 good samples for every zone.
  • At least 2 defect samples for every zone, and 1 for every critical subzone.
  • Samples from at least 2 different phones.
  • A reference that passed the quality check, and at least one zone.
  • An up-to-date calibration.

If some defect samples pass as OK at the chosen limits, the lead can still publish: tick that the misses are accepted and give a reason. The reason is kept with the version and shown in the version list. Fewer than 3 different good boards and samples shot from an unusual angle are warnings. A lead publishes on their own once nothing blocks; an admin may publish with unmet requirements.

Changing the reference

Samples are tied to the reference they were aligned to. After a new reference, re-align them with one click in step 4; until then they are not counted.

Shared recipes

A recipe without a group is shared: operators of every group can inspect with it. Only admins edit shared recipes in Studio.

Barcode mask

A prefix (e.g. "7334") that validates scanned serial numbers. If the scanned code does not start with it, a "Mask mismatch" warning appears during inspection.

4 Inspection Zones ▶

Zones are drawn in Recipe Studio, step 3, on the recipe's reference image. Click Save zones to store them in the draft.

Draw zones

Click and drag on the reference image. Each zone is labelled ("Zone 1", "Zone 2"…) and colour-coded. Rename it in the zone list, drag the handle to reorder, × to delete.

Anchor points

Click the crosshair in the zone list and place up to 2 anchors. On the phone they help the operator position the board.

Subzones and critical subzones

Click the square icon and draw up to 10 rectangles inside the zone. Subzones get a separate, stricter analysis; the zone status is the worst of the zone and its subzones. Tick critical where any deviation is a defect (a connector pin, a polarised part): every critical subzone needs its own defect sample before publishing. The optional "sens" field sets strictness for that subzone only.

Canvas zoom

Ctrl+scroll or the +/- buttons, 100%–800%.

5 Inspection Process ▶

Serial Number Scanning

Before checking zones, scan a barcode / QR code / DataMatrix for the serial number. Upload a photo from desktop or use the mobile camera. The zone check area is locked until a serial is scanned. The decoded value appears with its type (e.g. QR_CODE, CODE_128).

Taking Zone Photos (Desktop)

Drag and drop one or more zone photos into the upload area, then click "Run Check". Multiple files are processed sequentially with a progress counter ("[1/5]", "[2/5]", etc.).

Zone Matching

Each uploaded photo is automatically matched to the best-fitting zone using a multi-stage pipeline:

  • Global alignment (SIFT or neural network) to warp the input to the reference.
  • Zone crop extraction and SSIM pre-ranking of all zones.
  • Top-3 neural scoring (EfficientNet-B4) for final match.
  • Match score must exceed 0.55 threshold. Otherwise "NO MATCH".
  • Already-OK zones are deprioritized.

Defect Analysis

The matched zone is compared against the reference to detect defects:

  • Neural mode: EfficientNet-B4 patch-based CNN comparison + global similarity + SSIM.
  • OpenCV fallback: CLAHE normalization, SSIM, absolute difference, edge analysis, adaptive thresholding, contour-based measurement.

Output: SSIM score, defect percentage, defect region count, status (OK / WARN / DEFECT), and visualization images (defect map, heatmap, extracted zone, reference crop).

Subzone Analysis

If the zone has subzones defined, each subzone is analyzed separately with stricter thresholds. The zone status = worst of (zone result, all subzone results).

Calibrated recipes

A recipe published with a calibration is inspected with its model of normal variation: the zone is found from the photo's alignment to the reference (no similarity threshold), and the result is OK / WARN / DEFECT from the calibrated limits. The heatmap shows where the photo differs from all good samples. Parts of the zone outside the photo are ignored; at least 90% of the zone must be in the frame. Recipes without calibration are inspected by comparison with the reference as before.

Strictness and recipe version

Thresholds come from the recipe's strictness (see section 1). The recipe badge shows the version in use, and the lead's notes for operators appear under it. Each saved result stores the recipe version.

Result Display

After each check: 5 images (input, reference, extracted, defect map, heatmap), statistics (score, SSIM, defect %), a bar chart of all zone scores, and subzone details if applicable. Click any image for a full-size lightbox.

6 Decisions & Saving Results ▶

Calculated vs Accepted Result

Each zone and subzone has two results:

  • Calculated (auto): determined by the defect analysis algorithm.
  • Accepted (user decision): manually set by the operator via a dropdown.

If the operator overrides the calculated result, the original is shown crossed out with an arrow to the accepted status plus a pencil icon.

Overall Result

The overall inspection status is the worst effective status across all zones. Effective = user zone override > worst subzone override > calculated status. Any DEFECT makes the whole inspection a defect. Any WARN (with no defect) makes it a warning.

User Decision Override

  • Zone-level: dropdown on each zone chip or in the lightbox.
  • Subzone-level: dropdown next to each subzone. Changing subzone decisions recalculates the zone's effective status.

Auto-Accept

Toggle the "auto" switch next to the progress bar. When all zones are OK and auto-accept is ON, the result is auto-saved and a new board starts after 3 seconds.

Close & Save

Click "Close & Save" to save the inspection (complete or partial) and reset for the next board. If a result was auto-saved, it updates with the latest user decisions.

Skip Board

Abandon the current board without saving. Resets the session.

Retry Failed Zones

Clear only non-OK zones for re-photographing without resetting the entire board.

7 Mobile Camera ▶

Connecting

In Step 3, a QR code and URL are shown. Scan with your phone to open the mobile companion page. No separate login required.

Serial Scanning

The "Serial" tab provides live camera barcode scanning. The camera feed shows a scan reticle with an animated scan line. A beep sound plays on successful detection. You can also choose an image from the gallery.

Zone Photos

The "Zone" tab shows which zone to photograph next. Navigate between zones with left/right arrows.

Viewpoint hint

While a zone is being framed, the bottom of the viewfinder shows a live hint: whether the zone is fully in the frame and, for a calibrated recipe, how far the viewpoint is from the typical viewpoint of the recipe's good samples. Green: up to 10°; yellow: up to 20°; red: more. For yellow and red an arrow shows which way to move the phone. It is only a hint; capturing is never blocked. The phone of a lead collecting samples in Recipe Studio shows the same hint, measured against the good samples taken so far (from 3 of them per zone). With many phones framing at once the hints update less often, so that inspections stay fast.

Anchor Alignment

If anchor points are defined for the zone, the camera feed shows dashed guide circles at target positions. Real-time template matching detects anchors in the live video. When aligned (solid green circles + checkmark), press "Capture Zone".

Capture & Upload

Press "Capture Zone" to take a photo. A shutter sound plays. The photo is checked as soon as it is uploaded: the verdict appears on the phone and the full result on the desktop (polls every 1.5 seconds). Multiple photos can also be uploaded from the gallery.

Mobile Actions

  • Skip -> New SN: save current result and start a new board from mobile.
  • Retry Failed: re-scan only failed zones.

The mobile page continuously polls the server (every 5 seconds) to sync state with the desktop.

8 Inspection History ▶

Viewing History

Scroll to the bottom of the page and click "Inspection History" to expand the panel. Each row shows: date, time, serial, template name, operator, zone count, overall status, and inline stats (OK/defect/warn counts, avg score, max defect %). Overridden results have a pencil icon.

Search & Filter

Type in the search box. Format: serial / template / operator. Supports * wildcards. Each part filters the corresponding field. Example: 7334* / Module XY / John.

Detail View

Click a row to expand it. Shows: stats row, doughnut pie chart (OK/Defect/Warn distribution), per-zone score bars, zone image cards with status badges and defect %. Subzone cards shown with a red left border.

Zone Comparison

Click any zone image card to open a full-size side-by-side comparison of the captured photo vs the reference.

Overridden Results in History

When the accepted status differs from the calculated one, the zone card shows: calculated -> accepted. Same for subzones.

Print Passport

Click "Print" on any history row to generate a formal inspection passport document with all metadata, zone table (with overrides shown), score charts, and zone images. Opens the browser print dialog.

Pagination

History loads in pages of 20. Click "Load more" to see older results.

9 Statistics Dashboard ▶

Appears in Step 3 after the first zone is checked. Displays:

  • Summary counters: total checked, OK, Warn, Defect, average SSIM, average defect %.
  • Match scores chart: bar chart of match scores per zone, color-coded by status.
  • Defect % chart: defect percentage per zone.
  • SSIM chart: SSIM per zone (green >= 45%, yellow >= 30%, red < 30%).
  • Data table: zone status, score, SSIM, defect %, defect count.

All charts and counters update in real-time as zones are checked.

10 Progress Tracking & Mini-Map ▶

Zone Status Chips

Color-coded chips below the check panel: green = OK, yellow = WARN, red = DEFECT, blue = unchecked. Shows effective status (with overrides). Click to view that zone's result.

Progress Bar

Shows "N/M zones checked" with a percentage fill bar.

Reference Mini-Map

Small canvas showing the full reference image with zone overlays. Unchecked zones pulsate; checked zones show their status color and a check/warn/defect marker.

Completion Banner

When all zones are checked: "ALL ZONES OK" (green) or "ISSUES FOUND" (yellow). Shows serial number if scanned. Action buttons appear for saving, skipping, or retrying.

11 External API ▶
Your operator access key does NOT work for the external API. A separate API key (prefix apk_) is required. Contact your administrator to obtain one.

Authentication

All requests require the header X-Auth-Key with a valid API key. API keys are read-only — they can only retrieve inspection results and images.

X-Auth-Key: apk_your_key_here

List Results

GET /api/v1/results

Query parameters:

  • from — start date (ISO, e.g. 2026-03-01)
  • to — end date (ISO, e.g. 2026-03-19)
  • serial — serial number filter, supports * wildcard
  • template — template name filter
  • operator — operator name filter
  • status — ok, warn, or defect
  • limit — max results per page (default 50, max 500)
  • offset — skip N results for pagination

Example:

curl -H "X-Auth-Key: apk_..." \
  "https://your-host/api/v1/results?from=2026-03-01&serial=SN-12*&limit=10"

Response:

{
  "total": 42,
  "limit": 10,
  "offset": 0,
  "results": [
    {
      "result_id": "a1b2c3d4_143000",
      "timestamp": "2026-03-19T14:30:00",
      "serial": "SN-1234-2026",
      "template_name": "Module X",
      "operator": "operator1",
      "overall_status": "ok",
      "zones": [
        {
          "label": "U1",
          "status": "ok",
          "score": 0.87,
          "defect_pct": 3.2,
          "image_url": "/api/v1/results/.../images/zone_0.jpg"
        }
      ]
    }
  ]
}

Single Result

GET /api/v1/results/{result_id}

Returns the full inspection record. Add ?images=base64 to embed images as Base64 data URIs directly in the JSON (convenient for single records, but large payloads).

curl -H "X-Auth-Key: apk_..." \
  "https://your-host/api/v1/results/a1b2c3d4_143000?images=base64"

Result Image

GET /api/v1/results/{result_id}/images/{filename}

Returns a JPEG image. The image_url fields in the JSON response point to this endpoint. Use the same API key header.

curl -H "X-Auth-Key: apk_..." -o zone.jpg \
  "https://your-host/api/v1/results/a1b2c3d4_143000/images/zone_0.jpg"

Error Codes

  • 401 — missing or invalid API key
  • 403 — key scope insufficient (e.g. operator key used on /api/v1/)
  • 404 — result or image not found
  • 503 — database unavailable

Full Example (curl)

# 1. Get recent inspections for serial starting with "SN-12"
KEY="apk_Xk9mP2qR7vN4wL5bT8cF"
HOST="https://inspect.metaprodtrace.com"

curl -s -H "X-Auth-Key: $KEY" \
  "$HOST/api/v1/results?from=2026-03-01&serial=SN-12*&limit=5" \
  | python3 -m json.tool
# 2. Get a single result with full details
RID="a1b2c3d4_143000"

curl -s -H "X-Auth-Key: $KEY" \
  "$HOST/api/v1/results/$RID" \
  | python3 -m json.tool
# 3. Download a zone image from that result
curl -H "X-Auth-Key: $KEY" \
  -o zone_photo.jpg \
  "$HOST/api/v1/results/$RID/images/zone_0.jpg"
# 4. Get the same result with images embedded as Base64
curl -s -H "X-Auth-Key: $KEY" \
  "$HOST/api/v1/results/$RID?images=base64" \
  | python3 -m json.tool
# 5. Without a key — expect 401
curl -s "$HOST/api/v1/results"
# {"error": "Unauthorized"}
12 Roles & Access Control

The system uses group-based access control with three user roles and API key scoping.

Roles

admin Full access to everything. No group restriction. Edits all recipes in Recipe Studio, including shared ones; may publish a recipe with unmet requirements; views all results, clears history.
lead Belongs to a group. Prepares, publishes and rolls back recipes of their group in Recipe Studio; may override strictness for trial runs. Views results of own group only.
operator Belongs to a group. Inspects with published recipes (own group + shared) using the recipe's strictness. No Recipe Studio, no ad-hoc references. Views results of own group only.

Groups

Each non-admin user belongs to a group (e.g. "line1", "line2"). Groups isolate data:

-- Recipes with a group are visible only to that group's members.
-- Recipes with no group are shared: every group can inspect with them; only admins edit them.
-- Inspection results are strictly filtered by group.
-- Admin sees everything regardless of group.

API Keys

External API keys (apk_ prefix) also support group scoping:

-- Key with "group": "line1" can only read results from that group.
-- Key without group can read all results.
-- Scope "read" limits to GET requests on /api/v1/* endpoints.

Header Badge

The top-right corner of the interface shows the current user's name, role, and group.

Configuration

{
  "users": {
    "SECRET_KEY": {
      "name": "display_name",
      "role": "admin | lead | operator",
      "group": "group_name"
    }
  },
  "api_keys": {
    "apk_SECRET_KEY": {
      "name": "Integration Name",
      "scope": "read",
      "group": "group_name"
    }
  }
}
Admin users have no "group" field. A lead's recipes get the lead's group; an admin chooses the group when creating a recipe (empty = shared).
Русский
0 О системе ▶

Точность.

Это платформа визуальной инспекции на базе искусственного интеллекта, созданная для устранения человеческого фактора и обеспечения лабораторной точности каждой проверки. Нейросеть, обученная на реальных производственных данных, мгновенно и стабильно выявляет дефекты, отклонения и аномалии.

Скорость.

Задайте зоны интереса, сделайте снимки — и система выполнит анализ. Каждый результат фиксируется, прослеживается и доступен для просмотра в любое время. Операторы получают чёткие вердикты с оценкой уверенности, а руководители — статистику, историю и полный аудиторский след.

Уверенность.

Создано для производства. Доступно с любого устройства — компьютера или телефона. Установка не требуется — просто откройте браузер и начните инспекцию.

Конвейер распознавания

Каждая загруженная фотография проходит многоэтапный конвейер для поиска и анализа совпадающей зоны:

1. Глобальное выравнивание — входное изображение совмещается с эталоном методом SIFT (5000 ключевых точек) с FLANN-матчером и гомографией RANSAC. Это компенсирует угол, положение и масштаб камеры.

2. Сопоставление зон — из выровненного изображения извлекается каждая зона и ранжируется:

  • SSIM-ранжирование — быстрая оценка всех зон; 3 лучших проходят дальше.
  • Нейросетевой скоринг — EfficientNet-B4 считает глобальное косинусное сходство (пулинг layer-7). Лучшее совпадение выше порога 0.55 побеждает.
  • Запасные стратегии — если глобальная гомография не удалась: локальный SIFT для зоны, затем шаблонное сопоставление.

3. Детектирование дефектов — сравниваются эталон и извлечение:

  • CLAHE — нормализация контраста обоих изображений.
  • Глобальное сходство — косинус на признаках EfficientNet-B4 layer-7 (семантический уровень).
  • Карта SSIM — попиксельное структурное сходство для выявления различий.
  • Патч-CNN карта — пространственные признаки layer-5 сравниваются попатчево, формируя тепловую карту сходства.
  • Текстурное взвешивание — плоские области получают пониженный вес для снижения ложных срабатываний.
  • Вердикт — взвешенный % дефектов vs. пороги чувствительности: OK / WARN / DEFECT.

Итоговое сходство = 50% глобальный косинус (layer 7) + 50% патч-косинус (layer 5).

4. Анализ подзон — подзоны используют ужесточённые пороги и HSV-гистограммное сравнение для выявления полностью отличающихся компонентов. Вердикт зоны = наихудший статус среди подзон.

5. Блендинг эталона — модуль auto-blend выравнивает несколько фотографий через SIFT (с обнаружением штрихкодов/QR как опорных точек) и усредняет их попиксельно для получения чистого эталона.

OpenCV-фоллбэк: при отсутствии нейродвижка система использует CLAHE + SSIM + анализ рёбер + контурное измерение.
1 Начало работы ▶

Вход в систему

Откройте URL приложения. На странице входа введите ключ доступа, выданный администратором. Ключ привязан к имени оператора. Сеанс сохраняется 30 дней.

Обзор интерфейса

Операторы работают на экране инспекции:

  • Шаг 1 — Recipe: выбор опубликованного рецепта (название, версия, маска штрихкода).
  • Шаг 3 — Check: сканирование серийного номера, фото зон, просмотр результатов и сохранение.

У ведущих и админов есть ещё Recipe Studio (ссылка в шапке) для подготовки рецептов и быстрая проверка без рецепта (Шаг 2 — Zones) для проб.

Нажатие на индикатор Шаг 1 в любой момент сбрасывает сессию и возвращает к началу.

Строгость

Строгость проверки задаётся в рецепте (значения для зон и подзон 0.00–2.00, по умолчанию 0.50 / 0.51; больше = строже). Оператор не может её менять. Ведущий и админ могут отметить Override в шапке для пробного прогона; без отметки используются значения рецепта.

2 Эталон ▶

Эталон относится к рецепту и задаётся в Recipe Studio, шаг 2 (см. раздел 3). У каждой версии рецепта свой эталон.

Проверка качества

Каждый эталон проверяется на резкость, экспозицию и разрешение. Красная оценка блокирует публикацию, жёлтая — предупреждение. Используйте резкое, равномерно освещённое фото заведомо исправной платы, снятое так же, как будут снимать операторы.

Склейка нескольких фото

«Blend several photos…» выравнивает 2+ снимка одной платы (SIFT, при необходимости по штрихкоду/QR) и усредняет их. Это уменьшает шум и блики.

Быстрая проверка без рецепта (ведущий / админ)

На экране инспекции осталась область загрузки для пробных проверок: эталон, зоны, проверка. У таких результатов нет версии рецепта. Операторы эту область не видят.

3 Рецепты и Recipe Studio ▶

Рецепт — всё, что нужно для контроля одного изделия: эталон, зоны и подзоны, строгость, заметки для операторов и образцы исправных и бракованных плат. Рецепты готовятся в Recipe Studio (/studio, ведущий и админ) и используются на экране инспекции.

Версии

У рецепта есть версии: черновик → на линии → архив. Операторы всегда проверяют по версии на линии. Правка рецепта открывает новый черновик, а линия работает на текущей версии, пока черновик не опубликуют. Любую архивную версию можно вернуть на линию из списка версий. Каждый результат инспекции хранит номер версии рецепта.

Шаги Studio

  • 1 Details: название, маска штрихкода, план съёмки (по зонам или плата целиком), заметки для операторов, строгость.
  • 2 Reference: см. раздел 2.
  • 3 Zones: см. раздел 4.
  • 4 Good samples: фото заведомо исправных плат.
  • 5 Defect samples: фото плат с известными дефектами, каждый отмечен рамкой.
  • 6 Calibrate: строит модель нормы и показывает отчёт (см. ниже).
  • 7 Publish: показывает, что мешает публикации, и выпускает черновик на линию.

Образцы

Держите ракурс одинаковым. Высокие детали (конденсаторы, реле) с разных сторон выглядят по-разному, и никакое выравнивание этого не исправит. Снимайте образцы так, как операторы будут снимать платы: примерно с одного места и под одним углом. Эталон сам может быть снят под углом; важно, чтобы снимки были похожи на хорошие образцы. Калибровка для каждой зоны измеряет, насколько ракурс снимка отличается от типичного ракурса хороших образцов, и показывает те, что отличаются больше чем на 20°. При съёмке образцов телефон показывает ту же меру вживую (см. «Подсказка ракурса» в разделе о мобильной странице).

Снимайте так же, как будут снимать операторы: с рук, при обычном свете. Подключите телефон по QR-коду на шаге 4/5 (телефон использует те же настройки камеры, что и при инспекции) или загрузите фото с компьютера. Каждое фото выравнивается по эталону; на карточке видно, какие зоны целиком в кадре, и проблемы качества. Указывайте модель телефона: образцы должны быть с разных телефонов. «Exclude» оставляет фото, но не учитывает его.

Для дефектных образцов откройте Label и обведите каждый дефект рамкой на выровненном фото; зона и подзона определяются по рамке. Разметка сохраняется при последующей правке зон. Типы дефектов: missing (нет компонента), wrong part (чужой), shifted (смещён), rotated (повёрнут), contamination (загрязнение), damage (повреждение), other.

Калибровка

Нажмите Calibrate на шаге 6. Для каждой зоны система узнаёт по хорошим образцам, как выглядит нормальный разброс (разные платы, телефоны, свет), и проверяет каждый дефектный образец. Каждый хороший образец сравнивается со всеми остальными, поэтому отчёт показывает, сколько ложных тревог ждать на исправных платах; дефект пойман, если его оценка выше порога OK, и отчёт показывает, попало ли самое сильное отклонение в нарисованную рамку.

Оценка показывает, насколько необычно самое необычное место зоны по сравнению с хорошими образцами; около 1 — обычное значение. Отчёт — таблица: строка на зону, под ней её подзоны. У каждой зоны свой порог OK: введите число или выберите готовое значение: No false alarms (чуть выше худшего хорошего образца), Catch all defects (чуть ниже самого слабого дефекта) или Middle (посередине). Цифры обновляются сразу, затем Save limits. Пояснения спрятаны под кнопками ?; миниатюры открываются крупно по клику. По умолчанию порог — худший хороший образец × 1.10. Между порогом OK и 1.25 × порог — WARN, выше — DEFECT. Подзоны следуют порогу своей зоны.

Под каждой зоной отчёт показывает образцы, на которые стоит взглянуть: хорошие, снятые с другого ракурса, чем большинство хороших, или с оценкой намного выше остальных, и дефектные, снятые с другого ракурса (их оценка смешивает ракурс и дефект). Один необычный хороший снимок поднимает порог для всей зоны; исключите его, если зона на нём видна не так, как обычно, и откалибруйте заново. При инспекции к вердикту не OK для снимка с необычного ракурса добавляется совет переснять. Изменение образцов, зон или эталона делает калибровку устаревшей: перед публикацией откалибруйте заново.

Требования для публикации

  • Не меньше 15 хороших образцов на каждую зону.
  • Не меньше 2 дефектных образцов на каждую зону и 1 на каждую критичную подзону.
  • Образцы минимум с 2 разных телефонов.
  • Эталон прошёл проверку качества, есть хотя бы одна зона.
  • Актуальная калибровка.

Если при выбранных порогах часть дефектных образцов проходит как OK, ведущий всё равно может опубликовать: отметить, что пропуски приняты, и указать причину. Причина сохраняется вместе с версией и видна в списке версий. Меньше 3 разных исправных плат и образцы, снятые с необычного ракурса, — предупреждения. Ведущий публикует сам, когда ничего не блокирует; админ может опубликовать и с невыполненными требованиями.

Смена эталона

Образцы привязаны к эталону, по которому выровнены. После замены эталона выровняйте их заново одной кнопкой на шаге 4; до этого они не учитываются.

Общие рецепты

Рецепт без группы — общий: по нему могут проверять операторы всех групп. Править общие рецепты в Studio может только админ.

Маска штрихкода

Префикс (например «7334»), по которому проверяются серийные номера. Если код не начинается с маски, при инспекции появляется предупреждение «Mask mismatch».

4 Зоны инспекции ▶

Зоны рисуются в Recipe Studio, шаг 3, на эталоне рецепта. Нажмите Save zones, чтобы сохранить их в черновике.

Рисование зон

Кликните и протяните мышью по эталону. Зоны нумеруются («Zone 1», «Zone 2»…) и раскрашиваются. Переименование — в списке зон, порядок — перетаскиванием за ручку, удаление — ×.

Якорные точки

Нажмите значок прицела в списке зон и поставьте до 2 якорей. На телефоне они помогают оператору расположить плату.

Подзоны и критичные подзоны

Нажмите значок квадрата и нарисуйте до 10 прямоугольников внутри зоны. Подзоны анализируются отдельно и строже; статус зоны — худший из зоны и её подзон. Отметьте critical там, где любое отклонение — брак (вывод разъёма, полярный компонент): для каждой критичной подзоны перед публикацией нужен свой дефектный образец. Необязательное поле «sens» задаёт строгость только для этой подзоны.

Масштаб холста

Ctrl+scroll или кнопки +/-, 100%–800%.

5 Процесс инспекции ▶

Сканирование серийного номера

Перед проверкой зон отсканируйте штрихкод / QR-код / DataMatrix для идентификации объекта. Загрузите фото с ПК или используйте мобильную камеру. Проверка зон заблокирована до сканирования. Распознанное значение отображается с типом кода (QR_CODE, CODE_128 и т.д.).

Фото зон (с ПК)

Перетащите одно или несколько фото зон в область загрузки, нажмите "Run Check". Файлы обрабатываются последовательно со счётчиком прогресса ("[1/5]", "[2/5]" и т.д.).

Сопоставление зон

Каждое фото автоматически сопоставляется с наиболее подходящей зоной через многоэтапный анализ:

  • Глобальное выравнивание (SIFT или нейросеть) входного фото по эталону.
  • Вырезка областей зон и предварительное SSIM-ранжирование.
  • Топ-3 нейронный скоринг (EfficientNet-B4) для финального выбора.
  • Порог совпадения: 0.55. Ниже — "NO MATCH".
  • Уже проверенные (ОК) зоны имеют пониженный приоритет.

Анализ дефектов

Сопоставленная зона сравнивается с эталоном:

  • Нейросетевой режим: EfficientNet-B4, патч-анализ CNN, глобальное сходство, SSIM.
  • OpenCV-фоллбек: CLAHE нормализация, SSIM, абсолютная разница, анализ краёв, адаптивная пороговая обработка, контурное измерение площади.

Результат: SSIM, % дефектов, количество регионов, статус (OK / WARN / DEFECT), визуализация (карта дефектов, тепловая карта, вырезанная зона, эталонный кроп).

Анализ подзон

Если у зоны есть подзоны — каждая анализируется отдельно с более строгими порогами. Итоговый статус зоны = наихудший из (статус зоны, все статусы подзон).

Отображение результатов

После каждой проверки: 5 изображений (вход, эталон, вырезка, карта дефектов, тепловая карта), статистика, столбчатая диаграмма оценок всех зон, подзоны (если есть). Клик по изображению — полноразмерный просмотр в лайтбоксе.

Откалиброванные рецепты

Рецепт, опубликованный с калибровкой, проверяется по модели нормы: зона находится по выравниванию фото на эталон (без порога похожести), результат OK / WARN / DEFECT — по порогам калибровки. Тепловая карта показывает, где фото отличается от всех хороших образцов. Части зоны вне кадра не учитываются; в кадре должно быть не меньше 90% зоны. Рецепты без калибровки проверяются сравнением с эталоном, как раньше.

Строгость и версия рецепта

Пороги берутся из строгости рецепта (см. раздел 1). На плашке рецепта видна используемая версия, под ней — заметки ведущего для операторов. Каждый сохранённый результат хранит версию рецепта.

6 Решения и сохранение результатов ▶

Расчётный и принятый результат

У каждой зоны и подзоны два результата:

  • Расчётный (авто): определён алгоритмом анализа дефектов.
  • Принятый (решение оператора): вручную установлен оператором через выпадающий список.

Если оператор изменил результат, исходный отображается зачёркнутым со стрелкой к принятому статусу и значком карандаша.

Общий результат

Итоговый статус инспекции — наихудший эффективный статус всех зон. Эффективный = переопределение зоны > наихудшее переопределение подзон > расчётный. Любой DEFECT делает всю инспекцию дефектной. Любой WARN (без дефектов) — предупреждение.

Переопределение решения

  • Уровень зоны: выпадающий список на чипе зоны или в лайтбоксе.
  • Уровень подзоны: выпадающий список рядом с каждой подзоной. Изменение пересчитывает эффективный статус зоны.

Авто-принятие

Переключатель "auto" рядом с прогресс-баром. Когда все зоны OK и авто-принятие включено — результат автоматически сохраняется и через 3 секунды начинается новый объект.

Закрыть и сохранить

"Close & Save" — сохраняет инспекцию (полную или частичную) и сбрасывает для следующего объекта.

Пропустить объект

Отменить текущий объект без сохранения. Сессия сбрасывается.

Перепроверить дефектные

Очищает только не-ОК зоны для повторной съёмки без сброса всей инспекции.

7 Мобильная камера ▶

Подключение

В Шаге 3 отображаются QR-код и URL. Отсканируйте телефоном для открытия мобильной страницы. Отдельный вход не требуется.

Сканирование серийного номера

Вкладка "Serial" — живая камера со сканирующей рамкой и анимированной линией. При распознавании звучит сигнал. Также можно выбрать фото из галереи.

Фото зон

Вкладка "Zone" показывает какую зону нужно снять. Переключение между зонами стрелками влево/вправо.

Подсказка ракурса

Пока зона наводится, внизу видоискателя видна подсказка: целиком ли зона в кадре и, для откалиброванного рецепта, насколько ракурс отличается от типичного ракурса хороших образцов рецепта. Зелёный — до 10°, жёлтый — до 20°, красный — больше. Для жёлтого и красного стрелка показывает, куда сдвинуть телефон. Это только подсказка, снимать можно всегда. Телефон ведущего при съёмке образцов в Recipe Studio показывает ту же подсказку относительно уже снятых хороших образцов (от 3 на зону). Когда наводятся сразу много телефонов, подсказки обновляются реже, чтобы проверки оставались быстрыми.

Выравнивание по якорям

Если у зоны заданы якорные точки — на видео камеры показываются штриховые круги-ориентиры. В реальном времени определяются позиции якорей на изображении. При совпадении (зелёные круги + галочка) — можно снимать.

Съёмка и загрузка

"Capture Zone" — снимок. Звук затвора. Фото проверяется сразу при загрузке, вердикт появляется на телефоне, полный результат — на десктопе (опрос каждые 1,5 секунды). Также можно загрузить несколько фото из галереи.

Действия с мобильного

  • Skip -> New SN: сохранить текущий результат и начать новый объект.
  • Retry Failed: пересканировать только дефектные зоны.

Мобильная страница опрашивает сервер каждые 5 секунд для синхронизации состояния с десктопом.

8 История инспекций ▶

Просмотр истории

Прокрутите страницу вниз и нажмите "Inspection History" для раскрытия панели. Каждая строка: дата, время, серийный номер, шаблон, оператор, количество зон, итоговый статус, краткая статистика (OK/defect/warn, ср. оценка, макс. % дефектов). Переопределённые результаты помечены значком карандаша.

Поиск и фильтрация

Введите в строку поиска. Формат: серийник / шаблон / оператор. Поддерживается * как подстановка. Каждая часть фильтрует соответствующее поле. Пример: 7334* / Module XY / John.

Детальный просмотр

Нажмите на строку для раскрытия: ряд статистики, кольцевая диаграмма (OK/Defect/Warn), столбцы оценок зон, карточки изображений с бейджами статуса и % дефектов. Карточки подзон имеют красную левую границу.

Сравнение зон

Нажмите на карточку изображения зоны — откроется полноразмерное сравнение снимка и эталона бок о бок.

Переопределения в истории

Если принятый статус отличается от расчётного, на карточке зоны: расчётный -> принятый. Аналогично для подзон.

Печать паспорта

Кнопка "Print" на строке истории — генерирует формальный документ инспекции со всеми метаданными, таблицей зон (с переопределениями), графиками, изображениями зон. Открывает диалог печати браузера.

Пагинация

История загружается по 20 записей. "Load more" для просмотра старых результатов.

9 Панель статистики ▶

Появляется в Шаге 3 после проверки первой зоны. Содержит:

  • Счётчики: всего проверено, OK, Warn, Defect, средний SSIM, средний % дефектов.
  • Диаграмма оценок: столбчатый график оценок совпадения зон, цвет по статусу.
  • Диаграмма дефектов: % дефектов по зонам.
  • Диаграмма SSIM: SSIM по зонам (зелёный >= 45%, жёлтый >= 30%, красный < 30%).
  • Таблица: зона, статус, оценка, SSIM, % дефектов, количество дефектных областей.

Все графики и счётчики обновляются в реальном времени по мере проверки зон.

10 Прогресс и мини-карта ▶

Чипы статуса зон

Цветные чипы под панелью проверки: зелёный = OK, жёлтый = WARN, красный = DEFECT, синий = не проверена. Показывает эффективный статус (с учётом переопределений). Клик — просмотр результата зоны.

Прогресс-бар

Показывает "N/M зон проверено" с процентным заполнением.

Мини-карта эталона

Маленький холст с полным видом эталона и наложением зон. Непроверенные зоны пульсируют; проверенные показывают статусный цвет и маркер.

Баннер завершения

При проверке всех зон: "ALL ZONES OK" (зелёный) или "ISSUES FOUND" (жёлтый). Показывает серийный номер. Кнопки для сохранения, пропуска или перепроверки.

11 Внешний API ▶
Ваш ключ оператора НЕ подходит для внешнего API. Требуется отдельный API-ключ (префикс apk_). Обратитесь к администратору для его получения.

Авторизация

Все запросы требуют заголовок X-Auth-Key с действующим API-ключом. API-ключи работают только на чтение — получение результатов инспекций и изображений.

X-Auth-Key: apk_ваш_ключ

Список результатов

GET /api/v1/results

Параметры запроса:

  • from — дата начала (ISO, напр. 2026-03-01)
  • to — дата окончания (ISO, напр. 2026-03-19)
  • serial — фильтр по серийному номеру, поддержка *
  • template — фильтр по имени шаблона
  • operator — фильтр по оператору
  • status — ok, warn или defect
  • limit — макс. результатов на страницу (по умолч. 50, макс. 500)
  • offset — пропустить N результатов (пагинация)

Пример:

curl -H "X-Auth-Key: apk_..." \
  "https://your-host/api/v1/results?from=2026-03-01&serial=SN-12*&limit=10"

Ответ:

{
  "total": 42,
  "limit": 10,
  "offset": 0,
  "results": [
    {
      "result_id": "a1b2c3d4_143000",
      "timestamp": "2026-03-19T14:30:00",
      "serial": "SN-1234-2026",
      "template_name": "Module X",
      "operator": "operator1",
      "overall_status": "ok",
      "zones": [
        {
          "label": "U1",
          "status": "ok",
          "score": 0.87,
          "defect_pct": 3.2,
          "image_url": "/api/v1/results/.../images/zone_0.jpg"
        }
      ]
    }
  ]
}

Один результат

GET /api/v1/results/{result_id}

Возвращает полную запись инспекции. Добавьте ?images=base64 для встраивания изображений в JSON как Base64 (удобно для одиночных записей, но большой объём данных).

curl -H "X-Auth-Key: apk_..." \
  "https://your-host/api/v1/results/a1b2c3d4_143000?images=base64"

Изображение результата

GET /api/v1/results/{result_id}/images/{filename}

Возвращает JPEG-изображение. Поля image_url в JSON-ответе указывают на этот эндпоинт. Используйте тот же API-ключ в заголовке.

curl -H "X-Auth-Key: apk_..." -o zone.jpg \
  "https://your-host/api/v1/results/a1b2c3d4_143000/images/zone_0.jpg"

Коды ошибок

  • 401 — отсутствует или недействителен API-ключ
  • 403 — недостаточные права (напр. ключ оператора на /api/v1/)
  • 404 — результат или изображение не найдены
  • 503 — база данных недоступна

Полный пример (curl)

# 1. Получить недавние инспекции для серийника начинающегося с "SN-12"
KEY="apk_Xk9mP2qR7vN4wL5bT8cF"
HOST="https://inspect.metaprodtrace.com"

curl -s -H "X-Auth-Key: $KEY" \
  "$HOST/api/v1/results?from=2026-03-01&serial=SN-12*&limit=5" \
  | python3 -m json.tool
# 2. Получить один результат с полными данными
RID="a1b2c3d4_143000"

curl -s -H "X-Auth-Key: $KEY" \
  "$HOST/api/v1/results/$RID" \
  | python3 -m json.tool
# 3. Скачать изображение зоны из этого результата
curl -H "X-Auth-Key: $KEY" \
  -o zone_photo.jpg \
  "$HOST/api/v1/results/$RID/images/zone_0.jpg"
# 4. Получить результат с изображениями встроенными как Base64
curl -s -H "X-Auth-Key: $KEY" \
  "$HOST/api/v1/results/$RID?images=base64" \
  | python3 -m json.tool
# 5. Без ключа — ожидаем 401
curl -s "$HOST/api/v1/results"
# {"error": "Unauthorized"}
12 Роли и управление доступом

Система использует групповое управление доступом с тремя ролями пользователей и привязкой API-ключей к группам.

Роли

admin Полный доступ ко всему. Без ограничений по группе. Правит все рецепты в Recipe Studio, включая общие; может опубликовать рецепт с невыполненными требованиями; видит все результаты, очищает историю.
lead Принадлежит группе. Готовит, публикует и откатывает рецепты своей группы в Recipe Studio; может переопределить строгость для пробного прогона. Видит результаты только своей группы.
operator Принадлежит группе. Проверяет по опубликованным рецептам (своей группы + общим) со строгостью из рецепта. Нет доступа к Recipe Studio и собственным эталонам. Видит результаты только своей группы.

Группы

Каждый не-admin пользователь принадлежит группе (например "line1", "line2"). Группы изолируют данные:

-- Рецепты с группой видны только участникам этой группы.
-- Рецепты без группы — общие: по ним проверяют все группы, правит только админ.
-- Результаты инспекций строго фильтруются по группе.
-- Admin видит все, независимо от группы.

API-ключи

Внешние API-ключи (префикс apk_) тоже поддерживают привязку к группе:

-- Ключ с "group": "line1" читает результаты только этой группы.
-- Ключ без группы читает все результаты.
-- Scope "read" ограничивает GET-запросами на /api/v1/* эндпоинты.

Бейдж в хедере

В правом верхнем углу интерфейса отображаются имя, роль и группа текущего пользователя.

Конфигурация

{
  "users": {
    "СЕКРЕТНЫЙ_КЛЮЧ": {
      "name": "отображаемое_имя",
      "role": "admin | lead | operator",
      "group": "имя_группы"
    }
  },
  "api_keys": {
    "apk_СЕКРЕТНЫЙ_КЛЮЧ": {
      "name": "Имя интеграции",
      "scope": "read",
      "group": "имя_группы"
    }
  }
}
У admin-пользователей нет поля "group". Рецепты ведущего получают его группу; админ выбирает группу при создании рецепта (пусто = общий).