Система помощи оператора спецтехники

Функционал “системы помощи”:

  • Система рулевого управления с электроприводом. Блок управления, анализируя информацию с датчиков, камер и маршрута, должен своевременно подавать сигнал на актуаторы управления педалями и поворотный рычаг ступиц. (Коробкой управлять не придется. Автомобиль на электротяге.)
  • Система предотвращения столкновения с пешеходом. У нас есть огромный опыт в детектировании пешеходов. Разработано большое число алгоритмов детектирования пешеходов в различных условиях. Тут мы впереди планеты всей.
  • Предупреждение о пересечение собственной траектории движения с траекториями движения других участников дорожного движения. Тут поможет алгоритм Лукаса-Канаде.
  • Система экстренного торможения. На скоростях выше 10 км/ч. Если система экстренного торможения обнаруживает, что расстояние до другого участника дорожного движения (транспортного средства, пешехода, велосипедиста, объектом инфраструктуры города) становится критически коротким, то первым делом она должна предупредить машиниста, если человек не предпримет никаких действий, то снизить скорость за счет рекуперации энергии, и при необходимости заблокировать колеса подав сигнал на блок ABS.
  • Интеллектуальное управление фарой с учетом освещенности, скорости движения, направления движения, положения установленного навесного оборудования, наличие транспортных средств движущихся во встречном направлении.
  • Движение по заданному маршруту. Маршрут передается с центрального сервера по беспроводному интернету. Обратно на сервер передается координаты машины Глонасс/GPS. Центральный сервер хранит историю перемещения машины, расхода топлива.
  • Предотвращение сбоев с помощью интеллектуальной диагностики.
    • Мониторинг. Состояние датчиков периодически передается на центральный сервер.
    • Анализ и оценка. На центральном сервер анализируются данные с датчиков машины, сравниваются с данными аналогичных машин.
    • Прогноз. Специальный алгоритм рассчитывает вероятность выхода из строя различных узлов.
    • Уведомления о вероятных поломках или приближающемся ТО рассылаются утвержденному списку лиц (например: водителю, механику, менеджеру завода изготовителя, представителю дилера)
  • Техническая помощь. Интерфейс для мгновенной связи с представителем дилера или заводом изготовителем. Интерфейс позволяет :
    • записать на обучающие курсы на нового машиниста (водителя);
    • записать на обучающие курсы инженера-механика (водителя);
    • запросить квалифицированную консультацию по настройке оборудования;
    • возможны другие услуги дилера и/или завода изготовителя
  • Обновления «системы помощи» должно происходить по беспроводному каналу интернета с центрального сервера.

Оборудования которое планируется использовать при реализации этого проекта:

  • стереокамеры
  • MRR радар
  • датчик угловой скорости колеса
  • датчики положения навесного оборудования
  • шаговые двигатели
  • платформа для разработки Jetson TX1

Детектирование пешеходов с движущегося погрузчика

В прошлом месяце обратился к нам заказчик со следующей проблемой. На территории его складов работает много вилочных погрузчиков и еще больше грузчиков и другого персонала у которых напрочь отсутствует инстинкт самосохранения. Идут, не то что под ноги не смотрят, но даже не видят движущиеся погрузчики. Как минимум раз за смену кто-нибудь обязательно пободается с погрузчиком. Операторы погрузчиков — ребята вроде толковые, но надеется только на их внимание опасно.  Надпись “не стой под стрелой” не всем понятна из-за того что не все умеют читать, тем более еще и по русски. Несчастных случаев пока не было, но дожидаться руководство их не собиралось.

Для решения вышеизложенной проблемы нами было предложено следующее:

  • оборудовать вилочные погрузчики видеокамерами;
  • по видеопотоку контролировать приближение пешеходов к погрузчику;
  • при приближении пешехода к погрузчику ближе чем на 5 метров подавать оператору погрузчика свето-звуковой сигнал опасности.
  • весь персонал прибывающий на складе снабдить жилетами с нанесением идентификационных данных в виде баркода. Это позволит не только информировать оператора погрузчика об опасном сближении с пешеходом но и хранить информацию о нарушителях.

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

