Usando a Pi Camera no Raspberry Pi c/ PiCamera e RaspiCam/MJPG Streamer

Para aumentar nosso repertório de add-ons do Raspberry Pi, vamos aprender a instalar, configurar e tirar o máximo da Pi Camera, esta micro câmera de 8 MP com conexão exclusiva para o Pi.

O que você irá aprender?

  • Como instalar e configurar a Pi Camera
  • Utilizar a biblioteca PiCamera em Python
  • Utilizar a biblioteca Raspicam para prover imagens via web de maneira simples
  • Explorar os recursos de fotos e gravação de vídeo
  • Alterar as propriedades das imagens e vídeos gravadas

O que você irá precisar?

  • 1 PiCam 8 MP padrão ou NoIR
  • 1 Raspberry pi 3 (2 ou 0) com Debian Jessie instalado e configurado para WiFi ou internet a cabo
  • 1 Fonte de alimentação para o Raspberry Pi
  • 1 WiFi dongle (caso seja RPi 2 ou 0)
  • 1 Monitor HDMI e cabo para conexão ao Raspberry Pi
  • 1 Teclado e Mouse USB ou sem fio para conexão ao Raspberry Pi
  • 1 (opcional) Computador para acessar o Raspberry Pi via SSH ao invés de utilizar o monitor, teclado e mouse acima.

Posts Relacionados (para consultar caso precise)

Instalando a Pi Camera

Antes de tudo precisamos conectar a câmera ao Raspberry Pi. Para isso localize no Raspberry Pi o conector nomeado com ‘camera’ na parte superior da placa para o Raspberry Pi 2 e 3 e para o Pi Zero situado em um dos lados.

raspi-0
Raspberry Pi Zero – Conector da Câmera
raspi-2
Raspberry Pi 2/3 – Conector da Câmera

Conecte a câmera de forma que a parte de metálica de conectores do flat cable fique voltada ao contrário da presilha do conector, conforme abaixo:

connect-camera
Conexão no Raspberry Pi 2/3
pizero1-3_700
Conexão no Raspberry Pi Zero

Câmera instalada, vamos ligar o Raspberry Pi com Debian Jessie instalado e habilitar o uso da câmera via conector próprio.

Habiltando a Câmera no Debian PIXEL

Caso você tenha instalado o monitor, teclado e mouse e opte por habilitar a câmera na interface gráfica PIXEL do Debian.

Abra o Menu Principal e acesse ‘Preferences‘ e ‘Raspberry Pi Configuration‘:

raspi-config-menu

Depois na aba ‘Interfaces‘ clique na opção ‘Enable‘ na frente da ‘Camera:’

raspi-config

Vá até o menu e escolha reiniciar o Raspberry Pi. Pronto, a câmera está habilitada.

Habiltando a Câmera na Linha de Comando

Acessando através do Raspberry Pi ou via SSH (como fazer isso? Como conectar seu micro ao Raspberry Pi via SSH) na linha de comando digite:

sudo raspi-config

Escolha a opção 6 no menu e tecle enter:

raspi-config-1

Menu Raspi-Config

Depois escolha a opção ‘Enable’ e tecle enter:

raspi-config-2
Habilitando o suporte a Pi Camera via Raspi-Config

Pronto, a câmera está pronta para ser utilizada.


#01 – Utilizando a lib Python ‘PiCamera’

Primeiro vamos explorar as funcionalidades da biblioteca PiCamera em Python que já vem incorporada na versão do Raspbian (Debian para o Raspberry Pi) Jessie e é bem versátil e simples de utilizar.

Temos 2 opções para programar em Python no Raspberry Pi: através do ‘Python 3 – IDLE’, existente no Menu da interface gráfica PIXEL, acessando diretamente via Raspberry Pi ou através da linha de comando que pode ser tanto direto no Raspberry Pi quanto via acesso SSH de um computador na mesma rede.

python3-app-menu
Caminho para acessar o ‘IDLE’ para programação em Python direto no Raspberry Pi

Para ser mais abrangente vou utilizar até o fim deste tutorial vou realizar tudo pelo ‘Terminal’ (linha de comando).

Importante: Se utilizar este tutorial via SSH ou VNC você não irá ver o resultado em vídeo ou fotos de nada que será produzido pela câmera.

#Exemplo 01: ‘Stream live’ simples de vídeo

Neste primeiro exemplo para ser visualizada a imagem você deverá entrar no Raspberry Pi utilizando monitor, teclado e mouse e executar os códigos abaixo ou através do IDLE ou via Terminal, do contrário não verá nenhuma imagem.

Primeiro vou criar um diretório para trabalharmos e entrar neste diretório:

sudo mkdir camera
cd camera

Depois vamos criar o nosso arquivo Python:

sudo nano mycamera.py

