Перейти до основного вмісту

Каталог кодів помилок.

Neat повідомляє про виявлені помилки за допомогою NeatError та PullError. Кожне повідомлення про помилку містить стабільний код помилки, зрозуміле для користувача повідомлення та, за наявності, GraphReport зі структурованим контекстом.

Використовуйте код помилки для програмної обробки. Показуйте повідомлення розробнику. Повний набір публічних констант міститься у файлі pipeline/ErrorCodes.h.

Зміна поведінки, що впливає на сумісність, та інструкції з міграції.

Діагностична таксономія тепер зберігає конкретні GStreamer основні причини. Публічні інтерфейси методів не змінилися, але код, який порівнює точні рядки помилок, можливо, потрібно буде оновити:

Попередній результатТепер повертається більш точний кодМіграція
misconfig.caps є причиною помилки під час узгодження в середовищі виконання GStreamer,misconfig.media_caps, або misconfig.media_format, коли несумісним є лише формат. Обробляйте кодек медіа. Залиште misconfig.caps лише для перевірки в рамках фреймворку, що стосується перевизначень параметрів і суміжних контрактів вузлів.
build.parse_launch для кожної помилки gst_parse_launchbuild.plugin_missing, build.property_invalid або build.pipeline_syntaxОбробляйте конкретні коди помилок. Використовуйте build.parse_launch як резервний варіант для некласифікованої помилки парсера.
runtime.pull для випадку поширеної помилки шиниКод основної причини, такий як misconfig.media_caps, io.rtsp_connection_failed або resource.output_pool_exhaustedОбробляйте коди основних причин і зберігайте основну гілку. runtime.pull залишається резервним варіантом для локальної помилки під час отримання даних, коли немає конкретної причини.

Замість повторюваних рядкових літералів використовуйте константи C++ або Python. Завжди зберігайте шлях за замовчуванням для коду, доданого в новішій версії Neat Library.

Публічні константи

Обидва мовні API містять однакові значення:

