본문 바로가기
라즈베리파이

라즈베리파이 웹캠 - motion

by YJHTPII 2022. 5. 18.
반응형

https://m.blog.naver.com/gauya/220043939422

 

라즈베리파이 웹캠 - motion

예전에 설치하고 실망했었는데 또 한번 설치해본다. pi@raspberrypi ~ $ lsusb Bus 001 Device 002: ID...

blog.naver.com

 

 

 

예전에 설치하고 실망했었는데 또 한번 설치해본다.

 

pi@raspberrypi ~ $ lsusb

Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.

Bus 001 Device 005: ID 0bda:58bb Realtek Semiconductor Corp.

Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

 

  • 설치
 

pi@raspberrypi ~ $ sudo apt-get install motion

Reading package lists... Done

Building dependency tree

Reading state information... Done

Suggested packages:

  mysql-client

The following NEW packages will be installed:

  motion

0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.

Need to get 259 kB of archives.

After this operation, 758 kB of additional disk space will be used.

Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main motion armhf 3.2.12-3.4 [259 kB]

Fetched 259 kB in 1s (175 kB/s)

Preconfiguring packages ...

Selecting previously unselected package motion.

(Reading database ... 112932 files and directories currently installed.)

Unpacking motion (from .../motion_3.2.12-3.4_armhf.deb) ...

Processing triggers for man-db ...

Setting up motion (3.2.12-3.4) ...

Adding group `motion' (GID 119) ...

Done.

Adding system user `motion' (UID 114) ...

Adding new user `motion' (UID 114) with group `motion' ...

Not creating home directory `/home/motion'.

Adding user `motion' to group `video' ...

Adding user motion to group video

Done.

[warn] Not starting motion daemon, disabled via /etc/default/motion ... (warning).  <- 기본으로 깔면서 자동 실행하지 않도록 돼있다.

 

 

  • 몇가지 설정하고

관련 파일들 

/etc/default/motion   --> enable / disable

/etc/init.d/motion     --> 참고만

/etc/motion/motion.conf  --> 꽤 많다.

 
/tmp/motion/
 
 
  • 서비스 구동
pi@raspberrypi ~ $ sudo service motion restart

[ ok ] Restarting motion...[....] Stopping motion detection daemon: motion.

[ ok ] Starting motion detection daemon: motion.

done.

 
실행은 되지만 데이타베이스 설정등도 안된 상태
 
 
  • DB로 로그기록하기
 
mysql과 postgresql 두가지를 지원한다.
 
# Authentication for the http based control. Syntax username:password
# Default: not defined (Disabled)
; control_authentication username:password
 
############################################################
# Common Options For MySQL and PostgreSQL database features.
# Options require the MySQL/PostgreSQL options to be active also.
############################################################
 
# Log to the database when creating motion triggered image file  (default: on)
 
sql_log_image on
 
# Log to the database when creating a snapshot image file (default: on)
sql_log_snapshot on
 
# Log to the database when creating motion triggered mpeg file (default: off)
sql_log_mpeg off
 
# Log to the database when creating timelapse mpeg file (default: off)
sql_log_timelapse off
 
# SQL query string that is sent to the database
# Use same conversion specifiers has for text features
# Additional special conversion specifiers are
# %n = the number representing the file_type
# %f = filename with full path
# Default value:
# insert into security(camera, filename, frame, file_type, time_stamp, text_event) values('%t', '%f', '%q', '%n', '%Y-%m-%d %T', '%C')
sql_query insert into security(camera, filename, frame, file_type, time_stamp, event_time_stamp) values('%t', '%f', '%q', '%n', '%Y-%m-%d %T', '%C')
 
############################################################
# Database Options For PostgreSQL
############################################################
 
# PostgreSQL database to log to (default: not defined)
; pgsql_db value
 
# The host on which the database is located (default: localhost)
; pgsql_host value
 
# User account name for PostgreSQL database (default: not defined)
; pgsql_user value
 
# User password for PostgreSQL database (default: not defined)
; pgsql_password value
 
# Port on which the PostgreSQL database is located (default: 5432)
; pgsql_port 5432
 
제어 포트를 통해 웹으로 접근하면 다음과 같은 현재 설정을 얻을수 있다.
내가 설정해놓은 비번들까지 그대로 노출되고 원격으로 바꿀수도 있으며 서비스 정지,재기동도 할수 있어 제어포트는 꼭 인증한 뒤에 들어갈 수 있도록 해둔다.
 
Thread 0
사이즈 선택에서 종종 오류가 난다. 허용된 사이즈를 다음과 같이 확인하고 설정한다.
가로만 정확히 설정했으면 세로는 입력하지 않으면 자동으로 잡히므로 크기에서 오류가 나올때 세로를 입력하지 않는것도 방법이다.
주로 팔렛트와 그 팔레트에서 지원하지 않는 크기를 입력할때 나온다.
 
