Eu sou tão novo no Processamento de imagens e o que estou tentando fazer é eliminar o ruído das captchas;
Para captchas, tenho diferentes tipos deles:
Para o primeiro, o que eu fiz é:
Primeiramente, eu converti todos os pixels que não são pretos para os pretos. Então, encontrei um padrão que é um ruído da imagem e o excluí. Para o primeiro captcha, foi fácil limpá-lo e encontrei o texto com o tesseract.
Mas estou procurando uma solução para o segundo e o terceiro.
Como isso deve ser? Quero dizer, quais são os métodos possíveis para limpá-lo?
É assim que eu apago padrões:
def delete(searcher,h2,w2):
h = h2
w = w2
search = searcher
search = search.convert("RGBA")
herear = np.asarray(search)
bigar = np.asarray(imgCropped)
hereary, herearx = herear.shape[:2]
bigary, bigarx = bigar.shape[:2]
stopx = bigarx - herearx + 1
stopy = bigary - hereary + 1
pix = imgCropped.load()
for x in range(0, stopx):
for y in range(0, stopy):
x2 = x + herearx
y2 = y + hereary
pic = bigar[y:y2, x:x2]
test = (pic == herear)
if test.all():
for q in range(h):
for k in range(w):
pix[x+k,y+q] = (255,255,255,255)
Desculpe pelos nomes das variáveis, eu estava apenas testando a função.
Obrigado..
Respostas:
Isto é o mais longe possível:
Você provavelmente conhece a
medianBlur
função que encontra o valor mediano em cada kernel e substitui esse valor no centro do kernel. Podemos fazer algo semelhante a isso, mas em vez da mediana, use o valor máximo e o valor mínimo. Com uma mancha mediana também, obtive alguns resultados. Eu sei que eles não são perfeitos, mas espero que isso lhe dê algumas idéias (você pode brincar com os tamanhos da imagem de entrada e os kernels, isso pode melhorar um pouco os resultados).Eu não tenho python instalado agora, então eu compartilho o código C ++ exato que eu usei:
A propósito, nesses casos, métodos de aprendizagem profunda, como YOLO e RCNN, são os melhores métodos. Experimente-os também.
fonte
Aqui está a minha solução,
Em primeiro lugar, obtive o padrão de fundo (editado à mão com tinta). De:
Depois disso, criei uma imagem em branco para preenchê-la com diferenças entre o padrão e a imagem.
Aqui estão as diferenças ..
e, finalmente, adicionei desfoque e limpei os bits que não são pretos.
Resultado:
Com o resultado pytesseract em 2041, está errado para esta imagem, mas a taxa geral está em torno de% 60.
fonte
Você pode usar a biblioteca opencv para processamento de imagem. Muito útil pode ser esta página de documentação do opencv . Em seguida, tente extrair seu número através do método findCountour como:
Depois disso, há o seguinte resultado:
Está longe de ser perfeito, mas se você tentar com valores de limite diferentes, por exemplo:
você pode obter melhores resultados.
fonte