В данном обзоре рассматривается reComputer AI Industrial R2135-12 от Seeed Studio. Это промышленный граничный компьютер, построенный на платформе Raspberry Pi Compute Module 5. Данная модель сконфигурирована с 8 ГБ памяти LPDDR4 и 32 ГБ встроенной памяти eMMC. Устройство предлагает широкий набор вариантов ввода-вывода, включая два порта Gigabit Ethernet, USB 3.0/USB 2.0, выход HDMI, а также промышленные интерфейсы, такие как RS-485/RS-232, CAN и GPIO, вместе с поддержкой Wi-Fi и Bluetooth и широким диапазоном входного напряжения постоянного тока, подходящим для промышленных условий.

В дополнение к стандартной проверке и тестированию устройства, также будет представлено практическое демонстрационное приложение, в котором система запускает модель искусственного интеллекта для детектирования людей в реальном времени с USB-камеры, а затем отправляет результаты обнаружения на внешний микроконтроллер ESP32 для управления светодиодными матрицами с целью визуального выделения местоположения обнаруженных людей. Для быстрой демонстрации производительности системы искусственного интеллекта модели reComputer R2135-12 было снято следующее видео на YouTube. Продолжайте чтение, чтобы узнать, как это было реализовано.
Для этого обзора система была оставлена близко к заводскому состоянию. Помимо установки базовых инструментов тестирования, таких как inxi, sbc-bench и Geekbench, использовалось только предустановленное программное обеспечение, без обновлений системы или установки дополнительных пакетов, чтобы оценить готовность устройства к работе прямо из коробки.
Распаковка reComputer Industrial R2135-12
Посылка была отправлена из Китая в Таиланд и прибыла примерно через 10 дней в прочной картонной коробке, содержимое которой было хорошо защищено с помощью коричневой измельченной бумаги в качестве наполнителя. Внутри коробки все компоненты были аккуратно упакованы и надежно зафиксированы, что предотвратило любое заметное перемещение во время транспортировки. Ниже приведен полный список полученных компонентов.
- reComputer Industrial R2135-12
- Крепежные кронштейны
- Винты для кронштейнов
- Клипса для DIN-рейки
- Адаптер с гнездового разъема питания постоянного тока на клеммную колодку с винтовыми зажимами
- Адаптер питания 12В/3А (с 4 сменными вилками адаптера)
- Клеммный разъем на 15*2 пина (папа)
- Резисторы 120 Ом
- Антенна Wi-Fi/BLE
- Руководство пользователя (не на фото)


Первая настройка и использование
Устройство весит около 1,3 кг, и при первом поднятии оно показалось немного тяжелее, чем ожидалось. Основной корпус выполнен из алюминия, который служит одновременно прочным защитным кожухом и пассивным радиатором. На нижней панели наклейка идентифицирует устройство как reComputer Industrial R2135-12.


На основе соглашения об именовании, описанного в официальной документации , это подтверждает, что полученное устройство построено на базе Raspberry Pi Compute Module 5, оснащено 8 ГБ оперативной памяти и 32 ГБ встроенной памяти eMMC. Оно также включает поддержку беспроводных сетей и встроенный AI-акселератор Hailo-8.
Разборка
Устройство было разобрано для осмотра внутренних компонентов путем откручивания четырех винтов на нижней панели, что позволило снять боковые панели. Затем была аккуратно приподнята верхняя панель для осмотра внутренностей. Однако антенна Wi-Fi была прочно прикреплена к панели, а между нижней панелью и некоторыми компонентами на основной плате, по-видимому, был нанесен термоинтерфейс. Чтобы не нарушать эти соединения, все было оставлено как есть, как показано на изображениях ниже.




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

Включение устройства
Согласно руководству пользователя, устройство поддерживает два варианта подачи питания: вход через клеммную колодку постоянного тока (9–36 В постоянного тока) и порт PoE мощностью 30 Вт. Вход через клеммную колодку постоянного тока рекомендуется при питании требовательных периферийных устройств или нескольких внешних устройств. Для данного обзора устройство было запитано с помощью предоставленной 2-пиновой клеммной колодки, подключенной к входящему в комплект адаптеру питания 12В/3А, как показано на изображении ниже. Устройство не имеет физической кнопки питания и автоматически запускается сразу после подачи питания, поэтому его всегда следует правильно выключать через операционную систему.

Полученное устройство поставляется с предустановленным готовым к использованию образом системы Raspberry Pi OS, что позволяет использовать его прямо из коробки. На изображениях ниже показан рабочий стол операционной системы по умолчанию и вывод htop, отображающий некоторые процессы, запущенные по умолчанию.


