SlideShare uma empresa Scribd logo
1 de 75
Baixar para ler offline
Optical Mark Recognition
with PHP
Quem sou eu?
👨‍💻 Developer since 2007
👶 Father of a boy
🌱 Organizer @phpmg
👔 Owner @supliutecnologia
🤠 Brazilian ten-string guitar player
🎓 Systems Analyst and Development - UNA - 2011
🎓 Interaction Design Specialist UX/UI - PUC Minas - 2016
https://github.com/jansenfelipe
@jansenfelipe
https://jansenfelipe.com.br
Compartilhar experiência
Contexto
Oferta cursos, palestras,
consultorias, workshops para
micro e pequenos
empreendedores.
Empresa que atende todos os
853 municípios do estado de
Minas Gerais.
Contexto
Nossos clientes estão gostando?
Contexto
Vamos aplicar um
questionário
para saber!
Contexto
Contexto
● Tempo de digitação
● Erro de tabulação
● Tempo para conferir
● Dinheiro
● Demora na publicação
do resultado
● Baixa performance
Contexto
Em 2015: 3.308 cursos,
palestras, consultorias, etc.
Contexto
Em 2015: 3.308 cursos,
palestras, consultorias, etc.
(Média de 10 participantes)
33.080 avaliações
Contexto
Em 2015: 3.308 cursos,
palestras, consultorias, etc.
(Média de 10 participantes)
33.080 avaliações
(10 perguntas)
330.800 respostas
Contexto
Como resolver esses problemas?
Contexto
Como resolver esses problemas?
Contexto
Como resolver esses problemas?
Depois
respondo..
Preguiça..
$
Esqueci..
Preguiça..
Spam..
Nao tenho
celular
Nao tenho
email..
Contexto
Como resolver esses problemas?
● O questionário em
papel já funciona bem
● As pessoas respondem
na hora
● A memória das pessoas
está fresca
Contexto
Precisamos automatizar a
tabulação dos dados!
Contexto
Precisamos automatizar a
tabulação dos dados!
OMR
O que é OMR?
O que é OMR?
Optical Mark Recognition é o processo de captura de dados
marcado por humanos a partir de formas de documentos, tais
como pesquisas e testes.
https://en.wikipedia.org/wiki/Optical_mark_recognition
O que é OMR?
● Coleta dados de
questionários
● Correção de
gabaritos de
provas
O que é OMR?
O que é OMR?
OMR
O que é OMR?
OMR
...
Output
O que é OMR?
O que é OMR?
Analógico
Digital
false
false false
false
true
true
Soluções do mercado
SDAPS
● Python
● Output CSV
● Linha de
comando
● LaTeX
http://sdaps.org
SDAPS - LaTeX
$ sdaps "/project01" setup_tex "/example.tex"
SDAPS - LaTeX
$ open /project01/example.pdf
SDAPS - Adequar
● Manter as
bordas
● Manter a
posição dos
quadrados
Adequar ao PHP
SDAPS PHP
● Classe com
métodos
estáticos
● Executa
comandos SDAPS
https://github.com/jansenfelipe/sdaps-php
SDAPS PHP
SDAPS - Problemas
● Demora (.tif com 10 / ~2 min)
● Formato questionário engessado
● .CSV truncado
● Calibragem
● Output com erros
Aprendi como funciona
Aprendi como funciona
Vou fazer com o PHP!
OMR com PHP
● Reconhecer qualquer formato
● Rápido
● Output JSON
Como funciona?
Como funciona?
Analisando pixels!
10 px
10 px
10 px
10 px
Definir uma
tolerância para
considerar se é uma
marcação válida
80 brancos
20 pretos
Como ser rápido?
?
?
?
?
?
?
?
Um mapa!
Um mapa pode ser um
arquivo texto
Ele deve informar
as posições XY das
regiões que serão
analisadas.
Exemplo JSON:
Em relação aos extremos Exemplo JSON:
Output JSON:
false
false
false
false
true
true
Algoritmo
○ Carregar imagem
○ Carregar mapa JSON
○ Avaliar cada target o % de pixels (Pretos vs. Brancos)
○ SE maior que a tolerância:
■ Considerar TRUE
○ SENÃO
■ Considerar FALSO
○ Gerar output
Mole! Só
implementar!
Problemas comuns e falhas
Digitalização torta
Digitalização torta
Ajustar a bandeja
do scanner
Corrigir com uma
fórmula matemática
Digitalização torta
Descobrir o ângulo
de inclinação da
reta x em relação a
tangente y de uma
digitalização
correta
45º
Digitalização torta
45º - 35º = 10º
Valor positivo, a
imagem será
rotacionada no
sentido anti-horário
35º
Impressão em escala reduzida
Impressão em escala reduzida
Impressoras e
configurações
diferentes
Corrigir com uma
fórmula matemática
Impressão em escala reduzida
Descobrir a
distância entre os
dois pontos de uma
digitalização
correta
2.000 pixels
Impressão em escala reduzida
2.000px - 1.300px = 700px
Ampliar a imagem em 35%
1.300 pixels
Digitalização ao contrário
Digitalização ao contrário
Nenhuma fórmula
matemática encontrada
Favor digitalizar
novamente
Algoritmo
○ Carregar imagem
○ Carregar mapa JSON
○ Avaliar cada target o % de pixels (Pretos vs. Brancos)
○ SE maior que a tolerância:
■ Considerar TRUE
○ SENÃO
■ Considerar FALSO
○ Gerar output
Atualização do algoritmo (antes)
○ Carregar imagem
○ Carregar mapa JSON
○ Avaliar cada target o % de pixels (Pretos vs. Brancos)
○ SE maior que a tolerância:
■ Considerar TRUE
○ SENÃO
■ Considerar FALSO
○ Gerar output
Atualização do algoritmo (depois)
○ Carregar imagem
○ Carregar mapa JSON
○ Calcular distância entre os pontos.
○ Calcular ângulo de inclinação.
○ Encontrar a posição dos pixels extremos.
○ Calcular ângulo de inclinação.
○ Rotacionar a imagem de acordo com a diferença entre os ângulos.
○ Encontrar novamente a posição dos pixels extremos.
○ Calcular distância entre os pontos.
○ Ajustar tamanho da imagem de acordo com o percentual encontrado.
○ Avaliar cada target o % de pixels (Pretos vs. Brancos)
○ SE maior que a tolerância:
■ Considerar TRUE
○ SENÃO
■ Considerar FALSO
○ Gerar output
ao implementar..
Antes
● Tempo de digitação
● Erro de tabulação
● Tempo para conferir
● Dinheiro
● Demora na publicação
do resultado
● Baixa performance
(300/mês)
Depois
● Economia
(Tempo/Dinheiro)
● Resultado imediato
● Aumento da performance
(1.837/mês) 6x mais
Inspiração de
biblioteca PHP
github.com/jansenfelipe/omr
ImageMagick
src/Commands/ScanCommand.php
Publiquei no Blog
Apareci no Google
Interessados
Obrigado!
github.com/jansenfelipe
jansen.felipe@gmail.com
@jansenfelipe