Obs: não nomeie o seu arquivo como ‘picamera’ é proibido devido a este ser o nome da biblioteca.

Edite o arquivo com o código abaixo (a explicação do código segue nos comentários):

#Importa a biblioteca picamera e o objeto modelo PiCamera
from picamera import PiCamera
#Importa a biblioteca time e a funcionalidade sleep
from time import sleep

#Cria uma camera com o nome de cam associando ao modelo PiCamera
cam = PiCamera()

#[Configuracoes] Adicione as configs. a partir daqui... 

#[Configuracoes] ...e ate aqui

#Inicia a apresentacao de imagens da camera
cam.start_preview()

#[Efeitos] Adicione os efeitos de imagens a partir daqui... 

#[Efeitos] ...e ate aqui

#Aguarda 20 segundo
sleep(20)

#Para a apresentacao de imagens da camera
cam.stop_preview()

CTRL-X e clique em ‘Y’es para salvar o programa. Digite abaixo na linha de comando para executá-lo.

python mycam.py

#Exemplo 02:Tirando Fotos

Para capturar um frame de imagem, ou melhor, tirar uma foto, vamos primeiro criar um diretório para armazená-las.

Caso você não esteja no nosso diretório criado no passo anterior:

cd camera

Então crie o diretório para as fotos:

sudo mkdir fotos

Crie um novo arquivo.

sudo nano fotocam.py

Digitamos o seguinte código:

from picamera import PiCamera
from time import sleep

cam = PiCamera()

#[Configuracoes] Adicione as configs. a partir daqui... 
#[Configuracoes] ...e ate aqui

cam.start_preview()

#[Efeitos] Adicione os efeitos de imagens a partir daqui... 
#[Efeitos] ...e ate aqui

sleep(5)

#Captura e salva imagem 'foto.jpg' no diretorio criado para este tutorial
cam.capture('/home/pi/camera/fotos/foto.jpg')

cam.stop_preview()

CTRL-X e clique em ‘Y’es para salvar o programa. Digite abaixo na linha de comando para executá-lo.

python fotocam.py

Será tirada uma foto após 5 segundos do início do programa e armazenada na pasta /camera/fotos. Quantas vezes você rodar este código ele irá tirar outra foto, porém armazenar com o mesmo nome, sobrescrevendo a foto anterior.

#Exemplo 03: Gravando Vídeos

Para gravar vídeos vamos também criar um diretório específico. Assumindo que você esteja dentro do diretório ‘camera’, digitamos na linha de comando:

sudo mkdir videos

e criamos um novo programa:

sudo nano videocam.py

Digitamos o código:

from picamera import PiCamera
from time import sleep

cam = PiCamera()

#[Configuracoes] Adicione as configs. a partir daqui... 
#[Configuracoes] ...e ate aqui

cam.start_preview()

#[Efeitos] Adicione os efeitos de imagens a partir daqui... 
#[Efeitos] ...e ate aqui

#Captura e salva o video 'video.h264' no diretorio criado para este tutorial 
cam.start_recording('/home/pi/camera/videos/video.h264') 
#10 segundos de video
sleep(10) 
cam.stop_recording()

cam.stop_preview()

CTRL-X e clique em ‘Y’es para salvar o programa. Digite abaixo na linha de comando para executá-lo.

python videocam.py

Este programa irá gravar 10 segundos de vídeo e salvar na pasta /camera/videos/ que criamos.

Para ver o vídeo utilizamos o player que vem no Raspbian através do comando abaixo digitado na linha de comando. Assumindo que você está no diretório ‘/camera’.

omxplayer /videos/video.h264

Caso o vídeo apresente alguma distorção de velocidade, verifique as configurações do player OMXPLAYER aqui.

Lembrando que se você está operando via SSH ou VNC não irá ver nenhum vídeo rodando! Tem que ser rodado de dentro do Raspberry Pi

 


Efeitos e Configurações

Edite o programa acima acrescentando EFEITOS e CONFIGURACOES adicionais nos locais que deixei indicado no código.

Os efeitos e configurações funcionam tanto para vídeo e foto, algumas não funcionam em um ou em outro. Experimente!

Configurações: digite na marcação [Configuracoes]

Rotação da Câmera

Para rotacionar a imagem da câmera nos ângulos: o, 90, 180 ou 270.

cam.rotation = 180

Resolução da Câmera e Velocidade entre imagens (Framerate)

Podemos alterar a resolução e framerate, pois por padrão a câmera apresenta o vídeo na resolução do seu monitor. Alguns dados sobre a câmera:

  • Resolução máxima para fotos: 2592 x 1944
  • Resolução máxima para gravação de vídeos: 1920 x 1080
  • Resolução mínima possível: 64 x 64

Segue exemplo de código.

