Muokataan sivua Web-kameran kuva verkkoon
Siirry navigaatioon
Siirry hakuun
Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.
Nykyinen versio | Oma tekstisi | ||
Rivi 1: | Rivi 1: | ||
Web-kameran kuvan saaminen esim. kotisivulleen näkyviin on paljon helpompaa kuin voisi luulla. Tässä ohjeessa Linux-kone ottaa kuvan ja lähettää sen FTP:llä jollekin www-palvelimelle. Mukana on myös html, css ja js-tiedostot palvelimelle kuvan näyttämistä ja automaattista päivittämistä varten. Homma sujuu näin: | |||
== Ohjeet == | |||
# laita [[Web-kamera|web-kamerasi]] käyttökuntoon | |||
# asenna camE. Löytynee jakeluversiosi pakettivarastoista tms tai [http://linuxbrit.co.uk/camE/|ohjelman kotisivuilta] lähdekoodimuodossa. | |||
# kopioi alla esitetty .camErc -asetustiedosto kotikansioosi ja muokkaa sen asetukset sopiviksi itsellesi kommenttien opastamalla tavalla | |||
# luo palvelimelle kansio johon kuva tullaan julkaisemaan, esimerkiksi nimellä cam | |||
# luo palvelimelle ftp-tunnus camEa varten | |||
# kopioi index.html, cam.js sekä style.css palvelimen cam-kansioon | |||
# käynnistä camE komennolla camE. Se menee taustalle ja täytyy lopettaa tappamalla prosessi. Jos et halua sen menevän taustalle, käynnistä komennolla camE -f | |||
== .camErc -asetustiedosto == | |||
Kopioi tämä tiedostoksi .camErc kotikansioosi | |||
== .camErc-asetustiedosto == | |||
Kopioi | |||
<pre> | <pre> | ||
#nämä asetukset ottavat kuvan kerran sekunnissa | #nämä asetukset ottavat kuvan kerran sekunnissa | ||
Rivi 22: | Rivi 20: | ||
[ftp] | [ftp] | ||
host = ftp.domain.fi | host = ftp.domain.fi | ||
user = kamera | user = kamera | ||
pass = salasana | pass = salasana | ||
dir = cam | dir = cam | ||
# | # where should the file end up? Also, this extension determines the file | ||
# | # type the image is saved as. Try image.png for a png. | ||
file = webcam.jpg | file = webcam.jpg | ||
# | # camE uploads to a temp file, and moves it across when done | ||
# | # this way people don't view half-uploaded images | ||
tmp = uploading.jpg | tmp = uploading.jpg | ||
# | # keep the connection open (1) or reopen it for each shot (0) | ||
keepalive = 0 | keepalive = 0 | ||
# | # do passive ftp? | ||
passive = 0 | passive = 0 | ||
# | #an interface to use for non-passive ftp. use "-" to let libcurl choose, or | ||
# | #use a real interface name. (libcurl often chooses incorrectly) | ||
interface = - | interface = - | ||
# ftp | # ftp debugging? (noisy) | ||
debug = | debug = 1 | ||
# | # Actually do the upload? If do = 0, just take and archive pics. | ||
do = 1 | do = 1 | ||
# | # Some servers require us to explicitly delete the previous image | ||
# | # In that case, enable this option | ||
delete_first = 0 | delete_first = 0 | ||
# | # Determines how many shots are taken before an image is uploaded. | ||
# (1 == | # (1 == every picture is uploaded, 10 would be every 10th image) | ||
# ( | # (Defaults to 1 if not present) | ||
upload_every = 1 | upload_every = 1 | ||
[scp] | [scp] | ||
# | # you can set ftp->do to 0 above and use scp instead - you still need | ||
# | # the dir, file and tmp settings in the ftp section for this to work. | ||
# scp also honors the upload_every setting from the ftp section, and | |||
# will also default to a value of 1 if not present. | |||
#target = user@ssh.domain.fi | #target = user@ssh.domain.fi | ||
[grab] | [grab] | ||
device = /dev/video0 | device = /dev/video0 | ||
# | # store temp image on local machine | ||
temp_file = /tmp/webcam.jpg | temp_file = /tmp/webcam.jpg | ||
# | # lag reduction, takes 5 shots, discards the first 4, thus clearing mmap | ||
# buffers | |||
lag_reduce = 5 | lag_reduce = 5 | ||
# | # This goes at the bottom left, with the message from "infofile" appended. | ||
# | # It is run through strftime, so date vars are expanded. | ||
text = %d/%m/%Y %H:%M:%S %Z | text = %d/%m/%Y %H:%M:%S %Z | ||
width = 352 | width = 352 | ||
height = 288 | height = 288 | ||
# | # delay between uploading one shot and starting the next | ||
delay = 2 | delay = 2 | ||
# | # do we want to correct the delay for a slow connect? | ||
#( | # (keeps the perpetually updating clients in sync) | ||
correct = 1 | correct = 1 | ||
# | # scale image resolution dynamically based on bandwidth? | ||
# | # percentage of the delay to spend uploading the image, | ||
# 100 | # 100 disables, useful values are < 40 | ||
percent = 100 | percent = 100 | ||
# | # where to log activity. comment out this line to disable logging | ||
logfile = /home/user/Temp/.camlog | logfile = /home/user/Temp/.camlog | ||
# | # gets the message text from here. one line allowed only. means you can do | ||
# | # stuff like echo "sleeping and stuff" > ~/.caminfo | ||
#infofile = /home/user/.caminfo | #infofile = /home/user/.caminfo | ||
# | # directory to archive pics in. They are datestamped and saved in here. | ||
archive = /var/www/cam/archive | archive = /var/www/cam/archive | ||
# | # archive pics in datestamped subdirs | ||
# (1 == | # (1 == with subdirs, 0 == without subdirs) | ||
archive_subdirs = 0 | archive_subdirs = 0 | ||
# | # extension (determines type) of archived images. | ||
archive_ext = jpg | archive_ext = jpg | ||
# determines how many shots are taken before a pic is archived | # determines how many shots are taken before a pic is archived | ||
# (1 == every pic, 0 == don't archive) | # (1 == every pic, 0 == don't archive) | ||
archive_shot_every = 100 | archive_shot_every = 100 | ||
# | # create archive thumbnails enable/disable flag and give width/height | ||
archive_thumbnails_dir = /opt/images/webcam/thumbnails | archive_thumbnails_dir = /opt/images/webcam/thumbnails | ||
archive_thumbnails_create = 0 | archive_thumbnails_create = 0 | ||
Rivi 127: | Rivi 121: | ||
archive_thumbnails_height = 90 | archive_thumbnails_height = 90 | ||
# jpeg | # jpeg quality (you can save as png etc too, but then quality does squat) | ||
quality = 85 | quality = 85 | ||
input = 0 | input = 0 | ||
# 0 | # 0 for PAL, 1 for NTSC | ||
norm = 0 | norm = 0 | ||
# | # Goes in the top right. strftime() is run on this too, so put date stuff in | ||
# if you like | |||
title_text = Weppikamera | title_text = Weppikamera | ||
# | # color/transparency of title text | ||
title_r = 255 | title_r = 255 | ||
title_g = 255 | title_g = 255 | ||
Rivi 143: | Rivi 138: | ||
title_a = 255 | title_a = 255 | ||
# | # font for title text. fontname/size | ||
title_font = arial/8 | title_font = arial/8 | ||
# | # fancy font styles | ||
# title_style = /path/to/title.style | # title_style = /path/to/title.style | ||
# | # color/transparency of message text | ||
text_r = 255 | text_r = 255 | ||
text_g = 255 | text_g = 255 | ||
Rivi 154: | Rivi 149: | ||
text_a = 255 | text_a = 255 | ||
# | # font for message text. fontname/size | ||
text_font = arial/8 | text_font = arial/8 | ||
Rivi 166: | Rivi 161: | ||
bg_a = 100 | bg_a = 100 | ||
# | # directory to look for ttf fonts in | ||
ttf_dir = /usr/share/fonts/truetype/msttcorefonts | ttf_dir = /usr/share/fonts/truetype/msttcorefonts | ||
# | # file to check for before shooting. while this file exists, no shots will be taken. | ||
blockfile = /home/user/BLOCKCAM | blockfile = /home/user/BLOCKCAM | ||
# | # image to upload when blockfile is first put in place | ||
# offline_image = /home/gilbertt/.block.jpg | # offline_image = /home/gilbertt/.block.jpg | ||
# | # File to check before shotting, while this file exists, shots will be taken. | ||
# but not uploaded. blockimage will not be uploaded if you set this. | |||
uploadblockfile = /home/user/BLOCKUPLOAD | uploadblockfile = /home/user/BLOCKUPLOAD | ||
# | # Shots will only be taken/uploaded if the specified interface is active. | ||
#watch_interface = ppp0 | #watch_interface = ppp0 | ||
Rivi 216: | Rivi 212: | ||
######################################################## | ######################################################## | ||
# | # PWC specific features (only for philps cams right now) | ||
# | # framerate of cam capture, lower fps -> less grainy image, more chance or | ||
# blurred motion | |||
framerate = 5 | framerate = 5 | ||
# | # image settings (0-100) | ||
colour = 50 | colour = 50 | ||
brightness = 50 | brightness = 50 | ||
Rivi 228: | Rivi 225: | ||
whiteness = 50 | whiteness = 50 | ||
# | # White balance mode | ||
# "auto" | # can be "auto", "indoor", "outdoor", "fluorescent" or "manual" | ||
pwc_wb_mode = auto | pwc_wb_mode = auto | ||
# | # if _mode is set to manual, these two controls affect the balance | ||
# (0-100) | # (0-100) | ||
pwc_wb_red = 50 | pwc_wb_red = 50 | ||
Rivi 239: | Rivi 236: | ||
</pre> | </pre> | ||
[[ | == index.html == | ||
Kopioi tämä tiedostoksi index.html palvelimelle ylläluotuun cam-kansioon | |||
<pre> | |||
{{ | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> | ||
<?xml version="1.0" encoding="utf-8"?> | |||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> | |||
<head> | |||
<title>OmaKamera</title> | |||
<link rel="stylesheet" href="style.css"> | |||
</head> | |||
<body onload='refreshcam();'> | |||
<div id="page"> | |||
<div id="upper"> | |||
<img id="feed" src="webcam.jpg" alt="live feed" style="width:640px; height: 480;"> | |||
<p>Minun Oma Weppikamera. | |||
</p> | |||
</div> | |||
</div> | |||
</body> | |||
<script type="text/javascript" src="cam.js"></script> | |||
</html> | |||
</pre> | |||
== cam.js == | |||
Kopioi tämä tiedostoksi cam.js palvelimelle ylläluotuun cam-kansioon | |||
<pre> | |||
var refreshrate = 2000; | |||
var ns4 = (document.layers); | |||
var ie4 = (document.all && !document.getElementById); | |||
var ie5 = (document.all && document.getElementById); | |||
var ns6 = (!document.all && document.getElementById); | |||
var loadingimage = new Image(); | |||
var e = kGetElement('feed'); | |||
function kGetElement(id) { | |||
if (ns4) return document.layers[id]; | |||
else if (ie4) return document.all[id]; | |||
else if (ie5 || ns6) return document.getElementById(id); | |||
else return false; | |||
} | |||
function loaded() { | |||
if (!e) e = kGetElement('feed'); | |||
if (e) e.src = this.src; | |||
} | |||
function refreshcam() { | |||
if (loadingimage.complete || ie4 || ie5) { | |||
var now = new Date(); | |||
loadingimage = new Image(); | |||
loadingimage.onload = loaded; | |||
loadingimage.src = 'webcam.jpg?' + now.getTime(); | |||
} | |||
setTimeout('refreshcam()', refreshrate); | |||
} | |||
</pre> | |||
== style.css == | |||
Kopioi tämä tiedostoksi style.css palvelimelle ylläluotuun cam-kansioon | |||
<pre> | |||
body { | |||
background-color: #1e1e1e; | |||
color: #E0E0E0; | |||
text-align: center; | |||
font-family: verdana; | |||
font-size: 11px; | |||
padding: 0px; | |||
margin: 12px; | |||
} | |||
h1 { | |||
font-size: 30px; | |||
} | |||
a { | |||
color: #3551FB; | |||
text-decoration: none; | |||
background-color: transparent; | |||
} | |||
a:hover { | |||
color: #5671FC; | |||
text-decoration: underline; | |||
background-color: transparent; | |||
} | |||
#page { | |||
margin: auto; | |||
background-color: black; | |||
width: 660px; | |||
height: 570px; | |||
border: 1px solid #353535; | |||
text-align: center; | |||
} | |||
#upper { | |||
width: 800px; | |||
margin: auto; | |||
margin-top:10px; | |||
margin-left:10px; | |||
margin-right:10px; | |||
text-align: left; | |||
padding-top: 0px; | |||
} | |||
</pre> |