Вы находитесь на странице: 1из 6

XI Workshop de Viso Computacional - October 05th-07th, 2015

Automatic Correction of Multiple-Choice Tests


on Android Devices
Francisco de Assis Zampirolli, Rodrigo Teiske China,
Rogrio Perino de Oliveira Neves, Jos Artur Quilici-Gonzalez
Centro de Matemtica, Computao e Cognio
Universidade Federal do ABC
Santo Andr, Brasil
E-mails: {fzampirolli, rogerio.neves, jose.gonzalez}@ufabc.edu.br, rodrigo.china@aluno.ufabc.edu.br

Abstract There are currently several commercial automatic introduzida nos Estados Unidos em 1932 (IBM 805 Test
graders for multiple-choice test sheets, usually composed by a Scoring Machine), sendo j naquela poca utilizada para
software and scanner bundle. But the wide spread of laptops, avaliar testes de mltipla-escolha. Para sua implementao so
tablets and smartphones with integrated cameras offer new frequentemente utilizados scanners dedicados a OMR ou
possibilities to perform the same task without the need for any scanners de imagem convencionais. No caso de um scanner de
extra hardware or software and with the benefit of low cost imagem, um software OMR processa a imagem com eficcia
mobile execution. This paper presents an application for Android similar a dos scanners dedicados a OMR [4], porm com
smartphones and tablets that uses the OpenCV library. desempenho baixo, mas com algumas vantagens tais como
Furthermore, a new image processing technique is presented for
baixo custo e a possibilidade de usar formulrios OMR
finding outer borders of objects. This application showed
excellent results in tests for the correction of hundreds of
especficos de acordo com a necessidade do usurio [5, 6, 7].
multiple-choice test sheets in real conditions. H tambm vrios programas de OMR e OCR (Optical
Character Recognition) disponveis, assim como aplicativos
KeywordsImage Processing; Image Segmentation; para smartphones com iOS e Android voltados para a
Mathematical Morphology; Multiple-Choice Test; Optimal Mark decodificao de cdigos de barras e cdigos QR-code [5, 6, 7,
Recognition. 8, 9].
Neste artigo descrita a implementao do MCTest, um
I. INTRODUO corretor automtico de testes de mltipla-escolha para
dispositivos mveis com sistema operacional Android. O
Com a popularizao de smartphones, tablets e laptops MCTest utiliza um quadro de respostas mais simples do que
equipados com cmeras de alta resoluo, vrias tarefas antes de formulrios OMR convencionais, que pode ser construdo
realizadas por grandes mquinas se tornaram possveis tendo para o nmero de questes e respostas desejadas em editores de
mo apenas um destes pequenos dispositivos [1]. Uma texto comuns, alm de oferecer vrios recursos como a
alternativa interessante a possibilidade de corrigir testes de possiblidade de diferenciar gabaritos e testes de vrios tipos
mltipla-escolha usando apenas um smartphone ou tablet, diferentes e com pesos diferenciados para cada questo.
definido aqui por dispositivo mvel.
Embora a cmera desses equipamentos tenha qualidade II. PROCEDIMENTOS
suficiente para fotografar satisfatoriamente o gabarito do teste a
ser avaliado, a variao da distncia, do ngulo, da A. Descrio do MCTest
luminosidade na foto, entre outros fatores, dificultam o O MCTest um aplicativo mvel (App) disponvel
processamento das imagens, exigindo tcnicas refinadas de gratuitamente na Google Play Store e pode ser instalado em
segmentao de imagens. dispositivos com o sistema operacional Android. Aps
Existem vrios softwares populares para gerar testes, como instalado o App, o usurio pode criar Projetos para cada turma
o testesdemultiplaescolha [2] ou o Quiz-Press, tambm h de alunos. As regras de construes nos quadros de respostas
vrias solues recentes, como o Eyegrade [3], e h dos testes de mltipla-escolha devem seguir alguns critrios,
dispositivos e softwares comerciais especficos para corrigir detalhados em [10]. Em http://vision.ufabc.edu.br/MCTest h
testes, geralmente com custo elevado. Alm disso, no h vrios exemplos de formatos de testes para serem aplicados,
detalhes na literatura de metodologias e tcnicas populares para assim como as regras de utilizao deste App esto num
implementar corretores de testes ou resolver problemas tutorial. Neste artigo ser detalhada a parte de aquisio e
relacionados. processamento das imagens.
Atravs de uma tecnologia conhecida como Optical Mark As prximas figuras foram capturadas da tela de um
Recognition (OMR) [4] possvel fazer a aquisio de dados smartphone Samsung Galaxy Note 2, com Android verso 4.3
discretos contidos em formulrios predefinidos, detectando e ilustram o processo de correes de testes de mltipla-
com a ajuda de um scanner a presena ou no de marcas nos escolha usando o MCTest.
espaos reservados para preenchimento. Esta tecnologia foi

