Bem-vindo à API de leitura de placas de veículos da ALPRBR!

Você pode usar nossa API para acessar nosso serviço que pode ler placas de imagens enviadas usando as instruções que se seguem.

O API da ALPRBR foi otimizado para ler placas usadas no Brasil sendo elas as antigas cinzas ou as novas padrão Mercosul.


ATENÇÃO, todos os arquivos e aplicações são oferecidas sem custo e sem garantia formal explicita de qualquer tipo.

Fique a vontade para fazer downloads e utilizar estes scripts e aplicações da forma que considerar adequados a seu próprio uso.

No ato do cadastro, por tempo limitado, são fornecidos de forma gratuita com fins de avaliação 50 créditos. Após se esgotar estes 50 créditos, caso deseje continuar com o serviço, utilize por favor a página de preços e pagamentos para carregar créditos em seu token. Os valores de créditos podem ser encontrados na mesma página.

A ALPRBR se reserva o direito de atualizar as ferramentas gratuitas oferecidas nesta página a qualquer momento seja para corrigir BUGs ou atualizar sua funcionalidade sem que tenha que previamente avisar aos utilizadores, sempre tomando o cuidado de evitar ao máximo interrupções porém sabendo que elas são possíveis de ocorrer sem que isso acarrete nenhum custo ou penalidade para a ALPRBR ou sua equipe de desenvolvedores.

Entendemos que leu e entendeu os termos de uso antes de se cadastrar e desde já agradecemos pelo tempo dispensado.

Obrigado da equipe ALPRBR.


Sobre as imagens a serem submetidas:
O principal fator de consumo de tempo esta nas operações de leitura das imagens submetidas e tamanho das próprias imagens e a qualidade da conexão com a internet.
Testes realizados durante o desenvolvimento demonstraram que imagens com cerca de até 40Kbytes onde as placas dos veículos aparecem legíveis são suficientes para o reconhecimento.
Fatores adversos como insuficiencia ou excesso de iluminação ou outras questões que obscuram as letras e números podem afetar a legibilidade para o software de reconhecimento.

É provido abaixo o código utilizado na página de demonstração desenvolvida em HTML/JavaScript e sua componente do lado do servidor desenvolvida em PHP.

Uma versão Android utilizando a ferramenta de desenvolvimento Kodular também esta disponível para download.

Lembramos que ambos os arquivos abaixo devem ser instalados em um servidor web accessível na internet.

Para este teste ambos os arquivos devem ser instalados em /var/www/html e dentro deste diretório deve ser criado um diretório /var/www/hrml/upload/ para armazenamento das imagens que forem analizadas.

Lembramos que o diretório uploads/ deve ter seu "ownership" mudado para www-data (usuário utilizado pelo Software Apache).

A partir do diretorio /var/www/html use o comando: sudo chown www-data upload/

A página upload.html permite selecionar a imagem e envia-la para o servidor aos cuidados de upload.php que por sua vez a transferirá para, neste caso, o diretório uploads/.

Uma vez transferida a imagem seu URL e alguns parametros serão submetidos ao API da ALPRBR que interpretará a imagem extraindo o número da placa do veículo presente na imagem.
Caso sejam necessários os dados adicionais do veículo o utilizador poderá submeter o número da placa a um serviço externo que fornece estes dados também no formato JSON.

Para maiores informações visite o site da InfoSimples.

Para que a avaliação abaixo funcione será preciso criar uma conta no serviço ALPRBR.

Ao se cadastrar você recebe grátis seu Token criptográfico de 32 caracteres e 50 créditos para testar.

Créditos adicionais poderão ser obtidos em https://alprbr.com/prices.html

Em caso de dúvidas favor entrar em contato com: alprbrapi@gmail.com


A API de reconhecimento de placas produz uma resposta JSON no seguinte formato:
{ "credits": "", Créditos remanescentes
"property":"" } Número da placa
O script direct.html abaixo possui a função de permitir a seleção de uma imagem armazenada em seu HD local que será enviada diretamente para processamento no serviço ALPRBR e imediatamente descartada após completar o processo. Retornará o número da placa que aparece na imagem submetida e o saldo de créditos.

Para usar este código para seu próprio projeto, baseado no script do jeito que ele esta, autenticação será requerida. Arquivos de suporte como tabela mySQL, aplicativo Kodular (front End) Executável (DEMO_API.apk) e código fonte (aplicativo Android DEMO_API.aia) de distribuição gratuita, e arquivo de segurança para acesso à tabela "tokens" podem ser baixados no link: Downloads em formato .zip 
Aplicativo (apk) já compilado pode ser diretamente instalado em seu smartphone Android (11) a partir do seguinte link: Demo Kodular roda em qualquer smartphone Android 11
Lembrando que para instalar o aplicativo no SmartPhone é preciso liberar instalação a partir de "fontes desconhecidas" uma vez que o DEMO ainda não foi disponibilizado no Google Play Store.
No celular navegue para esta página, click no link acima e siga instruções.

