https://m.blog.naver.com/gauya/220043939422
예전에 설치하고 실망했었는데 또 한번 설치해본다.
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.
실행은 되지만 데이타베이스 설정등도 안된 상태
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
- daemon = on
- process_id_file = /var/run/motion/motion.pid
- setup_mode = off
- videodevice = /dev/video0
- v4l2_palette = 6
- input = 8
- norm = 0
- frequency = 0
- rotate = 0
- width = 320
- height = 240
- framerate = 100
- minimum_frame_time = 0
- netcam_url = (not defined)
- netcam_userpass = (not defined)
- netcam_http = 1.0
- netcam_proxy = (not defined)
- netcam_tolerant_check = off
- auto_brightness = off
- brightness = 120
- contrast = 0
- saturation = 0
- hue = 0
- roundrobin_frames = 1
- roundrobin_skip = 1
- switchfilter = off
- threshold = 1500
- threshold_tune = off
- noise_level = 32
- noise_tune = on
- despeckle = EedDl
- area_detect = (not defined)
- mask_file = (not defined)
- smart_mask_speed = 0
- lightswitch = 0
- minimum_motion_frames = 1
- pre_capture = 0
- post_capture = 10
- gap = 60
- max_mpeg_time = 3600
- output_all = off
- output_normal = best
- output_motion = off
- quality = 90
- ppm = off
- ffmpeg_cap_new = on
- ffmpeg_cap_motion = off
- ffmpeg_timelapse = 10
- ffmpeg_timelapse_mode = daily
- ffmpeg_bps = 500000
- ffmpeg_variable_bitrate = 0
- ffmpeg_video_codec = mpeg4
- ffmpeg_deinterlace = off
- snapshot_interval = 3600
- locate = off
- text_right = %Y-%m-%d\n%T-%q
- text_left = (not defined)
- text_changes = off
- text_event = %Y%m%d%H%M%S
- text_double = off
- target_dir = /var/samba/log/motion
- snapshot_filename = %v-%Y%m%d%H%M%S-snapshot
- jpeg_filename = %v-%Y%m%d%H%M%S-%q
- movie_filename = %v-%Y%m%d%H%M%S
- timelapse_filename = %Y%m%d-timelapse
- webcam_port = 9091
- webcam_quality = 80
- webcam_motion = on
- webcam_maxrate = 10
- webcam_localhost = off
- webcam_limit = 0
- control_port = 9090
- control_localhost = off
- control_html_output = on
- control_authentication = pi:imapi
- track_type = 0
- track_auto = off
- track_port = (not defined)
- track_motorx = 0
- track_motory = 0
- track_maxx = 0
- track_maxy = 0
- track_iomojo_id = 0
- track_step_angle_x = 10
- track_step_angle_y = 10
- track_move_wait = 10
- track_speed = 255
- track_stepsize = 40
- quiet = on
- on_event_start = (not defined)
- on_event_end = (not defined)
- on_picture_save = (not defined)
- on_motion_detected = (not defined)
- on_area_detected = (not defined)
- on_movie_start = (not defined)
- on_movie_end = (not defined)
- on_camera_lost = (not defined)
- sql_log_image = on
- sql_log_snapshot = on
- sql_log_mpeg = off
- sql_log_timelapse = off
- 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')
- mysql_db = (not defined)
- mysql_host = localhost
- mysql_user = (not defined)
- mysql_password = (not defined)
- pgsql_db = www
- pgsql_host = localhost
- pgsql_user = web
- pgsql_password = web
- pgsql_port = 5432
- video_pipe = (not defined)
- motion_video_pipe = (not defined)
- thread = No threads
사이즈 선택에서 종종 오류가 난다. 허용된 사이즈를 다음과 같이 확인하고 설정한다.
가로만 정확히 설정했으면 세로는 입력하지 않으면 자동으로 잡히므로 크기에서 오류가 나올때 세로를 입력하지 않는것도 방법이다.
주로 팔렛트와 그 팔레트에서 지원하지 않는 크기를 입력할때 나온다.
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)
모션감지나 스냅샷 등 이미지가 기록될때 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
댓글