Vision

This module provides an interface for grabbing an rtmp stream and using the images to do some processing in opencv.

How do I use this module?

  1. Get frames from the raspberry pi camera

  2. – here comes your own processing –

  3. Publish the processed frames on an http server

  4. You can view the http stream of your processed images in a web browser

Opencv Stream

Because of the rtmp stream needing to buffer some frames and waiting for P-Frames, importing this module might take up to 5 Seconds.

class compLib.Vision.__Streaming

Class that handles rtmp streaming for opencv.

DO NOT CREATE AN INSTANCE OF THIS CLASS YOURSELF!

This is automatically done when importing this module. Use Vision.Streaming which is an instance of this class!

grab frames -> do your own processing -> publish frame -> view on http server

get_frame()

Grab the newest frame from the rtmp stream.

Returns

An opencv frame

publish_frame(image)

Publish an opencv frame to the http webserver.

Parameters

image – Opencv frame that will be published

Returns

None

Examples

Using the Vision Module

import cv2
from compLib import Vision

# get newest opencv frame from camera
frame = Vision.Streaming.get_frame()

# do some processing with the frame.....

# publish frame to streaming server
Vision.Streaming.publish_frame(frame)

Connect the raspberry pi to your internet and view the stream at: “http://your_raspi_ip:9898/”. This should display your raspberry pi camera. Note: the stream will lag a little bit BUT the processing of the image will be done in realtime.

The output on the website should show whatever your raspberry pi cam records:

Processed frames from opencv

Chessboard Detection

In this example we process the captured stream of images and want to detect chessboards. Run this example and point your raspberry pi camera to a chessboard and it should be detected.

For testing you can point it at this image:

Chessboard for opencv processing
import cv2
from compLib import Vision

# get newest opencv frame from camera
frame = Vision.Streaming.get_frame()

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)

# convert image to grayscale image
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# find the chessboard corners
ret, corners = cv2.findChessboardCorners(gray, (6, 9), None)

# draw detected chessboard position onto the image
cv2.drawChessboardCorners(frame,  (6, 9), corners, ret)

# publish frame to streaming server
Vision.Streaming.publish_frame(frame)

Connect the raspberry pi to your internet and view the stream at: “http://your_raspi_ip:9898/”.

The output image should look like this:

Processed frames from opencv

Here is a screenshot of the stream website while viewing the chessboard in this documentation.

Processed frames from opencv