Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OMR (Optical Mark Recognition) with PHP

Avatar for Jansen Felipe Jansen Felipe
September 26, 2019

OMR (Optical Mark Recognition) with PHP

Avatar for Jansen Felipe

Jansen Felipe

September 26, 2019

Other Decks in Technology

Transcript

  1. 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
  2. Contexto Oferta cursos, palestras, consultorias, workshops para micro e pequenos

    empreendedores. Empresa que atende todos os 853 municípios do estado de Minas Gerais.
  3. Contexto • Tempo de digitação • Erro de tabulação •

    Tempo para conferir • Dinheiro • Demora na publicação do resultado • Baixa performance
  4. Contexto Em 2015: 3.308 cursos, palestras, consultorias, etc. (Média de

    10 participantes) 33.080 avaliações (10 perguntas) 330.800 respostas
  5. Contexto Como resolver esses problemas? Depois respondo.. Preguiça.. $ Esqueci..

    Preguiça.. Spam.. Nao tenho celular Nao tenho email..
  6. 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
  7. 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
  8. O que é OMR? • Coleta dados de questionários •

    Correção de gabaritos de provas
  9. SDAPS PHP • Classe com métodos estáticos • Executa comandos

    SDAPS https://github.com/jansenfelipe/sdaps-php
  10. SDAPS - Problemas • Demora (.tif com 10 / ~2

    min) • Formato questionário engessado • .CSV truncado • Calibragem • Output com erros
  11. 10 px 10 px Definir uma tolerância para considerar se

    é uma marcação válida 80 brancos 20 pretos
  12. Um mapa pode ser um arquivo texto Ele deve informar

    as posições XY das regiões que serão analisadas.
  13. 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
  14. Digitalização torta Descobrir o ângulo de inclinação da reta x

    em relação a tangente y de uma digitalização correta 45º
  15. Digitalização torta 45º - 35º = 10º Valor positivo, a

    imagem será rotacionada no sentido anti-horário 35º
  16. Impressão em escala reduzida Descobrir a distância entre os dois

    pontos de uma digitalização correta 2.000 pixels
  17. 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
  18. 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
  19. 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
  20. Antes • Tempo de digitação • Erro de tabulação •

    Tempo para conferir • Dinheiro • Demora na publicação do resultado • Baixa performance (300/mês)