cam.resolution = (2592, 1944)
cam.framerate = 15

Efeitos: digite na marcação [Efeitos]

Colocar Textos na Foto

Utilize o comando abaixo para colocar um texto na foto:

cam.annotate_text = "Aqui é Palmeiras!!"

Também é possível alterar o tamanho do texto, sendo os valores válidos de 6 até 160 e o padrão 32. Utilize o comando:

cam.annotate_text_size = 50

Além do tamanho, é possível alterarmos a cor do texto, mas para isso precisamos importar uma classe a mais.  no topo do código adicione a classe ‘Color’ alterando da seguinte forma:

from picamera import PiCamera, Color

Agora será possível alterar a cor tanto do fundo da letra (background) quando da própria letra (foreground), da seguinte forma:

cam.annotate_background = Color('blue') 
cam.annotate_foreground = Color('yellow')

Alterar a Luminosidade e Contraste

A luminosidade (brightness) pode ser alterada entre 0 e 100, sendo o padrão 50. Segue exemplo do comandos para ambos:

cam.brightness = 70
cam.contrast = 30

Efeitos Artísticos e Malucos

A biblioteca PiCamera é acompanhada de vários efeitos para ser aplicado as fotos, todos através de um único comando:

cam.image_effect = 'none'

No exemplo acima não estamos aplicando efeito nenhum (‘none’) substitua por qualquer um dos valores abaixo:

  1. negative
  2. solarize
  3. sketch
  4. denoise
  5. emboss
  6. oilpaint
  7. hatch
  8. gpen
  9. pastel
  10. watercolor
  11. film
  12. blur
  13. saturation
  14. colorswap
  15. washedout
  16. posterise
  17. colorpoint
  18. colorbalance
  19. cartoon
  20. deinterlace1
  21. deinterlace2.

Segue exemplo para rotacionar entre todos os efeitos para experimentação. Crie um novo arquivo:

sudo nano fxcam.py

E digite o código abaixo:

from picamera import PiCamera, Color
from time import sleep

cam = PiCamera()
cam.start_preview()
for effect in cam.IMAGE_EFFECTS:
    cam.image_effect = effect
    cam.annotate_text = "Effect: %s" % effect
    sleep(5)
cam.stop_preview()

Para rodar, digite:

python fxcam.py

Ajuste Automático de Branco (AWB)

Outra funcionalidade é o ajuste automático do branco ou ‘Auto White Balance’ AWB que pode ser ajustado com o comando:

camera.awb_mode = 'off'

Onde ‘off’ é desligar o efeito e o padrão é ‘auto’ (seleciona automaticamente o melhor equilíbrio) e poderá ser alterado para os seguintes valores:

  1. auto
  2. sunlight
  3. cloudy
  4. shade
  5. tungsten
  6. fluorescent
  7. incandescent
  8. flash
  9. horizon
  10. off
  11. auto

Modos de Exposição

Outros tipos de efeitos podem ser aplicados ajustando o modo de exposição da câmera com:

camera.exposure_mode = 'off'

Novamente, onde ‘off’ é desligar o efeito e o padrão é ‘auto’ (seleciona automaticamente o melhor modo de exposição para determinado ambiente) e poderá ser alterado para os seguintes valores:

  1. off
  2. auto
  3. night
  4. nightpreview
  5. backlight
  6. spotlight
  7. sports
  8. snow
  9. beach
  10. verylong
  11. fixedfps
  12. antishake
  13. fireworks

#02 – Utilizando o MJPG Streamer c/ Plugin RaspiCam

MJPG Streamer é uma aplicação de linha de comando que utiliza uma série de fotos JPEG para montar o formato MJPG (Motion JPEG). Utiliza a biblioteca C++ ‘Raspicam’ para operar a Pi Camera.

O MJPG Streamer pode ser utilizado para fazer stream via redes IP para vários viewers embedded e outros dispositivos que aceitam o stream MJPG. Devido ao seu pequeno footprint é possível utilizar sua saída diretamente via iframe em qualquer página servida no próprio Raspberry Pi.

Para instalar esta versão do MJPG com plugin Raspicam, precisamos instalar as bibliotecas de JPEG, CMAKE e a aplicação MJPG-Streamer.

#Ir para o diretorio raiz do usuario PI
cd ~

# Instalacao da Biblioteca de JPEG
sudo apt-get install libjpeg62-dev

# Instalacao do CMAKE
sudo apt-get install cmake

# Download e Instalacao do MJPG-Streamer com Raspicam
sudo git clone https://github.com/jacksonliam/mjpg-streamer.git

Compile o codigo baixado do MJPG-Streamer
cd ~/mjpg-streamer/mjpg-streamer-experimental
sudo make clean all