NOTA: Depois de instalar o DEMO_API.apk que já vem compilado basta se registrar como utilizador em https://alprbr.com para receber gratuitamente seu token + 50 créditos (oferta de lançamento válida por tempo limitado) e iniciar testes, todos os parâmetros estão pré configurados.
Importante para Android 11: Será necessario autorizar o Aplicativo ALPRBR para utilizar a câmera. Configuração/Gerenciar Permissões/Câmera/ALPRBR

NOTA: Você só precisa dos scripts abaixo como modelo para desenvolver sua própria solução.
Para somente testar basta se cadastrar e ativar sua conta.
Logo você recebe em retorno um email com seu token+50 créditos que podem ser utilizarados tanto no App Android como no link abaixo:

Click aqui e teste grátis agora mesmo


direct.html

<!DOCTYPE html>
<html lang="">
 <head>
  <link rel="icon" type="image/x-icon" href="http://alprbr.com/images/car.png">
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>ALPRBRAPI</title>
</head>
<body onload='startFunc()'>
<form id="myForm">
<table align='center' style="border-collapse: collapse;" border="1">
<tbody>
<tr><td align="center"><font size = "5"><b>Leitura de Placas Direto ALPRBR</b></font><br>
Escolher imagem onde apareça legível a placa de um veículo:<br>
Padrão Mercosul: LLLNLNN, padrão antigo LLL-NNNN</td></tr>

<tr><td align='center'>
<input id="inpFile" type="file" accept="image/jpeg, image/png, image/jpg" onclick='enableUpload()'>
<button id='btn_uploadfile' name='btn_uploadfile' type="submit">Enviar</button>
</td></tr>

<tr><td align='center'>Seu Token: <input id="myToken" name="myToken" minlength='32' maxlength='32'>
<a href="https://alprbr.com/signup.html" title="Cadastro de Usuários">Não Tenho</a>
</td></tr>

<tr><td align="center"><img src="#" id="localImage" width="400"></td></tr>
<tr><td align='center'>      

    <table align='center' style="border-collapse: collapse;" border="1" width="100%">
    <tbody>
    <tr><td><b>Créditos</b></td>
    <td><label id='credits'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label></td></tr>
    <tr><td><b>Placa</b></td><td><label id='property'></label></td></tr>
    </tbody>
    </table>

</td></tr>
</tbody></table>    
</form>

<div align="center" id="myData" name="myData"></div>

<script>
    var token='';

    const imgInput = document.querySelector('input')
    const imgEl = document.querySelector('img')
 
    function enableUpload(){document.getElementById("btn_uploadfile").disabled = false;}
    function startFunc(){
        document.getElementById('localImage').style.visibility = 'hidden';
    }    

    imgInput.addEventListener('change', () => {
      if (imgInput.files && imgInput.files[0]) {
        const reader = new FileReader();
        reader.onload = (e) => {
          imgEl.src = e.target.result;
        }
        reader.readAsDataURL(imgInput.files[0]);
        document.getElementById('localImage').style.visibility = 'visible';
        document.getElementById("credits").innerHTML      = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
        document.getElementById("property").innerHTML     = '';       
      }
    }) 

    const myForm  = document.getElementById("myForm");
    const inpFile = document.getElementById("inpFile");

    myForm.addEventListener("submit", e => {

      token = document.getElementById('myToken').value;
      token = token.replace(/\s/g'');
      if (token.length<32){
          alert("Token não pode conter espaços.");
          document.getElementById('myToken').focus();
          return;
      }

      document.getElementById('btn_uploadfile').innerHTML = 'Processando, Aguarde...'
      document.getElementById("btn_uploadfile").disabled = true;

      e.preventDefault();
      const endpoint = "http://alprbr.com:30305/alprbr";
      const form_data = new FormData();
      console.log(inpFile.files);
      form_data.append("inpFile", inpFile.files[0]);
      form_data.append("countrycode","br");
      form_data.append("token",token);
      form_data.append("imageurl","");

        fetch(endpoint, {method: "post", body: form_data })
        .then(function (response) {
            return response.json();
        })
        .then(function (data) {
            appendData(data);
        })
        .catch(function (err) {
            console.log('erro: ' + err);
            document.getElementById('btn_uploadfile').innerHTML = 'Enviar';
        });
        function appendData(data) {
           document.getElementById("credits").innerHTML      = data.credits;
           document.getElementById("property").innerHTML     = data.property;
           document.getElementById('btn_uploadfile').innerHTML = 'Enviar';           
        }   
    });
