DdddOcr es una colaboración entre el autor y kerlomz. Genera grandes lotes de datos aleatorios y realiza un entrenamiento de red profundo. No está diseñado para ningún fabricante de códigos de verificación. El efecto del uso de esta biblioteca puede depender completamente de la metafísica. identificable.
DdddOcr, el concepto de dependencia mínima, minimiza los costos de uso y configuración del usuario, con la esperanza de brindar una experiencia cómoda a cada evaluador.
Dirección del proyecto: Haga clic aquí para enviar
Una biblioteca de Python de reconocimiento de captcha universal fácil de usar
Explore la documentación de este proyecto »
· Informar errores · Proponer nuevas funciones
Socios patrocinadores
Guía de introducción
Apoyo ambiental
Pasos de instalación
Descripción del directorio de archivos
Soporte subyacente del proyecto
Usar documentación
Capacidad básica de reconocimiento de OCR
Capacidad de detección de objetivos
Detección de control deslizante
Salida de probabilidad de OCR
Importación de modelo de entrenamiento de OCR personalizado
control de versiones
Artículos o proyectos recomendados relacionados
autor
Donar
Historia de las estrellas
Socios patrocinadores | Razones para la recomendación | |
---|---|---|
SíCaptcha | Código de verificación de Google reCaptcha/código de verificación hCaptcha/código de verificación funCaptcha interfaz de identificación de grado comercial, haga clic en mí directamente para VIP4 | |
súper águila | El negocio inteligente de clasificación y reconocimiento de imágenes líder en el mundo, seguro, preciso, eficiente, estable, abierto, con un sólido equipo técnico y de verificación que admite una gran concurrencia. Gestión del progreso del trabajo 7*24h | |
malenia | Malenia plataforma de puerta de enlace IP proxy de nivel empresarial/software de distribución de IP proxy | |
VPS Nimbus | 50% de descuento durante el primer mes de inscripción | Precio bajo del nodo de Zhejiang y gran ancho de banda, 100 millones 30 yuanes por mes |
sistema | UPC | GPU | Versión py máxima admitida | Observación |
---|---|---|---|---|
ventanas de 64 bits | √ | √ | 3.12 | Algunas versiones de Windows necesitan instalar la biblioteca de tiempo de ejecución vc |
ventanas de 32 bits | × | × | - | |
Linux64/ARM64 | √ | √ | 3.12 | |
linux 32 | × | × | - | |
Mac X64 | √ | √ | 3.12 | M1/M2/M3...Referencia de chip #67 |
yo. Instalar desde pypi
instalación de pip dddddocr
ii. Instalar desde la fuente
clon de git https://github.com/sml2h3/ddddocr.gitcd ddddocr configuración de Python.py
No importe dddddocr directamente en el directorio raíz del proyecto dddddocr . Asegúrese de que el nombre del directorio de su proyecto de desarrollo no sea dddddocr. Esto es de sentido común básico.
p.ej:
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 proyecto se basa en los resultados del entrenamiento de dddd_trainer. El marco de entrenamiento subyacente es pytorch. El razonamiento subyacente de dddddocr se basa en onnxruntime. Por lo tanto, la compatibilidad máxima y el soporte de la versión Python de este proyecto dependen principalmente de onnxruntime.
Se utiliza principalmente para identificar líneas individuales de texto, es decir, la parte de texto ocupa la parte principal de la imagen, como códigos de verificación numéricos y en inglés comunes, etc. Este proyecto puede reconocer chino, inglés (caso aleatorio o caso por configuración). el rango de resultados), números y algún carácter especial.
# ejemplo.pyimport ddddocrocr = ddddocr.DdddOcr()imagen = open("ejemplo.jpg", "rb").read()resultado = ocr.clasificación(imagen)imprimir(resultado)
Hay dos conjuntos de modelos de OCR integrados en esta biblioteca. No cambiarán automáticamente de forma predeterminada. Debe cambiar los parámetros al inicializar ddddocr.
# example.pyimport ddddocrocr = ddddocr.DdddOcr(beta=True) # Cambiar al segundo conjunto de modelo ocr image = open("example.jpg", "rb").read()result = ocr.classification(image)print ( resultado)
Consejos para el reconocimiento de algunas imágenes en formato png negro transparente: classification
utiliza el parámetro png_fix
, el valor predeterminado es Falso
ocr.clasificación(imagen, png_fix=Verdadero)
Aviso
Anteriormente, descubrí que a muchas personas les gusta reinicializar ddddocr cada vez que se reconoce OCR, es decir, ejecutar ocr = ddddocr.DdddOcr()
cada vez. En términos generales, solo es necesario inicializarlo una vez, porque cada uno. inicialización y La primera velocidad de reconocimiento después de la inicialización es muy lenta.
Imagen de ejemplo de referencia
Incluyendo pero no limitado a las siguientes imágenes
Se utiliza principalmente para detectar rápidamente la posible posición del sujeto objetivo en la imagen. Dado que el objetivo detectado no es necesariamente texto, esta función solo proporciona la posición bbox del objetivo (en la detección de objetivos, generalmente usamos bbox (cuadro delimitador, la abreviatura). es bbox) para describir la posición de destino. bbox es un cuadro rectangular, que puede determinarse mediante las coordenadas de los ejes xey de la esquina superior izquierda del rectángulo y las coordenadas de los ejes xey de la esquina inferior derecha)
Si no es necesario llamar a la función ocr durante el uso, puede desactivar la función ocr pasando el parámetro ocr=False
durante la inicialización. Para habilitar la detección de objetivos, debe pasar el parámetro det=True
importar ddddocrimport cv2det = ddddocr.DdddOcr(det=True)con open("test.jpg", 'rb') como f:image = f.read()bboxes = det.detection(image)print(bboxes)im = cv2 .imread("test.jpg") para bbox en bboxes:x1, y1, x2, y2 = bboxim = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), espesor=2)cv2.imwrite("resultado.jpg", im)
Imagen de ejemplo de referencia
Incluyendo pero no limitado a las siguientes imágenes
La función de detección del control deslizante de este proyecto no se implementa mediante el reconocimiento de IA, sino mediante el algoritmo integrado de opencv. Puede que no sea tan amigable para los usuarios que toman capturas de pantalla. Si no es necesario llamar a la función ocr o a la función de detección de objetivos durante el uso, puede desactivar la función ocr o det=False
ocr=False
durante la inicialización. Desactive la función de detección de objetivos.
Esta función tiene dos implementaciones de algoritmos integradas, que son adecuadas para dos situaciones diferentes. Consulte las siguientes instrucciones para obtener más detalles.
un algoritmo 1
El principio del Algoritmo 1 es calcular la posición del hoyo correspondiente en la imagen de fondo a través del borde de la imagen del control deslizante. La imagen del control deslizante y la imagen de fondo se pueden obtener respectivamente.
gráfico deslizante
Imagen de fondo
det = dddddocr.DdddOcr(det=False, ocr=False) con open('target.png', 'rb') como f:target_bytes = f.read() con open('background.png', 'rb') as f:fondo_bytes = f.read() res = det.slide_match(target_bytes, fondo_bytes) print(res)
Dado que el gráfico deslizante puede tener un problema de borde transparente, es posible que los resultados del cálculo no sean precisos. Debe estimar usted mismo el ancho del borde transparente del gráfico deslizante para corregir el bbox resultante.
Consejo: si el control deslizante no tiene demasiado fondo, puede agregar el parámetro simple_target, que suele ser una imagen en formato jpg o bmp.
diapositiva = dddddocr.DdddOcr(det=False, ocr=False) con open('target.jpg', 'rb') como f:target_bytes = f.read() con open('background.jpg', 'rb') como f:background_bytes = f.read() res = slide.slide_match(target_bytes, background_bytes, simple_target=True) imprimir(res)
un algoritmo 2
El algoritmo 2 consiste en determinar la posición del hoyo objetivo del control deslizante comparando las diferencias entre las dos imágenes.
Consulte la Figura A, la imagen completa con la sombra del pozo objetivo.
Imagen de referencia b, imagen completa
diapositiva = dddddocr.DdddOcr(det=False, ocr=False)con open('bg.jpg', 'rb') como f:target_bytes = f.read() con open('fullpage.jpg', 'rb') como f:background_bytes = f.read() img = cv2.imread("bg.jpg") res = slide.slide_comparison(destino_bytes, fondo_bytes)imprimir(res)
Para proporcionar un control de resultados de OCR y una limitación del alcance más flexibles, el proyecto admite la limitación del alcance de los resultados de OCR.
Puede pasar probability=True
al llamar al método classification
. En este momento, classification
devolverá la probabilidad de toda la tabla de caracteres. Por supuesto, también puede establecer el rango de caracteres de salida a través set_ranges
para limitar el valor devuelto. resultados.
Ⅰ El método set_ranges
limita los caracteres de retorno a devolver.
Este método acepta 1 parámetro. Si la entrada es de tipo int, es un límite de juego de caracteres incorporado, y si el tipo de cadena es un juego de caracteres personalizado.
Si es de tipo int, consulte la siguiente tabla
Valor del parámetro | significado |
---|---|
0 | Entero puro 0-9 |
1 | Inglés puro en minúsculas az |
2 | Inglés puro en mayúsculas AZ |
3 | Inglés minúsculas az + Inglés mayúsculas AZ |
4 | Inglés minúscula az + número entero 0-9 |
5 | Mayúsculas en inglés AZ + número entero 0-9 |
6 | Inglés minúscula az + inglés mayúscula AZ + número entero 0-9 |
7 | Biblioteca de caracteres predeterminada: minúsculas en inglés az - mayúsculas en inglés AZ - entero 0-9 |
Si es un tipo de cadena, pase un texto que no contenga espacios. Cada carácter que contiene es una palabra candidata, como: "0123456789+-x/=""
importar ddddocrocr = ddddocr.DdddOcr()imagen = open("test.jpg", "rb").read()ocr.set_ranges("0123456789+-x/=")resultado = ocr.classification(imagen, probabilidad=True )s = ""para i en resultado['probabilidad']:s += resultado['conjuntos de caracteres'][i.index(max(i))]imprimir(s)
Este proyecto admite la importación de modelos entrenados personalizados desde dddd_trainer. El código de importación de referencia es.
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") con open('test.jpg ', 'rb') como f:image_bytes = f.read()res = ocr.classification(image_bytes)print(res)
Este proyecto utiliza Git para la gestión de versiones. Puede ver las versiones disponibles actualmente en el repositorio.
Traiga a su hermano menor OCR, una solución general para obtener códigos de verificación de red localmente usando VBA puro
dddddocr versión oxidada
Versión modificada de captcha-killer
Entrene un modelo CAPTCHA alfanumérico e identifique llamadas de implementación mediante ddddocr
...
Bienvenido a enviar más casos o tutoriales excelentes. Puede crear directamente un nuevo título de número comenzando con [Envío] y adjuntar un enlace al sitio público de tutoriales. Elegiré mostrar el archivo Léame según el contenido del artículo, que es relativamente. no repetitivo o tiene contenido clave. Gracias a todos, amigo ~.
Si tienes demasiados amigos, es posible que no puedas aprobar. Si tienes alguna pregunta, puedes comunicarte en el número.
Este proyecto tiene la licencia MIT; consulte LICENCIA para obtener más detalles.