81
XI Workshop de Viso Computacional - October 05th-07th, 2015

Figura 4 Contedo do arquivo CSV, referente a 3 testes corrigidos. Observa-


Figura 1 Quadro de respostas de um gabarito. Posicione o quadro de se que as questes 5 e 7 do gabarito apresentado na Figura 1 valem 1,5, pois
respostas do teste entre as linhas verdes, os 4 extremos deste quadro de os quadrados da ltima linha destas questes esto marcados.
respostas devem ficar na rea branca, fora da elipse vermelha (importante:
deixar fundo branco entre estas linhas, alm do quadro de respostas) e
fotografar (boto verde).

Figura 5 Imagem imgTemp capturada pela cmera do dispositivo mvel.

A Figura 3-a mostra um teste j fotografado aps vrias


transformaes na imagem capturada na Figura 2. O passo
Figura 2 Quadro de respostas de um aluno para correo. seguinte enviar para correo. Quando o MCTest inicia o
processo de correo do teste, o gabarito lido no smartphone
e comparado com o teste em questo. Os resultados so
mostrados na tela (Figura 3-b) para que o usurio possa
verificar, aceitar ou repetir a correo, conforme desejar.
Imagens do quadro de respostas do aluno digitalizada e
corrigida (nas Figuras 2 e 3-b) podero ser salvas no
smartphone. Tambm, um arquivo CSV contendo os resultados
de todas as correes do Projeto armazenado. A Figura 4
ilustra as informaes do arquivo CSV que podem ser obtidas
de cada teste, como questes invlidas, erradas, etc.

