CFTV em Linux Ubuntu - Câmeras de segurança com ZoneMinder e PICO 2000 ou Geovision GV250 / GV800
Um assunto interessante mas ainda muito superficial na web é o funcionamento de câmeras de segurança (CFTV) em Linux.
Aqui posto um tutorial de como instalar câmeras utilizando a placa de captura PICO 2000 em Ubuntu.
HARDWARE:
Placa de captura PICO 2000 com Chipset BT8XX - suporte a 4 câmeras
ou
Geovision GV250 / GV800
A princípio deve funcionar com qualquer placa que tenha este Chipset pois é compatível com o driver nativo bttv, mas só testei neste modelo. A minha PICO2000 placa veio com o Chipset BT878A, com a especificação abaixo (impressa no Chip):
Fusion 878A
2587813Z
9T1000216
0941 TAIWAN
Link com foto: http://www.zoneminder.com/wiki/images/thumb/9/95/Pico2000_1.jpg/200px-Pico2000_1.jpg
Fiz um teste anterior com uma placa genérica GV-800 GEOVISION, a mais popular para uso em Windows, porém ela trabalha com um driver proprietário de codificação de vídeo, compatível a princípio somente com Windows.
SOFTWARE:
Ubuntu 10.10 (testei com sucesso tanto em 32 quanto 64 bits) e ZoneMinder 1.24.2 ( http://zoneminder.com/ ), uma solução WEB para CFTV robusta com muitos recursos e com a última versão estável nativa nos repositórios do Ubuntu.
INSTALAÇÃO:
Este tutorial pressupõe uma instalação nova do Ubuntu.
Instale o Ubuntu e faça todas as atualizações.
SOMENTE PARA GV250 / GV800:
Abra um terminal e digite:
sudo modprobe -r bttv
sudo modprobe bttv card=150
sudo chmod 666 /dev/video0
Para verificar se a placa foi corretamente detectada, abra um terminal e digite:
sudo dmesg | grep bttv
O resultado deve ser semelhante ao meu:
[ 4.843499] bttv: driver version 0.9.18 loaded
[ 4.843501] bttv: using 8 buffers with 2080k (520 pages) each for capture
[ 4.843640] bttv: Bt8xx card found (0).
[ 4.843655] bttv 0000:03:02.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23
[ 4.843664] bttv0: Bt878 (rev 17) at 0000:03:02.0, irq: 23, latency: 32, mmio: 0xfdffe000
[ 4.843677] bttv0: using: *** UNKNOWN/GENERIC *** [card=0,autodetected]
[ 4.843679] IRQ 23/bttv0: IRQF_DISABLED is not guaranteed on shared IRQs
[ 4.843703] bttv0: gpio: en=00000000, out=00000000 in=00f36fff [init]
[ 20.920016] bttv0: tuner type unset
[ 20.920088] bttv0: registered device video0
[ 20.920114] bttv0: registered device vbi0
Aqui a informação importante é "video0", que é o endereço da placa para identificar as câmeras. Cada placa no computador deve receber um endereço similar a este.
Então ainda no terminal execute:
sudo aptitude install zoneminder
Ele vai instalar o ZoneMinder e vários outros pacotes, incluindo o MySql. Siga as instruções da tela.
Depois execute:
sudo ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf
Para criar um link simbólico a fim do Apache reconhecer o caminho do ZoneMinder. Então reiniciamos o Apache:
sudo /etc/init.d/apache2 force-reload
E vamos configurar o banco de dados MySql. Execute na sequência:
sudo mysql -u root -p < /usr/share/zoneminder/db/zm_create.sql
(Digite a senha informada na instalação do MySql)
mysql -u root -p
(Digite novamente a senha informada na instalação do MySql)
grant select,insert,update,delete on zm.* to 'zmuser'@localhost identified by 'zmpass';
(deve retornar Query OK, 0 rows affected (0.00 sec))
flush privileges;
quit
sudo chmod 4755 /usr/bin/zmfix
zmfix -a
sudo adduser www-data video
Agora vamos editar o sysctl:
sudo gedit /etc/sysctl.conf
Acrescente no final do arquivo a linha:
kernel.shmall = 134217728
kernel.shmmax = 134217728
Salve e feche o GEdit.
SOMENTE PARA GV250 / GV800:
Edite o arquivo /etc/init.d/zoneminder
coloque
sudo modprobe -r bttv
sudo modprobe bttv card=150
sudo chmod 666 /dev/video0
antes da linha "zmfix -a" e reinicie o computador.
Testando:
Abra o browser e digite:
http://localhost/zm
Deve aparecer a tela de console.
Câmeras:
Agora devemos configurar as câmeras. Supondo que apenas uma placa PICO 2000 está no computador, e configurada para /dev/video0. Ela deve possuir 4 "canais", numerados de 0 a 3. Na minha placa o canal zero é do conector mais afastado da placa mãe, e assim na sequência.
Vamos fazer a configuração básica supondo utilizar as câmeras para gravação.
Configurar Zoneminder
*********************
Acessando o console: localmente http://localhost/zm ou remotamente http://IPSERVIDOR/zm
Clicar em ADICIONAR MONITOR
Aba GENERAL
Nome = Escolher um nome para a camera
Função = Monitor (só exibe vídeo) / Record (grava) / Mocord (grava com detecção de movimento)
Habilitado = marcar
Aba ORIGEM
Device Path = /dev/video0 (conforme foi detectado no dmesg)
Capture Method = Video for Linux 1
Canal do Dispositivo = (0 a 3 dependendo da câmera conectada)
Formato do Dispositivo = NTSC
Paleta de Captura = RGB24
Largura de Captura (pixels) = 320
Altura da Captura (pixels) = 240
Preserve Aspect Ratio = True
Clicar em Salvar.
Para iniciar o serviço, clicar em "Parado" que está no título (ZoneMinder Console - Parado - vX.XX.X). Deve abrir uma janela com "iniciar" selecionado, basta clicar em "Aplicar".
Se a informação em "origem" permanecer vermelha, algum parâmetro deve ser alterado.
Para verificar a camera, clicar no "nome".
Para visualizar todas em uma mesma tela, clique em "montagem".
Software para testar as cameras:
********************************
aptitude install xawtv
Para detectar as câmeras:
xawtv -hwscan
Atalho para acessar o modo "montagem" diretamente da raiz do Apache:
*****************************************************************
Criar um arquivo index.php em /var/www com o seguinte conteúdo:
http://IPDOSERVIDOR/zm/?view=montage&group=0
Configurando para gravar em outro disco ou partição:
************************************************
Essa medida é importante para evitar problemas com o sistema operacional em função de falta de espaço em disco.
Interrompa a execução do ZoneMinder:
/etc/init.d/zoneminder stop
Configure um outro disco ou partição para montar no boot e crie as seguintes pastas: (No exemplo, montei o disco na pasta /cameras)
mkdir /cameras/events
mkdir /cameras/images
mkdir /cameras/temp
Mova a pasta antiga:
mv /var/cache/zoneminder /var/cache/zoneminderOLD
Crie o link simbólico:
ln -s /cameras /var/cache/zoneminder
Dê as permissões:
chown -R www-data.www-data /cameras
chown -R www-data.www-data /var/cache/zoneminder
Reinicie o ZoneMinder:
/etc/init.d/zoneminder start
Trocar a porta do acesso Web - Apache
***********************************
Muitas vezes o seu ISP (Internet Service Provider - Provedor de Internet), como a NET, bloqueia o acesso externo pela porta 80. Para trocar a porta padrão basta alterar a porta original (80) para a porta desejada em dois arquivos:
/etc/apache2/sites-enabled/000-default
Linha:
e
/etc/apache2/ports.conf
Linhas:
NameVirtualHost *:80
Listen 80
Após, execute:
/etc/init.d/apache2 restart
Reinicie o ZoneMinder e acesse a partir do novo endereço (com exemplo da porta 8000):
http://localhost:8000/zm ou http://IPDOSERVIDOR:8000/zm
Senha de acesso
**************
Em função de ser "aberto" para a web, é interessante o uso de usuário e senha no Zoneminder. É bem simples e com recursos interessantes.
Acesse o console:
http://IPDOSERVIDOR/zm
Clique em "OPÇÕES"
Selecione a opção "OPT_USE_AUTH"
Clique em SALVAR e reinicie o Zoneminder.
O usuário padrão é "admin", e a senha "admin". Após reiniciar o Zoneminder, acesse novamente "OPÇÕES", vai ter surgido a aba "USUÁRIOS".
Ali pode-se facilmente criar vários usuários determinando o que cada um poderá fazer no Zoneminder e quais câmeras poderá visualizar.
Incluir Câmera HTTP remota (PTZ) (via LAN ou Wireless)
*****************************************************
Acessando o console: localmente http://localhost/zm ou remotamente http://IPDOSERVIDOR/zm
Clicar em ADICIONAR MONITOR
Aba GENERAL
Nome = Escolher um nome para a camera
Tipo de Origem = Remoto
Função = Monitor (só exibe vídeo) / Record (grava) / Mocord (grava com detecção de movimento)
Habilitado = marcar
Aba ORIGEM
Remote Protocol = HTTP
Remote Method = Simple
Nome do host remoto = usuario:senha@IPDOHOST
Porta do host remoto = porta configurada no host
Caminho do host remoto = exemplo: /videostream.cgi (vai depender do modelo da câmera)
Cores de imagem remota = cor 24 bits
Largura de Captura (pixels) = 320
Altura da Captura (pixels) = 240
Preserve Aspect Ratio = True
Clicar em Salvar.
Aqui posto um tutorial de como instalar câmeras utilizando a placa de captura PICO 2000 em Ubuntu.
HARDWARE:
Placa de captura PICO 2000 com Chipset BT8XX - suporte a 4 câmeras
ou
Geovision GV250 / GV800
A princípio deve funcionar com qualquer placa que tenha este Chipset pois é compatível com o driver nativo bttv, mas só testei neste modelo. A minha PICO2000 placa veio com o Chipset BT878A, com a especificação abaixo (impressa no Chip):
Fusion 878A
2587813Z
9T1000216
0941 TAIWAN
Link com foto: http://www.zoneminder.com/wiki/images/thumb/9/95/Pico2000_1.jpg/200px-Pico2000_1.jpg
Fiz um teste anterior com uma placa genérica GV-800 GEOVISION, a mais popular para uso em Windows, porém ela trabalha com um driver proprietário de codificação de vídeo, compatível a princípio somente com Windows.
SOFTWARE:
Ubuntu 10.10 (testei com sucesso tanto em 32 quanto 64 bits) e ZoneMinder 1.24.2 ( http://zoneminder.com/ ), uma solução WEB para CFTV robusta com muitos recursos e com a última versão estável nativa nos repositórios do Ubuntu.
INSTALAÇÃO:
Este tutorial pressupõe uma instalação nova do Ubuntu.
Instale o Ubuntu e faça todas as atualizações.
SOMENTE PARA GV250 / GV800:
Abra um terminal e digite:
sudo modprobe -r bttv
sudo modprobe bttv card=150
sudo chmod 666 /dev/video0
Para verificar se a placa foi corretamente detectada, abra um terminal e digite:
sudo dmesg | grep bttv
O resultado deve ser semelhante ao meu:
[ 4.843499] bttv: driver version 0.9.18 loaded
[ 4.843501] bttv: using 8 buffers with 2080k (520 pages) each for capture
[ 4.843640] bttv: Bt8xx card found (0).
[ 4.843655] bttv 0000:03:02.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23
[ 4.843664] bttv0: Bt878 (rev 17) at 0000:03:02.0, irq: 23, latency: 32, mmio: 0xfdffe000
[ 4.843677] bttv0: using: *** UNKNOWN/GENERIC *** [card=0,autodetected]
[ 4.843679] IRQ 23/bttv0: IRQF_DISABLED is not guaranteed on shared IRQs
[ 4.843703] bttv0: gpio: en=00000000, out=00000000 in=00f36fff [init]
[ 20.920016] bttv0: tuner type unset
[ 20.920088] bttv0: registered device video0
[ 20.920114] bttv0: registered device vbi0
Aqui a informação importante é "video0", que é o endereço da placa para identificar as câmeras. Cada placa no computador deve receber um endereço similar a este.
Então ainda no terminal execute:
sudo aptitude install zoneminder
Ele vai instalar o ZoneMinder e vários outros pacotes, incluindo o MySql. Siga as instruções da tela.
Depois execute:
sudo ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf
Para criar um link simbólico a fim do Apache reconhecer o caminho do ZoneMinder. Então reiniciamos o Apache:
sudo /etc/init.d/apache2 force-reload
E vamos configurar o banco de dados MySql. Execute na sequência:
sudo mysql -u root -p < /usr/share/zoneminder/db/zm_create.sql
(deve retornar Query OK, 0 rows affected (0.00 sec))
flush privileges;
quit
sudo chmod 4755 /usr/bin/zmfix
zmfix -a
sudo adduser www-data video
Agora vamos editar o sysctl:
sudo gedit /etc/sysctl.conf
Acrescente no final do arquivo a linha:
kernel.shmall = 134217728
kernel.shmmax = 134217728
Salve e feche o GEdit.
coloque
sudo modprobe bttv card=150
sudo chmod 666 /dev/video0
antes da linha "zmfix -a" e reinicie o computador.
Testando:
Abra o browser e digite:
http://localhost/zm
Deve aparecer a tela de console.
Câmeras:
Agora devemos configurar as câmeras. Supondo que apenas uma placa PICO 2000 está no computador, e configurada para /dev/video0. Ela deve possuir 4 "canais", numerados de 0 a 3. Na minha placa o canal zero é do conector mais afastado da placa mãe, e assim na sequência.
Vamos fazer a configuração básica supondo utilizar as câmeras para gravação.
Configurar Zoneminder
*********************
Acessando o console: localmente http://localhost/zm ou remotamente http://IPSERVIDOR/zm
Clicar em ADICIONAR MONITOR
Aba GENERAL
Nome = Escolher um nome para a camera
Aba ORIGEM
Device Path = /dev/video0 (conforme foi detectado no dmesg)
Capture Method = Video for Linux 1
Canal do Dispositivo = (0 a 3 dependendo da câmera conectada)
Formato do Dispositivo = NTSC
Paleta de Captura = RGB24
Largura de Captura (pixels) = 320
Altura da Captura (pixels) = 240
Preserve Aspect Ratio = True
Clicar em Salvar.
Para iniciar o serviço, clicar em "Parado" que está no título (ZoneMinder Console - Parado - vX.XX.X). Deve abrir uma janela com "iniciar" selecionado, basta clicar em "Aplicar".
Se a informação em "origem" permanecer vermelha, algum parâmetro deve ser alterado.
Para verificar a camera, clicar no "nome".
Para visualizar todas em uma mesma tela, clique em "montagem".
Dicas:
- Para passar o ZoneMinder quase todo para português (br): OPTIONS > SYSTEM > LANG_DEFAULT (passar para pt_br).
- O ZoneMider possui muitas configurações. Explore em "Opções".
- Utilize uma partição separada ou outro disco para gravar os vídeos, para evitar problemas de superlotação na partição raiz. Siga a dica mais abaixo.
- Quando se em várias câmeras compartilhadas em uma placa, pode-se enfrentar:
Imagem de uma câmera aparecendo em outra
Câmera sem imagem
Imagens misturadas
As soluções para estes problemas variam. Você pode tentar cada uma das opções abaixo. lembre-se de reiniciar o zoneminder após cada mudança.
Desmarque V4L_MULTI_BUFFER (em Opções >> config)
Mude CAPTURES_PER_FRAME para um valor como 2 ou 4 (Opções >> config)
Use Video For Linux version 1 para cada câmera (found in Origem >> Origem >> Capture Method)
Software para testar as cameras:
********************************
aptitude install xawtv
Para detectar as câmeras:
Atalho para acessar o modo "montagem" diretamente da raiz do Apache:
*****************************************************************
Criar um arquivo index.php em /var/www com o seguinte conteúdo:
http://IPDOSERVIDOR/zm/?view=montage&group=0
Configurando para gravar em outro disco ou partição:
************************************************
Essa medida é importante para evitar problemas com o sistema operacional em função de falta de espaço em disco.
Interrompa a execução do ZoneMinder:
/etc/init.d/zoneminder stop
Configure um outro disco ou partição para montar no boot e crie as seguintes pastas: (No exemplo, montei o disco na pasta /cameras)
mkdir /cameras/events
mkdir /cameras/images
mkdir /cameras/temp
Mova a pasta antiga:
mv /var/cache/zoneminder /var/cache/zoneminderOLD
Crie o link simbólico:
ln -s /cameras /var/cache/zoneminder
Dê as permissões:
chown -R www-data.www-data /cameras
chown -R www-data.www-data /var/cache/zoneminder
/etc/init.d/zoneminder start
Trocar a porta do acesso Web - Apache
***********************************
Muitas vezes o seu ISP (Internet Service Provider - Provedor de Internet), como a NET, bloqueia o acesso externo pela porta 80. Para trocar a porta padrão basta alterar a porta original (80) para a porta desejada em dois arquivos:
/etc/apache2/sites-enabled/000-default
Linha:
/etc/apache2/ports.conf
Linhas:
NameVirtualHost *:80
Listen 80
Após, execute:
/etc/init.d/apache2 restart
Reinicie o ZoneMinder e acesse a partir do novo endereço (com exemplo da porta 8000):
http://localhost:8000/zm ou
**************
Em função de ser "aberto" para a web, é interessante o uso de usuário e senha no Zoneminder. É bem simples e com recursos interessantes.
Acesse o console:
http://IPDOSERVIDOR/zm
Clique em "OPÇÕES"
Selecione a opção "OPT_USE_AUTH"
Clique em SALVAR e reinicie o Zoneminder.
O usuário padrão é "admin", e a senha "admin". Após reiniciar o Zoneminder, acesse novamente "OPÇÕES", vai ter surgido a aba "USUÁRIOS".
Ali pode-se facilmente criar vários usuários determinando o que cada um poderá fazer no Zoneminder e quais câmeras poderá visualizar.
*****************************************************
Acessando o console: localmente http://localhost/zm ou remotamente http://IPDOSERVIDOR/zm
Clicar em ADICIONAR MONITOR
Aba GENERAL
Nome = Escolher um nome para a camera
Tipo de Origem = Remoto
Função = Monitor (só exibe vídeo) / Record (grava) / Mocord (grava com detecção de movimento)
Habilitado = marcar
Aba ORIGEM
Remote Protocol = HTTP
Remote Method = Simple
Nome do host remoto = usuario:senha@IPDOHOST
Porta do host remoto = porta configurada no host
Caminho do host remoto = exemplo: /videostream.cgi (vai depender do modelo da câmera)
Cores de imagem remota = cor 24 bits
Largura de Captura (pixels) = 320
Altura da Captura (pixels) = 240
Preserve Aspect Ratio = True
Clicar em Salvar.
Comentários
Já teria usado o Zoneminder com webcam usb?
estou tentando.. mas a tela onde deveria mostar as imagens permanece escuta...
Ainda não testei, mas vou testar. Pelo que estou entendendo so software a chave é descobrir exatamente qual é o device path (que nas câmeras CCD costuma ser /dev/video0, por exemplo), qual o device format e capture palette que a tua câmera utiliza. Nas próprias câmeras CCD alterando uma dessas configurações a imagem some.
vou continuar a luta.
hah! muito obrigado por responder
danilo
Onde você comprou essa placa. Pergunto porque no mercado livre, tem varias referencias dela, mas quando faço uma pergunta ao vendedor ele me diz que não é compativel com nenhum linux.
Grato.
Eu utilizo com sucesso Ubuntu Desktop com o Zoneminder. E na instalação padrão do repositório. Sobre o espaço, o recomendável é deixar uma partição exclusiva para as imagens, quanto ao tamanho depende da tua necessidade de histórico. E na realidade as imagens são compactadas não pela PICO2000 mas sim pelo Zoneminder, gravadas frame a frame em JPG.
Ola Cristiano! Seguindo as suas dicas eu consegui instalar perfeito o ubuntu 10.10 com o zoneminder. O problema é quando eu tento vizualizar as cameras pelo mozilla! Em questão de 2 horas (opção monitor do ZM) minha memoria fica lotada causando lerdeza e trancando tudo. Não sei o que fazer! Teria alguma dica. pentium core duo 3ghz, 4ghz-ram.
30 de março de 2011 11:59
Olá, HOT ROD. Copiei para cá teu comentário pois colocaste em outro post. Bom, por "memória lotada" falas no HD ? Se for, muda a função das câmeras para MONITOR (para evitar que gravem) e pode apagar o conteúdo da pasta /var/cache/zoneminder. Se teu disco é pequeno no mesmo post tem uma dica de como gravar os eventos em outro disco. Caso o problema seja outro, posta mais detalhes para eu tentar ajudar, como a carga (TOP) do sistema.
Realmente funciona com as dicas acima, eu instalei uma GV800 com 16 cameras no UBUNTU 10.10 com oZoneminder 1.24 e funcionou belezinha, soh adicionei a parte o pacote do ffmpeg e a inicializacao automatica do Zoneminder.
Esta de parabens.
Abracos
abs
Thompson, o importante é primeiro fazer funcionar com o xawtv, segue as orientações para isso e caso não consigas me avise.
Esse tutorial é excelente, funciona 100%.
ESTÁ DE PARABÉNS.
Um detalhe, ao instalar use esse comando:
sudo apt-get install zoneminder
e
sudo apt-get install xawtv
PARABÉNS.
Alguem sabe o que esta errado ?
Mas o mais importante é ter método e seguir uma sequência para identificar onde é o problema. Por exemplo, o tutorial orienta a testar antes com o xawtv. As câmeras funcionaram com ele ? Caso haja dúvidas, sugiro reformatar a máquina e seguir o tutorial detalhadamente. Sugiro inclusive testar primeiro baixando uma versão 10.10, funcionando com ela testar depois com versões mais novas. Qualquer dúvida estou à disposição.
agradeço se assim for atendido.
Dagoberto.
eu não consigo habilitar a função celular na versão 8.5 da GV 800
se tiver uma solução me me avisa ok
dagooview@gmail.com
eu não consigo habilitar a função celular na versão 8.5 da GV 800
se tiver uma solução me me avisa ok
dagooview@gmail.com
Nem sei como te agradecer pelo material. Há dias eu venho procurando como alterar o local das gravações do Zoneminder. HD sempre enchendo e dando pau. Nem na própria página oficial do Zoneminder encontrei essa informação, (lamentável, pois é muito comum este problema). Segui os seus passos e deu certo. Muito obrigado!