Ниже пример кода отслеживания пешеходов.

#include "opencv2\highgui.hpp"
#include "opencv2\imgproc.hpp"
#include "opencv2\objdetect\objdetect.hpp"
#include "opencv2/video/tracking.hpp"
#include "vector"
#include "stdio.h"
#include "Windows.h"
#include "iostream"
#include "time.h"
#include "ctime"

using namespace cv;
using namespace std;

int main(int argc, const char** argv)
{

 VideoCapture cap("input.mov");
 VideoWriter outputVideo;

outputVideo.open("video4.wmv", CV_FOURCC('W', 'M', 'V', '2'), cap.get(CV_CAP_PROP_FPS), Size(640, 480), true);

 CascadeClassifier detectorBody;
 CascadeClassifier detectorUpper;

 string cascadeName1 = "cascadeName.xml";
 string cascadeName2 = "cascadeName.xml";

 bool loaded1 = detectorBody.load(cascadeName1);
 bool loaded3 = detectorUpper.load(cascadeName2);

 for (;;)
 {

  bool Is = cap.grab();
  if (Is == false) {

   cout << "Ошибка захвата видео" << endl;
   break;
  }
  else {

   const clock_t begin_time = clock();

   vector<Rect> human;
   vector<Rect> upperBody;

   Mat img;
   Mat original;

   cap.retrieve(img, CV_CAP_OPENNI_BGR_IMAGE);
   resize(img, img, Size(640, 480));
   img.copyTo(original);
   cvtColor(img, img, CV_BGR2GRAY);

detectorBody.detectMultiScale(img, human, 1.1, 2, 0 | 1, Size(40,70), Size(80, 300));
detectorUpper.detectMultiScale(img, upperBody, 1.1, 2, 0 | 1, Size(40, 70), Size(80, 300));

colored image
   if (human.size() > 0) {
    for (int gg = 0; gg < human.size(); gg++) {

    rectangle(original, human[gg].tl(), human[gg].br(), Scalar(0,0,255), 2, 8, 0);

    }
   }

colored image
   if (upperBody.size() > 0) {
    for (int gg = 0; gg < upperBody.size(); gg++) {

         rectangle(original, upperBody[gg].tl(), upperBody[gg].br(),  Scalar(255,0,0), 2, 8, 0);

    }
   }
          clock_t diff = clock() - begin_time;
          char buffer[126];
          sprintf(buffer, "%d",diff);
           putText(original, buffer, Point(100, 20), 1, 2, Scalar(255, 255, 255), 2, 8, 0);
           putText(original, "ms" , Point(150, 20), 1, 2, Scalar(255, 255, 255), 2, 8, 0);
    namedWindow("prew", WINDOW_AUTOSIZE);
    imshow("prew", original);
    outputVideo << original;
    int key1 = waitKey(20);
  }
 }
}

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

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

Замок с распознаванием лиц на Orange Pi с OpenCV и Python

Требуется взять видео поток с камеры, идентифицировать человека по лицу, открыть замок если этому человеку предоставлен доступ. Видео поток будем брать с вебки, распознавать лицо с помощью OpenCV. Системник на дверь вешать не будем. Orange Pi вполне справиться.

Устанавливаем OpenCV на Orange Pi

Приведенные ниже инструкции, думаю, будут работать на Raspberry Pi, но в ответственный момент его под рукой не оказалось, поэтому все ниже описанное я тестировал на Orange Pi. Что касается программного обеспечения, мы будем использовать OpenCV, который представляет собой компьютерное зрение и компьютерное обучение в режиме реального времени. Это позволит нам захватывать изображения с веб-камеры, манипулировать ими и применять модели распознавания лиц.

Итак, следуйте инструкциям из учебника по установке OpenCV и установите компилятор и необходимые библиотеки.

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

Затем получите OpenCV и дополнительные модули, содержащие библиотеки распознавания лиц:

wget -O opencv-3.3.0.zip https://github.com/opencv/opencv/archive/3.3.0.zip
git clone https://github.com/opencv/opencv_contrib.git
unzip opencv-3.3.0.zip
cd opencv-3.3.0

