Difference between revisions of "Raspberry PI WebCam"
Line 179: | Line 179: | ||
</source> | </source> | ||
==== Activate Service ==== | ==== Activate Service ==== | ||
+ | <source lang='bash'> | ||
+ | sudo systemctl enable webcam.service | ||
+ | sudo systemctl start webcam.service | ||
+ | </source> | ||
== Uv4l trial on Buster == | == Uv4l trial on Buster == |
Revision as of 07:41, 24 January 2020
Click here to comment see Self Driving RC Car
Webcam
check camera and video device
The tests were done with two different Logitech USB Webcams on different Raspberry PI devices. A Raspberry 3B+ and a Raspberry 4 using raspbian buster.
lsusb | grep cam
Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270
lsusb
Bus 001 Device 004: ID 046d:082c Logitech, Inc. HD Webcam C615
dmesg | grep uvcvideo | head -1
[ 4.538065] uvcvideo: Found UVC 1.00 device HD Webcam C615 (046d:082c)
v4l2-ctl -V
Format Video Capture:
Width/Height : 352/288
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 102400
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
Software
qv4l2 Videograbbing
see https://wiki.ubuntuusers.de/Videograbbing/
sudo apt-get install qv4l2
qv4l2
fswebcam
Installation
sudo apt-get install fswebcam
fswebcam test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'test.jpg'.
Script to take pictures (remotely)
#!/bin/bash
server=pichess
pic=chess$$.jpg
resolution=640x480
# https://raspberrypi.stackexchange.com/a/29284/11220 - skip some frames to adjust exposure
ssh $server fswebcam -r $resolution -S 10 -d /dev/video0 /tmp/$pic
scp $server:/tmp/$pic /tmp/$pic
open /tmp/$pic
motion
Motion can be used to stream the camera images over the network. Motion is used for detecting movements and reacting on those movements. This needs extra CPU power so the solution is slower than others.
sudo apt-get install motion
cd /etc/motion
git init
git add *
git commit -a -m "initial checkin"
# edit motion.conf with your favorite editor
git diff motion.conf
diff --git a/motion.conf b/motion.conf
index 23c8810..b96df83 100644
--- a/motion.conf
+++ b/motion.conf
@@ -8,7 +8,7 @@
############################################################
# Start in daemon (background) mode and release terminal (default: off)
-daemon off
+daemon on
# File to store the process ID, also called pid file. (default: not defined)
process_id_file /var/run/motion/motion.pid
@@ -76,14 +76,14 @@ rotate 0
flip_axis none
# Image width (pixels). Valid range: Camera dependent, default: 320
-width 320
+width 352
# Image height (pixels). Valid range: Camera dependent, default: 240
-height 240
+height 288
# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
-framerate 2
+framerate 30
# Minimum time in seconds between capturing picture frames from the camera.
# Default: 0 = disabled - the capture rate is given by the camera framerate.
@@ -458,7 +458,7 @@ stream_motion off
stream_maxrate 1
# Restrict stream connections to localhost only (default: on)
-stream_localhost on
+stream_localhost off
# Limits the number of images per connection (default: 0 = unlimited)
# Number can be defined by multiplying actual stream rate by desired number of seconds
# fix /etc/default/motion
cat /etc/default/motion
# set to 'yes' to enable the motion daemon
start_motion_daemon=yes
MjpegStream
see https://github.com/jacksonliam/mjpg-streamer
Install
cd /usr/local/lib
sudo -s
git clone https://github.com/jacksonliam/mjpg-streamer
apt-get install -y cmake libjpeg8-dev
cd mjpg-streamer/mjpg-streamer-experimental
make
make install
Run
./mjpg_streamer -i input_uvc.so -o 'output_http.so -w www'
Test
You need to modify the localhost ip to the ip of the raspberry http://127.0.0.1:8080/?action=stream
Service
Run script
cat /usr/local/lib/mjpg-streamer/mjpg-streamer-experimental/run
#!/bin/bash
# Start Webcam streaming
# WF 2020-01-24
scriptdir=$(dirname $0)
echo $scriptdir
cd $scriptdir
./mjpg_streamer -i input_uvc.so -o 'output_http.so -w www'
Service Unit
root@pi4car:/etc/systemd/system# cat webcam.service
[Unit]
Description=Webcam Streaming
[Service]
Type=simple
ExecStart=/usr/local/lib/mjpg-streamer/mjpg-streamer-experimental/run
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=webcam
Restart=on-abnormal
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
Activate Service
sudo systemctl enable webcam.service
sudo systemctl start webcam.service
Uv4l trial on Buster
With Uv4l your mileage may vary. We had mixed results. While on raspberry stretch things ran with not much of an issue we had hours of fiddling on buster devices and could not get all cameras to work properly.
As of 2019-10-15 there is no official Buster support for uv4l yet see e.g. https://www.raspberrypi.org/forums/viewtopic.php?t=247305
As of 2020-01-21 there seems to be a work-around see https://blog.domski.pl/uv4l-on-raspberry-pi-running-debian-buster/
We will try using the commands for Raspberry Stretch
curl http://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add -
echo "deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install uv4l
# do we need to update the firmware?
# sudo rpi-update
sudo apt-get install uv4l-server uv4l-uvc uv4l-xscreen uv4l-mjpegstream uv4l-dummy uv4l-raspidisp
sudo apt-get install uv4l-webrtc
# for raspi-cam (we are using webcam!)
# apt-get install uv4l-raspicam-extras
Configure
/etc/uv4l # git init
Initialized empty Git repository in /etc/uv4l/.git/
/etc/uv4l# git add *
/etc/uv4l# git commit -a -m "initial state"
[master (root-commit) 0e2dc87] initial state
2 files changed, 555 insertions(+)
create mode 100644 uv4l-raspicam.conf
create mode 100644 uv4l-uvc.conf
git diff uv4l-uvc.conf
diff --git a/uv4l-uvc.conf b/uv4l-uvc.conf
index c01824e..f00b6b6 100644
--- a/uv4l-uvc.conf
+++ b/uv4l-uvc.conf
@@ -54,8 +54,7 @@ frame-buffers = 4
# device-id = <vid>:<pid>
# alternative to 'device-path', vendor and product identifiers of the USB device
-
-
+device-id = 046d:0825
#################################
# streaming server options
#################################
System start script
uv4l.service unit
root@picarford:/etc/systemd/system# cat uv4l.service
[Unit]
Description=UV4L Webcam
[Service]
Type=simple
ExecStart=/usr/bin/uv4l -k --sched-rr --mem-lock --config-file=/etc/uv4l/uv4l-uvc.conf --driver uvc --driver-config-file=/etc/uv4l/uv4l-uvc.conf --server-option=--editable-config-file=/etc/uv4l/uv4l-uvc.conf --device=046d:0825
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=uv4l
Restart=on-abnormal
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
enable and start
sudo systemctl enable uv4l.service
sudo systemctl start uv4l.service