DdddOcr é uma colaboração entre o autor e Kerlomz. Ele gera grandes lotes de dados aleatórios e realiza treinamento profundo de rede. O efeito do uso desta biblioteca pode ou não ser. identificável.
DdddOcr, o conceito de dependência mínima, minimiza os custos de configuração e uso do usuário, na esperança de trazer uma experiência confortável para cada testador
Endereço do projeto: Clique aqui para enviar
Uma biblioteca python de reconhecimento de captcha universal fácil de usar
Explore a documentação deste projeto »
· Reportar bugs · Propor novos recursos
Parceiros patrocinadores
Guia de primeiros passos
Apoio ambiental
Etapas de instalação
Descrição do diretório de arquivos
Apoio subjacente ao projeto
Usar documentação
Capacidade básica de reconhecimento de OCR
Capacidade de detecção de alvo
Detecção de controle deslizante
Saída de probabilidade de OCR
Importação de modelo de treinamento de OCR personalizado
controle de versão
Artigos ou projetos recomendados relacionados
autor
Doar
História da estrela
Parceiros patrocinadores | Razões para recomendação | |
---|---|---|
SimCaptcha | Código de verificação Google reCaptcha/código de verificação hCaptcha/código de verificação funCaptcha interface de identificação de nível comercial clique em mim diretamente para VIP4 | |
super águia | O negócio líder mundial de classificação e reconhecimento de imagens inteligentes, seguro, preciso, eficiente, estável, aberto, com uma forte equipe técnica e de verificação que suporta grande simultaneidade. Gerenciamento do progresso do trabalho 7*24h | |
Malénia | Plataforma de gateway IP proxy de nível empresarial Malenia / software de distribuição de IP proxy | |
VPS Nimbus | 50% de desconto no primeiro mês de inscrição | Preço baixo do nó de Zhejiang e grande largura de banda, 100 milhões 30 yuans por mês |
sistema | CPU | GPU | Versão py máxima suportada | Observação |
---|---|---|---|---|
Windows 64 bits | √ | √ | 3.12 | Algumas versões do Windows precisam instalar a biblioteca vc runtime |
Janelas de 32 bits | × | × | - | |
Linux64/ARM64 | √ | √ | 3.12 | |
Linux 32 | × | × | - | |
Mac X64 | √ | √ | 3.12 | M1/M2/M3...Referência do chip #67 |
eu. Instalar a partir do pypi
pip instalar dddddocr
ii. Instalar da fonte
clone do git https://github.com/sml2h3/ddddocr.gitcd ddddocr configuração do python.py
Por favor, não importe dddddocr diretamente no diretório raiz do projeto dddddocr . Certifique-se de que o nome do diretório do seu projeto de desenvolvimento não seja dddddocr.
por exemplo:
ddddocr ├── MANIFEST.in ├── LICENSE ├── README.md ├── /ddddocr/ │ │── __init__.py 主代码库文件 │ │── common.onnx 新ocr模型 │ │── common_det.onnx 目标检测模型 │ │── common_old.onnx 老ocr模型 │ │── logo.png │ │── README.md │ │── requirements.txt ├── logo.png └── setup.py
Este projeto é baseado nos resultados de treinamento do dddd_trainer. A estrutura de treinamento subjacente é pytorch. O raciocínio subjacente do dddddocr depende do onnxruntime.
É usado principalmente para identificar linhas únicas de texto, ou seja, a parte do texto ocupa a parte principal da imagem, como inglês comum e códigos de verificação numéricos, etc. Este projeto pode reconhecer chinês, inglês (caso aleatório ou caso por configuração o intervalo de resultados), números e alguns caracteres especiais.
# exemplo.pyimport ddddocrocr = ddddocr.DdddOcr()image = open("example.jpg", "rb").read()result = ocr.classification(image)print(resultado)
Existem dois conjuntos de modelos de OCR incorporados nesta biblioteca. Eles não serão alternados automaticamente por padrão. Você precisa alternar entre os parâmetros ao inicializar o ddddocr.
# example.pyimport ddddocrocr = ddddocr.DdddOcr(beta=True) # Mude para o segundo conjunto de modelo ocr image = open("example.jpg", "rb").read()result = ocr.classification(image)print (resultado)
Dicas para suporte de reconhecimento para algumas imagens em formato png preto transparente: classification
usa o parâmetro png_fix
, o padrão é False
ocr.classification(imagem, png_fix=True)
Perceber
Anteriormente, descobri que muitas pessoas gostam de reinicializar o ddddocr toda vez que o OCR é reconhecido, ou seja, executar ocr = ddddocr.DdddOcr()
toda vez. Em geral, ele só precisa ser inicializado uma vez, porque cada vez. inicialização e A primeira velocidade de reconhecimento após a inicialização é muito lenta.
Imagem de exemplo de referência
Incluindo, mas não limitado às seguintes imagens
É usado principalmente para detectar rapidamente a possível posição do sujeito alvo na imagem. Como o alvo detectado não é necessariamente texto, esta função fornece apenas a posição bbox do alvo (na detecção de alvo, geralmente usamos bbox (caixa delimitadora, A abreviatura). é bbox) para descrever a posição de destino bbox é uma caixa retangular, que pode ser determinada pelas coordenadas dos eixos xey do canto superior esquerdo do retângulo e pelas coordenadas dos eixos xey do canto inferior direito)
Se não houver necessidade de chamar a função ocr durante o uso, você pode desativar a função ocr passando o parâmetro ocr=False
durante a inicialização. Para ativar a detecção do alvo, você precisa passar o parâmetro det=True
importar ddddocrimport cv2det = ddddocr.DdddOcr(det=True)com open("test.jpg", 'rb') como f:image = f.read()bboxes = det.detection(image)print(bboxes)im = cv2 .imread("test.jpg")para bbox em bboxes:x1, y1, x2, y2 = bboxim = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255 ), espessura=2)cv2.imwrite("resultado.jpg", im)
Imagem de exemplo de referência
Incluindo, mas não limitado às seguintes imagens
A função de detecção de controle deslizante deste projeto não é implementada pelo reconhecimento de IA, mas é implementada pelo algoritmo integrado do opencv. Pode não ser tão amigável para usuários que fazem capturas de tela. Se não houver necessidade de chamar a função ocr ou função de detecção de alvo durante o uso, você pode desligar a função ocr ou det=False
ocr=False
durante a inicialização para. desligue a função de detecção de alvo.
Esta função possui duas implementações de algoritmo integradas, que são adequadas para duas situações diferentes. Consulte as instruções a seguir para obter detalhes.
Algoritmo 1
O princípio do Algoritmo 1 é calcular a posição do poço correspondente na imagem de fundo através da borda da imagem do controle deslizante. A imagem do controle deslizante e a imagem de fundo podem ser obtidas respectivamente.
Gráfico deslizante
Imagem de fundo
det = dddddocr.DdddOcr(det=False, ocr=False) com open('target.png', 'rb') como f:target_bytes = f.read() com open('background.png', 'rb') como f:background_bytes = f.read() res = det.slide_match(target_bytes, background_bytes) print(res)
Como o gráfico deslizante pode ter um problema de borda transparente, os resultados do cálculo podem não ser precisos. Você mesmo precisa estimar a largura da borda transparente do gráfico deslizante para corrigir o bbox resultante.
Dica: Se o controle deslizante não tiver muito fundo, você pode adicionar o parâmetro simple_target, que geralmente é uma imagem no formato jpg ou bmp.
slide = dddddocr.DdddOcr(det=False, ocr=False) com open('target.jpg', 'rb') como f:target_bytes = f.read() com open('background.jpg', 'rb') como f:background_bytes = f.read() res = slide.slide_match(target_bytes, background_bytes, simple_target=True) imprimir(res)
Algoritmo 2
O Algoritmo 2 visa determinar a posição do poço alvo do controle deslizante comparando as diferenças entre as duas imagens.
Consulte a Figura A, a imagem completa com a sombra do poço alvo.
Imagem de referência b, imagem completa
slide = dddddocr.DdddOcr(det=False, ocr=False)com open('bg.jpg', 'rb') como f:target_bytes = f.read() com open('fullpage.jpg', 'rb') como f:background_bytes = f.read() img = cv2.imread("bg.jpg") res = slide.slide_comparison(target_bytes, background_bytes)print(res)
A fim de fornecer controle de resultados de OCR e limitação de escopo mais flexíveis, o projeto apoia a limitação de escopo dos resultados de OCR.
Você pode passar probability=True
ao chamar o método classification
. Neste momento, classification
retornará a probabilidade de toda a tabela de caracteres. Claro, você também pode definir o intervalo de caracteres de saída através set_ranges
para limitar o retornado. resultados.
Ⅰ O método set_ranges
limita os caracteres de retorno a serem retornados.
Este método aceita 1 parâmetro. Se a entrada for do tipo int, é um limite de conjunto de caracteres integrado e se o tipo de string for um conjunto de caracteres personalizado,
Se for do tipo int, consulte a tabela a seguir
Valor do parâmetro | significado |
---|---|
0 | Inteiro puro 0-9 |
1 | Az em inglês minúsculo puro |
2 | AZ em inglês maiúsculo puro |
3 | Az em inglês minúsculo + AZ em inglês maiúsculo |
4 | Az minúsculo em inglês + número inteiro 0-9 |
5 | AZ em inglês maiúsculo + número inteiro 0-9 |
6 | Inglês az minúsculo + AZ inglês maiúsculo + número inteiro 0-9 |
7 | Biblioteca de caracteres padrão - az em inglês minúsculo - AZ em inglês maiúsculo - número inteiro 0-9 |
Se for do tipo string, passe um texto que não contenha espaços. Cada caractere é uma palavra candidata, como: "0123456789+-x/=""
importar ddddocrocr = ddddocr.DdddOcr()image = open("test.jpg", "rb").read()ocr.set_ranges("0123456789+-x/=")result = ocr.classification(image, probabilidade=True )s = ""for i in result['probability']:s += result['charsets'][i.index(max(i))]print(s)
Este projeto suporta a importação de modelos treinados customizados de dddd_trainer. O código de importação de referência é.
importar ddddocrocr = ddddocr.DdddOcr(det=False, ocr=False, import_onnx_path="myproject_0.984375_139_13000_2022-02-26-15-34-13.onnx", charsets_path="charsets.json")com open('test.jpg ', 'rb') como f:image_bytes = f.read()res = ocr.classification(image_bytes)print(res)
Este projeto usa Git para gerenciamento de versões. Você pode ver as versões atualmente disponíveis no repositório.
Traga o OCR para seu irmão mais novo, uma solução geral para obter códigos de verificação de rede localmente usando VBA puro
versão ferrugem dddddocr
Versão modificada do captcha-killer
Treine um modelo CAPTCHA alfanumérico e identifique chamadas de implantação via ddddocr
...
Bem-vindo ao enviar mais casos ou tutoriais excelentes. Você pode criar diretamente um novo título de edição começando com [Envio] e anexar um link para o site do tutorial público. Escolherei exibir o leia-me com base no conteúdo do artigo, que é relativamente. não repetitivo ou com conteúdo chave. Obrigado a todos.
Se você tiver muitos amigos, talvez não consiga passar. Se tiver alguma dúvida, você pode se comunicar na edição.
Este projeto está licenciado sob a licença MIT, consulte LICENSE para obter detalhes