#include <iostream>
#include <fstream>
const char* keys =
"{ help h | | 打印帮助信息。 }"
"{ input i | | 输入图像或视频文件路径。跳过此参数以从相机捕获帧。 }"
"{ detModel dmp | | 包含训练好的检测器网络的二进制 .pb 文件路径。 }"
"{ width | 320 | 通过调整大小到特定宽度来预处理输入图像。它应该为 32 的倍数。 }"
"{ height | 320 | 通过调整大小到特定高度来预处理输入图像。它应该为 32 的倍数。 }"
"{ thr | 0.5 | 置信度阈值。 }"
"{ nms | 0.4 | 非最大抑制阈值。 }"
"{ recModel rmp | | 包含训练好的 CRNN 文本识别模型的二进制 .onnx 文件路径。 "
"下载链接在 doc/tutorials/dnn/dnn_text_spotting/dnn_text_spotting.markdown 中提供。 }"
"{ RGBInput rgb |0| 0:imread 使用 flags=IMREAD_GRAYSCALE; 1:imread 使用 flags=IMREAD_COLOR。 }"
"{ vocabularyPath vp | alphabet_36.txt | 用于评估的基准路径。 "
"下载链接在 doc/tutorials/dnn/dnn_text_spotting/dnn_text_spotting.markdown 中提供。 }";
void fourPointsTransform(
const Mat& frame,
const Point2f vertices[],
Mat& result);
int main(
int argc,
char** argv)
{
parser.about("使用此脚本运行 TensorFlow 实现(https://github.com/argman/EAST) of "
"EAST:一种高效且准确的场景文本检测器 (https://arxiv.org/abs/1704.03155v2)");
if (argc == 1 || parser.has("help"))
{
parser.printMessage();
return 0;
}
float confThreshold = parser.get<float>("thr");
float nmsThreshold = parser.get<float>("nms");
int width = parser.get<int>("width");
int height = parser.get<int>("height");
int imreadRGB = parser.get<int>("RGBInput");
if (!parser.check())
{
parser.printErrors();
return 1;
}
CV_Assert(!detModelPath.empty() && !recModelPath.empty());
detector.setConfidenceThreshold(confThreshold)
.setNMSThreshold(nmsThreshold);
std::ifstream vocFile;
vocFile.open(samples::findFile(vocPath));
std::vector<String> vocabulary;
while (std::getline(vocFile, vocLine)) {
vocabulary.push_back(vocLine);
}
recognizer.setVocabulary(vocabulary);
recognizer.setDecodeType("CTC-greedy");
double recScale = 1.0 / 127.5;
recognizer.setInputParams(recScale, recInputSize, recMean);
double detScale = 1.0;
Size detInputSize =
Size(width, height);
bool swapRB = true;
detector.setInputParams(detScale, detInputSize, detMean, swapRB);
bool openSuccess = parser.has(
"input") ? cap.
open(parser.get<
String>(
"input")) : cap.
open(0);
static const std::string kWinName = "EAST:一种高效且准确的场景文本检测器";
{
cap >> frame;
if (frame.empty())
{
break;
}
std::cout << frame.size << std::endl;
std::vector< std::vector<Point> > detResults;
detector.detect(frame, detResults);
if (detResults.size() > 0) {
if (!imreadRGB) {
} else {
recInput = frame;
}
std::vector< std::vector<Point> > contours;
for (
uint i = 0; i < detResults.size(); i++)
{
const auto& quadrangle = detResults[i];
contours.emplace_back(quadrangle);
std::vector<Point2f> quadrangle_2f;
for (int j = 0; j < 4; j++)
quadrangle_2f.emplace_back(quadrangle[j]);
fourPointsTransform(recInput, &quadrangle_2f[0], cropped);
std::string recognitionResult = recognizer.recognize(cropped);
std::cout << i << ": '" << recognitionResult << "'" << std::endl;
putText(frame2, recognitionResult, quadrangle[3], FONT_HERSHEY_SIMPLEX, 1.5,
Scalar(0, 0, 255), 2);
}
}
}
return 0;
}
void fourPointsTransform(
const Mat& frame,
const Point2f vertices[],
Mat& result)
{
};
}
#define CV_CheckEQ(v1, v2, msg)
支持这些类型的值:int、float、double。
定义 check.hpp:118
专为命令行解析而设计。
定义 utility.hpp:820
CV_NODISCARD_STD Mat clone() const
创建数组和底层数据的完整副本。
用于指定图像或矩形大小的模板类。
定义 types.hpp:335
_Tp height
高度
定义 types.hpp:363
_Tp width
宽度
定义 types.hpp:362
用于从视频文件、图像序列或摄像头捕获视频的类。
定义 videoio.hpp:731
virtual bool open(const String &filename, int apiPreference=CAP_ANY)
打开一个视频文件或捕获设备或一个 IP 视频流进行视频捕获。
此类代表与 EAST 模型兼容的文本检测 DL 网络的高级 API。
定义 dnn.hpp:1840
此类代表文本识别网络的高级 API。
定义 dnn.hpp:1684
std::string String
定义 cvstd.hpp:151
uint32_t uint
定义 interface.h:42
#define CV_Assert(expr)
在运行时检查条件,如果失败则抛出异常。
定义 base.hpp:342
void imshow(const String &winname, InputArray mat)
在指定窗口中显示图像。
int waitKey(int delay=0)
等待按下的键。
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)
将图像从一个颜色空间转换为另一个颜色空间。
@ COLOR_BGR2GRAY
在 RGB/BGR 和灰度之间转换,颜色转换
定义 imgproc.hpp:555
void putText(InputOutputArray img, const String &text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=LINE_8, bool bottomLeftOrigin=false)
绘制一个文本字符串。
void polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制多个多边形曲线。
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
磁盘上与文件关联的文件存储的“黑盒”表示。
定义 core.hpp:102