Код помилкиC++Python
misconfig.pipeline_shapeerror_codes::kPipelineShapepyneat.ERROR_PIPELINE_SHAPE
misconfig.capserror_codes::kCapspyneat.ERROR_CAPS
misconfig.input_shapeerror_codes::kInputShapepyneat.ERROR_INPUT_SHAPE
misconfig.runtime_abi_mismatcherror_codes::kRuntimeAbiMismatchpyneat.ERROR_RUNTIME_ABI_MISMATCH
misconfig.graph_element_nameerror_codes::kGraphElementNamepyneat.ERROR_GRAPH_ELEMENT_NAME
misconfig.media_capserror_codes::kMediaCapspyneat.ERROR_MEDIA_CAPS
misconfig.media_formaterror_codes::kMediaFormatpyneat.ERROR_MEDIA_FORMAT
misconfig.input_capacityerror_codes::kInputCapacitypyneat.ERROR_INPUT_CAPACITY
misconfig.tensor_dtype_missingerror_codes::kTensorDtypeMissingpyneat.ERROR_TENSOR_DTYPE_MISSING
misconfig.option_out_of_rangeerror_codes::kOptionOutOfRangepyneat.ERROR_OPTION_OUT_OF_RANGE
build.parse_launcherror_codes::kParseLaunchpyneat.ERROR_PARSE_LAUNCH
build.pipeline_syntaxerror_codes::kPipelineSyntaxpyneat.ERROR_PIPELINE_SYNTAX
build.plugin_missingerror_codes::kPluginMissingpyneat.ERROR_PLUGIN_MISSING
build.property_invaliderror_codes::kPropertyInvalidpyneat.ERROR_PROPERTY_INVALID
runtime.pullerror_codes::kRuntimePullpyneat.ERROR_RUNTIME_PULL
runtime.element_failederror_codes::kRuntimeElementFailedpyneat.ERROR_RUNTIME_ELEMENT_FAILED
runtime.output_timeouterror_codes::kOutputTimeoutpyneat.ERROR_OUTPUT_TIMEOUT
runtime.unexpected_eoserror_codes::kUnexpectedEospyneat.ERROR_UNEXPECTED_EOS
io.parseerror_codes::kIoParsepyneat.ERROR_IO_PARSE
io.openerror_codes::kIoOpenpyneat.ERROR_IO_OPEN
io.file_not_founderror_codes::kFileNotFoundpyneat.ERROR_FILE_NOT_FOUND
io.permission_deniederror_codes::kPermissionDeniedpyneat.ERROR_PERMISSION_DENIED
io.rtsp_connection_failederror_codes::kRtspConnectionFailedpyneat.ERROR_RTSP_CONNECTION_FAILED
io.camera_not_founderror_codes::kCameraNotFoundpyneat.ERROR_CAMERA_NOT_FOUND
io.model_not_founderror_codes::kModelNotFoundpyneat.ERROR_MODEL_NOT_FOUND
io.source_endederror_codes::kSourceEndedpyneat.ERROR_SOURCE_ENDED
codec.invalid_h264_streamerror_codes::kInvalidH264Streampyneat.ERROR_INVALID_H264_STREAM
codec.decode_failederror_codes::kDecodeFailedpyneat.ERROR_DECODE_FAILED
codec.encode_failederror_codes::kEncodeFailedpyneat.ERROR_ENCODE_FAILED
resource.memory_allocation_failederror_codes::kMemoryAllocationFailedpyneat.ERROR_MEMORY_ALLOCATION_FAILED
resource.device_memory_exhaustederror_codes::kDeviceMemoryExhaustedpyneat.ERROR_DEVICE_MEMORY_EXHAUSTED
resource.output_pool_exhaustederror_codes::kOutputPoolExhaustedpyneat.ERROR_OUTPUT_POOL_EXHAUSTED
resource.buffer_too_smallerror_codes::kBufferTooSmallpyneat.ERROR_BUFFER_TOO_SMALL
resource.disk_fullerror_codes::kDiskFullpyneat.ERROR_DISK_FULL
infra.dispatcher_unavailableerror_codes::kDispatcherUnavailablepyneat.ERROR_DISPATCHER_UNAVAILABLE
infra.accelerator_execution_failederror_codes::kAcceleratorExecutionFailedpyneat.ERROR_ACCELERATOR_EXECUTION_FAILED
DispatcherUnavailable (застаріла версія)error_codes::kDispatcherUnavailableLegacypyneat.ERROR_DISPATCHER_UNAVAILABLE_LEGACY
internal.plugin_failureerror_codes::kInternalPluginFailurepyneat.ERROR_INTERNAL_PLUGIN_FAILURE

Неправильне налаштування.

КодВиникає, колиЩо робити
misconfig.pipeline_shapeУ графі є недійсний топологічний зв’язок або відсутні вхідні/вихідні граничні вузли.Виправте з’єднання графа та додайте необхідні вузли Input або Output.
Під час перевірки фреймворку неможливо використовувати одночасну зміну параметрів або сусідній контракт вузла. misconfig.capsУзгодьте оголошений формат, розміри, частоту та сусідній контракт вузла.
misconfig.input_shapeТензор вхідних даних не відповідає очікуваній формі або типу даних.Надайте очікувані вхідні дані або налаштуйте попередню обробку моделі через параметри моделі.
misconfig.runtime_abi_mismatchNeat і встановлений плагін середовища виконання використовує несумісні ABI.Встановіть відповідні. Neat Library та збірки плагінів для середовища виконання.
misconfig.graph_element_nameУ спеціальному фрагменті міститься елемент, якому неможливо присвоїти стабільне ім’я вузла.Присвоюйте спеціальним елементам стабільні, унікальні імена.
misconfig.media_capsПідключені GStreamer етапи вимагають несумісних параметрів медіа.Узгодьте етапи або вставте необхідний вузол для конвертації, масштабування або зміни частоти кадрів.
misconfig.media_formatЗ’єднані етапи вимагають несумісних форматів медіафайлів.Налаштуйте спільний формат або додайте явне перетворення форматів.
misconfig.input_capacityЗображення-джерело перевищує встановлену максимальну ємність вхідних даних для попередньої обробки.Збільште значення input_max_width та input_max_height, або зменште розмір зображення-джерела перед передачею в модель.
misconfig.tensor_dtype_missingУ визначенні тензорної операції відсутній тип даних або формат.Вкажіть підтримуваний тип даних у визначенні тензорної операції.
misconfig.option_out_of_rangeОбраний параметр є недійсним для поточного вхідного контракту.Встановіть для параметра значення в діапазоні, який показує діагностичний інструмент.