Mais conteúdo relacionado

Semelhante a OMR com PHP

TDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data ScienceTDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data Sciencetdc-globalcode
 
Desenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full StackDesenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full StackErick Petrucelli
 
Data, Text and Web Mining
Data, Text and Web MiningData, Text and Web Mining
Data, Text and Web MiningFabrício Barth
 
Com que gráfico eu vou? Uma análise, um gráfico
Com que gráfico eu vou? Uma análise, um gráficoCom que gráfico eu vou? Uma análise, um gráfico
Com que gráfico eu vou? Uma análise, um gráficoLudimila Gonçalves
 
Desenvolvendo chatbots com e xtreme programming
Desenvolvendo chatbots com e xtreme programmingDesenvolvendo chatbots com e xtreme programming
Desenvolvendo chatbots com e xtreme programmingRafael de Paula Souza
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e DjangoOsvaldo Santana Neto
 
TDC2018SP | Trilha UX - Desenvolvendo Chatbots com eXtreme Programming
TDC2018SP | Trilha UX - Desenvolvendo Chatbots com eXtreme ProgrammingTDC2018SP | Trilha UX - Desenvolvendo Chatbots com eXtreme Programming
TDC2018SP | Trilha UX - Desenvolvendo Chatbots com eXtreme Programmingtdc-globalcode
 
01 fundamentos de programação
01   fundamentos de programação01   fundamentos de programação
01 fundamentos de programaçãomaceca21
 
Criando Indicadores de Negócios com o Pentaho na Globo.com
Criando Indicadores de Negócios com o Pentaho na Globo.comCriando Indicadores de Negócios com o Pentaho na Globo.com
Criando Indicadores de Negócios com o Pentaho na Globo.comPentahoBrasil
 
Treinamento MLOps Databricks 2023
Treinamento MLOps Databricks 2023Treinamento MLOps Databricks 2023
Treinamento MLOps Databricks 2023Douglas Mendes
 
TDC2017 - Misturando dados com Pentaho para insights mais significativos
TDC2017 - Misturando dados com Pentaho para insights mais significativosTDC2017 - Misturando dados com Pentaho para insights mais significativos
TDC2017 - Misturando dados com Pentaho para insights mais significativosAmbiente Livre
 
Manual de Normas e Procedimentos
Manual de Normas e ProcedimentosManual de Normas e Procedimentos
Manual de Normas e Procedimentosdmazbnet
 
Manual Infoglobo
Manual InfogloboManual Infoglobo
Manual Infoglobodmazbnet
 