</script>
</body>
</html>

Este script tem a função de permitir a seleção de uma imagem que será enviada para um outro script upload.php (abaixo) que salvará a imagem em um diretório accessível a partir da internet. Este espaço pode ser uma hospedagem contratada pelo utilizador (A ALPRBR não armazena arquivos de utilizadores) para armazenamento. Uma vez a transferência completa o URL da imagem e credenciais do utilizador serão enviados para processamento no serviço ALPRBR.
Retornará o número da placa presente na imagem.
Como dito acima, trabalha em conjunto com o script abaixo (uploads.php) para completar esta tarefa.

upload.html

<!DOCTYPE html>
<html lang="">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>ALPRBR Demo</title>
  </head>
  <body align="center" onload="startFunc()">
    <div> <input name="file" id="file" onclick="startFunc()" type="file">
      <input id="btn_uploadfile" value="Upload" onclick="uploadFile()" type="button">
    </div>
    <br>
    <form name="alprbr" id="alprbr">
      <table style="border-collapse: collapse;" align="center" border="1">
        <tbody>
          <tr>
            <td colspan="2" align="center">Imagem Max 256K, jpg, jpeg e png</td>
          </tr>
          <tr>
            <td><label for="credits">Creditos</label></td>
            <td><input name="credits" id="credits" type="text"></td>
          </tr>
          <tr>
            <td>Placa</td>
            <td><input name="property" id="property" type="text"></td>
          </tr>
          <tr>
            <td colspan="2"><img id="vehicle" src="" alt="Veículo" width="400"></td>
          </tr>
        </tbody>
      </table>
    </form>
    <script>
// Upload file
function startFunc(){
  document.getElementById('vehicle').style.visibility = 'hidden';
}

function uploadFile() {
  document.getElementById("vehicle").disabled = true;
  document.querySelector('#btn_uploadfile').value = 'Processando, Aguarde...';
  document.getElementById("btn_uploadfile").disabled = true;
 
  var files = document.getElementById("file").files;
  if(files.length > 0 ){

    var formData = new FormData();
    formData.append("file", files[0]);

    var xhttp = new XMLHttpRequest();

    // Set POST method and ajax file path
    xhttp.open("POST", "upload.php", true);

    // call on request changes state
    xhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {

        var response = this.responseText;
        if(response == ''){
           alert("Erro no Upload.");
        }else{
           //alert(response);
           const jsonData = JSON.parse(response);
           document.getElementById("credits").value      = jsonData.credits;
           document.getElementById("property").value     = jsonData.property;

           if(jsonData.counter!=''){
             document.getElementById("vehicle").disabled = false;
             document.getElementById("vehicle").src = "Endereço web para a imagem/"+files[0].name;       <---EDITAR       
             document.getElementById("vehicle").style.visibility = 'visible';
           }
           document.querySelector('#btn_uploadfile').value     = 'Upload';
           document.getElementById("btn_uploadfile").disabled  = false;         
        }
      }
   };
   // Send request with data
   xhttp.send(formData);
 }else{
   alert("Selecione a imagem de uma placa");
 }
}
</script>
  </body>
</html>

upload.php

<?php

if(isset($_FILES['file']['name'])){

   // file name
   $filename = $_FILES['file']['name'];

   // file size
   $file_size = $_FILES['file']['size'];

   // Location
   $location = 'upload/'.$filename;
   $imageUrl = 'diretorio acessível a partir da internet/'.$location; <------EDITAR

   // file extension
   $file_extension = pathinfo($location, PATHINFO_EXTENSION);
   $file_extension = strtolower($file_extension);

   // Valid image extensions
   $valid_ext = array("jpg","png","jpeg");

   $response = 0;

   if(($file_size >= 262144) || ($file_size == 0)) {
      echo ('{"credits": "","property":"Imagem max = 256Kb"}');
      die();
   }

   if(in_array($file_extension,$valid_ext)){
      // Upload file
      if(move_uploaded_file($_FILES['file']['tmp_name'],$location)){
    
         //prepare post to alprbrapi
         $url = 'http://alprbr.com:30305/alprbr';
         $data = array('imageurl' => $imageUrl,
                       'token' => 'Entre Aqui Seu Token fornecido pela ALPRBR',     <<<---EDITAR
                       '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);
         $result  = file_get_contents($url, false, $context);
         if ($result === FALSE) {
           /* Handle error */
         }else{
           //var_dump($result);
           $response = $result;
         }
         //unlink($location); //delete uploaded file
         echo $response;
         exit;
      }
   }else{
      echo ('{"credits": "","property":"Imagens: jpg,jpeg e png"}');
   }
}else{
   echo "noFile";
}
?>


Suporte técnico: alprbrapi@gmail.com