Согласно документации, пользователи могут перепрошить образ системы, используя официальные файлы образов, предоставленные на официальном GitHub , выбрав опцию reComputer-R2x-arm64 . Подробные пошаговые инструкции по использованию rpiboot вместе с Raspberry Pi Imager для перепрошивки системы доступны в руководстве пользователя. Пользователи также могут установить Ubuntu на reComputer Industrial R2135-12, следуя официальному руководству по установке Ubuntu на Raspberry Pi для записи загруженного образа. Подробные шаги по установке для reComputer также приведены в руководстве пользователя.
Проверка стандартных функций с помощью командной строки
Руководство пользователя включает несколько инструкций для тестирования через командную строку, таких как запрос состояния выводов GPIO, сканирование сетей Wi-Fi и переключение пользовательского светодиода. Была запущена подборка этих команд, и все они работали как ожидалось. Вывод ниже показывает результат запроса соответствия выводов GPIO.
cat /sys/kernel/debug/gpio
...
gpiochip0: GPIOs 569-622, parent: platform/1f000d0000.gpio, pinctrl-rp1:
gpio-569 (ID_SDA |spi2 CS0 ) out hi ACTIVE LOW
gpio-570 (ID_SCL )
gpio-571 (GPIO2 )
gpio-572 (GPIO3 )
gpio-573 (GPIO4 |spi3 CS0 ) out hi ACTIVE LOW
gpio-574 (GPIO5 )
gpio-575 (GPIO6 )
gpio-576 (GPIO7 )
gpio-577 (GPIO8 )
gpio-578 (GPIO9 |sysfs ) in hi
gpio-579 (GPIO10 )
gpio-580 (GPIO11 )
gpio-581 (GPIO12 )
gpio-582 (GPIO13 )
gpio-583 (GPIO14 )
gpio-584 (GPIO15 )
gpio-585 (GPIO16 )
gpio-586 (GPIO17 )
gpio-587 (GPIO18 )
gpio-588 (GPIO19 )
gpio-589 (GPIO20 )
gpio-590 (GPIO21 )
gpio-591 (GPIO22 )
gpio-592 (GPIO23 )
gpio-593 (GPIO24 |spi2 CS1 ) out hi ACTIVE LOW
gpio-594 (GPIO25 |spi3 CS1 ) out hi ACTIVE LOW
gpio-595 (GPIO26 )
gpio-596 (GPIO27 )
...
Далее был протестирован пользовательский RGB-светодиод, установив фиолетовый цвет, что было достигнуто включением красного и зеленого светодиодов с помощью следующей команды.

Тестирование пользовательского светодиода.
ls /sys/class/leds/
recomputer@reComputer-R2x:/sys/class/leds $ ls
ACT input21::capslock input21::kana input21::scrolllock led-green mmc0 mmc1::
default-on input21::compose input21::numlock led-blue led-red mmc0:: PWR
echo 1 > /sys/class/leds/led-red//brightness
echo 1 > /sys/class/leds/led-blue/brightness
Сканирование Wi-Fi также работало как ожидалось.
recomputer@reComputer-R2x:~ $ sudo iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: 9C:63:5B:CD:36:ED
Channel:157
Frequency:5.785 GHz
Quality=37/70 Signal level=-73 dBm
Encryption key:on
ESSID:"JUDA_TP_5GHz"
Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
36 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
...
Cell 02 - Address: 9C:63:5B:FD:36:EC
Channel:9
Frequency:2.452 GHz (Channel 9)
Quality=51/70 Signal level=-59 dBm
Encryption key:on
ESSID:"JUDA_TP"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
18 Mb/s; 36 Mb/s; 54 Mb/s
Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
Mode:Master
...
Cell 03 - Address: 9E:63:5B:FD:36:ED
Channel:157
Frequency:5.785 GHz
Quality=36/70 Signal level=-74 dBm
Encryption key:on
ESSID:""
Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
36 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
...
Результаты сканирования Bluetooth показаны ниже.
sudo bluetoothctl
scan on
[bluetooth]# scan on
Discovery started
[CHG] Controller 88:A2:9E:31:39:96 Discovering: yes
[NEW] Device 8C:DF:2C:AA:BF:CA vivo Y27 5G
[CHG] Device 8C:DF:2C:AA:BF:CA RSSI: -51
Последний тест в этом разделе сосредоточен на проверке функциональности цифрового выхода (DO). Это было сделано простым измерением напряжения на выводе GPIO638 (DO1) с помощью мультиметра, которое корректно переключалось между 0 В и приблизительно 1 В при изменении уровня вывода между низким и высоким с использованием следующих инструкций в командной строке.
echo 638 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio638/direction
echo 1 > /sys/class/gpio/gpio638/value
echo 0 > /sys/class/gpio/gpio638/value
Информация о системе
Далее была установлена и запущена утилита командной строки inxi для проверки базовой информации о системе, вывод показан ниже.
recomputer@reComputer-R2x:~ $ inxi -F
System:
Host: reComputer-R2x Kernel: 6.12.34+rpt-rpi-2712 arch: aarch64 bits: 64
Desktop: LabWC Distro: Debian GNU/Linux 12 (bookworm)
Machine:
Type: ARM System: Raspberry Pi Compute Module 5 Rev 1.0 details: N/A
rev: d04180 serial: d2f02181ab20c2b1
CPU:
Info: quad core model: N/A variant: cortex-a76 bits: 64 type: MCP cache:
L2: 2 MiB
Speed (MHz): avg: 2400 min/max: 1500/2400 cores: 1: 2400 2: 2400 3: 2400
4: 2400
Graphics:
Device-1: bcm2712-hdmi0 driver: vc4_hdmi v: N/A
Device-2: bcm2712-hdmi1 driver: vc4_hdmi v: N/A
Display: wayland server: X.org v: 1.21.1.7 with: Xwayland v: 22.1.9
compositor: LabWC driver:
gpu: vc4-drm,vc4_crtc,vc4_dpi,vc4_dsi,vc4_firmware_kms,vc4_hdmi,vc4_hvs,vc4_txp,vc4_v3d,vc4_vec
resolution: 1920x1080~60Hz
API: OpenGL v: 3.1 Mesa 24.2.8-1~bpo12+rpt3 renderer: V3D 7.1.10.2
Audio:
Device-1: bcm2712-hdmi0 driver: vc4_hdmi
Device-2: bcm2712-hdmi1 driver: vc4_hdmi
API: ALSA v: k6.12.34+rpt-rpi-2712 status: kernel-api
Server-1: PipeWire v: 1.2.7 status: active
Network:
Device-1: Raspberry Pi RP1 PCIe 2.0 South Bridge driver: rp1
IF: wlan0 state: down mac: 88:a2:9e:31:39:95
Device-2: Microchip (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
type: USB driver: smsc95xx
IF: eth1 state: down mac: 2c:f7:f1:22:ee:3d
IF-ID-1: can0 state: down mac: N/A
IF-ID-2: can1 state: down mac: N/A
IF-ID-3: eth0 state: up speed: 1000 Mbps duplex: full
mac: 88:a2:9e:31:39:94
Bluetooth:
Device-1: bcm7271-uart driver: bcm7271_uart
Report: hciconfig ID: hci0 state: up address: 88:A2:9E:31:39:96 bt-v: 3.0
Drives:
Local Storage: total: 29.12 GiB used: 7.8 GiB (26.8%)
ID-1: /dev/mmcblk0 type: Removable vendor: Samsung model: BJTD4R
size: 29.12 GiB
Partition:
ID-1: / size: 28.08 GiB used: 7.72 GiB (27.5%) fs: ext4 dev: /dev/mmcblk0p2
Swap:
ID-1: swap-1 type: file size: 512 MiB used: 0 KiB (0.0%) file: /var/swap
Sensors:
System Temperatures: cpu: 47.9 C mobo: N/A
Fan Speeds (RPM): N/A
Info:
Processes: 270 Uptime: 11m Memory: 7.88 GiB used: 2.21 GiB (28.1%)
gpu: 8 MiB Shell: Bash inxi: 3.3.26
Отчет подтверждает, что система основана на Raspberry Pi Compute Module 5 Rev 1.0, работает под управлением Debian GNU/Linux 12 (bookworm) с ядром 6.12.34+rpt-rpi-2712 на 64-битной архитектуре ARM (aarch64). Четырехъядерный процессор Cortex-A76 работает на частоте до 2,4 ГГц, с масштабированием между 1,5 и 2,4 ГГц, и все четыре ядра работали на максимальной частоте на момент отчета. Система включает 7,88 ГБ оперативной памяти, из которых примерно 23–28% использовалось вскоре после загрузки, и 29,12 ГБ локального хранилища, из которых около 27% уже было занято. Температура процессора около 47–48 °C свидетельствует о стабильном тепловом поведении при небольшой нагрузке.
Со стороны графики устройство использует графический процессор Broadcom BCM2712 (VC4/V3D) с Mesa 24.2.8, поддерживающий OpenGL 3.1 и выводящий изображение на дисплей 1920 × 1080 @ 60 Гц через HDMI. Рабочий стол работает в среде Wayland (LabWC) с включенным Xwayland. Для сетевого взаимодействия во время теста был активен интерфейс Gigabit Ethernet (eth0), в то время как дополнительные интерфейсы Ethernet, Wi-Fi, CAN и Bluetooth присутствовали, но были неактивны на тот момент. Аудиовыход осуществляется через HDMI с использованием ALSA, а в фоновом режиме работает PipeWire.
В целом, эти заявленные аппаратные и программные детали соответствуют рекламируемым характеристикам reComputer Industrial R2135-12, включая платформу Compute Module 5, четырехъядерный процессор Cortex-A76 и конфигурацию с 8 ГБ памяти.
Тестирование производительности
SBC-Bench
Далее была установлена и запущена утилита sbc-bench , которая успешно завершилась, пройдя все проверки. Результаты показали отсутствие троттлинга процессора или подкачки (swapping), стабильные тактовые частоты, достигающие заявленного максимума, и приемлемую фоновую активность на протяжении всего теста.
Производительность памяти была стабильной на всех ядрах Cortex-A76: пропускная способность memcpy составила около 5,1 ГБ/с, а memset — около 8,5 ГБ/с. Задержка памяти оставалась очень низкой в пределах диапазонов кэша (примерно 1,7 нс) и плавно увеличивалась по мере роста размера буфера, достигая примерно 120–135 нс для очень больших буферов.
...
Memory performance (all 8 CPU clusters measured individually):
memcpy: 5149.2 MB/s (Cortex-A76)
memset: 8584.0 MB/s (Cortex-A76)
memcpy: 5148.8 MB/s (Cortex-A76)
memset: 8577.6 MB/s (Cortex-A76)
memcpy: 5143.4 MB/s (Cortex-A76)
memset: 8584.4 MB/s (Cortex-A76)
memcpy: 5145.6 MB/s (Cortex-A76)
memset: 8585.5 MB/s (Cortex-A76)
memcpy: 5154.8 MB/s (Cortex-A76)
memset: 8585.6 MB/s (Cortex-A76)
memcpy: 5133.8 MB/s (Cortex-A76)
memset: 8577.9 MB/s (Cortex-A76)
memcpy: 5149.0 MB/s (Cortex-A76)
memset: 8576.4 MB/s (Cortex-A76)
memcpy: 5149.6 MB/s (Cortex-A76)
memset: 8590.0 MB/s (Cortex-A76)
...
32k: 1.691 1.690 1.690 1.690 1.690 1.691 1.692 3.296
64k: 1.701 1.697 1.701 1.697 1.700 1.700 1.702 3.303
128k: 5.072 5.071 5.071 5.073 5.071 5.769 7.212 12.81
256k: 5.426 5.259 5.251 5.216 5.251 5.837 7.288 12.82
512k: 7.258 7.734 7.469 7.737 7.159 8.220 9.185 15.00
1024k: 17.89 17.10 17.78 17.10 17.68 17.87 20.00 29.25
2048k: 19.21 18.72 18.64 18.72 18.74 19.88 23.22 31.64
4096k: 76.75 78.28 77.24 78.45 76.25 89.41 120.7 159.3
8192k: 119.0 102.7 104.4 103.1 102.8 109.7 142.4 193.9
16384k: 113.6 112.0 113.4 112.9 112.9 118.7 143.9 162.7
32768k: 126.9 123.9 125.8 123.5 125.4 126.6 131.4 141.6
65536k: 129.4 126.8 128.7 126.7 128.7 127.8 130.5 133.9
131072k: 129.8 128.5 129.6 128.5 129.6 128.5 129.8 132.5
...
Что касается вычислительных нагрузок, тест 7-Zip сообщает о многопоточных общих оценках примерно в 11 100 по повторным запускам и об одноядерной оценке около 3 121, что демонстрирует стабильную и повторяемую производительность сжатия и распаковки.
...
7-zip total scores (3 consecutive runs): 11110,11136,11131, single-threaded: 3121
...
В криптографических тестах результаты OpenSSL являются высокими и стабильными на всех ядрах: пропускная способность AES-128-CBC близка к 1,88 ГБ/с, AES-192-CBC — около 1,57 ГБ/с, а AES-256-CBC — приблизительно 1,35 ГБ/с при больших размерах блоков. В целом, результаты sbc_bench_2_c.txt представляют собой последовательный и проверенный профиль производительности, выделяя стабильное поведение процессора, надежную пропускную способность памяти, предсказуемое масштабирование задержки, а также надежную целочисленную и криптографическую производительность.
...
OpenSSL results (all 8 CPU clusters measured individually):
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-128-cbc 594976.14k 1290786.28k 1694330.03k 1827406.51k 1881746.09k 1886972.59k (Cortex-A76)
aes-128-cbc 595541.14k 1291237.40k 1693894.83k 1828485.12k 1881284.61k 1887262.04k (Cortex-A76)
aes-128-cbc 596013.89k 1289307.41k 1694745.86k 1827424.94k 1881426.60k 1887447.72k (Cortex-A76)
aes-128-cbc 595018.13k 1293503.04k 1694060.89k 1826374.66k 1881770.67k 1887300.27k (Cortex-A76)
aes-128-cbc 598141.49k 1291072.23k 1694859.86k 1827430.40k 1881655.98k 1887485.95k (Cortex-A76)
aes-128-cbc 598797.65k 1289548.05k 1694564.52k 1826965.50k 1881718.78k 1887327.57k (Cortex-A76)
aes-128-cbc 594819.94k 1290364.86k 1696595.46k 1827517.78k 1881795.24k 1887431.34k (Cortex-A76)
aes-128-cbc 595902.32k 1289898.33k 1695651.93k 1827775.15k 1881655.98k 1887316.65k (Cortex-A76)
aes-192-cbc 562560.68k 1124640.34k 1432901.29k 1518641.83k 1569901.23k 1573453.82k (Cortex-A76)
aes-192-cbc 562473.23k 1124936.36k 1432863.06k 1518676.99k 1569764.69k 1573306.37k (Cortex-A76)
aes-192-cbc 564201.12k 1124473.24k 1433254.57k 1518724.44k 1569559.89k 1573650.43k (Cortex-A76)
aes-192-cbc 563271.49k 1125458.18k 1432898.47k 1518941.18k 1569434.28k 1573557.59k (Cortex-A76)
aes-192-cbc 561526.78k 1123707.39k 1433080.75k 1518962.69k 1569876.65k 1573759.66k (Cortex-A76)
aes-192-cbc 563839.60k 1124952.77k 1432805.12k 1518688.60k 1569884.84k 1573726.89k (Cortex-A76)
aes-192-cbc 561921.38k 1124819.56k 1432981.25k 1518673.92k 1569901.23k 1573765.12k (Cortex-A76)
aes-192-cbc 563001.52k 1124441.58k 1432818.69k 1517664.60k 1569540.78k 1573694.12k (Cortex-A76)
aes-256-cbc 548336.69k 998419.99k 1242847.57k 1316564.65k 1346516.31k 1349380.78k (Cortex-A76)
aes-256-cbc 547503.40k 998072.36k 1242349.57k 1316630.87k 1346502.66k 1347960.83k (Cortex-A76)
aes-256-cbc 547646.89k 998284.86k 1241602.13k 1316511.40k 1346497.19k 1349074.94k (Cortex-A76)
aes-256-cbc 539631.60k 992004.89k 1239950.42k 1315208.19k 1345888.26k 1349211.48k (Cortex-A76)
aes-256-cbc 547980.23k 998398.10k 1242483.54k 1316303.19k 1346377.05k 1349167.79k (Cortex-A76)
aes-256-cbc 547453.64k 999679.94k 1242614.87k 1316233.22k 1346546.35k 1349326.17k (Cortex-A76)
aes-256-cbc 547551.88k 998091.35k 1242746.37k 1316634.28k 1346527.23k 1349266.09k (Cortex-A76)
aes-256-cbc 547312.89k 998043.54k 1241990.14k 1316261.21k 1346543.62k 1349413.55k (Cortex-A76)
...
В целом, результаты показывают, что устройство обеспечивает стабильное поведение процессора, надежную пропускную способность памяти, предсказуемое масштабирование задержки и надежную целочисленную и криптографическую производительность.
Тестирование производительности файловой системы с iozone
Также было проведено тестирование производительности файловой системы с использованием iozone для оценки производительности ввода-вывода хранилища в условиях прямого доступа. Тест был настроен с размером файла 512 МБ и большими размерами записей 1 МБ и 16 МБ, результаты показаны ниже.
...
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
File size set to 524288 kB
Record Size 1024 kB
Record Size 16384 kB
Command line used: iozone -e -I -a -s 512M -r 1024k -r 16384k -i 0 -i 1 -i 2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
524288 1024 83964 95051 319753 320757 319815 78884
524288 16384 81408 77665 334355 332469 333798 76082
...
Производительность последовательного чтения была стабильной для обоих размеров записей, составляя приблизительно 320–337 МБ/с. Результаты повторного чтения и случайного чтения находились в том же диапазоне, что указывает на стабильную пропускную способность чтения при повторяющихся шаблонах доступа. Производительность последовательной записи достигла примерно 100–111 МБ/с для обоих размеров записей, при этом пропускная способность случайной записи показала аналогичные значения. В целом, эти результаты указывают на высокую и стабильную пропускную способность при чтении, а также на умеренную и повторяемую производительность записи при тестировании с включенным прямым вводом-выводом.
Тестирование производительности с Geekbench 6.5
Далее была установлена и запущена версия Geekbench 6.5.0. Система показала одноядерный результат 865 и многоядерный результат 1982, что отражает общую производительность ее процессора. Полные результаты теста можно посмотреть по ссылке на результат Geekbench .
Одноядерный тест Geekbench 6 выдал общий результат 865, при этом большинство суб-тестов находились в диапазоне 800 с небольшим. Более высокая одноядерная производительность была отмечена в компиляции Clang, Horizon Detection, Navigation и PDF Rendering, в то время как общие нагрузки, такие как Text Processing, HDR, HTML5 браузинг, Ray Tracing и Structure from Motion, оставались близкими к среднему значению. Более требовательные задачи, связанные с компьютерным зрением, в частности Object Detection и Object Remover, показали заметно более низкие результаты.

Многоядерные результаты отражают, насколько хорошо система масштабируется на все ядра процессора при параллельных нагрузках. Высокие результаты были достигнуты в Asset Compression, Ray Tracing и компиляции Clang, что указывает на эффективное использование нескольких ядер для ресурсоемких вычислений. Другие нагрузки, такие как PDF Rendering, Structure from Motion, Navigation, Background Blur, Photo Library и HDR, также выиграли от параллельного выполнения, в то время как задачи, такие как Text Processing, HTML5 браузинг и Object Detection, показали более умеренное масштабирование.

В целом, многоядерный результат примерно в 2,3 раза выше одноядерного, что ясно показывает преимущество распределения нагрузок по нескольким ядрам процессора. Задачи, которые показывают результат в середине 800 в одноядерном режиме, обычно превышают 2000 в многоядерных тестах, а некоторые преодолевают 3000, в то время как нагрузки, такие как Object Detection и Object Remover, улучшаются, но остаются относительно низкими из-за ограничений производительности на одно ядро.
Тестирование производительности веб-браузера с Speedometer 3.1
Далее было использовано приложение Speedometer 3.1 для тестирования производительности двух веб-браузеров, предустановленных в образе ОС. Оба браузера показали очень похожие результаты Speedometer.
Для Chromium тест Speedometer сообщил о среднем результате около 4,16, с результатами, тесно сгруппированными по запускам, и средним геометрическим временем выполнения примерно 240 мс, что указывает на стабильную производительность браузера. Большая часть времени выполнения была потрачена на задачи, интенсивно использующие JavaScript и DOM, такие как сложные обновления пользовательского интерфейса и отрисовка графиков.
Firefox показал очень похожие результаты и сравнительно низкое отклонение между запусками, снова соответствуя среднему геометрическому времени выполнения в том же диапазоне ~240 мс. Небольшая разница между двумя браузерами находится в пределах нормальной вариации теста и не указывает на какой-либо значительный разрыв в производительности, что позволяет предположить, что оба предлагают практически одинаковую производительность веб-приложений в этой системе.


Небольшая разница между Chromium и Firefox находится в пределах нормальной вариации теста и не указывает на значительный разрыв в производительности; в целом, оба браузера обеспечивают практически одинаковую производительность веб-приложений в этой системе.
Тестирование производительности воспроизведения видео на YouTube
Далее было протестировано воспроизведение YouTube путем проигрывания видео 4K в полноэкранном режиме на мониторе 4K (3840 × 2160) с включенной функцией «Статистика для гиков». Воспроизведение было плавным и стабильным от 144p до 1080p, без наблюдаемых потерь кадров. Однако варианты разрешения выше 1080p были недоступны.
При низких разрешениях (144p–360p) воспроизведение работало на скромных битрейтах и постоянно поддерживало длительное состояние буфера, часто около 120 секунд, что указывает на достаточный запас производительности декодирования и сети даже при масштабировании на большой 4K-дисплей. При более высоких разрешениях (480p–1080p) воспроизведение оставалось надежным в той же конфигурации дисплея, скорость соединения масштабировалась соответствующим образом, а состояние буфера оставалось в комфортном диапазоне, обычно от 30 до 120 секунд. Даже при 1080p/30 система поддерживала плавное воспроизведение без потерь кадров, демонстрируя стабильное поведение декодирования видео и буферизации для всех обычно используемых разрешений YouTube.






Тестирование производительности 3D-рендеринга веб-браузера с использованием WebGL
Далее была оценена производительность 3D-рендеринга веб-браузера с использованием демо WebGL Aquarium в веб-браузере Chromium.
При фиксированном размере холста 1024 × 1024 результаты показали четкое и предсказуемое масштабирование производительности по мере увеличения сложности сцены. При малом количестве объектов производительность была отличной: сцена работала со стабильными 60 кадрами в секунду при 1–100 рыбах, оставалась близкой к реальному времени при 500 рыбах (~54 кадра/с) и все еще обеспечивала приемлемую плавность при 1000 рыб (~48 кадров/с). По мере дальнейшего увеличения количества рыб частота кадров неуклонно снижалась, достигая около 29 кадров/с при 5000 рыбах, где анимация начала ощутимо терять плавность.

При более тяжелых нагрузках ограничения графического процессора стали более очевидными. При 10 000 рыб частота кадров упала примерно до 16 кадров/с, снизившись дальше примерно до 11 кадров/с при 15 000 рыб и 8 кадров/с при 20 000 рыб. Чрезвычайно плотные сцены с 25 000–30 000 рыб снизили производительность до примерно 6–7 кадров/с, что явно выходит за рамки рендеринга в реальном времени. В целом, эти результаты показали, что Chromium может плавно справляться с умеренными нагрузками WebGL, но производительность быстро снижается по мере увеличения вызовов отрисовки и нагрузки на фрагментный шейдер, подчеркивая ограничения графического процессора, а не нестабильность браузера. Итоговый график ниже сравнивает частоту кадров в этих сценариях.


Тестирование AI-ускорителя Hailo-8
Мой промышленный компьютер reComputer Industrial R2135-12 был оснащен предустановленным AI-ускорителем Hailo-8, со всеми необходимыми библиотеками и пакетами, уже установленными и готовыми к использованию. Для тестирования примеров Hailo для Raspberry Pi 5 достаточно было выполнить скрипт настройки окружения по пути /mnt/hailo-rpi5-examples/setup_env.sh, который активировал предопределенную виртуальную среду и настроил все необходимые пути для среды выполнения Hailo-8. После активации окружения система была немедленно готова к запуску примеров приложений и задач вывода (inference) для Hailo-8 без какой-либо дополнительной настройки. Все предоставленные примеры скриптов на Python были построены на GStreamer и его внутренних конвейерах, которые обрабатывали видеопоток, обработку видео и AI-вывод.

Для тестирования этих примеров начал со скрипта simple_detection.py — облегченной демонстрации детектирования, разработанной для минимизации нагрузки на CPU. Некоторые полезные параметры командной строки включали --input для выбора источника входного сигнала (например, видеофайла или подключенной USB-вебкамеры) и --show-fps для наложения информации о частоте кадров на видео. При конфигурации по умолчанию, предоставленной в примерах Hailo-8, скрипт работает на примере видеофайла с предустановленным ограничением частоты кадров. В консольном выводе отображаются детали детектирования, такие как показатели достоверности (confidence) для каждого обнаруженного объекта. В целом, демонстрация работала стабильно с частотой приблизительно 30 кадров в секунду (FPS). На следующем изображении показаны результаты работы скрипта simple_detection.py .

Изображение ниже показывает результат запуска полного детектирования с использованием скрипта-примера detection.py.

Вот результаты запуска скрипта instance_segmentation.py , который работал, как и ожидалось, достигая аналогичных 30 FPS при конфигурации по умолчанию.

Примерный скрипт depth_estimation.py основан на модели оценки глубины SCDepthV3 и также показал очень хорошие результаты.

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

Демонстрация варианта использования — определение местоположения людей в ограниченной зоне
В этом разделе продемонстрирована AI-производительность reComputer Industrial R2135-12 путем обнаружения людей в видеопотоке и оценки местоположения каждого человека в реальных координатах в реальном времени. Обнаруженные позиции затем были отображены на внешней светодиодной матрице 8×16, управляемой платой разработки на основе ESP32, что эффективно служило простым LED-«планом этажа» для визуализации местоположения людей.
Стоит отметить, что в настройке реального времени для точной оценки положения обычно потребовался бы интерактивный графический интерфейс, позволяющий пользователям щелкать по кадру видео для сбора опорных точек для калибровки. Из-за ограничений по времени этот шаг был пропущен, и вместо этого использовалось предварительно записанное видео, сфокусировавшись на демонстрации вычислительных и AI-возможностей самого reComputer.
Теоретическая основа
Следующий рисунок кратко иллюстрирует концепцию восстановления реальных координат из точек изображения. В этом примере предполагается, что плоскость земли известна и что реальные координаты двух опорных точек, A и B, заданы. Их соответствующие местоположения на изображении также могут быть идентифицированы, обозначены как точка-a и точка-b. Имея эту информацию и зная пирамиду видимости камеры (показана как желтый треугольник на рисунке), можно оценить положение и ориентацию камеры. Основываясь на этой настройке, если объект лежит на плоскости земли и его местоположение на изображении может быть определено (например, точка-c), его реальные координаты могут быть восстановлены путем обратного проецирования луча (показан оранжевым) из центра камеры через точку-c на изображении и нахождения пересечения этого луча с плоскостью земли.

Следующее изображение показывает пример того, как можно оценить координаты основания штатива, когда внутренние параметры камеры были известны вместе с четырьмя опорными точками на земле. В этой настройке начало отсчета (0, 0) было определено в центральной точке между точками A–D, при этом каждый квадрат плитки пола имел размер 60 × 60 см. Фактическое расположение основания штатива было приблизительно (0, −60, 0) в мировых координатах. Основываясь на этой конфигурации, оцененное положение штатива (0.3, -59.4, 0.0) близко соответствовало ожидаемому реальному местоположению, демонстрируя точность этого простого подхода к восстановлению координат.

Настройка сцены и оценка позы камеры
Сначала была выполнена калибровка камеры с использованием набора изображений шахматной доски и функций калибровки камеры OpenCV для получения внутренних параметров (fx, fy, cx, cy) вместе с коэффициентами дисторсии объектива (k1, k2, p1, p2, k3).
fx = 3238.6635331929683
fy = 3241.0613554172223
cx = 2042.009749715308
cy = 925.2763732253052
k1 = 0.2523496972079927
k2 = -1.4002772998133683
p1 = 0.002290276484551306
p2 = -0.0014385064745750323
k3 = 2.7815419705574613
Затем была подготовлена тестовая сцена, как показано на изображении ниже, где синяя лента обозначала начало отсчета (0, 0). Ось +X была определена вдоль направления A–B, а ось +Y — вдоль направления A–D. После этого было записано видео сцены и вручную извлечен кадр для идентификации нескольких опорных точек. Используя эту информацию, была оценена трансформация камеры с помощью функций Python, основанных на методах оценки позы Perspective-n-Point (PnP) OpenCV .


Ниже приведена функция, использованная для оценки позы камеры.
def estimate_camera_poses(pts_img, pts_world, camera_matrix, dist_coeffs):
print("-------------------------------------")
n_image_points = pts_img.shape
n_object_points = pts_world.shape
poses = []
image_points = pts_img
objp = pts_world.reshape(-1, 1, 3)
imgp = pts_img.reshape(-1, 1, 2)
success, rvec, tvec = cv2.solvePnP(
objp,
imgp,
camera_matrix,
dist_coeffs)
R, _ = cv2.Rodrigues(rvec)
pose = numpy.hstack((R, tvec)) # 3x4 matrix
poses.append({
'rotation_vector': rvec,
'translation_vector': tvec,
"rotation_matrix": R,
'pose_matrix': pose
})
return poses
Это оцененная информация о вращении и смещении камеры.
R = [[ 0.02303737 -0.99858007 0.04803245],
[-0.31316605 -0.05283524 -0.94822754],
[ 0.94941893 0.00680254 -0.31393856]]
t = [-211.98, 101.39, 121.58]
Матрицу вращения было сложнее интерпретировать напрямую, в то время как вектор смещения был гораздо понятнее. В данном случае он указывал на то, что камера была расположена приблизительно в 2,1 м от точки A вдоль отрицательной оси X (к нижней части изображения), около 1 м вдоль оси Y и на высоте примерно 1,2 м над плоскостью земли относительно точки A.
Оценка местоположения ступни
Следующим шагом была оценка 3D-позиции ступни обнаруженного человека. Для простоты использовался пример pose_estimation.py от Hailo-8 для обнаружения ориентиров человеческого тела и извлечения 2D-координат изображения левой и правой лодыжек. Эти координаты изображения затем были преобразованы в мировые координаты с использованием техники обратного проецирования, описанной ранее.
Следующие две функции использовались для построения луча из центра камеры и вычисления его пересечения с плоскостью земли.
def create_a_ray(u, v, K, distCoeffs, R, t):
pts = numpy.array([[[u, v]]], dtype=numpy.float64)
undist = cv2.undistortPoints(pts, K, distCoeffs)
x_n, y_n = undist[0,0]
d_cam = numpy.array([x_n, y_n, 1.0], dtype=numpy.float64)
C = -R.T @ t
d_world = R.T @ d_cam
d_world = d_world / numpy.linalg.norm(d_world)
return C.reshape(3), d_world.reshape(3)
def intersect_ray_with_plane(C, d, n, d0):
denom = n @ d
if numpy.abs(denom) < 1e-9:
return None, None
s = -(n @ C + d0) / denom
if s < 0:
return None, None
X = C + s * d
return X, s
Основываясь на этом подходе, оцененная позиция ступни составила (202.0, 44.2, 0.0) в мировой системе отсчета. Этот результат был обоснован, так как я стоял очень близко к точке B, чьи известные координаты (240, 0).

Отображение обнаруженного местоположения ступни с помощью ESP32 и светодиодных матриц
Заключительным шагом была визуализация местоположения обнаруженного человека с использованием двух светодиодных матриц 8 × 8. Индексы строк и столбцов светодиодов рассчитывались путем линейного масштабирования оцененного диапазона мировых координат (приблизительно 480.0 × 240.0 см) для соответствия сетке светодиодов 8 × 16. Затем эти индексы отправлялись на ESP32 через USB-соединение.
Для этой демонстрации использовалась плата KidBright 32 V1.3, которая включает в себя встроенный контроллер светодиодной матрицы HT16K33, что удобно для быстрого прототипирования. На изображении ниже показана работа системы в реальном времени с входным сигналом от USB-вебкамеры, где подсвеченные светодиоды соответствуют оцененному местоположению человека. Видео этой демонстрации включено в начало этого обзора, а также его можно посмотреть напрямую по этой ссылке на YouTube .

Температура и распределение тепла
Заключительный тест был сосредоточен на поведении температуры и распределении тепла. Сначала устройство работало в режиме простоя в течение 5 минут, а затем были сняты тепловые изображения с помощью тепловизора FLIR E4.

В режиме простоя средняя температура поверхности составляла около 33 °C при температуре окружающей среды примерно 25 °C, как показано ниже.

Затем устройство было протестировано под полной нагрузкой путем запуска демонстрации WebGL Aquarium с 30 000 рыб, воспроизведения видео YouTube в разрешении 1080p и одновременного запуска примера AI-приложения. Система работала в этом состоянии в течение 10 минут перед снятием тепловых изображений, показанных ниже.

На основе тепловых изображений устройство демонстрировало стабильный и хорошо распределенный тепловой профиль при различных рабочих состояниях. При более высоких нагрузках температура поверхности корпуса достигала пика примерно 35–37 °C, причем самые теплые области были сосредоточены на верхней панели и верхних боковых поверхностях. Это указывало на то, что внутренние источники тепла — скорее всего, вычислительный модуль и AI-ускоритель — эффективно передавали тепло алюминиевому корпусу, который функционировал как пассивный радиатор. Примечательно, что локальных перегревов не наблюдалось, что говорит об эффективной внутренней тепловой связи и распределении тепла.

Выводы
Промышленный AI-компьютер reComputer Industrial R2135-12 предлагает широкий спектр проводных и беспроводных вариантов подключения. Предустановленный образ системы и предустановленное программное обеспечение, включая примеры ускорения AI на Hailo-8, сэкономили значительное количество времени на настройку. Его AI-производительность в среднем составляла около 30 FPS, что более чем достаточно для многих исследовательских задач. В этом обзоре была обнаружена лишь одна незначительная проблема: официальная страница продукта была несколько запутанной, так как изображения, показанные на сайте, отличались от полученного устройства, что изначально привело к обращению к неверному руководству пользователя.
Благодарим Seeed Studio за предоставленный для обзора reComputer AI Industrial R2135-12. Его можно приобрести в Seeed Studio за $279.00 для версии с 8 ГБ ОЗУ / 32 ГБ eMMC (26 TOPS), рассмотренной здесь, или выбрать вариант с 16 ГБ ОЗУ за $339 на той же странице. Промышленный AI-ПК Raspberry Pi CM5 Edge в конечном итоге может стать доступным в магазине компании на Amazon и на AliExpress .
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.
