Cómo usar Tesseract para hacer OCR japonés
Hay mucha información sobre cómo utilizar este componente, pero es todo para el reconocimiento de inglés. Si desea reconocer caracteres cuadrados chinos o japoneses, debe usar diferentes paquetes de idiomas y realizar algunas configuraciones especiales para Tesseract; de lo contrario, la tasa de reconocimiento será muy baja. A continuación, compartiré con ustedes algunas de mis experiencias al usar Tesseract para OCR japonés. .
El primer paso es descargar el componente Tesseract. La forma más sencilla es utilizar la descarga NUGet de VisualStudio. Seleccione el primer componente.
El segundo paso es descargar el paquete de idioma japonés. Debido a que no se puede acceder a Google en China continental, no se puede abrir el sitio web oficial para descargar el paquete de idioma directamente. He proporcionado la dirección del archivo y puedes descargarlo usando Thunder.
/files/tesseract-ocr-3.02.jpn.tar.gz
Una vez completada la descarga, descomprima el archivo del paquete de idioma y colóquelo en la carpeta tessdata.
En este punto, estás listo para comenzar a escribir código.
El tercer paso es inicializar el componente Tesseract usando el siguiente código.
Motor TesseractEngine = new TesseractEngine(@"ruta de la carpeta tessdata", "jpn", EngineMode.Default))
El cuarto paso es configurar los parámetros de OCR. Puede consultar. Consulte el sitio web oficial para obtener más detalles. Explicación de cada parámetro
Parámetros útiles en japonés y chino
Algunos usuarios japoneses de Tesseract han encontrado estos parámetros útiles para mejorar Tesseract-ocr (3.
Nombre Valor sugerido Descripción
chop_enable T Habilitar corte.
use_new_state_cost F Usar nueva heurística de costo de estado para la evaluación del estado de segmentación
segment_segcost_rating F ¿Incluir el costo de segmentación en la calificación de palabras?
p>
enable_new_segsearch 0 ¿Habilitar nuevo costo de estado en la clasificación de palabras? segsearch 0 Habilitar nueva ruta de búsqueda dividida. Puede resolver el problema de dividir un carácter en dos caracteres
language_model_ngram_. on 0 Desactivar el uso de la evaluación del estado de segmentación
segment_segcost_rating F Agregar costo de segmentación a las calificaciones de palabras on 0 Activar/desactivar el uso del modelo de ngramas de caracteres
textord_force_make_prop_words F ¿Forzar en todo? líneas. Segmentación proporcional de palabras.
edge_max_children_per_outline 40 Número máximo de subcaracteres dentro de un contorno de carácter. Aumente este valor si algunos caracteres KANJI no se reconocen (rechazan) SetVariable("edges_max_children_per_outline",50); p>
El parámetro chop_enable es diferente del recomendado por el sitio web oficial. Descubrí que según la configuración del sitio web oficial, muchos textos no serán reconocidos.
Paso 5, inicie el reconocimiento. .
var page = motor.Process(p);
var testText = page.GetText();
var c=page.GetMeanConfidence();
La primera línea de código devuelve un objeto Página, a través del cual se puede obtener el texto reconocido, y también se puede obtener la posición del texto reconocido (esto es muy útil al identificar documentos de patrón no fijo, y se puede buscar y reconocer dinámicamente según las palabras clave (ubicación del campo).
En el ejemplo de OCR, se requiere reconocimiento de texto completo, pero en muchos casos la calidad del reconocimiento es promedio. Es mejor aumentar los parámetros del área de reconocimiento y establecer el parámetro PageSegMode en PageSegMode.SingleBlock (que representa el. mismo tamaño de texto) varias líneas) o PageSegMode.SingleRow (que representa varias líneas del mismo tamaño de texto). SingleRow (representa varias líneas de texto del mismo tamaño).
La segunda y tercera línea devuelven el texto reconocido y la confianza reconocida respectivamente. En el uso práctico, encuentro que identificar los niveles de confianza no es particularmente útil. Independientemente de si el resultado del reconocimiento es correcto o incorrecto, el nivel de confianza es básicamente de alrededor de 0,7. A veces, cuanto mayor es el nivel de confianza, más incorrecto es el resultado del reconocimiento.
Después de los pasos anteriores, se puede completar el OCR japonés, pero para que el código anterior se ejecute correctamente, se debe instalar VC++ runtime 2012; de lo contrario, se informará un error.
Probé la imagen escaneada usando el método anterior y descubrí que la precisión del reconocimiento era relativamente alta, especialmente después de usar el parámetro PageSegMode para especificar el área. Sin embargo, existen algunos errores de bajo nivel en la biblioteca japonesa, como reconocer el número "1" como el carácter chino "一". Si queremos solucionar este problema, debemos entrenar japonés desde cero, ¡lo cual supone una carga de trabajo muy grande! De hecho, este es un aspecto muy poco inteligente de Tesseract, que debería admitir contenido de capacitación adicional además de la fuente de capacitación original. O proporcione archivos Box y Tifs de capacitación en el sitio web oficial para que los desarrolladores los descarguen.