Explorer/RaspberryPi/Visualprocessing/Opencv
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
- Installation
PIZero installation > 10 hours
PI3 installation > 4 hours
sudo apt-get install -y cmake sudo apt-get install -y python-numpy python3-numpy libpython-dev libpython3-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libtiff-dev zlib1g-dev libjpeg-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev sudo apt-get install -y libatlas-base-dev gfortran
for raspberry pi3 sudo apt-get install -y libgtk2.0-dev
git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git cd ~/opencv git checkout 4.3.0 cd ~/opencv_contrib git checkout 4.3.0
mkdir ~/opencv/build cd ~/opencv/build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D OPENCV_GENERATE_PKGCONFIG=YES \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_EXAMPLES=OFF ..
=> GStreamer: YES (1.14.4)
/etc/dphys-swapfile CONF_SWAPSIZE=2048 sudo /etc/init.d/dphys-swapfile stop sudo /etc/init.d/dphys-swapfile start
make & for raspberrypi3: make -j4&
sudo make install sudo ldconfig -v
- Check installation
python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '4.3.0'
create ~/opencv_test/ptest.py chmod ugo+xwr ~/opencv_test/ptest.py
#!/usr/bin/python3 import numpy as np import threading import cv2 import time acquisition_cpt = 0 processing_cpt = 0 frame = None def data_acquisition(cap,out,condition): global acquisition_cpt,frame print("data_acquisition thread") while True: grabbed,frame = cap.read() if grabbed: with condition: acquisition_cpt = acquisition_cpt + 1 #print("acquisition_cpt ",acquisition_cpt) condition.notify() def data_processing(cap,out,condition): global processing_cpt print("data_processing thread") while True: with condition: condition.wait() img = frame.copy() processing_cpt = processing_cpt + 1 #print("processing_cpt ",processing_cpt) out.write(img) if __name__ == '__main__': cap = cv2.VideoCapture('udpsrc port=5200 ! h264parse ! omxh264dec ! videoconvert ! video/x-raw, format=(string)BGR ! appsink', cv2.CAP_GSTREAMER); out = cv2.VideoWriter('appsrc ! videoconvert ! omxh264enc ! video/x-h264,profile=high ! udpsink host=127.0.0.1 port=5210',cv2.CAP_GSTREAMER,0, 30, (640,480), True) time.sleep(0.1) if not cap.isOpened() or not out.isOpened(): print("not opened") quit() threads = [] condition = threading.Condition() for func in [data_acquisition, data_processing]: threads.append(threading.Thread(target=func, args=(cap,out,condition))) threads[-1].start() for thread in threads: thread.join() cap.release()
create ~/opencv_test/test.cpp
#include <opencv2/opencv.hpp> #define WIDTH 640 #define HEIGHT 480 #define FPS 30 #define SCALE 3/2 using namespace cv; using namespace std; int main(int, char**) { Mat data; string streamInGstStr="udpsrc port=5200 ! h264parse ! omxh264dec ! videoconvert ! video/x-raw, format=(string)BGR ! appsink"; string streamOutGstStr="appsrc ! videoconvert ! omxh264enc ! video/x-h264,profile=high ! udpsink host=127.0.0.1 port=5210"; VideoCapture streamIn(streamInGstStr,CAP_GSTREAMER); VideoWriter streamOut(streamOutGstStr,0,FPS/1,Size(WIDTH,HEIGHT),true); if (streamIn.isOpened() && streamOut.isOpened()) { while (true) { streamIn.read(data); if (!data.empty()) { streamOut.write(data); } } } return 0; }
g++ -g ~/opencv_test/test.cpp -o ~/opencv_test/test `pkg-config --cflags --libs opencv4`
Run following script with ~/opencv_test/test and ~/opencv_test/ptest.py
#!/bin/bash sudo killall raspivid gst-launch test-launch test ptest.py \ rm /tmp/camera*;\ raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -vf -hf -cd H264 -n -fl -ih -o - \ | gst-launch-1.0 fdsrc \ ! h264parse \ ! video/x-h264,stream-format=byte-stream \ ! tee name=streams \ ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \ ! udpsink host=127.0.0.1 port=5100 streams. \ ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \ ! udpsink host=127.0.0.1 port=5200 & sleep 1 #~/opencv_test/ptest.py & ~/opencv_test/test & sleep 1 gst-rtsp-server-1.14.4/examples/test-launch \ "udpsrc port=5100 do-timestamp=true ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1" \ "udpsrc port=5210 do-timestamp=true ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1"
client:
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 ! xvimagesink sync=false
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test2 ! rtph264depay ! avdec_h264 ! xvimagesink sync=false