Skip to content

WiFi HaLow를 활용한 한동 캠퍼스 CCTV IoT 네트워크 구축

Notifications You must be signed in to change notification settings

InternetOfTough/CCTV_HaLow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gRPC 이용한 CCTV 영상 전송

project setup

  • 필요 라이브러리 : g++,cmake ,opencv, gRPC c++
kho@kho-desktop:~$ cmake --version
cmake version 3.28.1
kho@kho-desktop:~$ pkg-config --modversion opencv4
4.9.0
  • cmake를 설치해줍니다.(cmake는 되도록이면 버전을 맞춰주세요 오래된 버전이면 cmake가 실행 안될 수 도있습니다.)
wget https://github.com/Kitware/CMake/releases/download/v3.28.1/cmake-3.28.1.tar.gz

wget 안되면 참조

# 압축 해제
tar -xvzf cmake-3.28.1.tar.gz

# 디렉토리 이동
cd cmake-3.28.1/

# OpenSSL lib install
sudo apt install libssl-dev

# 설치
./bootstrap
sudo make -j4
sudo make install
  • 다음의 명령어들을 통해 opencv를 사용하기 위한 필수 라이브러리를 설치해줍니다.
sudo apt-get install pkg-config # 컴파일 및 링크시 필요한 라이브러리 정보를 메타파일로부터 가져옴 
sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev # 이미지 파일 로드 및 저장
sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev # 특정 코덱의 비디오 파일 읽기/쓰기
sudo apt-get install libv4l-dev v4l-utils # 실시간 웹캠 비디오 캡처를 위한 디바이스 드라이버 및 API
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev # 비디오 스트리밍 라이브러리 설치 (Gstreamer)
sudo apt-get install libgtk-3-dev # opencv GUI (이외: libgtk2.0-dev, libqt4-dev, libqt5-dev)
sudo apt-get install libatlas-base-dev gfortran libeigen3-dev # OpenCV 최적화 라이브러리
sudo apt-get install python3-dev python3-numpy # OpenCV-Python 바인딩 & 행렬 연산
sudo apt install unzip
  • gcc 업데이트를 진행합니다.

    sudo apt install --only-upgrade gcc
    
  • opencv 설치 합니다.

cd ~
mkdir opencv && cd opencv
git clone --branch 4.9.0 https://github.com/opencv/opencv.git
git clone --branch 4.9.0 https://github.com/opencv/opencv_contrib.git
cd ./opencv
mkdir build && cd build
  • 현재 프로젝트 루트에 위치한 opencv_cmake.sh를 방금전 만든 build 디렉토리로 갖고와서 실행합니다.
mv ~/CCTV_Halow/opencv_cmake.sh ~/opencv/opencv/build
sh opencv_cmake.sh
nproc # 자신 시스템의 코어 수 확인

# build (modify the core number '12' after option -j accordingly)
make -j4 # 자신 시스템 코어 수에 맞게 -j 다음의 숫자를 변경

# install
sudo make install

# check if it is installed successfully
pkg-config --modversion opencv4
  • 영상을 브라우저에서 확인하기위해서 웹소켓 라이브러리를 설치합니다.
sudo apt-get install libwebsocketpp-dev
sudo apt-get install libboost-all-dev
  • 프로젝트를 구성하기 전 필수 라이브러리를 설치합니다.
sudo apt install -y build-essential autoconf libtool pkg-config
sudo apt-get install libsystemd-dev
  • 이제 git clone을 통해 프로젝트를 가져오고 프로젝트 루트 터미널에서 다음 명령어를 통해 빌드를 수행합니다.
mkdir build && cd build
cmake ..
make -j4
  • cmake FetchContent를 이용해 build 디렉토리안에 gRPC를 포함한 필요 라이브러리들이 설치되며 오브젝트파일의 링킹 작업이 실행됩니다.
  • cmake .. 와 make -j4는 따로따로 실행해주세요(두 과정 모두 처음 실행시 오래 걸립니다.... 다른거 할거를 준비해주시고 시작하시는게 좋습니다....)
  • 프로젝트 빌드를 cmake로 자동화하긴 했지만 저도 이부분은 만들면서 수많은 에러와 삽질을 했기 때문에 제발 에러가 안났으면 좋겠지만 에러가 난다면... 바로 연락주시면 됩니다.
  • could not find openssl 에러 나오신 분은 os에 기본적으로 openssl 라이브러리가 안깔려서 나오는것이니 아래의 명령어를 통해 openssl lib를 깔아주세요.
# sudo apt-get update
sudo apt-get install libssl-dev

실행

  • 빌드가 무사히 완료되었다면 /project_root/build/bin 폴더로 이동합니다.

서버 실행

./program_server <Port>

클라이언트 실행

./program_client <Ip:Port> <Pi_Name>

웹소켓을 이용한 jpg 방식의 실시간 영상 플레이

  • /project_root/lib/server에 위치한 browser.html을 크롬같은 웹브라우저로 실행하시면 웹브라우저에서 영상을 볼 수 있습니다.

alt text

ffmpeg + HLS + C++ http 서버를 이용한 실시간 영상 플레이

  • /project_root/lib/server에 위치한 hlsjs.html을 크롬같은 웹브라우저로 실행하시면 웹브라우저에서 영상을 볼 수 있습니다.
  • ./lib/server/ServerStartAPI.cc 파일에서 아래 함수들의 절대 경로를 실제 개발환경에 맞게 바꿔줘야 하며 코드에 있는 pi5는 모두 client 실행시 cmd 인자로 입력했던 pi 이름으로 바꿔줘야합니다.(vsc 사용시 ctrl + h 추천)
  • /home/kho/cpp/cctv/CCTV_HaLow/video/<파이 이름>/output.m3u8

alt text

alt text

  • 만약 여러대의 cctv를 테스트 하시려면 위의 두 함수를 cctv 개수만큼 복사하시고 동적으로 pi 이름을 할당하시면 됩니다.
  • ./lib/server/ServerStartAPI.cc 파일에서 맨아래 listen()에 c++ http 서버의 주소를 적어줍니다.

alt text

  • hlsjs.html에서 c++서버가 돌아가고 있는 주소를 입력해주시고 pi5를 입력한 pi이름 으로 바꿔주세요.

alt text

  • 만약 여러대의 cctv를 테스트 하시려면 html 파일을 cctv 개수만큼 복사하시고 동적으로 pi 이름을 할당하시면 됩니다.

Reference

About

WiFi HaLow를 활용한 한동 캠퍼스 CCTV IoT 네트워크 구축

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages