Usando MotionEye OS (instalado no Raspberry Pi com câmera
(nativa ou USB)) para submeter placas à API do ALPRBR.
MotionEye é um Sistema Operacional especialmente desenhado para
tornar um Raspberry Pi numa plataforma de vigilância.
Com a devida configuração pode funcionar como entrada para o sistema
de leitura de placas da ALPRBR.
Nesta proposta usamos um Raspberry Pi Zero (com câmera) tirando fotos
sob controle do operador que são automaticamente submetidas (via
FTP) à analise do API da ALPRBR e cujos resultados retornados para o
script PHP abaixo, no formato JSON, são guardadas em banco de dados
do cliente.
Múltiplos Raspberry Pi rodando MotionEye OS podem ser agrupados e
controlados por uma única central também com o software MotionEye
(que é um software gratuito).
NOTA: As instruções e código abaixo são fornecidas como estão e sem
custos. São cedidos como sugestão e são livres para serem editadas,
partilhadas e comercializadas sem restrição, garantias de
funcionamento ou performance.
Suporte de melhor esforço esta disponíveis via email
alprbrapi@gmail.com e é oferecido sem compromissos de qualquer
natureza.
Estas instruções estão em constante aprimoramento de forma que
sugestões ou correções são bem vindas e se forem de interesse comum
serão adicionadas a este guia.
INSTALAÇÃO
1- Instale MotionEye em seu Raspberry Pi de acordo com instruções
encontradas em:
https://www.arrow.com/en/research-and-events/articles/motioneyeos-camera-setup-on-raspberry-pi-zero-w
Nota: Para associar mais que um Raspberry Pi sob controle central
pode-se seguir as sugestões encontradas em:
https://www.youtube.com/watch?v=nQgeAJIjhNU
Como a configuração inicial de IP é via DHCP instale (por exemplo)
em seu smartphone o aplicativo Net Analizer
Com ele será possível verificar todos os endereços de sua rede WiFi
e localizar o IP que foi assignado para seu Raspberry Pi.
Navegue para o endereço IP que foi alocado para seu Raspberry Pi
(MotionEye).
Entre como admin (sem senha) e ajuste as configurações do MotionEye
como abaixo.
MotionEye
Em Service:
Enable FTP Server = ON
Require FTP Authentication = ON
Enable FTP Write Support = OFF
Enable Samba Server = ON
Require Samba Authentication = ON
Enable Samba Write Support = OFF
Enable SSH Server = ON
Em Expert Settings:
Date Method = NTP
Deixe todo o resto como esta
Video Device = ON
Video Resolution = 640x480 (teste resoluções suficientes para o
reconhecimento. Maior resolução = maior tempo de transferencia da
imagem.
Outros parametros poderão ser otimizados a seu gosto.
File Storage:
Upload Media File = ON
Upload Pictures = ON
Upload Movies = OFF
Entrar as credenciais de seu FTP Server
Test Service para ver se esta tudo OK com as credenciais para acesso
em seu dervidor FTP
Call a Web Hook = ON
Web Hook URL = http://Servidor_Web_De_Sua_Escolha?imageurl=http://Endereço_Web_Para_Fotos_Enviadas_Via_FTP/MotionEye%f
(Ex: http://MeuWebSite.com.br/imagens/MotionEye%f)
HTTP Method = POST (form)
Run a Command = OFF
Text Overlay = Serve para imprimir na foto. Pode confundir o
algorritmo de leitura da placa.
Video Streaming = OFF
Still Images = ON
Image File Name Exemplo = portaria%Y%m%d%H%M%S (Imagem
em seu servidor FTP ficaria por ex:
portaria20221009123412.jpg)
Capture Mode = Manual
Preserve Pictures = For One Day
Enable Manual Snapshots = ON
Movies = OFF
Motion Detection = OFF
2- No Servidor_Web_De_Sua_Escolha coloque os seguintes scripts PHP:
---------->browseMeye.php (navegue para este scipt para
visualizar os dados capturados por motioneye.php abaixo)
<?php
//DATABASE DETAILS//
$servername = "127.0.0.1:3306";
$DBuser = "MySQLUserName";
$DBpass = "MySQLUserPass";
$DBname = "MySQLDBName";
// Create connection
$conn = new mysqli($servername, $DBuser,
$DBpass, $DBname);
$query = "SELECT * FROM motioneye;";
if ($result = $conn->query($query)) {
echo "<head><META
HTTP-EQUIV='refresh' CONTENT='10'></head>";
echo "<table border='1'
align='center' style='border-collapse: collapse;'>";
echo "<tr><th>";
echo
"Evento</th><th>Placa</th><th>Imagem</th></tr>";
while ($row =
$result->fetch_assoc()) {
echo "<tr>";
echo
"<td>".$row["eventtime"]."</td>";
echo
"<td>".$row["property"]."</td>";
echo "<td><img
src=".$row['imageurl']." alt='Car Image'
width='200'></td>";
echo "</tr>";
}
echo "</table>";
$result->free();
$conn->close();
}else{echo "NODATA";}
?>
---------->motioneye.php
<?php
//DATABASE DETAILS//
$servername = "127.0.0.1:3306";
$DBuser = "MySQLUserName";
$DBpass = "MySQLUserPass";
$DBname = "MySQLDBName";
$token =
"SeuTokenALPRBR";
//<<<---EDITAR
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$text = $_POST["imageurl"];
$imageurl =
substr($text,0,strpos($text,"MotionEye/")).substr($text,strrpos($text,"/")+1);
for ($i=0; $i <= 12; $i++) { //Para dar tempo da
imagem ser transferida para o FTP server.
if(file_exists($imageurl)) {
break;
}
sleep(2); // Espera por 2 segundos para cada loop
}
//prepare post to alprbrapi
$url = 'http://alprbr.com:30305/alprbr';
$data = array('imageurl' => $imageurl,
'token' => $token,
'countrycode' => 'br');
// use key 'http' even if you send the request to https://...
$options = array(
'http' => array(
'header' => "Content-type:
application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$resObj = file_get_contents($url, false, $context);
if ($resObj === FALSE) {
/* Handle error */
}else{
//var_dump($resObj);
$respArray = json_decode($resObj,true);
// Create connection
$conn = new mysqli($servername, $DBuser, $DBpass,
$DBname);
if ($conn->connect_error) {
die("Connection failed: " .
$conn->connect_error);
} else {
$sql = "INSERT INTO
motioneye
(token,imageurl,property,credits)";
$sql = $sql. " VALUES
(?,?,?,?)";
$stmt =
$conn->prepare($sql);
$stmt->bind_param('ssss',$token,$imageurl,$respArray['property'],$respArray['credits']);
$stmt->execute();
$stmt->close();
$conn->close();
}
}
exit;
}else{
echo ('{"credits": "","property":"NoData"}');
}
?>
MySQL script (use este script para adicionar a tabela motioneye em
seu banco de dados):
-- phpMyAdmin SQL Dump
-- version 5.0.4deb2+deb11u1
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Tempo de geração: 09-Out-2022 às 10:27
-- Versão do servidor: 10.5.15-MariaDB-0+deb11u1
-- versão do PHP: 7.4.30
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Banco de dados:
`EntreAquiONomeDeSeuBancoDeDados`
--
-- --------------------------------------------------------
--
-- Estrutura da tabela `motioneye`
--
CREATE TABLE `motioneye` (
`token` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`imageurl` varchar(96) COLLATE utf8_unicode_ci NOT NULL,
`property` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
`eventtime` datetime NOT NULL DEFAULT current_timestamp(),
`credits` decimal(8,2) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|