Создайте каталог сборки:

mkdir build
cd build

Команду для сборки, я брал из руководства для Raspberry Pi, к которой добавил вариант включения дополнительных модулей с функциями распознавания лиц:

cmake -D WITH_FFMPEG=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib/modules/> -D BUILD_NEW_PYTHON_SUPPORT=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON ..

компилируем

make -j4

Этот шаг, на моем устройстве, занял около 1 часа. Если вы получите какую-либо ошибку из дополнительных модулей, просто удалите их. Вам нужен только модуль лица. Далее ставим OpenCV:

sudo make install

Готово. Теперь у вас есть OpenCV в Python на Orange Pi с библиотеками распознавания лиц. Вы можете протестировать его, запустив Python и импортировав cv2.

Захват видео потока с веб-камеры и распознавание лиц

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

Чтобы прочитать поток веб-камеры и сохранить лица, соответствующие человеку, используйте приведенный ниже код. Убедитесь, что у вас есть каскадный файл обнаружения лица XML. Эти каскадные файлы XML обычно лежат в opencv /data/haarcascades/. Скопируйте нужный файл в ту же папку, что и скрипт, или поместите весь put в функцию cv2.CascadeClassifier().

import os
import numpy as np
import cv2
 
# create folder to save pictures of a person
name=raw_input('Enter your name:')
if not os.path.exists('faces'):
    os.mkdir('faces' )
os.mkdir('faces/'+name )
print name+' folder created!'
path='faces/'+name
 
# import face detection cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 
# create capture object
cap = cv2.VideoCapture(0)
 
# take 10 pictures
for i in range(1,11):
    print ('Take picture '+str(i) + ' and press space') 
    while(True):
        # capture frame-by-frame
        ret, img = cap.read()
 
        # convert image to grayscale
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 
        # detect face
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
 
        # for each face draw a rectangle around and copy the face
        for (x,y,w,h) in faces:
            cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
            roi_color = img[y:y+h, x:x+w]
            roi_gray = gray[y:y+h, x:x+w]
 
        # display the resulting frame
        cv2.imshow('frame',img)   
 
        # when pressing space resize face image and save it
        if cv2.waitKey(1) & 0xFF == ord(' '):
            roi_gray=cv2.resize(roi_gray,(100,100))
            cv2.imwrite(path+'/'+str(i)+'.jpg',roi_gray)
            break
     
# when everything done, release the capture
cap.release()
cv2.destroyAllWindows()

Сохраните код выше в сценарии Python input.py. Подключите веб-камеру к Orange Pi и запустите сценарий. Введите свое имя и посмотрите на камеру, нажимая пробел каждый раз, когда вокруг вашего лица появляется прямоугольник. Вы должны сделать 10 снимков, которые будут сохранены в faces/folder.

Чтобы проверить модель, сохраните код ниже в файл output.py. Код создает список лиц (объектов изображений) и ярлыков, что и требует учебная модель. Это делается путем просмотра папок и файлов в каталоге faces/, созданных предыдущим скриптом. Затем мы обучаем модель.

import cv2
import numpy as np
import os
 
faces = []
labels = []
 
path_data='faces/'
 
names=os.listdir(path_data)
i=-1
 
# read each image in the faces folder
for root, dirs, files in os.walk(path_data):
    i=i+1
    # for the recognizer we need an array of images and corresponding labels
    for name in files:
        faces.append(cv2.imread(root+'/'+name,cv2.IMREAD_GRAYSCALE))
        labels.append(i)
 
# create our LBPH face recognizer 
face_recognizer = cv2.face.LBPHFaceRecognizer_create()
 
# import face detection cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 
# train model
face_recognizer.train(faces, np.array(labels))
 
cap = cv2.VideoCapture(0)
while(True):
    # capture frame-by-frame
    ret, img = cap.read()
 
    # put a rectangle and a label for each recognized face
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_color = img[y:y+h, x:x+w]
        roi_gray = gray[y:y+h, x:x+w]
        label= face_recognizer.predict(roi_gray)
        cv2.putText(img, names[label[0]-1]+' ts:'+str(label[1]), (x, y), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 255, 0), 2)
    # display the resulting frame
    cv2.imshow('frame',img)   
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
     