pi@raspberrypi /etc/motion $ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'MJPG' (compressed)
        Name        : MJPEG
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x360
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 960x720
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1024x576
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1280x960
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1392x768
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1600x896
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.067s (15.000 fps)
 
        Index       : 1
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUV 4:2:2 (YUYV)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x360
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.050s (20.000 fps)
                Size: Discrete 960x720
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 1024x576
                        Interval: Discrete 0.125s (8.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.125s (8.000 fps)
                Size: Discrete 1280x960
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1392x768
                        Interval: Discrete 0.125s (8.000 fps)
                Size: Discrete 1600x896
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.200s (5.000 fps)
 
 
  • 데이타베이스 log기록
모션감지나 스냅샷 등 이미지가 기록될때 DB에 정보를 기록해준다.
사용자가 간편히 모션감지가 있었는지 또는 가장 최근 이미지을 얻고 싶을때 디비쿼리로 웹화면을 만들거나 조회등을 할 수 있다. 
Mysql과 PHP의 조합이 많이 쓰이지만 Postgres로 
 
web전용의 사용자 web와 DB www를 pi가 만들고 www DB의 사용권만 web에게 줌
 
pi@raspberrypi /etc/motion $ createuser -Pe web
Enter password for new role:
Enter it again:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
CREATE ROLE web PASSWORD 'md5ff627d01aff366279288a2209db2262f' NOSUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
 
pi@raspberrypi /etc/motion $ psql
psql (9.1.13)
Type "help" for help.
 
pi=# create database www;
CREATE DATABASE
pi=# \c www
You are now connected to database "www" as user "pi".
www=# CREATE TABLE security (camera int, filename text not null, frame int, file_type int, time_stamp timestamp, text_event text);
CREATE TABLE
www=# \d security
               Table "public.security"
   Column   |            Type             | Modifiers
------------+-----------------------------+-----------
 camera     | integer                     |
 filename   | text                        | not null
 frame      | integer                     |
 file_type  | integer                     |
 time_stamp | timestamp without time zone |
 text_event | text                        |
 
www=# grant all on table security to web;
GRANT
pi=# alter user web password 'web';
ALTER ROLE
 
~~
재구동 시켰지만 DB에 데이타가 쌓이지 안는다.
 
tail -f /var/log/syslog
Jun 29 16:44:39 raspberrypi motion: [1] Started stream webcam server in port 9091
Jun 29 16:44:43 raspberrypi motion: [1] PGSQL query failed: Success
뭔가 오류가 있다.
 
 
tail -30 /var/log/postgresql/postgresql-9.1-main.log
2014-06-29 16:45:38 KST STATEMENT:  insert into security(camera, filename, frame, file_type, time_stamp, event_time_stamp) values('1', '/var/samba/log/motion/01-20140629164537-01.jpg', '01', '1', '2014-06-29 16:45:37', '20140629164443')
2014-06-29 16:45:38 KST ERROR:  column "event_time_stamp" of relation "security" does not exist at character 70
 
==> 
create문장을 예전꺼 긁어했는데 그새 칼럼이름이 바뀌었나보다.
 
www=# alter table security rename text_event to event_time_stamp;
ALTER TABLE
 
최근 기록을 보는 일이 많을것 같아 시간에 index하나 걸고
 
www=# create index on security (time_stamp) ;
CREATE INDEX
 
 
이렇게 안될까?
 
스넵사진을 motion이 감지된 상태에서 좀 더 텀을 길게 잡고 싶다. 해상도도 아주 컷으면 좋은데...
또 내 화상캠은 마이크가 붙어있는건데 소리도 나게 안되나?
 
  • 느낌
motion은 이름에서 보다시피 모션감지하는 프로그램이다.
영상데이타 스트리밍을 하는 마땅한 어플이 없어 모션으로 쓰려고 하는데 욕심만큼 시원스레 해주지는 못하지만 예전보다는 좋아졌고 모션감지는 다른 프로그램이 해주기 어려울만큼 괜찮아 보인다. 
몇분 돌다가 죽어버리던 1년전과는 달리 확실히 안정적이고 DB에 처리log를 쌓아줘서 활용성도 높다. 아마 죽어버리던 일은 motion때문이 아니라 드라이버문제였던 듯하다.
 
timelapse는 꽤 쓸만한데 해상도만 좋다면 아예 타임랩스 전용으로 써도 좋을듯하다.
가장 아쉬운건 실시간성인데 대략 1~3초 지연이 되고 있다. 내 설정에 문제가 있어서일까? 암튼 지금 내 파이환경에선 그렇다. 
최소의 해상도에 프레임도 아주 작게해봐도 같은 현상이 나오는걸로 봐서 해상도나 네트워크트래픽문제는 아닌듯하다.
 
 
DB를 쓰므로써
- motion감지되거나 타임랩스에 DB에서 트리거를 이용해서 특별한 작업(알림,기타)을 할수 있다.
- 통계를 내볼수 있고 웹에서 접근하기가 좋다.
 
 
그러나 아무래도 스트리밍은 mjpg_streamer가 가장 낫다.
 
 
<도움>

http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome

http://pingbin.com/2012/12/raspberry-pi-web-cam-server-motion/

http://www.lavrsen.dk/foswiki/bin/view/Motion/MotionGuideSpecialFeatures#PostgreSQL

 

 

반응형

댓글