Coder Social home page Coder Social logo

asdlei99 / peephole-surveillance-camera Goto Github PK

View Code? Open in Web Editor NEW

This project forked from maobit/peephole-surveillance-camera

0.0 1.0 0.0 9.98 MB

Peephole surveillance camera using h264 hard coding based on Orange Pi Zero

License: GNU General Public License v3.0

C 81.59% Makefile 0.66% C++ 17.75%

peephole-surveillance-camera's Introduction

Description

This project provides a simple peephole surveillance camera application using Orange Pi Zero.

It has following features:

  1. H264 encoding using Allwinner's SOC H/W H.264 encoder
  2. RTMP streaming : you can push video stream to an rtmp server
  3. Motion detection : recoding for 5s when motion detected
  4. Face recognition : based on OpenCV EigenFaceRecognizer

Compiling

It tested on Armbian OS. Clone this repository, and change the directory to the root of this repository.

1. Cedarx configuration

Cedarx 'blobs' contains shared libraries for H264 hard encoding, so we have to install it correctly first. The following commands should run as root.

  • Extract shared libraries in cedarx_blobs.tar.gz
$ cd /
$ tar xzvf [root_of_git_repo]/blobs/cedarx_blobs.tar.gz
  • Config the .so libraries:
$ sudo vim /etc/ld.so.conf.d/cedarx.conf

and add the content below

/usr/local/lib/cedarx
  • Once you save cedarx.conf, run:
$ sudo ldconfig

2. Build libyuv

Just run following commands:

$ git submodule init
$ git submodule update
$ cd libyuv/
$ make -f linux.mk CXX="g++ -mfpu=neon" libyuv.a
$ cd ../

3. Build this repository

After cedarx configured and libyuv compiled, just type make under the root directory of this repository, and you'll get a program named peephole_camera.

Usage

To run peephole_camera, make sure you meet following requirements:

  1. USB camera plugged into Orange Pi Zero, it should be /dev/video0 by default.
  2. It trys to connect a local rtmp server by default once started, or you can specify another rtmp server by command arguments.

Here is all arguments you can specify in this program:

--input,-i        - input source           ( default = [-] pipe source                 )
--rtmp-url,-c     - rtmp server url        ( default = rtmp://192.168.2.114:1935/live  )
--bitrate,-b      - bit rate in Kbits/Sec  ( default = 1024                            )
--fps,-r          - frames per second      ( default = 25                              )
--size,-s         - video source size      ( default = 640x480                         )
--qmin-max,-q     - encoding quality       ( default = -q 20,30                        )
--key-int,-k      - key frame interval     ( default = 5                               )

And here is a simple tutorial to build a rtmp server using nginx.

Using nginx to build an rtmp streaming server

  • Download PCRE and install it
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
$ tar zxvf pcre-8.38.tar.gz
$ cd pcre-8.38
$ ./configure
$ make
$ make install (if not the root user, please use the sudo)
  • Download nginx and nginx rtmp and then install it
# download nginx
$ wget http://nginx.org/download/nginx-1.10.0.tar.gz  
# uncompress nginx
$ tar -zxvf nginx-1.10.0.tar.gz
# download nginx-rtmp-module
$ git clone https://github.com/arut/nginx-rtmp-module.git
# configure nginx
$ ./configure --add-module=/path/to/nginx-rtmp-module
$ make
$ make install
  • Supporting RTMP
$ sudo vi conf/nginx.conf

add following configuration

rtmp {
 server {
     listen 1935;
     application live {
         live on;
         record off;
     }
 }
}
  • Start nginx
$ sudo /usr/local/sbin/nginx

Build RTMPdump(libRTMP)

  • Install openssl

We choose openssl-1.0.1f for compability with libRTMP. Following commands show how to install and configure it.

# fisrt create soft link in /usr/local
$ cd /usr/local
$ sudo ln -s openssl ssl
$ cd
# download openssl-1.0.1f to your home
$ wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1f.tar.gz
$ tar -xvf openssl-1.0.1f.tar.gz
$ cd openssl-1.0.1f
$ ./config --prefix=/usr/local/openssl
$ ./config -t
# it may take a while to build it
$ make depend
$ sudo make install

Add the following content to /etc/ld.so.conf:

/usr/local/openssl/lib

and then run

sudo ldconfig

After that, you should configure enviroment variable for openssl, just add following to the end of your ~/.bashrc:

export OPENSSL=/usr/local/openssl/bin
export PATH=$OPENSSL:$PATH:$HOME/bin

and then run

source ~/.bashrc

After all these done, we have installed openssl, and now to check if we have some mistakes.

$ ldd /usr/local/openssl/bin/openssl
    # you'll get outputs like this
    libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xb6eee000)
    libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e02000)
    /lib/ld-linux-armhf.so.3 (0xb6f18000)
$ which openssl
/usr/local/openssl/bin/openssl
$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Ok, it's all right.

  • Install zlib

It's simple to install zlib.

$ wget https://zlib.net/zlib-1.2.11.tar.gz
$ tar xvf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11/
$ sudo ./configure
$ make
$ sudo make install
  • Install libssl-dev

We can just use apt to install it.

$ sudo apt-get install libssl-dev
  • Build libTRMP

We should add the search path of openssl head files, add the following content to the end of ~/.bashrc

C_INCLUDE_PATH=/usr/local/openssl/include/
export C_INCLUDE_PATH
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/openssl/include/
export CPLUS_INCLUDE_PATH

And finally we can download rtmpdump-2.3 and to compile it.

$ wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz
$ tar -xvf  rtmpdump-2.3.tgz
$ cd rtmpdump-2.3
$ make
$ sudo make install

Acknowledgements

I borrowed tons of codes from following projects, thanks for their efforts.

  1. videoenc
  2. simplest_librtmp_example

peephole-surveillance-camera's People

Contributors

maobit avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.