PPoE-коммутатор Ubiquiti UniFi Switch 8 PoE-150W, поддерживающий соединение IEEE 802.3af/at для UVC-G4-PRO и IEEE 802.3bt для UVC-G4-PRO. Количество портов 8 (4 порта PoE для UVC-G4-PRO и 1 порт для UVC-AI-360).
IP-видеорегистратор Ubiquiti UniFi Protect NVR. Количество каналов 8.
Монитор Digma 23.8", Progress 24P402F 1920x1080, с частотой 100 Гц
Роутер Ubiquiti UniFi Dream Machine.
Облачное хранилище Ubiquiti Cloud.
4 камеры UVC-G4-PRO подключаются к PPoE-коммутатору Ubiquiti UniFi Switch 8 PoE-150W, используя 4 кабеля Ethernet категории 5e или 6 (U/FTP или S/FTP) длиной 30 метров.
1 камеру UVC-G4-PRO подключается к тому же коммутатору с помощью оставшегося кабеля Ethernet категории 5e или 6 (U/FTP или S/FTP) длиной 30 метров.
PPoE-коммутатор Ubiquiti UniFi Switch 8 PoE-150W подключается к IP-видеорегистратору Ubiquiti UniFi Protect NVR с помощью соответствующего Ethernet-кабеля.
Монитор Digma 23.8" подключается к видеорегистратору Ubiquiti UniFi Protect NVR для отображения видеопотока.
Роутер Ubiquiti UniFi Dream Machine подключается к PPoE-коммутатору и видеорегистратору для обеспечения сетевого соединения и доступа к облачному хранилищу.
Настраивается доступ к облачному хранилищу Ubiquiti Cloud для записи и хранения видеоархивов.
Смотрим, что бы все устройства были правильно настроены и подключены в соответствии с инструкциями производителя. Проверяем совместимость оборудования и обеспечиваем надежное соединение для стабильной работы системы.
Необходимость использования 4 камер UVC-G4-PRO и 1 камеры UVC-G4-PRO обусловлена планировкой помещения магазина, которую представим на рисунке 2.2.
Данные камеры имеют высокое разрешение до 4к, что обеспечивает четкость и детализацию изображения. Встроенные алгоритмы искусственного интеллекта для обнаружения событий, такие как движение или изменение вида, помогают быстро реагировать на потенциальные угрозы. Камеры фирмы Ubiquiti достаточно просто масштабировать и устанавливать. Так же, отсутствие подписки на сервисы помогают сократить расходы на использование, а надежность и долговечность камер видеонаблюдения от данной фирмы позволяют использовать их в различных условиях.
Ниже, на рисунках 2.3 и 2.4, можно увидеть, как выглядят камеры.
В таблице 1, приведем технические характеристики устанавливаемых камер видеонаблюдения.
Начнем с расположения камер в подсобных помещениях. В подсобных помещениях часто находится ценное оборудование, инструменты, материалы и товары. Установка камер видеонаблюдения помогает предотвратить кражи и вандализм, поскольку потенциальные воры могут воздержаться от совершения преступлений, зная, что за ними следят.
Система видеонаблюдения помогает отслеживать, кто приходит и уходит, что может быть полезно для расследования инцидентов.
Наличие камер повышает дисциплину среди сотрудников. Зная, что они находятся под наблюдением, работники более внимательно относятся к своим обязанностям и соблюдают правила техники безопасности.
Так как камера Ubiquiti UVC-G4-PRO является широкоугольной, то достаточно будет одной камеры в каждом подсобном помещении для наблюдения за объектами. Расположение камер видеонаблюдения в подсобных помещениях продемонстрировано на рисунке 2.5.
После того, как мы установили камеры видеонаблюдения, необходимо настроить их зону наблюдения.
Разными цветами обозначены зоны, которые должны контролироваться камерами, где красным цветом обозначена зона идентификации, желтый цвет обозначает зону распознавания, зеленый цвет обозначает зону обзора, а голубой цвет [a2] обозначает зону детекции.
Настроенные камеры видеонаблюдения в подсобных помещениях можно наблюдать на рисунке 2.6.
После того, как мы закончили с подсобными помещениями, перейдем к торговому залу.
Установка камер видеонаблюдения в торговом зале играет важную роль в обеспечении безопасности и защите товаров. Одной из основных причин их установки является предотвращение краж и мошенничества. Камеры служат мощным инструментом для снижения краж со стороны покупателей и сотрудников, поскольку наличие видеонаблюдения делает потенциальных воров более осторожными.
Кроме того, видеонаблюдение позволяет контролировать действия продавцов, что помогает выявлять недобросовестные действия, такие как несанкционированные скидки или манипулирование продукцией. Это способствует повышению дисциплины и ответственности среди сотрудников. Камеры также помогают улучшить обслуживание клиентов, поскольку записи используются для анализа взаимодействия продавцов с покупателями, что позволит выявлять и устранять пробелы в обслуживании.
В случае возникновения споров или инцидентов видеозаписи могут стать важным доказательством для разрешения споров между клиентами и сотрудниками, а также для расследования случаев краж. Кроме того, видеонаблюдение можно использовать для анализа поведения потребителей, что позволит оптимизировать размещение продукции и улучшить маркетинговые стратегии.
Наличие камер создает безопасную среду для покупателей и сотрудников, что повысит уровень доверия к магазину и будет способствовать увеличению числа постоянных покупателей. В конечном итоге установка видеонаблюдения приведет к значительному сокращению финансовых потерь от краж и недобросовестных действий. Статистика показывает, что в магазинах, где установлено видеонаблюдение, преступность снизилась на 70%.
Как мы убедились, необходимость камер видеонаблюдения подтверждена, поэтому приступим к проектированию. Камеры будут использоваться те же самые, что и в подсобных помещениях и крепиться они будут так же в углах.
На рисунке 2.7, мы видим установленную камеру видеонаблюдения.
Далее перейдем к ее настройке. Настройку камеры видеонаблюдения, находящуюся в торговом зале, представим на рисунке 2.8.
Как мы можем заметить, одна камера не справляется с покрытием всей площади торгового зала, а лишь с половиной. В связи с этим, необходимо добавить еще одну камеру видеонаблюдения в торговом зале, для покрытия всей площади. Добавление новой камеры видеонаблюдения можно наблюдать на рисунке 2.9.
После того, как мы добавили еще одну камеру, ее так же необходимо настроить. Настроенную камеру представим на рисунке 2.10.
Как можно заметить, две камеры дают полностью покрытую площадь видимости. Однако, необходимо добавить камеру типа «рыбий глаз» в кассовой зоне.
Кассовая зона является одним из самых уязвимых мест в продуктовом магазине. Она не только является основным местом, где клиенты расплачиваются за товары, но и точкой, где наиболее вероятны случаи мошенничества, краж и недоразумений. Установка камеры видеонаблюдения в этой области имеет критическое значение для обеспечения безопасности и оптимизации процессов работы магазина.
Записи с видеонаблюдения могут служить доказательством в случае возникновения споров, например, при возврате товара или конфликте с покупателем. Это может существенно упростить процесс разрешения ситуаций и защитить компанию от обвинений или недоразумений.
Установленную камеру видеонаблюдения в кассовой зоне представим на рисунке 2.11.
Так как определились с выбором камер, то необходимо разработать план расположения камер в нашей планировке. План камер представлен на рисунке 2.12.
Синими значками отмечены камеры. Так же можно наблюдать угол и дальность обзора. Камеры расположены так, чтобы учесть все нюансы расположения объекта и, возможные, мешающие обзору объекты.
Так же, на рисунке 2.13, мы можем видеть все параметры используемых камер видеонаблюдения.
На рисунке 2.14, можно увидеть необходимый трафик и объем для каждой камеры видеонаблюдения, а также качество их видеозаписи.
Таким образом при правильной установке и настройке система видеонаблюдения становится надежным инструментом для обеспечения безопасности и процветания магазина.
После того, как мы определились с планировкой объекта и расположением камер видеонаблюдения, перейдем к разработке программного обеспечения для эффективного взаимодействия с камерами. Одним из ключевых аспектов является организация хранения данных, полученных с камер. Рассмотрим два основных метода хранения записей: облачное хранилище и локальное хранилище.
Хранение записей видеонаблюдения в облаке имеет множество преимуществ по сравнению с их локальным хранением на физических носителях. Во-первых, облачное хранилище позволяет получать доступ к записям из любой точки мира через Интернет, что более удобно, для контроля безопасности объектов в режиме реального времени. С помощью мобильного приложения можно просматривать записи и получать уведомления о событиях на смартфоны, что значительно упрощает управление системой видеонаблюдения.
Во-вторых, безопасность данных в облаке выше. Поскольку данные хранятся на защищенных серверах, они защищены от потери из-за сбоя оборудования или кражи. Провайдеры облачных услуг часто используют шифрование данных и регулярное резервное копирование, что снижает риск утечек и потерь.
Другим важным аспектом является масштабируемость облачного хранилища. При необходимости можно легко расширить емкость хранилища, не приобретая новое оборудование.
Облачное хранилище также предлагает интеллектуальные функции, такие как аналитика и распознавание лиц, которые могут быть полезны для повышения безопасности. Кроме того, облачные решения позволяют легко настраивать права доступа для разных уровней пользователей.
Таким образом, облачное хранилище является более надежным, удобным и экономичным решением для хранения видеозаписей, чем локальные носители.
Существует множество ПО для выполнения данных функций, однако, выбор пал на разработку собственного ПО, так как мы перекроим все недостатки готовых решений. Сравнение можно наблюдать в таблице 2.
Так как очевидный выбор пал на облачное хранилище, то и приложение будет получать оттуда данные о записях. В качестве инструментов разработки будут использованы на серверной части Node.js, а на клиентской части React.Native. Для хранения и управления данными будет использоваться Firebase. Основными функциями нашего приложения будут выгрузка данных с камер в облако, отправка уведомлений при обнаружении движения, просмотр видеопотока с камер видеонаблюдения в режиме онлайн и настройка зон видимости для каждой камеры.
Начнем с установки зависимостей нашего приложения. Для начала, необходимо установить Node.js и React Native CLI. Далее, создаем новый проект командой:
npx react-native init CameraApp
После установки нового проекта, необходимо установить необходимые библиотеки для разработки. Для этого мы выполняем команду
npm install @react-native-firebase/app @react-native-firebase/messaging react-native-video axios
После этого, создаем проект в Firebase Console и добавляем наше мобильное приложение.
Следующим шагом является архитектура проекта. Расположение и общая картину можно наблюдать на рисунке 2.14.
Рассмотрим код приложения сверху вниз по имеющейся архитектуре.
import React from 'react';
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
const CameraItem = ({ camera, onSelect }) => {
<TouchableOpacity onPress={onSelect} style={styles.container}>
<Text style={styles.title}>{camera.name}</Text>
<Text>{camera.location}</Text>
const styles = StyleSheet.create({
borderBottomColor: '#ccc',
export default CameraItem;
Этот код предназначен для компонента CameraItem, написанного на React Native и предназначенного для отображения информации о видеокамере в списке. Он использует библиотеку React для создания пользовательского интерфейса и реактивных собственных элементов, таких как View, Text и TouchableOpacity.
Компонент принимает два свойства: camera и onSelect. Свойство camera — это объект, содержащий информацию о камере, ее имени и местоположении, а onSelect — это функция, которая вызывается при щелчке по элементу.
Внутри компонента создается элемент TouchableOpacity, что делает его интерактивным. При щелчке по этому элементу срабатывает функция onSelect. Внутри TouchableOpacity отображаются два текстовых элемента: один показывает название камеры, а другой — ее местоположение.
Наконец, код экспортирует компонент CameraItem, что позволяет использовать его в других частях приложения. Таким образом, данный компонент служит для отображения информации о видеокамере и позволяет пользователю взаимодействовать с ней, например, выбирать камеру для просмотра.
import React from 'react';
import { View, StyleSheet } from 'react-native';
import Video from 'react-native-video';
const CameraView = ({ videoUrl }) => {
<View style={styles.container}>
source={{ uri: videoUrl }}
const styles = StyleSheet.create({
export default CameraView;
Компонент принимает два свойства: camera и onSelect. Свойство camera — это объект, содержащий информацию о камере, ее имени и местоположении, а также функцию onSelect, которая вызывается при щелчке по элементу.
Элемент TouchableOpacity создается внутри компонента, что делает его интерактивным. При щелчке по этому элементу вызывается функция onSelect. Внутри TouchableOpacity отображаются два текстовых элемента: один показывает название камеры, а другой — ее местоположение.
Наконец, код экспортирует компонент CameraItem, что позволяет использовать его в других частях приложения. Таким образом, данный компонент служит для отображения информации о видеокамере и позволяет пользователю взаимодействовать с ней, например, выбирать камеру для просмотра. Компонент должен иметь одно свойство — videoUrl, которое представляет собой URL-адрес воспроизводимого видеопотока. Внутри компонента создается элемент «View», который служит контейнером для видео. Внутри этого контейнера находится компонент Video, который использует videoUrl в качестве своего источника.
Компонент видео предназначен для отображения элементов управления воспроизведением и использует «ограниченное» измерение для сохранения соотношения сторон видео при отображении.
Наконец, код экспортирует компонент CameraView, что позволяет использовать его в других частях приложения. Таким образом, данный компонент предоставляет возможность просмотра видеопотока с камеры в приложении.
import React from 'react';
import { View } from 'react-native';
import CameraView from '../components/CameraView';
const CameraScreen = ({ route }) => {
const { videoUrl } = route.params;
<View style={{ flex: 1 }}>
<CameraView videoUrl={videoUrl} />
export default CameraScreen;
Компонент принимает объект маршрута в качестве параметра, из которого он извлекает «VideoUrl», представляющий собой URL-адрес видеопотока, проходящего через другой экран приложения.
Внутри компонента создается элемент «Вид», который служит контейнером для отображения содержимого. Внутри этого контейнера находится компонент «CameraView», которому в качестве свойства назначено «VideoUrl».
Итак, CameraScreen отвечает за отображение видеопотока с камеры с помощью компонента CameraView, позволяя пользователю просматривать видео в приложении. Наконец, код экспортирует компонент CameraScreen, что позволяет использовать его в других частях приложения.
import React, { useEffect, useState } from 'react';
import { View, Button, FlatList, Text } from 'react-native';
import { getCameras } from './api';
import CameraView from './CameraView';
const HomeScreen = () => {
const [cameras, setCameras] = useState([]);
const [selectedCamera, setSelectedCamera] = useState(null);
const fetchCameras = async () => {
const cameraData = await getCameras();
console.error('Error fetching cameras:', error);
const handleCameraSelect = (camera) => {
setSelectedCamera(camera);
<View style={{ flex: 1 }}>
<CameraView videoUrl={selectedCamera.videoUrl} />
keyExtractor={(item) => item.id.toString()}
renderItem={({ item }) => (
<Button title="Просмотр" onPress={() => handleCameraSelect(item)} />
export default HomeScreen;
Хук состояния useState используется для хранения списка камер и выбранной камеры внутри компонента. Положение камер инициализируется пустым массивом, а выбранная камера инициализируется значением null.
При создании компонента с использованием хука «UseEffect» выполняется асинхронная функция fetchCameras, которая вызывает функцию getCameras для получения информации о камерах. Полученные данные сохраняются в местоположении камер. Если при получении информации возникает ошибка, она отображается в консоли.
Компонент представляет собой элемент View, содержащий условную логику. Если выбрана камера (т. е. selectedCamera не равен null), отображается компонент CameraView, передающий URL-адрес видеопотока выбранной камеры. Если камера не выбрана, список камер отображается с помощью компонента FlatList. Каждый элемент списка имеет название камеры и кнопку «Просмотр», при нажатии на которую вызывается функция handleCameraSelect, устанавливающая выбранную камеру.
import React from 'react';
import { View, Text } from 'react-native';
const SettingsScreen = () => {
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
export default SettingsScreen;
Внутри компонента создается элемент «View», который служит контейнером для содержимого. Внутри этого контейнера находится текстовый элемент, отображающий «Настройки».
import axios from 'axios';
import { API_URL } from '../utils/constants';
export const getCameras = async () => {
const response = await axios.get(`${API_URL}/cameras`);
Внутри функции GetCameras выполняется запрос GET к URL-адресу, созданному с использованием константы API_URL и добавлением к нему пути /camera. Это позволяет получить список камер с сервера.
После выполнения запроса результат сохраняется в переменной response, а функция возвращает данные в response.data. Это позволяет другим частям приложения вызывать getCameras для получения последней информации о доступных видеокамерах.
import messaging from '@react-native-firebase/messaging';
export const requestUserPermission = async () => {
const authStatus = await messaging().requestPermission();
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
authStatus === messaging.AuthorizationStatus.PROVISIONAL;
console.log('Authorization status:', authStatus);
export const listenForNotifications = () => {
messaging().onMessage(async remoteMessage => {
console.log('Notification received:', remoteMessage);
Функция RequireUserPermission запрашивает у пользователя разрешение на получение уведомлений. Для связи используется метод RequestPermission, который возвращает состояние разрешения. Проверяется разрешение на авторизацию, и, если оно предоставлено (полное или временное), на консоль выводится сообщение с текущим статусом авторизации.
Функция «ListForNotifications» настраивает прослушиватель входящих уведомлений. Приложение использует метод onMessage, который вызывается при получении уведомления, пока оно активно. При получении оповещения информация о нем отображается на консоли.
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './screens/HomeScreen';
import CameraScreen from './screens/CameraScreen';
import SettingsScreen from './screens/SettingsScreen';
const Stack = createStackNavigator();
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Camera" component={CameraScreen} />
<Stack.Screen name="Settings" component={SettingsScreen} />
Внутри компонента с помощью createStackNavigator создается стек навигации, который позволяет пользователю перемещаться между различными экранами приложения. В этом случае определены три экрана: HomeScreen, CameraScreen и SettingsScreen.
Компонент приложения оборачивает сборку навигации в NavigationContainer, что необходимо для работы навигации в приложении. Приложение запускается с главного экрана, что означает, что оно отобразит этот экран пользователю при запуске приложения.
import { AppRegistry } from 'react-native';
import { name as appName } from '../app.json';
AppRegistry.registerComponent(appName, () => App);
В коде импортируется компонент «Приложение», содержащий основную логику и навигационную структуру приложения. Имя приложения из файла application.json также импортируется, что позволяет использовать его для регистрации.
Функция «AppRegistry.registerComponent» регистрирует компонент «App» с именем, указанным в «AppName». Это позволяет React Native знать, какой компонент следует отображать при запуске приложения.
После разработки системы, можно переходить к тестированию системы и проверке ее работоспособности.
Тестирование системы видеонаблюдения из пяти камер включает проверку их работоспособности, а также проверку работоспособности уведомлений о движении. Основная цель этого теста — убедиться, что камеры правильно реагируют на движения в поле их зрения, а пользователи получают уведомления в режиме реального времени.
Сначала необходимо активировать каждую из камер и создать движение в их собственном направлении. Это можно сделать, например, попросив человека пройти мимо камеры. Важно наблюдать, насколько быстро и точно система реагирует на движение. Камеры должны отправлять оповещения на мобильные устройства при обнаружении движения, и это важный аспект теста. Оповещения должны поступать немедленно, чтобы пользователи могли быстро отреагировать на происходящее. Также важно проверить, чтобы уведомления содержали информацию о месте происшествия, это поможет пользователю быстрее разобраться в ситуации.
Наряду с тестовыми уведомлениями следует проверить работоспособность камер. Сюда входит запуск камер в рабочее состояние и контроль качества видеозаписи. Необходимо обеспечить, чтобы камеры записывали видео с высоким разрешением и четкостью изображения, что особенно важно для идентификации объектов и людей. При тестировании необходимо обращать внимание на стабильность работы камер: они должны обеспечивать непрерывный видеопоток и работать без сбоев и ошибок.
Кроме того, следует проверить возможность стрельбы. Это включает в себя тестирование видеоматериалов в различных условиях освещения, чтобы проверить, могут ли камеры адаптироваться к изменениям окружающей среды. Например, следует проверить, насколько хорошо камеры справляются с ярким солнечным светом или слабым освещением в помещении. Важно, чтобы камеры записывали видео непрерывно в течение определенного периода времени, гарантируя, что все важные события будут запечатлены.
Наконец, после завершения записи вам необходимо убедиться, что видео можно просматривать и воспроизводить без каких-либо задержек. Это позволит пользователям легко просматривать записи и анализировать события, произошедшие в зоне наблюдения.
Поэтому необходимо протестировать систему видеонаблюдения, подтвердить ее надежность и функциональность, создать уверенность в том, что камеры эффективно выполняют свои задачи по контролю и записи, а также оперативно оповещать пользователей о своих действиях на местах.
Для начала проверим работоспособность каждой из камер видеонаблюдения, установленных на макете. В качестве объектов расположим двух людей с ростом 1.8 м возле камеры и на границе ее видимости.
Начнем с камеры из первого подсобного помещения. Изображение с камеры можно наблюдать на рисунке 2.15.
Как можем наблюдать на рисунке 2.15, оба объекта находятся в зоне видимости, камера захватывает все помещение.
Перейдем к камере видеонаблюдения из подсобного помещения №2 и проверим ее настройку и работоспособность.
Здесь так же, как и в первом подсобном помещении, можно наблюдать отличную детализацию объектов. Особенно четкая детализация объекта, находящегося ближе к камере.
Перейдем к помещению «Торговый зал», где расположены 3 камеры видеонаблюдения.
Для начала, рассмотрим камеры видеонаблюдения, находящиеся по углам помещения, т.к. они дают основной обзор. На рисунке 2.17 можем наблюдать изображение с первой камеры.
Мы можем заметить широкий обхват помещения, но не полный. Здесь видно, что одной камеры было бы недостаточно для покрытия всей необходимой площади. Однако, наблюдается так же достаточная детализация изображения, видны силуэты вдали и четкое изображение лица вблизи камеры видеонаблюдения.
Так как одной камеры недостаточно для полного охвата площади помещения, перейдем к изображению со второй камеры видеонаблюдения торгового зала и пронаблюдаем, как это все выглядит совместно. Изображение со второй камеры видеонаблюдения, находящейся в торговом зале, можно наблюдать на рисунке 2.18.
На рисунке можем наблюдать такую же детализацию объектов и можем видеть, что объект вдали находится в противоположном углу, что приводит к достаточной информативности с данной камеры. Объект вблизи можно рассмотреть детально. В совокупности эти две камеры дают полную картину, происходящую в помещении «Торговый зал», имеют обхват всей необходимой зоны и отличную детализацию.
Перейдем к последней камере типа «рыбий глаз». Данный тип был выбран исходя из того, что камера видеонаблюдения должна находиться над кассовой зоной, которая очень важна, и иметь широкий обхват, что позволит наблюдать за самой кассой, кассиром и объектами, которые находятся в непосредственной близости. Картинку с камеры видеонаблюдения можно наблюдать на рисунке 2.19.
Так как данная камера нужна для наблюдения только в кассовой зоне, то и настройка выполняется на небольшую площадь фокусирования. Как можем наблюдать, даже на самом краю покрытия камеры мы видим детализированный объект в высоком формате. Данного покрытия достаточно для выполнения необходимой задачи. На рисунке 2.20 можно наблюдать вид со всех камер одновременно.
Перейдем к реальным стендам. Ниже можно наблюдать действие камеры видеонаблюдения типа «рыбий глаз» в реальном проекте. Камера так же находится над кассовой зоной и захватывает близлежащую часть для большей информативности. Рисунок 2.21 показывает наглядно.
Как можем наблюдать, видно объект кассира, кассу и близлежащую территорию, на которой могут находиться другие объекты. Теперь перейдем к виду из подсобного помещения, который можно наблюдать на рисунке 2.22.
Так же, при появлении объекта, с помощью нашего разработанного приложения ранее, приходит оповещение на мобильный телефон. Это необходимо чтобы быстро реагировать на незапланированные проникновения или на случай чрезвычайной ситуации. Оповещение на мобильное устройство можно наблюдать на рисунке 2.23
Исходя из вышесказанного, можно прийти к выводу, что размещение камер видеонаблюдения было тщательно продумано и реализовано с целью максимального охвата всех критически важных зон объекта. Каждая из пяти камер была установлена в стратегических местах, что позволяло осуществлять полное наблюдение за территорией. Камеры, расположенные в подсобных помещениях, эффективно контролируют эти зоны, предотвращают несанкционированное проникновение и обеспечивают безопасность сотрудников и имущества.