Помилки під час збірки.

КодВиникає, колиЩо робити
Не вдалося створити згенерований конвеєр build.parse_launch.Перевірте налаштований фрагмент, властивості елементів і наявність плагінів GStreamer.
build.pipeline_syntaxУ фрагменті GStreamer виявлено синтаксичну помилку.Виправте фрагмент і перевірте його за допомогою gst-launch-1.0.
build.plugin_missingНеобхідний елемент або кодек GStreamer недоступний.Встановіть або замініть компонент, а потім перевірте його за допомогою gst-inspect-1.0.
build.property_invalidНазва або значення властивості елемента є недійсними.Перевірте властивість за допомогою gst-inspect-1.0 <element>.

Помилки під час виконання (у середовищі виконання).

КодВиникає, колиЩо робити
Операція завантаження даних завершується невдало через відсутність більш конкретного коду помилки. runtime.pull Перевірте прикріплений звіт і першу помилку, що виникла у вихідному джерелі.
runtime.element_failedЕтап конвеєра зупиняється без більш конкретної класифікації.Виправте конфігурацію вказаного етапу та його вхідні дані.
runtime.output_timeoutВідсутність виводу до закінчення встановленого часу очікування.Перевірте потік даних і механізм регулювання швидкості передачі, або відрегулюйте час очікування, якщо очікується, що дані будуть доступні пізніше.
runtime.unexpected_eosКонвеєр досягає кінця вхідних даних (EOS) до того, як буде створено необхідний вихід.Перевірте вхідні дані на наявність передчасного завершення (EOS) і переконайтеся, що було надано достатню кількість вхідних даних.

Помилки вводу/виводу.

КодВиникає, колиЩо робити
io.parseNeat не може обробити JSON, шаблон контракту або конфігурацію етапу.Перевірте синтаксис, схему та обов’язкові поля конфігурації.
io.openNeat не вдалося відкрити файл, пристрій або віддалений ресурс.Перевірте шлях або адресу, права доступу та наявність ресурсів.
io.file_not_foundВхідний файл не існує.Перевірте шлях до файлу та переконайтеся, що файл існує в DevKit.
io.permission_deniedНе вдалося відкрити файл або пристрій із необхідним рівнем доступу.Виправте права власності або дозволи для зазначеного ресурсу.
Не вдалося встановити з’єднання з джерелом RTSP. io.rtsp_connection_failedПеревірте URL-адресу, сервер, доступність мережі та облікові дані.Neat не може підключитися до джерела RTSP.
io.camera_not_foundЗапитана камера недоступна.Виберіть доступну камеру або використовуйте камеру за замовчуванням.
io.model_not_foundЗапитний архів моделі не знайдено.Перевірте шлях до моделі та переконайтеся, що архів встановлено.
io.source_endedДжерело вхідних даних досягло свого звичайного кінця.Припиніть отримувати дані з цього джерела або надайте додаткові дані, якщо застосунок вимагає більше інформації.

Збої під час матеріалізації конвеєра.

