IA de reconhecimento de caligrafia coreana
Universidade Konkuk. Sênior, Programação Multimídia - Projeto de semestre (Projeto individual)
1. Introdução
“A caligrafia coreana de um indivíduo pode ser aprendida por meio de uma rede neural artificial?”
Mesmo ao escrever as mesmas letras, o estilo de caligrafia de cada pessoa parece sutilmente diferente. O estilo de caligrafia das pessoas que são forçadas a escrever ou que escrevem enquanto arrotam deixará traços diferentes do habitual, tornando-o altamente confiável como prova. Essa singularidade é o que torna uma assinatura única. Em documentos e exames importantes, é muito importante verificar a autenticidade da caligrafia.
Como é usada para provar a identidade, a caligrafia é única, mas se houver duas caligrafias diferentes com apenas diferenças sutis, será difícil para os humanos distinguirem a diferença a olho nu. Portanto, eu queria implementar um modelo de inteligência artificial para reconhecimento de caligrafia coreana.
(1-1) Dados de entrada
- Caligrafia coreana de 10 pessoas
- A imagem acima foi toda escrita por uma pessoa diferente. (Você pode ver que são as mesmas letras, mas sutilmente diferentes.)
(1-2) Alvo
- 10 pessoas (3 familiares, 7 amigos próximos)
- BSN (Sona Bang), CHW (Howon Choi), KBJ (Beomjun Kim), KJH (Joonhyung Kwon), LJH (Jongho Lee), LSE (Seungeon Lee), PJH (Jonghyuk Park), PSM (Sangmoon Park), SHB ( Suk Hyunbin), SWS (Woosub Shin)
(1-3) Campo de aplicação esperado
- Verificação de caligrafia de exames nacionais e documentos importantes.
- OCR (reconhecimento óptico de caracteres)
2. Criando banco de dados
2-1. Dados de uma letra
(1) imread
- Modelo usado fornecido pela "Ongle-leap", uma empresa de design de fontes
- Inclui todas as combinações de letras coreanas
(2) Máscara não nítida
- Máscara não nítida usada para aprimorar a caligrafia
(3) Transformada em escala de cinza
(4) Exame do histograma e aplicação do primeiro limite
- O limite é definido através do histograma e a imagem é binarizada com base no limite.
- (Neste exemplo, o limite é definido como 150 de 0 a 255)
(5) Aplicar LPF
- Para extrair a posição da caligrafia é necessário suavizar a caligrafia através do LPF para que o contorno fique exposto.
- Defina o tamanho do kernel adequadamente e aplique LPF às imagens binarizadas por meio de cv2.filter2D.
- Quanto menor o tamanho do Kernel, mais fácil será detectar unidades menores, como vogais e consoantes, e quanto maior o tamanho do Kernel, mais fácil será detectar o contorno da própria letra.
- (O exemplo aplica-se ao kernel 21x21)
(6) Exame do histograma e aplicação do segundo limite
- Defina o limite através do histograma da imagem suavizada com LPF e, em seguida, a binarização é realizada novamente com base no limite.
- (Exemplo de valor limite: 230)
(7) Extrair contorno e coordenadas, cortar imagem
- Um pequeno esboço que não é uma carta não foi extraído.
- As coordenadas x,y e os valores w,h foram extraídos do contorno extraído, e as coordenadas foram calculadas novamente com um quadrado para que as características da caligrafia não fossem perdidas tanto quanto possível, pois tiveram que ser redimensionadas posteriormente para tamanhos 64x64.
- Através das coordenadas calculadas, a imagem foi recortada em formato quadrado.
(8) Escrever
- 81 dados de uma letra por pessoa
- total: 810 dados de uma letra foram coletados,
2-2. Dados de duas letras
- Os dados de duas letras foram criados combinando diferentes dados de uma única letra, cada um dimensionado adequadamente.
- Para reduzir a perda de informações de características durante o redimensionamento, a função img_concat(img1, img2) foi criada e utilizada para conectar as imagens, formando-as em quadrados.
- Adquiriu 6.480 dados de duas letras por alvo (81P2)
2-3. Dados de três letras
- Os dados de três letras foram feitos combinando dados de uma letra e dados de duas letras, cada um dimensionado adequadamente.
- Adquiriu 7.980 dados de três letras por alvo
2-4. Dados reais manuscritos de anotações
- Os dados foram adquiridos a partir das anotações reais do alvo.
- Adquiriu 30 dados manuscritos reais por alvo
3. 1º Resultado
Dados de treinamento: Dados de teste = 9: 1
Dados usados = Uma letra (81) + Duas letras (500) + Três letras (500) + Caligrafia real (30)
n.Epoch = 20, Tamanho do lote = 50, Taxa de aprendizado = 0,01
Configuração de camada
- Resultado
- Perda=0,7819, Precisão=0,72
- Resultado para dados de teste=0,6503
4. 2º Resultado
Dados de treinamento: Dados de teste = 9: 1
Dados usados = Uma letra (81) + Duas letras (1000) + Três letras (1300) + Caligrafia real (30)
n.Epoch = 20, Tamanho do lote = 150, Taxa de aprendizagem = 0,04
Configuração de camada
- Resultado
- Perda=0,0397, Precisão=0,9908
- Resultado para dados de teste=0,9360
5. Análise de resultados
Em comparação com o primeiro resultado, o segundo resultado foi significativamente melhorado. Acho que a razão pela qual os resultados melhoraram é a seguinte.
(5-1) Aumentando os dados utilizados para aprendizagem
- Na primeira tentativa foram utilizados 1.111 dados por alvo e na segunda tentativa foram utilizados 2.411 dados, o que é mais que o dobro.
- Como o aprendizado e a avaliação foram conduzidos por meio de mais dados, características mais delicadas da caligrafia do alvo poderiam ter sido capturadas.
(5-2) Mudanças na camada de rede neural artificial
- Na segunda tentativa, o tamanho da máscara de convolução e o tamanho do pooling foram modificados.
- O tamanho da máscara de convolução foi reduzido para um tamanho menor do que antes para capturar características de caligrafia muito finas
- Reduziu a perda de características de caligrafia no processo de aprendizagem, reduzindo o tamanho do pool.
- Além disso, para conter mais informações sobre escrita manual como parâmetros, o número de nós totalmente conectados foi aumentado de 128 para 256
(5-3) Aumento do tamanho do lote e taxa de aprendizagem