Продвинутая камера, фотоловушка, регистратор. Удаленное управление и просмотр.

Тема в разделе "Raspberry Pi", создана пользователем Salomatin, 2 сен 2017.

  1. Salomatin

    Salomatin Гик

    Последнее редактирование: 2 сен 2017
    Arduino.ru, arkadyf и NikitOS нравится это.
  2. Salomatin

    Salomatin Гик

    Берем Raspberry Pi 3 подключаем камеру
    устанавливаем по инструкции
    Установка и первый запуск

    Воспользуемся штатными приложениями для захвата изображения и видео:
    Три приложения: raspistill, raspivid и raspistillyuv

    Подключаем камеру и делаем первый снимок
    Код (Bash):
    pi@raspberrypi:~ $ raspistill -o image.jpg
    В домашнем каталоге появился файл
    Код (Bash):
    pi@raspberrypi:~ $ ls -l | grep jpg
    -rw-r--r--  1 pi  pi  4626478 Sep  2 04:10 image.jpg
    Если этого не произошло, то возможно не включен модуль камеры.
    У меня системы выругалась:
    Код (Bash):
    pi@raspberrypi:~ $ raspistill -o image.jpg
    mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
    mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
    mmal: Failed to create camera component
    mmal: main: Failed to create camera component
    mmal: Camera is not enabled in this build. Try running "sudo raspi-config" and ensure that "camera" has been enabled
    В командной строке включаем так:
    Код (Bash):
    pi@raspberrypi:~ $ sudo raspi-config
    находим пункт 5
    Код (Bash):
    5 Interfacing Options  Configure connections to peripherals
    выбираем
    Код (Bash):
    P1 Camera  Enable/Disable connection to the Raspberry Pi Camera
    переключаем в положение
    enabled
    сохраняем и перегружаемся.
    Делаем первый снимок.
     
    Последнее редактирование: 4 сен 2017
    NikitOS нравится это.
  3. Salomatin

    Salomatin Гик

    nginx
    Заходим root`ом
    Код (Bash):
    pi@raspberrypi:~ $ su -l
    Обновляем сведения о пакетах
    Код (Bash):
    root@raspberrypi:~# apt-get update
    Устанавливаем
    Код (Bash):
    root@raspberrypi:~# apt-get install nginx
    Включаем в автозагрузку
    Код (Bash):
    root@raspberrypi:~# systemctl enable nginx
    Правим файл /etc/nginx/sites-available/default
    Вставляем туда кусок
    Код (Bash):
    root /var/www/html;

      autoindex  on;
      autoindex_exact_size off;
      autoindex_localtime on;
      charset utf-8;

      index index.php index.html index.htm index.nginx-debian.html;

      server_name _;
     
    Привожу полный текст исправленного файла
    Код (Bash):

    root@raspberrypi:~# cat /etc/nginx/sites-available/default
    ##
    # You should look at the following URL's in order to grasp a solid understanding
    # of Nginx configuration files in order to fully unleash the power of Nginx.
    # http://wiki.nginx.org/Pitfalls
    # http://wiki.nginx.org/QuickStart
    # http://wiki.nginx.org/Configuration
    #
    # Generally, you will want to move this file somewhere, and start with a clean
    # file but keep this around for reference. Or just disable in sites-enabled.
    #
    # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
    ##

    # Default server configuration
    #
    server {
      listen 80 default_server;
      listen [::]:80 default_server;

      # SSL configuration
      #
      # listen 443 ssl default_server;
      # listen [::]:443 ssl default_server;
      #
      # Self signed certs generated by the ssl-cert package
      # Don't use them in a production server!
      #
      # include snippets/snakeoil.conf;

      root /var/www/html;

      autoindex  on;
      autoindex_exact_size off;
      autoindex_localtime on;
      charset utf-8;

      # Add index.php to the list if you are using PHP
      index index.html index.htm index.nginx-debian.html;

      server_name _;

      location / {
      # First attempt to serve request as file, then
      # as directory, then fall back to displaying a 404.
      try_files $uri $uri/ =404;
      }

      # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
      #
      #location ~ \.php$ {
      #  include snippets/fastcgi-php.conf;
      #
      #  # With php5-cgi alone:
      #  fastcgi_pass 127.0.0.1:9000;
      #  # With php5-fpm:
      #  fastcgi_pass unix:/var/run/php5-fpm.sock;
      #}

      # deny access to .htaccess files, if Apache's document root
      # concurs with nginx's one
      #
      #location ~ /\.ht {
      #  deny all;
      #}
    }


    # Virtual Host configuration for example.com
    #
    # You can move that to a different file under sites-available/ and symlink that
    # to sites-enabled/ to enable it.
    #
    #server {
    #  listen 80;
    #  listen [::]:80;
    #
    #  server_name example.com;
    #
    #  root /var/www/example.com;
    #  index index.html;
    #
    #  location / {
    #  try_files $uri $uri/ =404;
    #  }
    #}

     
    Перегружаем сервис
    Код (Bash):
    root@raspberrypi:~# service nginx restart
    по адресу нашего устройства ( у меня это
    http://172.16.5.38/
    открывается тестовая страница
     
    Последнее редактирование: 2 сен 2017
    NikitOS нравится это.
  4. Salomatin

    Salomatin Гик

    Выкладываем снимки и ролики для удаленного просмотра

    Заходим root`ом
    Код (Bash):
    pi@raspberrypi:~ $ su -l
    Создаем каталог и даем ему доступ
    Код (Bash):
    root@raspberrypi:~# mkdir /var/www/html/foto;chmod 777 /var/www/html/foto
    выходим
    Код (Bash):
    root@raspberrypi:~# exit
    logout
    pi@raspberrypi:~ $
    и уже от имени пользователя pi даем команду
    Код (Bash):
    pi@raspberrypi:~ $ raspistill -o /var/www/html/foto/image.jpg
    по адресу
    http://172.16.5.38/foto/image.jpg
    появился наш снимок

    Пишем ролик
    Код (Bash):
    pi@raspberrypi:~ $ raspivid -t 15000 -o -> /var/www/html/foto/my_file.h264
    на сайте видим файл my_file.h264
    скачиваем и просматриваем

    Подробнее как делать снимок разного качества и записывать ролики в командной строке в официальной документации
    Например:
    Код (Bash):
    raspistill -t 30000 -tl 0 -o /var/www/html/foto/%04d.jpg -q 50 -n
     
    В течении 30 секунд делать снимки, с минимальными паузами, качеством 50 %, без предварительного просмотра. У меня камера успела сделать за 30 секунд 51 снимок. Список виден на сайте.
    Удалить все снимки разом можно командой
    Код (Bash):
    pi@raspberrypi:~ $ rm -rf /var/www/html/foto/*
     
    Последнее редактирование: 2 сен 2017
    NikitOS нравится это.
  5. Salomatin

    Salomatin Гик

    Фотоловушка.
    Если нажимаем на кнопку или срабатывает датчик, то камера делает снимки или записывает ролик.
    Подробнее как подключать кнопку и считывать данные смотрите
    Считываем кнопку
    Делаем все тоже самое, но вставляем кусок кода, который при срабатывании кнопки также запишет данные в файл, но и выполнит команду из предыдущей темы
    Выкладываем снимки и ролики для удаленного просмотра
    Причем предварительно создаст каталог, куда камера будет складывать снимки.
    Код (Python):
    #!/usr/bin/python
    # -*- coding: utf-8 -*-


    import RPi.GPIO as GPIO
    from datetime import datetime,date,time,timedelta
    import os.path,time
    import subprocess


    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)

    GPIO.setup(19, GPIO.IN)
    GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # подтяжка к питанию

    f1="/var/www/html/foto/kn1.html"  #Лог файл
    a2=open(f1, 'a') # открываем лог файл

    b19=0  # задаем первоначальное состояние кнопки

    while True :               # запускаем цикл
      now=datetime.now()       # задаем время
          #Далее  считываем кнопку и записываем в файл
      if (GPIO.input(19)) == 0:
        if b19 == 1:
          a2=open(f1, 'a')
          a2.write('<br />' + '19' + '  on  ' + str(now) + '\n'),
          a2.close()
          print('19' + '  on  ' + str(now) + '\n'),
          b19=0
          # Создаем каталог  и в этот каталог камера складывает снимки
          now_time=datetime.now()
          r=(now_time.strftime('%d.%m.%Y_%H.%M.%S'))
          print(r)
          h = str('/var/www/html/foto/' + r)
          os.mkdir(h)
          da = ('raspistill -t 10000 -tl 0 -o ' + h + '/%03d.jpg -q 50 -n')
          subprocess.call(da, shell=True)  # выполняем bash команду

    #  Тоже самое, если кнопка переключилась в другую сторону
      if (GPIO.input(19)) == 1:
        if b19 == 0:
          a2=open(f1, 'a')
          a2.write('<br />' + '19' + '  off ' + str(now) + '\n'),
          a2.close()

          print('19' + '  off ' + str(now) + '\n'),
          b19=1

          now_time=datetime.now()
          r=(now_time.strftime('%d.%m.%Y_%H.%M.%S'))
          print(r)
          h = str('/var/www/html/foto/' + r)
          os.mkdir(h)
          da = ('raspistill -t 10000 -tl 0 -o ' + h + '/%03d.jpg -q 50 -n')
          subprocess.call(da, shell=True)


      time.sleep(0.1)
     
    При каждом срабатывании кнопки на сайте появляется каталог, в котором снимки.
    если строчки
    Код (Python):
    da = ('raspistill -t 10000 -tl 0 -o ' + h + '/%03d.jpg -q 50 -n')
    поменять на
    Код (Python):
    da = ('raspivid -t 10000 -o -> ' + h + '/my_file.h264')
    то будет записываться ролик
     
    NikitOS нравится это.