{"id":210,"date":"2011-12-06T15:55:54","date_gmt":"2011-12-06T14:55:54","guid":{"rendered":"http:\/\/haos.hopto.org\/blog\/?p=210"},"modified":"2019-12-24T10:35:55","modified_gmt":"2019-12-24T09:35:55","slug":"monitorowanie-web-camem","status":"publish","type":"post","link":"https:\/\/haos.hopto.org\/blog\/2011\/12\/06\/monitorowanie-web-camem\/","title":{"rendered":"Monitorowanie web-cam&#8217;em"},"content":{"rendered":"\n<p>Dawno dawno temu w odleg\u0142ej galaktyce&#8230; kupi\u0142em kamerk\u0119 \ud83d\ude09<\/p>\n\n\n\n<p>By\u0142a to <a href=\"http:\/\/support.creative.com\/Products\/ProductDetails.aspx?catID=218&amp;subCatID=219&amp;prodID=16959&amp;prodName=Live!%20Cam%20Vista%20IM%20(VF0420)&amp;subCatName=WebCam&amp;CatName=Web+Cameras\" target=\"_blank\" rel=\"noopener noreferrer\">VF0420 Live! Cam Vista IM<\/a><br>Szybko znudzi\u0142a mi si\u0119 jako zabawka do &#8222;pogaduch sieciowych&#8221; i postanowi\u0142em zrobi\u0107 z niej u\u017cytek do monitorowania obiektu czy te\u017c posesji.<br>Dlatego te\u017c, wystawi\u0142em j\u0105 przez okno aby obserwowa\u0142a wej\u015bcie na teren dzia\u0142ki, podpi\u0105\u0142em pod maszyn\u0119 Linuksow\u0105 (Gentoo).<\/p>\n\n\n\n<p>U\u017cy\u0142em &#8222;kernelowych&#8221; sterownik\u00f3w <a title=\"gspca\" href=\"http:\/\/mxhaard.free.fr\/spca5xx.html\" target=\"_blank\" rel=\"noopener noreferrer\">gspca<\/a>(model ov519) oraz zainstalowa\u0142em soft do robienia zrzut\u00f3w, <a title=\"MJPG-Streamer\" href=\"https:\/\/sourceforge.net\/projects\/mjpg-streamer\/\" target=\"_blank\" rel=\"noopener noreferrer\">MJPG-Streamer<\/a>.<br>MJPG-Streamer udost\u0119pnia stream w formacie MJPG (kt\u00f3ry na dobr\u0105 spraw\u0119 generuje sama kamera) z bardzo ma\u0142ym narzutem na CPU.<br>Opr\u00f3cz streamu mo\u017cna te\u017c \u0142apa\u0107 pojedyncze klatki obrazu JPG co w\u0142a\u015bnie najbardziej mnie interesowa\u0142o.<br>Skrypt bash podpi\u0119ty do cron&#8217;a co 10 minut pobiera klatk\u0119 obrazu z kamerki i wrzuca j\u0105 do katalogu przy u\u017cyciu mechanizmu&nbsp;rotacyjnego.<br>Inny skrypt PHP przeszukuje katalog i wy\u015bwietla wszystkie obrazy JPG pasuj\u0105ce do wzorca nazwy w formacie tabelki obrazk\u00f3w. Dodatkowo codziennie o 22:00 inny skrypt u\u017cywaj\u0105c mencoder&#8217;a \u0142\u0105czy te JPG-i i tworzy wideo, niejako tworz\u0105c przyspieszony obraz wydarze\u0144 z ca\u0142ego dnia rejestrowania kamery.<\/p>\n\n\n\n<p>Skrypt wyci\u0105gaj\u0105cy JPG-i z deamona MJPG-streamer:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n#!\/bin\/bash\n\n#gets image from webcam served and saves it into first param\nfunction shot()\n{\n        \/usr\/bin\/curl &quot;http:\/\/localhost:3000\/?action=snapshot&quot; -o $1 2&gt;\/dev\/null;\n}\n\n#check if webcam server(mjpg-stream) is running; quit if not\npgrep mjpg_streamer 1&gt;\/dev\/null; &#x5B; $? != 0 ] &amp;amp;&amp;amp; exit 1;\n\n#maximum number of pictures to take, if exceed - start from 0\npic_num=144;\n#where the pics are stored\ncd \/var\/www\/localhost\/htdocs\/webcamgallery\/\n#set permissions accordingly\numask -S o+r 1&gt;\/dev\/null;\n\n#set current picture name accordingly\nline=`\/bin\/ls *current* 2&gt;\/dev\/null | \/usr\/bin\/gawk 'BEGIN { FS=&quot;-&quot;;} \/current\/ { printf(&quot;%s %i out-current-%i-.jpg out-%i.jpg out-%i.jpg&quot;, $0, $3, ($3 + 1) &gt; '$pic_num' ? 0 : ($3 + 1), $3, ($3 + 1) &gt; '$pic_num' ? 0 : ($3 + 1) ); }' -`;\n\n#make screenshot\nif &#x5B; &quot;$line&quot; == &quot;&quot; ]; then\n        #echo bummer!\n        shot &quot;out-current-0-.jpg&quot;;\nfi\n\n#format variables\nset -- ${line#*:}; current=$1 num=$2 new_current=$3 old_current=$4 kwas=$5;\n\n#move current image to old current and new pic shot to current\nmv -f $current $old_current 2&gt;\/dev\/null;\nmv -f $kwas $new_current 2&gt;\/dev\/null;\n\nshot $new_current;\n<\/pre><\/pre>\n\n\n\n<p>To natomiast jest skrypt robi\u0105cy film(y) z obrazk\u00f3w JPG:<\/p>\n\n\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n#!\/bin\/bash\n\n#go to images location\ncd \/var\/www\/localhost\/htdocs\/webcamgallery;\nj=0;\n\n#make poster from 1st image and change other out*jpg images names to new*.jpg\nfor file in `ls -tr out*jpg`; do\nif &#x5B; &quot;$j&quot; == &quot;0&quot; ]; then\n\/bin\/cp -f $file poster.jpeg;\nfi\n\/bin\/cp -f $file `printf &quot;new-%03d.jpg&quot; $j`; j=$((j+1));\ndone;\n\n#make WebM video from new* images\nmencoder mf:\/\/new*.jpg -mf w=640:h=480:fps=15:type=jpg -really-quiet -nosound -ovc lavc -ffourcc VP80 -of lavf -lavfopts format=webm -lavcopts vcodec=libvpx -o video.webm\n\n#make video.mp4 video fro flash from new*images\nffmpeg -y -i new-%03d.jpg -vcodec libx264 -level 41 -crf 25 -bufsize 20000k -maxrate 25000k -g 250 -r 20 -s 640x480 -coder 1 -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -rc_eq 'blurCplx^(1-qComp)' -bf 16 -b_strategy 1 -bidir_refine 1 -refs 6 -deblockalpha 0 -deblockbeta 0 -v 0 -loglevel quiet video.mp4 2&amp;amp;amp;amp;amp;gt; \/dev\/null\n\n#set permissions\nchmod 644 video.webm video.mp4 poster.jpeg\n#remove unneccessary new images - cleanup\nrm -f new*jpg\n<\/pre>\n\n\n\n<p>Dodatkowo jest jeszcze troch\u0119 kodu PHP kt\u00f3ry wy\u015bwietla zrzuty JPG\u00f3w z ca\u0142ego dnia w tabelaryczny i uporz\u0105dkowany spos\u00f3b ale nie ma sensu tego pokazywa\u0107.<\/p>\n\n\n\n<p>Ko\u0144cowy efekt mo\u017cna podziwia\u0107 tu: <a title=\"http:\/\/haos.hopto.org\/webcamgallery\/\" href=\"http:\/\/haos.hopto.org\/webcamgallery\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/haos.hopto.org\/webcamgallery\/<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dawno dawno temu w odleg\u0142ej galaktyce&#8230; kupi\u0142em kamerk\u0119 \ud83d\ude09 By\u0142a to VF0420 Live! Cam Vista IMSzybko znudzi\u0142a mi si\u0119 jako zabawka do &#8222;pogaduch sieciowych&#8221; i postanowi\u0142em zrobi\u0107 z niej u\u017cytek do monitorowania obiektu czy te\u017c posesji.Dlatego te\u017c, wystawi\u0142em j\u0105 przez &hellip;<\/p>\n<p class=\"read-more\"><a href=\"https:\/\/haos.hopto.org\/blog\/2011\/12\/06\/monitorowanie-web-camem\/\">Czytaj wi\u0119cej &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3,1],"tags":[50],"class_list":["post-210","post","type-post","status-publish","format-standard","hentry","category-developer","category-linux","category-uncategorized","tag-webcam-monitoring"],"_links":{"self":[{"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/posts\/210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/comments?post=210"}],"version-history":[{"count":53,"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/posts\/210\/revisions"}],"predecessor-version":[{"id":940,"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/posts\/210\/revisions\/940"}],"wp:attachment":[{"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/media?parent=210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/categories?post=210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/haos.hopto.org\/blog\/wp-json\/wp\/v2\/tags?post=210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}