# Encurtar o nome do diretorio (remove o 'experimental')
cd ~
sudo mv ~/mjpg-streamer/mjpg-streamer-experimental/* ~/mjpg-streamer
sudo rm -rf ~/mjpg-streamer/mjpg-streamer-experimental

Para realizar o streaming de imagens basta executar o comando abaixo no terminal (linha de comando) – tudo em uma mesma linha:

LD_LIBRARY_PATH=/mjpg-streamer/ mjpg_streamer -i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480" -o "output_http.so -p 9000 -w /www" &

Este comando irá enviar a imagem de um video stream na porta 9000 no IP do seu Raspberry Pi. Capture seu IP com o comando:

ifconfig

E busque pelo IP próximo a palavra:

  • wlan0 se estiver via WiFi
  • eth0  se estiver conectado no cabo ethernet

Segue exemplo do comando para acessar a partir de qualquer browser em sua rede privada (a mesma que esteja conectado o Raspberry Pi), troque o meu IP (192.168.0.30) pelo seu IP, captado no passo anterior:

http://192.168.0.30:9000/?action=stream

 

foto-mjpgstreamer

Configurações do Plugin Raspicam

O plugin da Raspbicam utilizado, contém uma série de parâmetros a serem passados via linha de comandos, tanto para os comandos de entrada (input) quanto de saída (output).

No exemplo acima de teste utilizamos os seguintes parâmetros de entrada:

-i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480"

Verifique o que eles representam e veja outros modos de configurá-los.

 

 -fps : video framerate, padrão 5 frame/sec
 -x : largura do frame, padrão 640
 -y : altura do frame, padrão 480
 -quality : qualidade do JPEG 0-100, padrão 85
 -usestills : usar modo foto (stills) ou modo video
 -preview : habilita o preview em full screen
 -sh : Sharpness (-100 to 100)
 -co : Contraste (-100 to 100)
 -br : Brilho (0 to 100)
 -sa : Saturação (-100 to 100)
 -ISO : ISO da câmera
 -vs : Habilita a estabilização de vídeo
 -ev : Habilita a compensação EV
 -ex : Configura os modos de exposição***
 -awb : Habilita o modo AWB***
 -ifx : Configura o efeito da imagem***
 -cfx : Cor do efeito (U ou V)
 -mm : Configura o modo de metering***
 -rot : Rotacao da imagem em qualquer ângulo (0-359)
-stats : Calcula as estatísticas da imagem para qualquer foto (reduz ruído)
 -drc : Faixa Dinâmica de Compensação***
 -hf : Executa o flip horizontal
 -vf : Executa o flip vertical

Importante observar que a camera suporta até 1080p e 30fps, porém para conexões via WiFi um bom compromisso de performance-qualidade é utilizarmos 720p e 15fps.

Agora, analisando os parâmetros de saída:

-o "output_http.so -p 9000" &

Seguem as opções:

-w : diretório que contém a página webpage sem hierarquia (sem subpastas)
-p : Porta TCP para o HTTP webserver
-c : pergunta por "username:password" quando conectar
-n : desabilitas execução de comandos

 


Scripts de Inicialização e Parada

Para facilitar, podemos criar 2 scripts para serem executados via linha de comando para inicializar e parar o stream de vídeo.

Iniciar o stream

Crie o arquivo shell:

cd ~
sudo nano start_cam.sh

E digite o código a seguir

#!/bin/bash

if pgrep mjpg_streamer > /dev/null
then
 echo "mjpg_streamer rodando!"
else
 LD_LIBRARY_PATH=/mjpg-streamer/ mjpg_streamer -i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480" -o "output_http.so -p 9000" > /dev/null 2>&1&
 echo "mjpg_streamer iniciado"
fi

Dê permissão de execução com o chmod:

sudo chmod 755 start_cam.sh

Desta forma podemos acionar o stream através do comando de linha:

./start_cam.sh

Parar o stream

Crie o arquivo shell:

sudo nano stop_cam.sh

E digite o código a seguir

#!/bin/bash

if pgrep mjpg_streamer
then
  kill $(pgrep mjpg_streamer) > /dev/null 2>&1
  echo "mjpg_streamer parado"
else
  echo "mjpg_streamer falhou!"
fi

Dê permissão de execução com o chmod:

sudo chmod 755 stop_cam.sh

Desta forma podemos para o stream através do comando de linha:

./stop_cam.sh

Explorar as Possibilidades de Visão Computacional!

O MJPG-Streamer é muito prático e poderoso, consulte a documentação para saber como explorar os meios de transmitir sua imagem não só via IP e suas funcionalidades junto ao OpenCV: https://github.com/jacksonliam/mjpg-streamer

O Plugin da Raspbicam também possui funcionalidades específicas que podem ser exploradas na documentação oficial Pi: https://www.raspberrypi.org/documentation/usage/camera/raspicam/README.md

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s