Git Product home page Git Product logo

camera's Introduction

Camera Util

Table of contents generated with markdown-toc

Overview

A collection of python threaded camera support routines for

  • USB and laptop internal webcams
  • RTSP streams
  • MIPI CSI cameras (Raspberry Pi, Jetson Nano)
  • FLIR blackfly (USB)

Also support to save as

  • HD5
  • tiff
  • avi, mkv

Supported OS

  • Windows
  • MacOS
  • Unix

The routines primarily use OpenCV or PySpin to interface with the camera. The image acquisition runs in a background thread to achieve maximal frame rate and minimal latency.

This work is based on efforts from Mark Omo and Craig Post.

Requirements

  • PySpin for FLIR cameras
  • opencv for USB, CSI cameras, RTSP network streams
    • Windows uses cv2.CAP_MSMF
    • Darwin uses cv2.CAP_AVFOUNDATION
    • Linux uses cv2.CAP_V4L2
    • Jetson Nano uses cv2.CAP_GSTREAMER
    • RTSP uses cv2.CAP_GSTREAMER

On windows GSTREAMER is not enabled by default. If you want RTSP functionaly you need to custom built opencv. See my windows installation instructions on Github.

Installation

camera

  1. cd "folder where you have this Readme.md file"
  2. pip install . or python setup.py bdist_wheel and pip3 install .\dist\*.whl

opencv
3. pip3 install opencv-contrib-python

tiff and hd5

  • https://www.lfd.uci.edu/~gohlke/pythonlibs/#imagecodecs
  • https://www.lfd.uci.edu/~gohlke/pythonlibs/#tifffile
  • https://www.lfd.uci.edu/~gohlke/pythonlibs/#h5py

Make sure the version matches your python installation (e.g. 3.8) and CPU architecture (e.g. 64).

blackfly
Spinnaker provides SDK and python bindings. The versions of those two programs need to match.

To install the downloaded wheels, in CMD window:

  1. cd Downloads

  2. pip3 install imagecodecs....

  3. pip3 install tifffile....

  4. pip3 install h5py....

  5. pip3 install spinnaker_python...

  6. Make sure you have C:\temp directory if you use the example storage programs.

  7. To get better tiff performance, installing libtiff is advised: https://github.com/uutzinger/Windows_Install_Scripts/blob/master/Buildinglibtiff.md

To install OpenCV on Raspi:

  1. cd ~
  2. sudo pip3 install opencv-contrib-python==4.5.3.56 as time progresses the version numnber might need to be increased.
  3. sudo pip3 install tifffile h5py platform imagecodecs

How to create camera config files

A. Specifications of your camera

On Windows, the Camera utility will give you resolution options and frames per second. To investigate other options you can use OBS studio (or any other capture program), establish camera capture device and inspect video options. py -3 list_cv2CameraProperties.py will show all camera options the video system offers. When an option states -1 it likely is not available for that camera.

B. Configuration file

Use one of the existing camera configutrations in examples/configs or create your own. As first step set appropriate resolution and frames per second. As second step figure out the exposure and autoexposure settings.

Run Example

Run capture_display.py from .\examples You need to set the proper config file in the program. You should not need to edit python files in capture or streamer folder.

Example Programs

Display:
In general display should occur in main program. OpenCV requires waitkey to be executed in order to update the display and limits update rate to about 50-90 fps.

Queue: Data transfer between the main program and capture and storage threads.