B. Processamento de Imagens
As imagens capturadas pelos dispositivos mveis so
processadas usando a biblioteca de viso computacional
OpenCV [11] importada pelo ambiente de desenvolvimento
ADT (Android Developer Tools), verso 22.3 (disponvel em
http://developer.android.com/sdk), que inclui componentes
essenciais para o desenvolvimento de aplicativos para Android,
(a) (b)
Figura 3 (a) Aps fotografar, se a figura contm todo o quadro de respostas,
usando a linguagem de programao Java.
basta Enviar para Correo. (b) Correo de um teste de um aluno. Aps fotografada com a cmera do dispositivo mvel
(Figuras 1 e 2), a imagem salva na pasta do Projeto, (e.g.
A Figura 1 apresenta um quadro de respostas de um .../MCTest/test10/imgTemp.jpg). O exemplo que ser
gabarito, primeira imagem a ser processada pelo App antes de utilizado para exemplificar as tcnicas de processamento de
corrigir os testes dos alunos. imagens apresentado na Figura 5. Esta imagem em particular
Aps o processamento de um ou mais gabaritos (para representa um gabarito de uma prova do tipo 15, pois todos os
vrios tipos diferentes de testes em um nico Projeto), bits da ltima coluna esto preenchidos. Este tipo 15
fotografar um teste para realizar a correo, como ilustra a interessante, pois ilustra bem o problema de deteco dos
Figura 2. extremos do quadro de respostas, como veremos a seguir.

82
XI Workshop de Viso Computacional - October 05th-07th, 2015

Em seguida, vrias transformaes so aplicadas na


imagem armazenada na varivel imgTemp, descritas a seguir.
Optou-se por deixar trechos de cdigo em Java, com as
chamadas das transformaes em imagens usando o OpenCV,
pois so simples e prximos de algoritmos escritos em
pseudocdigos, assim o leitor pode reproduzir facilmente os
experimentos apresentados. Alm disso, os cdigos esto bem
comentados, em verde, descrevendo os passos do
cdigo/algoritmo. Figura 6 Imagem imgRoi recortada, considerando apenas a rea do quadro
de respostas.
// ler arquivo do disco
Mat imgTemp =Highgui.imread(file.getAbsolutePath());
// recorta imagem, considera somente a rea
// entre as linhas verdes
int H = imgTemp.height(), W = imgTemp.width();
int hh = (int) H / 4;
Rect roi = new Rect(0, hh, W, H - 2*hh + 20);
Mat imgRoi = new Mat(imgTemp, roi);

A imagem inicial recortada, considerando apenas a rea


Figura 7 Imagem em nveis de cinza imgGray.
entre as linhas verdes (veja Figuras 1 e 2). O resultado
apresentado na Figura 6.
Em seguida, independente da resoluo da cmera de vdeo
do dispositivo mvel, feito um redimensionamento com
relao largura fixa de imagem e tambm uma reduo de
cores para nveis de cinza, conforme ilustra o cdigo e a
imagem imgGray na Figura 7. Esta normalizao
necessria para compatibilizar o MCTest com o maior nmero
possvel de dispositivos.
Figura 8 Imagem aps aplicar o filtro Gaussiano.
// Normalizao da imagem com relao largura
H = imgRoi.height();
W = imgRoi.width();
int rsize = (int) W / 500 + 1;
int rH = H % rsize;
H = H + rH;
rH = W % rsize;
W = W + rH;
Imgproc.resize(imgRoi, imgRoi, new Size(W/rsize,
H/rsize),0,0, Imgproc.INTER_CUBIC);
Figura 9 Imagem aps aplicar o filtro da Mediana.
H = imgRoi.height();
W = imgRoi.width();
// converte imagem RGB para cinza
Mat imgGray = new Mat();
Imgproc.cvtColor(imgRoi, imgGray,
Imgproc.COLOR_BGR2GRAY);

Aps a converso para nveis de cinza, feito um filtro


para suavizar a imagem usando suavizao Gaussiana
conforme se v na Figura 8. Outro filtro usado o da mediana
(veja Figura 9) [12]. Figura 10 Imagem aps aplicar o threshold adaptativo.

// tamanho de Funo Estruturante proporcional a H


int size_se = (int) H / 50;
if (size_se % 2 == 0)
size_se++; // GaussianBlur requer size_se impar
Size se = new Size(size_se, size_se);
// filtro Gaussiano para suavizar imagem
Imgproc.GaussianBlur(imgGray, imgGray, se, 0);
// filtro da Mediana tambm para suavizar a imagem
Imgproc.medianBlur(imgGray, imgGray, 5);
Figura 11 Imagem imgGray aps aplicar os filtros morfolgicos.

83
XI Workshop de Viso Computacional - October 05th-07th, 2015

Aps estas transformaes na imagem para suavizar os


nveis de cinza, realizado um threshold adaptativo, para
tentar contornar as sombras que aparecem na imagem (Figura
10).

// binariza imagem usando um threshold adaptativo


Imgproc.adaptiveThreshold(imgGray, imgGray, 255,
Imgproc.ADAPTIVE_THRESH_MEAN_C,
Imgproc.THRESH_BINARY,61,15); Figura 12 Imagem aps aplicar os filtros morfolgicos, destacando os
contornos e os 4 extremos por crculos.
Agora, so aplicados mais dois filtros morfolgicos, o
primeiro chamado abertura morfolgica, que a eroso seguida
da dilatao, com o objetivo de eliminar pequenos rudos
pretos. A outro filtro a fechamento morfolgico, que a
dilatao seguida da eroso, com o objetivo de preencher
pequenos buracos brancos. Veja na Figura 11 o resultado
destes dois filtros.
// define elemento estruturante,
int se_size = rsize;
if (se_size <= 0) se_size = 1; Figura 13 Imagem imgCenterZero com centro em forma de elipse.
Mat se = Imgproc.getStructuringElement(
Imgproc.MORPH_RECT,
new Size(2*se_size+1,2*se_size+1),
new Point(se_size, se_size));

// abertura para eliminar objetos pequenos


Imgproc.morphologyEx(imgGray, imgGray,
Imgproc.MORPH_OPEN, se);

// fechamento para preencher buracos pequenos Figura 14 Imagem destacando os 4 extremos do quadro de respostas.
Imgproc.morphologyEx(imgGray, imgGray,
Imgproc.MORPH_CLOSE, se);

Aps este pr-processamento da imagem, finalmente


realizada a segmentao do quadro de respostas. Para isto,
preciso identificar os 4 extremos deste quadro.
O primeiro mtodo experimentado, que no apresentou
bom desempenho, foi atravs da identificao dos extremos de
cada contorno de objetos, como apresentado na Figura 12. Figura 15 Imagem imgOutt aps aplicar a perspectiva usando os 4
extremos encontrados e visualizados na Figura 14.
O problema de deteco de bordas clssico e atual na rea
de processamento de imagens [13, 14]. Porm, para este caso
especfico de achar os 4 extremos do quadro de respostas, se Agora calculada a transformada de distncia imgDist
faz necessrio usar a tcnica apresentada a seguir. sobre esta imagem da elipse.
O segundo mtodo de identificao dos extremos do quadro // Transforma de distncia
de respostas usando a transformada de distncia, mtodo Mat imgDist = new Mat(H, W, CvType.CV_64FC1);
sendo originalmente apresentado neste trabalho. Inicialmente Imgproc.distanceTransform(imgCenterZero, imgDist,
criada uma imagem imgCenterZero com zeros em uma Imgproc.CV_DIST_L2, 5);
elipse no centro, conforme mostra a Figura 13. A seguir, as imagens imgGray (Figura 11) e imgDist
so divididas em 4 quadrantes. Para o primeiro quadrante
// cria uma imagem com zeros em uma elipse no centro
Mat imgCenterZero = new Mat(H, W, CvType.CV_8U, new realizada a operao mnimo(imgGray1,imgDist1). O
Scalar(0)); mesmo ocorre para os outros trs quadrantes.
Core.add(imgCenterZero, new Scalar(1000), Finalmente, basta encontrar o pixel mximo destes quatro
imgCenterZero); quadrantes para encontrar os extremos. O resultado pode ser
visto na Figura 14.
// o tamanho da elipse proporcional ao
// tamanho da imagem Para ajustar a imagem da Figura 14, usada a funo de
Core.ellipse(imgCenterZero, new Point(W/2, H/2), perspectiva (detalhes na documentao online do OpenCV
new Size(W/3,H/4),0,0,360, new Scalar(0,0,0),-1); [11]). A Figura 15 apresenta o resultado do ajuste.

84
XI Workshop de Viso Computacional - October 05th-07th, 2015

// perspectiva usando getPerspectiveTransform e turma classB2, com 64 testes, tambm com os mesmos 4 tipos
// warpPerspective diferentes de gabaritos, apenas um dos testes apresentou o
mesmo problema (na pasta classB2, veja teste nmero 49).
// 4 pontos extremos calculados anteriormente Portanto, fortemente recomendado ao aluno pintar por
Point[] ap = new Point[4]; completo o quadrado correspondente resposta escolhida, de
ap[0] = p1; ap[1] = p2; ap[2] = p3; ap[3] = p4; preferncia com caneta preta. O filtro do MCTest considera
marcados quadrados com pelo menos 50% da rea pintada.
// padroniza tamanho da imagem em funo do
// nmero de questes e respostas
Fundo branco: ao fotografar, deixar algum fundo branco
int H2 = 20 *
em torno do quadro de respostas (entre as linhas verdes da
(Integer.parseInt(TelaLoad.strNumRespostas) + 2); Figuras 1 e 2), evitando surgimento de rudos nos extremos do
int W2 = 20 * quadro.
(Integer.parseInt(TelaLoad.strNumQuestoes) + 2); Iluminao: Ao fotografar um quadro de respostas, m
Mat imgOutt = new Mat(W2, H2, CvType.CV_8UC4); iluminao pode afetar as correes. Assim, escolha uma
ambiente bem iluminado, sem sombras, sem reflexes de luz, e
// nova perspectiva que em todo o quadro de respostas tenha a mesma intensidade
Point[] pts2 = new Point[4]; de luz.
pts2[0] = new Point(0, 0);
pts2[1] = new Point(W2, 0); Folha plana: O quadro de respostas deve estar em uma
pts2[2] = new Point(W2, H2); superfcie plana ao ser fotografado, principalmente para testes
pts2[3] = new Point(0, H2); com muitas questes, e, consequentemente, quadrados de
respostas pequenos. Isso pode fazer com que uma resposta de
MatOfPoint2f pi = new MatOfPoint2f(ap); uma questo fique cortada ao meio numa folha no plana,
MatOfPoint2f pf = new MatOfPoint2f(pts2); seguindo o modelo de soluo implementado no MCTest.

Mat map_matrix = Desempenho: Outro fator importante a ser observado na


Imgproc.getPerspectiveTransform(pi,pf); utilizao do aplicativo o tempo de processamento de cada
Imgproc.warpPerspective(imgGray, imgOutt, prova. Uma verso preliminar, em MATLAB, executava
map_matrix, new Size(W2,H2)); correes quase instantaneamente, porm precisava de uma
estrutura especfica e muito menos porttil para sua execuo
[10]. Como esperado, o tempo de processamento relativo
Sobre a imagem imgOutt (Figura 15) so realizadas as velocidade do dispositivo mvel utilizado. Mesmo assim,
verificaes de cada quadrado pintado. Observe que esta testando-o com diversas especificaes de dispositivos foi
imagem foi normalizada, de forma que cada quadrado tenha possvel obter um resultado que favorece a utilizao do
dimenso 20x20 pixels. Isto facilita as verificaes das aplicativo mvel em comparao verso para PC. Alm da
respostas de cada questo do quadro de respostas. praticidade e mobilidade, o processo mostrou-se rpido at
mesmo em celulares de baixo custo. O tempo total de correo,
III. RESULTADOS E DISCUSSES incluindo desde a obteno de imagem at a exibio do
Realizao de testes preliminares: Antes de aplicar um resultado, corresponde a aproximadamente 7 segundos nos
teste em uma turma (principalmente com muitos alunos), celulares com baixo poder de processamento, chegando a ser
sugerido imprimir um gabarito e algumas folhas de teste e quase instantneo em celulares mais poderosos. Celulares
realizar experimentos para testar o funcionamento do aplicativo populares, como um Motorola XT918 utilizado em testes
MCTest em seu dispositivo mvel. Alguns modelos de testes apresentaram tempo total de execuo da tarefa de 3 segundos.
esto disponveis em http://vision.ufabc.edu.br/MCTest. O smartphone Samsung Galaxy Note 2, com Android verso
4.3 e processador 1.6 GHz Quad Core e cmera com 8 Mp,
Preenchimento correto dos quadros: Os experimentos processa e corrige uma prova em menos de 1 segundo.
realizados indicam que as respostas dos alunos que no
preencheram completamente os quadrados (fizeram apenas Trabalhos futuros: Verso para iOS e outros dispositivos
algumas linhas caneta, um X ou at mesmo bolinhas, mveis. Est sendo considerado criar uma verso para
deixando muito do fundo branco exposto) no foram todas armazenar ou at corrigir os testes remotamente em um
detectadas pelo MCTest, resultando em pontuao inferior. servidor, utilizando protocolos como o FTP, o que permitiria a
Neste caso, o professor pode destacar a resposta do aluno cooperao de vrios dispositivos para a correo de um
preenchendo com um lpis o quadrado de forma adequada. mesmo Projeto. Nesta modalidade, o dispositivo mvel envia a
Quando uma questo invlida (sem resposta ou com mais de foto ou a correo do teste para um servidor que realizaria o
uma resposta por questo), o aplicativo destaca a coluna em armazenamento ou at as correes. Partes do cdigo para o
amarelo. Em um simples experimento realizado em duas dispositivo mvel e para o servidor j existem. No servidor, o
turmas (veja http://vision.ufabc.edu.br/MCTest/Experiments), a cdigo foi implementado em Python com a biblioteca OpenCV
primeira turma classA2 com 41 testes com 4 tipos diferentes de [11]. Outro estudo sobre a integrao dos dados com
gabaritos, apenas um dos testes apresentou problemas, que foi programas de gerenciamento de notas, comumente usados nas
resolvido facilmente corrigindo com um lpis os quadrados escolas e universidades, embora questes de segurana estejam
pintados de forma incorreta (na pasta ClassA2, veja teste envolvidas no controle de acesso e identificao automtica
nmero 19 e a sua correo no teste nmero 42). A segunda dos testes para incorporao em algum sistema integrado de

85
XI Workshop de Viso Computacional - October 05th-07th, 2015

ensino. Seria interessante tambm melhorar o processamento [4] Optical Mark Recognition. Disponvel em: www.omrsolutions.com.
de imagens para aceitar X em vez de pintar todo o quadrado Acesso em 10.04.15.
da alternativa da questo. Porm, quando isso foi testado, o [5] A. Spadaccini, A Multiple-Choice Test Recognition System based on
the Gamera Framework, Document Image Analysis with the Gamera
aplicativo deixou de ser robusto. Framework, vol. 8, pp. 5-15, 2009.
CONCLUSO [6] T.D. Nguyen, Q.H. Manh, P.B. Minh, L.N. Thanh, e T.M. Hoang,
Efficient and reliable camera based multiple-choice test grading
Foi apresentado um corretor de testes de mltipla-escolha, system, International Conference on Advanced Technologies for
implementado no sistema operacional Android utilizando Communications, 2011.
biblioteca OpenCV [11]. As tcnicas de processamento foram [7] D.J. Sen, R.N. Patel, e U.Y. Patel, Modern Database Technology Needs
detalhadas neste trabalho, principalmente um mtodo para Optical Mark Reading, International Journal of Pharmaceutical and
Applied Sciences 1(2), 56, 2010.
deteco de extremos de objetos foi definido. Os testes
[8] A.F. Mollah, N. Majumder, S. Basu, e M. Nasipuri, Design of an
realizados em vrias dezenas de provas mostram que o corretor Optical Character Recognition System for Camera-based Handheld
automtico de testes de mltipla-escolha apresenta taxa de Devices, International Journal of Computer Science Issues 8(1), 2011.
acerto de 100%, quando as questes so respondidas/pintadas [9] K. Chinnasarn, e Y. Rangsanseri, An image-processing oriented optical
corretamente. Alguns aperfeioamentos na segmentao das mark reader, Conference Series, Society of Photo-Optical
imagens esto sendo feitos para permitir que mesmo gabaritos Instrumentation Engineers (SPIE) Conference Series, vol. 3808, pp.
preenchidos apenas parcialmente possam ser reconhecidos pelo 702708, 1999.
MCTest. [10] F.A. Zampirolli, J.A. Guilici-Gonzalez, e R. Neves. Automatic
Correction of Multiple-Choice Tests using Digital Cameras and Image
Processing. Workshop de Viso Computacional (WVC), Rio de Janeiro,
REFERNCIAS 2013.
[1] K.M. Saipullah, A. Anuar, N.A. Ismail, e Y. Soo, Measuring power [11] OPENCV. Open Source Computer Vision. Disponvel em:
consumption for image processing on Android smartphone, American http://opencv.org. Acesso em 08.04.15.
Journal of Applied Sciences, vol. 9(12), pp. 2052-2057, 2012. [12] R.C. Gonzalez, e R. Woods. Processamento Digital de Imagens. So
[2] Cienciamao. Disponvel em: www.cienciamao.usp.br. Acesso em Paulo: Pearson Pentice Hall, 2010.
10.04.15. [13] L. S. Davis. "A survey of edge detection techniques." Computer
[3] J.A. Fisteus, A. Pardo, e N.F. Garcia, Grading Multiple Choice Exams graphics and image processing 4.3: 248-270, 1975.
with Low-Cost and Portable Computer-Vision Techniques, Journal Of [14] C. Lopez-Molina, B. De Baets, H. Bustince, "Quantitative error
Science Education And Technology, vol. 22(4), pp. 560-571, 2013. measures for edge detection." Pattern Recognition 46.4: 1125-1139,
2013.

86