-
Notifications
You must be signed in to change notification settings - Fork 0
Configuração gerador template
O gerador de template visa facilitar a criação de templates permitindo a configuração de um conjunto de regiões.
O gerador deve ser no formato PHP. O arquivo é, basicamente, o retorno de um array com as configurações gerais do template e as características dos conjuntos de regiões da imagem.
<?php
return [
'nome' => 'demo',
// Outros atributos irão aqui...
'regioes' => [
[
// Configuração conjunto 1
],[
// Configuração conjunto 2
],
],
];
As configurações dos conjuntos serão detalhadas no tópico 'Configuração dos conjuntos' abaixo. Os demais atributos gerais, além do nome
serão explicados no final deste artigo no tópico 'Definição atributos gerais'.
- as regiões dentro de um conjunto devem formar uma matriz
m
xn
, sendom
en
valores inteiros quaisquer.
Os atributos tipo
, id
, p1
e p2
são obrigatórios para definir qualquer tipo de conjunto. Eles representam, respectivamente, o tipo, o identificador das regiões, o ponto superior esquerdo e o ponto inferior direito (formando um retângulo) do conjunto.
O atributo tipo
pode conter o valores
- 0: conjunto de elipses
- 1: OCR numérico
'tipo' => 0, // ou 1
O atributo id
assim como os atributos casoTrue
e casoFalse
(utilizados para conjuntos de elipses) podem ser uma string ou uma função PHP que permita a definição de um identificador único para cada região dentro do conjunto. A assinatura da função será sempre a seguinte.
'id' => 'nome-unico',
// ou
'id' => function ($b, $l, $o) {
return $b . $l . $o; // ou qualquer outra combinação que gere um identificador único
}
Quando o conjunto possui somente um região o id
pode ser somente um string. Porém quando o conjunto especifica mais de uma região, por exemplo, o conjunto de elipses usados na folha de respostas, é preciso definir uma função que atribua um identificador único para cada uma das regiões do conjunto. Detalhes sobre o significado das variáveis $b
, $l
e $o
estão abaixo no tópico 'Configuração conjunto de elipses'.
Os atributos p1
e p2
definem, respectivamente, o ponto superior esquerdo e o ponto inferior direito (em pixel) da parte da imagem onde o conjunto deve ser interpretado.
Define um região onde será feito o OCR numérico. Não possui nenhuma configuração além dos atributos obrigatórios. Abaixo um exemplo com a definição completa de um template que possua somente um região, sendo essa do tipo
1.
<?php
return [
'nome' => 'demo',
'regioes' => [
[
'tipo' => 1,
'id' => 'template',
'p1' => [38,3171],
'p2' => [400,3282],
],
],
];
O resultado do processamento dessa região será o OCR realizado.
Para definir um conjunto de elipses é preciso especificar quantas quais objetos (conjunto de pontos pretos) devem ser considerados.
Os seguintes atributos devem ser adicionados para especificar um conjunto de elipses.
colunasPorLinha
agrupaObjetos
minArea
maxArea
casoTrue
casoFalse
Esses atributos alteram a forma como os contadores $b
, $l
e $o
serão incrementados.
O atributo colunasPorLinha
simplesmente informa para o gerador quantas elipses foram uma linha, ou seja, a quantidade de colunas por linha. Para a imagem de exemplo sendo utilizada as regiões de preenchimento de respostas possuem 20 colunas a cada linha, portanto:
'colunasPorLinha' => 20,
O atributo agrupaObjetos
define como dentro de cada linha os objetos da imagem serão agrupados. Neste exemplo queremos agrupar as questões de 5 em 5 formando a relação das alternativas de 'A' a 'E'. Portanto:
'agrupaObjetos' => 5,
Tal configuração fará com que os contadores $b
, $l
e $o
, os quais significam, respectivamente, contador de bloco, contador de linha e contador e de objeto possuam os seguintes valores:
-
$b {0,1,2,3}
representando cada um dos blocos de questões (1-25, 26-50, 51-75 e 76-100) -
$l {0,1,...,25}
representando cada uma das questões dentro de um bloco -
$o {0,1,2,3,4}
representando cada um dos objetos dentro de uma linha
A valores atribuídos para colunasPorLinha
e para agrupaObjetos
possibilitaram que o contador $o
possa ser utilizado para definir o retorno em casoTrue
para todas as elipses no conjunto.
Define o valore retornado caso a elipse seja considerada como preenchida. No exemplo que está sendo tratado queremos o retorno 'A', 'B', 'C', 'D' e 'E' para as elipses de cada uma das questões da folha (de 1 a 100). Como comentado anteriormente o atributo casoTrue
aceita como valor uma string ou uma função PHP.
Para obter o resultado de retorno como descrito acima é preciso utiliza uma função PHP e considerar o valor do contado de objetos $o
para definir a saída. Sendo assim, a função de definição de retorno caso a elipses esteja preenchida será:
'casoTrue' => function($b,$l,$o) {
switch ($o){
case 0: return 'A';
case 1: return 'B';
case 2: return 'C';
case 3: return 'D';
case 4: return 'E';
}
},
O atributo casoFalse
define o valor de retorno caso a elipse não seja considerada preenchida. Assim como o atributo casoTrue
o valor deste atributo pode ser uma string ou uma função PHP.
Para este exemplo todas as regiões consideradas não preenchidas terão o mesmo valore de retorno, no caso 'W'. Portante a definição será:
'casoFalse' => 'W',
Definem a área mínima e a área máxima para considerar um objeto (conjunto conectado de pontos pretos) como uma região de interesse.
A quantidade de pixel pretos que compõem o objeto definem sua área.
Considerando todas a imagem de teste em uso e as etapas realizadas nos tópicos acima, a versão completa do gerador de template para a imagem considerando duas regiões, uma de OCR numérico e outra com várias elipses, será o seguinte:
return [
'nome' => 'demo',
'regioes' => [
[
'tipo' => 0,
'p1' => [50,1493],
'p2' => [2225,2674],
'colunasPorLinha' => 20,
'agrupaObjetos' => 5,
'minArea' => 300,
'maxArea' => 3000,
'id' => function($b,$l,$o) {
return "e_{$b}_{$l}_{$o}";
},
'casoTrue' => function($b,$l,$o) {
switch ($o){
case 0: return 'A';
case 1: return 'B';
case 2: return 'C';
case 3: return 'D';
case 4: return 'E';
}
},
'casoFalse' => 'W',
],[
'tipo' => 1,
'id' => 'template',
'p1' => [38,3171],
'p2' => [400,3282],
],
],
];