# when everything done, release the capture
cap.release()
cv2.destroyAllWindows()

Чтобы закрыть поток, нажмите клавишу q

Вот и все. Осталось только отправить сигнал на реле для открывания замка.

Распознавания лиц с использованием каскадных классификаторов Хаара

Теория

Обнаружение объектов с использованием каскадных классификаторов Хаара — эффективный метод обнаружения объектов, работающий в реальном времени. Это подход, основанный на механизме обучения. Каскадная функция обучается из множества положительных и отрицательных изображений.

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

Функции применяются на всех обучающих изображениях. Для каждой функции находится лучший порог, который будет относить лица к положительным и отрицательным. Очевидно, что будут ошибки. Мы выбираем функции с минимальной частотой ошибок, которые лучше всего классифицируют изображения лица. Процесс не так прост, как это кажется. Каждому изображению присваивается одинаковый вес в начале. После каждой классификации увеличивается количество ошибочных изображений. Затем снова выполняется тот же процесс, рассчитываются новые коэффициенты ошибок, а также новые веса. Процесс продолжается до тех пор, пока не будет достигнута требуемая точность или частота ошибок.

Конечный классификатор представляет собой взвешенную сумму слабых классификаторов. Слабым классификатор называется, потому что он сам по себе не может классифицировать изображение, но вместе с другими образует сильный классификатор. 200 функций обеспечивают обнаружение с точностью до 95%. Окончательная настройка имеет около 6000 функций.

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

Каскада Хаара в OpenCV

Обучить классификатор можно не только на распознование лиц но и других объектов, таких как автомобиль, самолет и т.д. Для этого Вы можете использовать OpenCV.

OpenCV уже содержит много предварительно подготовленных классификаторов для лица, глаз, улыбки и т.д. Эти файлы XML хранятся в opencv/data/haarcascades/. Давайте создадим детектор лица и глаза с OpenCV.

Сначала нам нужно загрузить требуемые классификаторы XML. Затем загрузите наше входное изображение (или видео).

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