КодВиникає, колиЩо робити
misconfig.pipeline_shapeТопологія конвеєра недійсна, або назви кінцевих елементів дублюються, є неоднозначними або відсутні після створення GStreamer.Присвоюйте кожному явному елементу унікальну коротку назву в межах його матеріалізованого сегмента. Підтримуйте синхронізацію між оголошеннями name= та посиланнями на іменовані вхідні/вихідні порти.
build.parse_launchGStreamer не може проаналізувати або створити кінцевий рядок запуску, оскільки синтаксис, плагін або властивість є недійсними.Перевірте GraphReport::pipeline_string; перевірте фрагмент за допомогою gst-launch-1.0 і плагін за допомогою gst-inspect-1.0.

Ці перевірки виконуються автоматично під час Graph::build(). Для сегментів, які залежать від вхідних даних і є з’єднаними, той самий код і GraphReport можуть з’явитися, коли перший набір вхідних даних генерує цей сегмент.

Збої в роботі кодеків.

КодВиникає, колиЩо робити
codec.invalid_h264_streamВхідні дані не містять жодного дійсного H.264-кадру.Надайте повний H.264-потік і перевірте налаштований кодек.
codec.decode_failedДекодер не може декодувати отриманий потік даних.Перевірте кодек і переконайтеся, що вхідні дані, які потрібно закодувати, є повними та не пошкодженими.
codec.encode_failedКодек не може обробити надані кадри.Перевірте формат вхідних даних, роздільну здатність і налаштування кодека.

Збої в роботі ресурсів.

КодВиникає, колиЩо робити
resource.memory_allocation_failedВиникла помилка під час виділення необхідного обсягу пам’яті, і причина не пов’язана з конкретним пристроєм.Зменште кількість потоків, роздільну здатність або обсяг буфера, а також звільніть пам’ять, яку використовують інші програми.
resource.device_memory_exhaustedНедостатньо суміжної пам’яті пристрою для DMA/CMA.Зменште кількість одночасних потоків, роздільну здатність вхідного сигналу або глибину буфера.
Усі буфери виводу залишаються в активному стані. resource.output_pool_exhaustedНегайно звільняйте ресурси, що використовуються для виводу даних без копіювання, або використовуйте копії, якими ви володієте.
resource.buffer_too_smallБуфер менший за оголошений розмір кадру або тензора.Відкоригуйте розміри та крок у вихідному коді або виділіть необхідну кількість байтів.
resource.disk_fullОперація запису не вдалася, оскільки в місці призначення недостатньо вільного місця.Звільніть місце або оберіть інше місце призначення.

Збої в роботі інфраструктури.

КодВиникає, колиЩо робити
infra.dispatcher_unavailableNeat не може отримати доступ до середовища виконання прискорювача.Переконайтеся у сумісності з DevKit і зупиніть робочі навантаження, які ексклюзивно використовують прискорювач.
Виникла помилка під час виконання етапу моделі прискорювачем. infra.accelerator_execution_failedПрискорювач не може виконати етап моделі.Перезапустіть конвеєр і зменште кількість одночасних завдань, що виконуються прискорювачем.

Внутрішні збої.

КодВиникає, колиЩо робити
internal.plugin_failureПлагін Neat не працює, і при цьому відсутня класифікація, яка б дозволила користувачеві вирішити проблему.Збережіть прикріплений GraphReport і повідомте про помилку в службу підтримки.

DispatcherUnavailable – це застаріле написання, яке використовується для забезпечення сумісності. У нових застосунках слід використовувати infra.dispatcher_unavailable та константу error_codes::kDispatcherUnavailable.

Обробляйте помилки програмним шляхом.

#include "pipeline/ErrorCodes.h"
#include "pipeline/NeatError.h"

try {
auto run = graph.build();
// Push and pull application data.
} catch (const simaai::neat::NeatError& error) {
if (error.report().error_code == simaai::neat::error_codes::kInputShape) {
handle_input_contract_error(error.report());
} else {
throw;
}
}

PullError.code використовує ті самі константи. Не потрібно аналізувати what() або зіставляти його з текстом, зрозумілим для людини.

Для подальшого ознайомлення