Examples:

  • capture_display.py tests camera capture for all capture platforms except blackfly.

  • blackfly_display.py tests the blackfly capture module, displays images and reports framerate.

  • capture_saveavi_display.py display and save to avi files

  • capture_savemkv_display.py display and save to mkv files

  • test_display.py testing of opencv display framerate, no camera, just refresh rate.

  • test_savehd5.py testing of the disk throughput with hdf5, no camera

  • test_savetiff.py testing of the disk throughput with tiff, no camera

  • test_saveavi.py testing of the disk throughput with avi, no camera, only 3 color planes per image possible

  • test_savemkv.py testing of the disk throughput with mkv/mp4v, no camera, only 3 color planes per image possible

  • test_blackfly.py tests the blackfly capture module and reports framerate, no display

  • blackfly_savehdf5.py no display but incoporates saving to disk

  • blackfly_savetiff.py no display but incoporates saving to disk

  • blackfly_savehdf5_display.py display and incoporates saving to disk

  • blackfly_savetiff_display.py display andincoporates saving to disk

Pip upload

py -3 setup.py check
py -3 setup.py sdist
py -3 setup.py bdist_wheel
pip3 install dist/thenewpackage.whl
twine upload dist/*

Capture modules

blackflyCapture

Simplifies the settings needed for the Blackfly camera.
Supports trigger out during frame exposure and trigger in for frame start.
Optimized settings to achieve full frame rate with S BFS-U3-04S2M.

nanoCapture

Uses gstreamer pipeline for Jetson Nano.
Pipline for nvidia conversion and nvarguscamera capture.
Settings optimized for Sony IMX219 Raspi v2 Module.

cv2Capture

Uses the cv2 capture architecture.
The video subsystem is choosen based on the operating system.

rtspCapture

gstreamer based rtsp network stream capture for all platforms.
gstreamer is called through OpenCV.
By default OpenCV supports ffmpeg and not gstreamer. Jetson Nano does not support ffmpeg but opencv is prebuilt with gstreamer for that platform.

piCapture

Interface for picamera module. Depricated since cv2Capture is more efficient for the Raspberry Pi.

Changes

2022 - February added libcamera capture for Raspian Bullseye
2022 - January added queue as intialization option, updated cv2Capture
2021 - November moved queue into class
2021 - November added rtp server and client
2021 - November added mkvServer, wheel installation, cleanup
2021 - October added aviServer and multicamera example, PySpin trigger fix
2021 - September updated PySpin trigger out polarity setting  
2020 - Release  
Urs Utzinger

References

realpython:
https://realpython.com/python-concurrency/
https://realpython.com/python-sleep/ https://realpython.com/async-io-python/

python for the lab:
https://www.pythonforthelab.com/blog/handling-and-sharing-data-between-threads/

Example Camera Peformance

Sony IMX287 FLIR Blackfly S BFS-U3-04S2M

  • 720x540 524fps
  • auto_exposure off

OV5647 OmniVision RasPi

  • auto_exposure 0: auto, 1:manual
  • exposure in microseconds
  • Max Resolution 2592x1944
  • YU12, (YUYV, RGB3, JPEG, H264, YVYU, VYUY, UYVY, NV12, BGR3, YV12, NV21, BGR4)
  • 320x240 90fps
  • 640x480 90fps
  • 1280x720 60fps
  • 1920x1080 6.4fps
  • 2592x1944 6.4fps

IMX219 Sony RasPi

  • auto_exposure 0: auto, 1:manual
  • exposure in microseconds
  • Max Resolution 3280x2464
  • YU12, (YUYV, RGB3, JPEG, H264, YVYU, VYUY, UYVY, NV12, BGR4)
  • 320x240 90fps
  • 640x480 90fps
  • 1280x720 60fps
  • 1920x1080 4.4fps
  • 3280x2464 2.8fps

ELP USB Camera RasPi

  • MJPG
  • 320x240 and 640/480, 120fps
  • auto_exposure, can not figure out out in MJPG mode
  • auto_exposure = 0 -> static exposure
  • exposure is about (exposure value / 10) in ms
  • WB_TEMP 6500

Dell Internal USB

  • 320x240, 30fps
  • YUY2
  • autoexposure ? 0.25, 0.74 -1. 0
  • WB_TEMP 4600
  • 1280x720, 30fps
  • 620x480, 30fps
  • 960x540, 30fps

camera's People

Contributors

uutzinger 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.