img = cv2.imread(lico.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Теперь мы находим грани в изображении. Если грани найдены, они возвращают позиции обнаруженных лиц как Rect (x, y, w, h). Так как на лице всегда есть глаза, будем искать глаза. Как только мы получим регионы лиц, мы можем создать ROI для лица и применить обнаружение глаз в этой ROI.

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
   img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
   roi_gray = gray[y:y+h, x:x+w]
   roi_color = img[y:y+h, x:x+w]
   eyes = eye_cascade.detectMultiScale(roi_gray)
   for (ex,ey,ew,eh) in eyes:
       cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Результат выглядит так:

Монтаж систем пневмопочты

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

Решения для медицины

пневмопочта в больнице
пневматическая почта в больнице

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

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

Решения для промышленности

пневмопочта в промышленности
пневматическая почта в промышленности

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

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

Решения для торговли

пневмопочта в торговле
пневматическая почта в торговле

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

Детектирование пешеходов

Одно дело, когда программа на компьютере с хорошим процом, 8 Гигиами ОЗУ обнаруживают людей в коридоре, где работают разработчики,  другое дело, когда тот же алгоритм должен распознать пешехода, работая на одноплатнике (например nanopi fire3) беря видео поток с камеры закрепленной на лобовом стекле Вашего автомобиля. Причем этому алгоритму нужно детектировать пешехода в реальном времени, чтобы вовремя этого пешехода и избежать избежать столкновения.

Наши исследования показали, что чтобы добиться конечной цели (избежать столкновения) алгоритм исполняемый на железе с малой производительностью должен не только детектировать пешехода но и анализировать траекторию его движения. Это позволяет избежать столкновения “предвидя его”. А использование патернов поведения позволяет обнаружить пешеходов намного быстрее и точнее других алгоритмов. Также наш алгоритм, совершать вдвое меньше ошибок, чем существующие системы. Что, в свою очередь, приводит к изящной остановкой, а не к внезапным страшным торможениям.

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

Сценарий взаимодействия заказчика и исполнителя

Размещение заказа

Разработка программного продукта на заказ начинается с формулировки функциональных требований. Первоначально, как правило, есть высокоуровневые формулировки, их также называют бизнес-требованиями. Однако для создания системы этого недостаточно и заказчику необходимо сформулировать Функциональные Требования, описывающие желаемое поведение информационной системы.

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

Оценка заказа и согласование объема работ и стоимости

Подготовленные требования оцениваются разработчиками исполнителя.

Результатом оценки является коммерческое предложение на разработку системы или продукта.

Старт проекта

Для начала работ по проекту стороны подписывают контракт.

Разработка и согласование ТЗ

Специалисты исполнителя разрабатывают техническое задание (ТЗ) на разработку продукта.

Техническое задание высылается заказчику на согласование. В процессе согласования исполнитель учитывает комментарии всех заинтересованных сторон.

Новые требования после согласования ТЗ всегда влияет на сроки или стоимость работ. Если запланированный срок согласования ТЗ сорван, принимается решение об изменении сроков, объемов или стоимости работ.

Прототипы

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

Разработка решения

  • Идея
  • Разфработка алгоритма
  • Разработка аппаратной платформы
  • Разработка микрокода
  • Опытное производство
  • Прикладное ПО
  • Тестирование
  • Серийное производство
  • Этап внедрения

Наши услуги

  • аутсорсинг разработки программного обеспечения. Типовые решения существуют не для всех вертикальных рынков и предметных областей. Мы предлагаем разработку, внедрение и техническую поддержку нестандартного ПО.
  • web-программирование (разработка сайтов, интернет магазинов).Создание дизайна веб-сайта, разработка веб-сайтов, интернет магазинов. ASP .NET, PHP и AJAX.
  • доработка и внедрение корпоративных порталов на базе «1С-Битрикс: Корпоративный портал». Внедрение, настройка бизнес-процессов, доработка функционала + CRM в корпоративный портал на Битрикс24.
  • разработка программного обеспечения на Java. Разработки программного обеспечения с использованием технологий J2EE, J2SE, J2ME, серверов приложений (JBoss, Tomcat и др.).
  • разработка программ для мобильных устройств. Разрабатываем мобильные приложения и игры для платформ iOS и Android.
  • машинное обучение и нейросетевые технологии. Распознавание и классификация текстов, видеоаналитика (распознавание данных в видеопотоке с камер, классификация объектов, интеллектуальный анализ событий), распознавание образов (классификация объектов по изображениям, поиск сложных закономерностей), анализ больших данных (применяется в аналитических системах, для вычисления паттернов поведения, поиске сложных закономерностей, рекомендательных сервисах и пр).
  • разработка электроники. Разработка на заказ электронных узлов, блоков, модулей и готовых устройств различного назначения таких, как: автоэлектроника, датчики и системы сбора данных, устройства обработки и распознавания сигналов, системы контроля доступа.
  • продвижение сайтов и контекстная реклама. Привлечение внимания к вашему продукту за счет продвижения сайта в поисковых системах и контекстной рекламы.
  • проектирование и монтаж СКС. Для точного расчета стоимости монтажа СКС Вам необходимо либо прислать план помещения с размерами и указанием расположения рабочих мест, либо мы готовы подъехать к вам и произвести все замеры и согласования. Выезд специалиста — бесплатен.
  • монтаж систем пневмопочты в Липецкой области. Для приблизительной оценки можно исходить из расчета стоимости $2500- 4000$ за одну станцию для систем состоящих из трех и более рабочих станций. Предварительный расчет стоимости проекта можно бесплатно получить у наших специалистов.
  • анализ бизнес-процессов, реинжиниринг. Мы предлагаем профессиональный анализ и оптимизацию бизнес-процессов.
  • составление технического задания. Составляем ТЗ как для дальнейшей разработки ПО в нашей компании, так и как отдельную услугу для разработки программного обеспечения своими силами.