• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

Motion Detection with RaspiCam, Non-Module version

Scheduled Pinned Locked Moved Tutorials
47 Posts 13 Posters 41.7k Views 17 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    bhepler Module Developer
    last edited by Nov 14, 2016, 2:50 AM

    First, I want thank @alexyak for his motioncontrol module. Unfortunately for me, it doesn’t work on my Mirror due to new security controls put in place by the Node.js team. Apparently it’s not a wise move to let client-side Javascript access the webcam attached to your server. Who knew?

    In the end, I ended up seeking another solution. The Facial Recognition module didn’t work due to the reduction in light coming through the mirror itself. But I do get an image. I started browsing sites of people who have turned their Raspi into a security system. It turns out, someone ported the Motion framework to Raspberry Pi and called it MMAL-Motion.

    After a lot of reading, I found a Wiki for MMAL Motion. Following the steps for Jessie, I did the following:

    • Change to your home directory. cd ~
    • Install the library dependencies (just copy & paste into the terminal. I wouldn’t want to do this by hand)
      sudo apt-get install -y libjpeg-dev libavformat56 libavformat-dev libavcodec56 libavcodec-dev libavutil54 libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev
    • Download the precompiled binary archive file:
      wget https://www.dropbox.com/s/6ruqgv1h65zufr6/motion-mmal-lowflyerUK-20151114.tar.gz
    • Uncompress the archive file
      tar -zxvf motion-mmal-lowflyerUK-20151114.tar.gz

    This will put a configuration file called motion-mmalcam-both.conf and a folder called motion in your home folder. At this step you can test it if you like, but for my purposes I needed to make a few changes tot the config file. So, make a copy and edit the copy.
    cp motion-mmalcam-both.conf motion.conf
    nano motion.conf
    I played around with the configuration quite a bit until I found one I liked. But for our purposes (turning the display on when someone comes near) you only have to make a few changes.
    framerate 4 - run the detection video at 4 frames per second
    threshold 2500 - increase the # of pixels to trigger the screen. We want them to get close to the mirror
    minimum_motion_frames 2 - Motion must be detected in 2 consecutive frames (at 4 FPS)
    event_gap 60 - This is important. This is how long in seconds after no motion the screen will turn off.
    output_pictures off - Do not save images
    ffmpeg_output_movies off - Do not record video
    stream_port 0 - Turn off remote viewing
    webcontrol_port 0 - Turn off HTTP control of camera
    on_event_start vcgencmd display_power 1 - Important! This is the command to turn on the screen
    on_event_end vcgencmd display_power 0 - Important! This is the command to turn off the screen

    Save your motion.conf file and now you can test it out by entering ./motion -c motion.conf. If you stay very still for a minute, the screen should turn off. Move close to the mirror, and everything should come back after a couple seconds.

    B N 2 Replies Last reply Nov 14, 2016, 7:46 PM Reply Quote 3
    • B Offline
      bibi @bhepler
      last edited by Nov 14, 2016, 7:46 PM

      hi @bhepler ! thx for sharing your findings!i will try this settings later this week. before to get into it, could you please let me know if it will also work without a RaspiCam?? usb camera is ok? where did you put/hide your own cam? thx :)

      B 1 Reply Last reply Nov 14, 2016, 8:20 PM Reply Quote 0
      • B Offline
        bhepler Module Developer @bibi
        last edited by Nov 14, 2016, 8:20 PM

        @bibi I haven’t tried it with a USB cam, but it should work. In the config file, there is a switch to throw if you’re using a USB cam (and different switches to throw if you’re using a network cam - which raises interesting possibilities).

        My camera is mounted above the monitor & behind the one-way acrylic. My monitor is smaller than my acrylic by about 2" on a side. This is good in that it’s a very clean installation and you don’t see a camera when you look at the mirror. It’s bad in that it cuts down on the light reaching the camera, preventing the facial recognition from working.

        1 Reply Last reply Reply Quote 1
        • B Offline
          bhepler Module Developer
          last edited by bhepler Nov 16, 2016, 1:28 AM Nov 16, 2016, 1:24 AM

          Hrm. New problem: After a few hours, the screen goes white. This obviously will not do. Back to the drawing board.

          I found this in the motion log:

          [1] [NTC] [ALL] [Nov 15 20:25:02] motion_loop: End of event 74
          [1] [NTC] [ALL] [Nov 15 20:25:04] motion_loop: fps: 3.999920 idle 26.67% over 0.00%
          [1] [NTC] [ALL] [Nov 15 20:25:09] motion_loop: fps: 3.998465 idle 24.89% over 0.00%
          [1] [ERR] [ENC] [Nov 15 20:25:10] ffmpeg_put_frame: Error while writing video frame:
          [1] [NTC] [ALL] [Nov 15 20:25:10] motion_loop: Thread exiting
          [1] [INF] [ALL] [Nov 15 20:25:10] motion_cleanup: Calling vid_close() from motion_cleanup
          [1] [INF] [VID] [Nov 15 20:25:10] vid_close: calling video source cleanup
          [1] [ALR] [VID] [Nov 15 20:25:10] MMAL Camera cleanup
          [0] [NTC] [ALL] [Nov 15 20:25:11] main: Threads finished
          [0] [NTC] [ALL] [Nov 15 20:25:12] main: Motion terminating
          [0] [NTC] [ALL] [Nov 15 20:25:12] motion_remove_pid: Removed process id file (pid file).
          [0] [NTC] [ALL] [Nov 15 20:25:12] motion_remove_pid: Closing logfile (/tmp/motion.log).
          
          1 Reply Last reply Reply Quote 0
          • B Offline
            bhepler Module Developer
            last edited by bhepler Nov 18, 2016, 7:20 PM Nov 18, 2016, 7:19 PM

            I believe I have it cracked. The white screen was due to MMAL Motion crashing whilst writing a frame to disk. When Motion crashes, it apparently jacks up the video output.

            My current solution is to use PM2 to monitor the motion process and restart it when necessary. I’m testing now. If it works for a few more days I’ll report back.

            Adding motion to PM2: pm2 start motion. Be sure that the motion is not configured to run as a daemon (first option in config file).

            L 1 Reply Last reply Nov 18, 2016, 7:58 PM Reply Quote 1
            • L Offline
              lolobyte @bhepler
              last edited by lolobyte Nov 18, 2016, 8:39 PM Nov 18, 2016, 7:58 PM

              @bhepler

              Hi, i do the same at first and restor my sw installation.
              But after the same procedure of sw installation this error was again on top.

              I resolve, by my sw, the reason for that was: motion must start after pm2 startin mm.

              My mm start’s automaticly after rebooting.
              My motion also. => collision of SW.

              By doing motion in an cron job with delay time al was fun an running as iwant.

              in my case i do following:
              don’t foget to install screen.

              sudo apt-get intsall screen

              My motion is running in a screen session.
              then the cronjob

              crontab -e

              and set motion with following parameters:

              @reboot sleep 150; screen -S motion -dmS sudo motion -c /home/pi/motion/motion-mmalcam.conf

              i hope this is helpfull for you and other persons here.

              B 1 Reply Last reply Feb 24, 2017, 8:31 PM Reply Quote 1
              • B Offline
                bhepler Module Developer
                last edited by Nov 30, 2016, 4:11 PM

                Update: Having PM2 monitor the motion process seems to work quite well. However, I have now discovered that there is a memory leak somewhere in all of this. Using the MMM-SystemStats module, I can watch free memory trickle down throughout the day.

                I’ve configured the Pi to reboot early each morning. That’s not an ideal situation, but it seems to have solved the problem. Good enough for me! And more importantly, good enough for the gift recipient.

                L 1 Reply Last reply Nov 30, 2016, 4:39 PM Reply Quote 0
                • L Offline
                  lolobyte @bhepler
                  last edited by Nov 30, 2016, 4:39 PM

                  @bhepler

                  have u increase the swapfile?

                  B 1 Reply Last reply Nov 30, 2016, 5:51 PM Reply Quote 0
                  • B Offline
                    bhepler Module Developer @lolobyte
                    last edited by Nov 30, 2016, 5:51 PM

                    @lolobyte Negative, I have not. What would you recommend?

                    L 1 Reply Last reply Nov 30, 2016, 7:29 PM Reply Quote 0
                    • L Offline
                      lolobyte @bhepler
                      last edited by lolobyte Nov 30, 2016, 7:30 PM Nov 30, 2016, 7:29 PM

                      @bhepler
                      in general it’s not bad for a raspi3 to increase the swapfile from 100MB to a higher level.

                      at first check your status:
                      sudo service dphys-swapfile status
                      U see something like this:

                      ● dphys-swapfile.service - LSB: Autogenerate and use a swap file
                      Loaded: loaded (/etc/init.d/dphys-swapfile)
                      Active: active (exited) since Mi 2016-11-30 13:17:14 CET; 6h ago
                      Process: 613 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0 /SUCCESS)

                      Nov 30 13:17:13 raspi3 systemd[1]: Starting LSB: Autogenerate and use a swa…
                      Nov 30 13:17:14 raspi3 dphys-swapfile[613]: Starting dphys-swapfile swapfile…
                      Nov 30 13:17:14 raspi3 dphys-swapfile[613]: want /var/swap=1024MByte, checki…t
                      Nov 30 13:17:14 raspi3 dphys-swapfile[613]: done.
                      Nov 30 13:17:14 raspi3 systemd[1]: Started LSB: Autogenerate and use a swap…e.
                      Hint: Some lines were ellipsized, use -l to show in full.

                      Maybe u have 100MB instead of 1024 like in my case.

                      If u want to change this value the edit your

                      sudo nano /etc/dphys-swapfile

                      change to this value and save your file

                      CONF_SWAPSIZE=1024

                      the do a

                      sudo dphys-swapfile setup

                      and activate your new swap level:

                      sudo dphys-swapfile swapon

                      thats all. Now your System can handle wit more than his physical RAM.

                      In My case i do in raspi-config a new

                      “Expand File system”

                      to reorganize the file system an reboot after that my raspi.
                      If you are a owner of a raspi 2 it’s more common to change the swap file to max 512MB.

                      please inform me what’s your experience after this change

                      you can also check very niche your tasks mem, swap and other things in a ssh session on your PC with htop

                      sudo apt-get install htop

                      have a nice try

                      1 Reply Last reply Reply Quote 0
                      • 1
                      • 2
                      • 3
                      • 4
                      • 5
                      • 1 / 5
                      • First post
                        Last post
                      Enjoying MagicMirror? Please consider a donation!
                      MagicMirror created by Michael Teeuw.
                      Forum managed by Sam, technical setup by Karsten.
                      This forum is using NodeBB as its core | Contributors
                      Contact | Privacy Policy