tesseract是一个开源的OCR库在linux系统中我们可以很方便的开发一个简单的图片识别工具。 开发环境:QT 5.11.3 操作系统:UOS 64位(debian) 支持国产操作系统!
安装开发环境
sudo apt-get install tesseract-ocr
sudo apt-get install libtesseract-dev
sudo apt-get install tesseract-ocr-eng
sudo apt-get install tesseract-ocr-chi-sim
dpkg -L tesseract-ocr-eng
dpkg -L tesseract-ocr-chi-sim
获取语言包的路径
/usr/share/tesseract-ocr/4.00/tessdata/
开发
1. 新建工程
新建QT工程。
我的项目中一般不使用界面文件,因此去掉勾选。
2. 开发配置
- 在pro文件中添加动态库。
LIBS += -llept
LIBS += -ltesseract
- 配置语言包路径
有在识别文字的时候需要使用到语言包因此需要配置语言包的环境变量。
export TESSDATA_PREFIX=/usr/share/tesseract-ocr/4.00/tessdata/
export LC_ALL=C
3. 界面开发
布局结果大致如下:
以下代码仅是布局代码。
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QWidget;
class QVBoxLayout;
class QHBoxLayout;
class QLineEdit;
class QPushButton;
class QTextEdit;
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QWidget *m_Widgetmain;
QHBoxLayout *m_layoutFileSelect;
QVBoxLayout *m_layoutMain;
QLineEdit *m_lineEditPath;
QPushButton *m_btnSelectFile;
QTextEdit *m_textEditRes;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void slotSelectFile();
};
#endif
mainwindow.cpp
#include "mainwindow.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
#include <QFileDialog>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
m_Widgetmain(new QWidget),
m_layoutFileSelect(new QHBoxLayout()),
m_layoutMain(new QVBoxLayout()),
m_lineEditPath(new QLineEdit),
m_btnSelectFile(new QPushButton),
m_btnOrc(new QPushButton),
m_textEditRes(new QTextEdit)
{
m_btnSelectFile->setText("选择文件");
m_btnOrc->setText("识别");
m_layoutFileSelect->addWidget(m_lineEditPath);
m_layoutFileSelect->addWidget(m_btnSelectFile);
m_layoutFileSelect->addWidget(m_btnOrc);
m_layoutMain->addLayout(m_layoutFileSelect);
m_layoutMain->addWidget(m_textEditRes);
m_Widgetmain->setLayout(m_layoutMain);
connect(m_btnSelectFile,&QPushButton::clicked,this,&MainWindow::slotSelectFile);
connect(m_btnOrc,&QPushButton::clicked,this,&MainWindow::slotGetORCRes);
setCentralWidget(m_Widgetmain);
resize(800,600);
}
MainWindow::~MainWindow()
{
}
void MainWindow::slotSelectFile()
{
QFileDialog fileDlg;
QString file_name = QFileDialog::getOpenFileName(NULL,"标题",".","*.*");
m_lineEditPath->setText(file_name);
}
void MainWindow::slotGetORCRes()
{
}
4. 功能开发
void MainWindow::slotGetORCRes()
{
char *outText;
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
if (api->Init(NULL, "chi_sim")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
QString strPath = m_lineEditPath->text();
Pix *image = pixRead(strPath.toUtf8());
api->SetImage(image);
outText = api->GetUTF8Text();
qInfo()<<outText;
printf("OCR output:\n%s", outText);
m_textEditRes->setText(outText);
api->End();
delete api;
delete [] outText;
pixDestroy(&image);
}
5.效果
测试图片 结果运行:
系统架构设计师历年真题
2020年系统架构设计师真题( 综合题 ) 上午
2019年系统架构设计师真题 ( 综合题 ) 上午
2019年系统架构设计师真题〈 案例分析 ) 下午
2018年系统架构设计师真题( 综合题 ) 上午
2015年系统架构设计师真题( 综合题 ) 上午
|