Práctica de caso QT 1: escriba un software de herramienta OCR desde cero (7) Captura de pantalla / Visualización de imágenes / Reconocimiento de texto

1. Función de reconocimiento de texto de imagen

        En el artículo anterior, se presentó el motor de reconocimiento ocr y también se implementó el motor de llamadas en el subproceso para el reconocimiento. Con todas las funciones básicas, puede organizar las funciones y la interfaz de usuario juntas.

        Con respecto a la función de reconocimiento de imágenes y texto, la interfaz de usuario se divide en dos partes. El lado izquierdo realiza las funciones de captura de pantalla, imagen de apertura y visualización de imágenes.

         En el lado derecho está la función de selección del motor OCR, selección de idioma, extracción de texto y procesamiento simple después de la extracción.

2. Descripción de la función

1. Capturas de pantalla

        La función de captura de pantalla es la misma que la implementación vinculada a continuación.

Aprendizaje de audio y video: implementación de la función de captura de pantalla en la versión Qt 6.3.1 En el proyecto Qt, el módulo que implementa la función de captura de pantalla se implementa en detalle (puede ser universal) (2) El método showEvent modifica principalmente la proporción de píxeles del dispositivo de adquisición, para evitar problemas con las capturas de pantalla en dispositivos de alta resolución. Los conceptos básicos son similares al blog de referencia, principalmente modificando los métodos ScreenWidget y showEvent. QDesktopWidget está obsoleto, use QGuiApplication en su lugar. La p en el código es el puntero de la ventana inferior, primero minimice la ventana desde la capa inferior y luego muestre la capa de captura de pantalla. (1) El lado ScreenWidget modificó la forma de obtener el tamaño de la pantalla. https://skydance.blog.csdn.net/article/details/126789405

2. Abre la imagen

//选择图片
filePath = QFileDialog::getOpenFileName(this, tr("选择图片"), ".", tr("Image Files(*.jpg *.png)"));

//加载图片
QImage* image = new QImage;
image->load(filePath);

//对图片进行缩放展示
QPixmap picScale = QPixmap::fromImage(*image).scaled(ui->label->width(), ui->label->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);

//在UI上展示图片
ui->label->setPixmap(picScale);

3. Extracción de texto

        El propósito principal aquí es pasar la ruta de la imagen al subproceso de reconocimiento de ocr , y luego se llamará a la función getRecognitionText durante el proceso de reconocimiento del subproceso de ocr, y se llamará a la función de finalización de reconocimiento después de que se complete el reconocimiento.

void TextRecognition::on_pushButton_2_clicked()
{
    if(filePath.isEmpty())
    {
        QString dlgTitle = "提示";
        QString strInfo = QString::fromStdString("没有选择图片");
        QMessageBox::information(this, dlgTitle, strInfo, QMessageBox::Ok, QMessageBox::NoButton);
        return;
    }

    ui->textEdit->setText("");

    //实例化loading窗口
    loading = new LoadingDialog(this);
    loading->setVisible(true);

    //启动线程
    m_thread  =  new MyThreadForTextRecognition;
    m_thread->init(filePath.toStdString(), QString("%1\\screen_action.jpg").arg(qApp->applicationDirPath().replace("/", "\\")).toStdString(),
                   ui->comboBox->currentIndex(), ui->checkBox_3->isChecked(), ui->comboBox_2->currentIndex());
    connect(m_thread, &MyThreadForTextRecognition::getRecognitionText,this,&TextRecognition::getRecognitionText);
    connect(m_thread, &MyThreadForTextRecognition::recognitionFinish,this,&TextRecognition::recognitionFinish);
    m_thread->start();
}

4. Función de ranura

        Después de que la función getRecognitionText reciba el resultado del reconocimiento, procesará el texto de acuerdo con si la opción de casilla de verificación elimina espacios y saltos de línea.

        Después de llamar a la función de finalización de reconocimiento, se cerrará la carga.

void TextRecognition::getRecognitionText(std::string outText)
{
    if(outText.empty())
    {
        QString dlgTitle = "提示";
        QString strInfo = QString::fromStdString("解析失败");
        QMessageBox::information(this, dlgTitle, strInfo, QMessageBox::Ok, QMessageBox::NoButton);
        return ;
    }

    std::string str3 = outText;
     qDebug() << "识别结果:" << str3.c_str();
    //循环处理字符串,主要是为了删除一些,不过需要仔细考虑
    int index = 0;
    if (!str3.empty())
    {
        //如果是中文
        //if(get_Choise_Language().rfind("chi", 0) == 0)
        if(ui->checkBox_2->isChecked())
        {
            //删除换行符
            str3.erase(std::remove(str3.begin(), str3.end(), '\n'), str3.end());
        }

        if(ui->checkBox->isChecked())
        {
            //循环删除所有空格
            while ((index = str3.find(' ', index)) != std::string::npos)
            {
                str3.erase(index, 1);
            }
        }
    }

    QString str(str3.c_str());
    ui->textEdit->append(str + '\n');
    //delete [] outText;
}

/**
 * @brief TextRecognition::recognitionFinish
 * 识别完成
 */
void TextRecognition::recognitionFinish()
{
    loading->setVisible(false);
}

5. Representación

Supongo que te gusta

Origin blog.csdn.net/bashendixie5/article/details/127157171
Recomendado
Clasificación