-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.txt
65 lines (50 loc) · 4.76 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/**********************************************************/
ECE6122 Project Name: Pi-Vision with Human Detection
Team Member: Jordan Leiker
Date: 11/20/2020
This project turns the Raspberry Pi + camera into an OpenCV compatible VideoCapture-like IP camera that can
be used in any (c++) OpenCV project. Built in to the IP camera software is hardware accelerated compression, achieved by
using the FFMpeg C-API to communicate with GPUs. Finally, an example multi-object motion tracking algorithm has been ported
from a Matlab example to OpenCV / custom C++ to illustrate an end-to-end motion tracking with Raspberry Pi IP camera solution.
Class requirements met:
Sockets
Multi threading (std::thread)
Custom classes made:
VideoCapturePi Emulates OpenCV VideoCapture class, but pulls frames over a TCP socket from a Raspberry Pi
VideoCodec Utility class that wraps FFMpeg C-API calls into convienient functions for decoding/encoding
|---> Encoder Derived class from VideoCodec. This class accepts encoder information, initializes the encoder, and converts OpenCV frames to encoded AVFrame packets (while hardware acclerating the encoding)
|---> Decoder Derived class from VideoCodec. This class accepts decoder information, initializes the decoder, and converts AVFrame packets to OpenCV frames (while hardware acclerating the decoding)
MotionTracker This class implements a general purpose motion tracker. The algorithm was ported from a Matlab example (link below) to OpenCV and custom C++. This class
contains the methods needed to use the motion detection and maintain tracks.
(https://www.mathworks.com/help/vision/ug/motion-based-multiple-object-tracking.html)
/******************** Directory Outline ********************/
./README.txt This file.
./sequenceDiagram_flowChart.pdf Diagrams of power on sequences/handshaking for Raspberry Pi and Windows PC. Also included is image processing/motion tracking pipeline.
./LeikerJordan_StatementOfWork.pdf Initial project proposal (included for reference)
./source_pc
|---> README.txt System information, library requirements, build instructions
|---> motionTracker_v010.cpp Main program entry point. Uses the rest of the source code to implement motion tracker from Raspberry Pi camera
|---> CircularFrameBuf.cpp Circular Buffer (for OpenCV Mats and custom packets) functional code
|---> CircularFrameBuf.h Circular Buffer header file.
|---> MotionTracker.cpp Class implementing an OpenCV version of Matlab's multiple object motion tracking algorithm
|---> MotionTracker.h Header file for class implementing OpenCV version of Matlabs multiple object motion tracking
|---> VideoCapturePi.cpp Class mimicking OpenCV VideoCapture class that instead gets video frames over a TCP socket from custom Raspberry Pi software
|---> VideoCapturePi.h Header file for Raspberry Pi video capture
|---> VideoCodec.cpp Class functional code that wraps FFMPEG native-C functions for encoding/decoding video
|---> VideoCodec.h Header file for class that wraps FFMPEG functions into easy to use methods.
./source_rpi
|---> README.txt System information, library requirements, build instructions
|---> cameraServer_v010.cpp Program that launches a TCP server and sets up the camera, streams video, etc when a VideoCapturePi client connects
|---> CircularFrameBuf.cpp (same as above)
|---> CircularFrameBuf.h (same as above)
|---> VideoCodec.cpp (same as above)
|---> VideoCodec.h (same as above)
/******************** Links to Videos ********************/
ece6122_final_1of4.mov Link: https://youtu.be/vBRhVdJyhEw
Description: Phone capture of hardware setup. Shows physical raspberry pi + camera, pi OS launched on monitor, video stream being brought up.
ece6122_final_2of4.mkv Link: https://youtu.be/c5mt6vwBt7c
Description: Discusses power on sequence. Illustrates use of CODEC's to bring network bandwidth down by 99%. Show's GPU use to prove hardware acceleration.
ece6122_final_3of4.mkv Link: https://youtu.be/dHgAQSPHgj0
Description: Discusses image processing pipeline. Illustrates motion tracking using camera.
ece6122_final_4of4.mkv Link: https://youtu.be/c25yK531ktQ
Description: Illustrates multi-object tracking using video input (not camera). Shows how to use software for different codecs.