TDC2017 | POA Trilha Arquitetura - Escalando sistemas distribuídos com estru...
TDC2017 | POA Trilha Arquitetura  - Escalando sistemas distribuídos com estru...TDC2017 | POA Trilha Arquitetura  - Escalando sistemas distribuídos com estru...
TDC2017 | POA Trilha Arquitetura - Escalando sistemas distribuídos com estru...tdc-globalcode
 
Mapas conceituais podem preencher a lacuna semântica entre as necessidades do...
Mapas conceituais podem preencher a lacuna semântica entre as necessidades do...Mapas conceituais podem preencher a lacuna semântica entre as necessidades do...
Mapas conceituais podem preencher a lacuna semântica entre as necessidades do...Paulo Correia
 
Modelagem de Sistemas de Informação
Modelagem de Sistemas de InformaçãoModelagem de Sistemas de Informação
Modelagem de Sistemas de InformaçãoHelder Lopes
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPaulino Michelazzo
 
Como detectar anomalias em dados de streaming? Simplificado (TDC Connections ...
Como detectar anomalias em dados de streaming? Simplificado (TDC Connections ...Como detectar anomalias em dados de streaming? Simplificado (TDC Connections ...
Como detectar anomalias em dados de streaming? Simplificado (TDC Connections ...Leonardo Moraes
 
Application insights + ASP.NET Core
Application insights + ASP.NET CoreApplication insights + ASP.NET Core
Application insights + ASP.NET CoreLetticia Nicoli
 

Semelhante a OMR com PHP (20)

TDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data ScienceTDC2016SP - Trilha Data Science
TDC2016SP - Trilha Data Science
 
Desenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full StackDesenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full Stack
 
Data, Text and Web Mining
Data, Text and Web MiningData, Text and Web Mining
Data, Text and Web Mining
 
Com que gráfico eu vou? Uma análise, um gráfico
Com que gráfico eu vou? Uma análise, um gráficoCom que gráfico eu vou? Uma análise, um gráfico
Com que gráfico eu vou? Uma análise, um gráfico
 
Desenvolvendo chatbots com e xtreme programming
Desenvolvendo chatbots com e xtreme programmingDesenvolvendo chatbots com e xtreme programming
Desenvolvendo chatbots com e xtreme programming
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
TDC2018SP | Trilha UX - Desenvolvendo Chatbots com eXtreme Programming
TDC2018SP | Trilha UX - Desenvolvendo Chatbots com eXtreme ProgrammingTDC2018SP | Trilha UX - Desenvolvendo Chatbots com eXtreme Programming
TDC2018SP | Trilha UX - Desenvolvendo Chatbots com eXtreme Programming
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
01 fundamentos de programação
01   fundamentos de programação01   fundamentos de programação
01 fundamentos de programação
 
Criando Indicadores de Negócios com o Pentaho na Globo.com
Criando Indicadores de Negócios com o Pentaho na Globo.comCriando Indicadores de Negócios com o Pentaho na Globo.com
Criando Indicadores de Negócios com o Pentaho na Globo.com
 
Treinamento MLOps Databricks 2023
Treinamento MLOps Databricks 2023Treinamento MLOps Databricks 2023
Treinamento MLOps Databricks 2023
 
TDC2017 - Misturando dados com Pentaho para insights mais significativos
TDC2017 - Misturando dados com Pentaho para insights mais significativosTDC2017 - Misturando dados com Pentaho para insights mais significativos
TDC2017 - Misturando dados com Pentaho para insights mais significativos
 
Manual de Normas e Procedimentos
Manual de Normas e ProcedimentosManual de Normas e Procedimentos
Manual de Normas e Procedimentos
 
Manual Infoglobo
Manual InfogloboManual Infoglobo
Manual Infoglobo
 
TDC2017 | POA Trilha Arquitetura - Escalando sistemas distribuídos com estru...
TDC2017 | POA Trilha Arquitetura  - Escalando sistemas distribuídos com estru...TDC2017 | POA Trilha Arquitetura  - Escalando sistemas distribuídos com estru...
TDC2017 | POA Trilha Arquitetura - Escalando sistemas distribuídos com estru...
 
Mapas conceituais podem preencher a lacuna semântica entre as necessidades do...
Mapas conceituais podem preencher a lacuna semântica entre as necessidades do...Mapas conceituais podem preencher a lacuna semântica entre as necessidades do...
Mapas conceituais podem preencher a lacuna semântica entre as necessidades do...
 
Modelagem de Sistemas de Informação
Modelagem de Sistemas de InformaçãoModelagem de Sistemas de Informação
Modelagem de Sistemas de Informação
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
 
Como detectar anomalias em dados de streaming? Simplificado (TDC Connections ...
Como detectar anomalias em dados de streaming? Simplificado (TDC Connections ...Como detectar anomalias em dados de streaming? Simplificado (TDC Connections ...
Como detectar anomalias em dados de streaming? Simplificado (TDC Connections ...
 
Application insights + ASP.NET Core
Application insights + ASP.NET CoreApplication insights + ASP.NET Core
Application insights + ASP.NET Core
 

OMR com PHP