feat: 切换后端至PaddleOCR-NCNN,切换工程为CMake
1.项目后端整体迁移至PaddleOCR-NCNN算法,已通过基本的兼容性测试 2.工程改为使用CMake组织,后续为了更好地兼容第三方库,不再提供QMake工程 3.重整权利声明文件,重整代码工程,确保最小化侵权风险 Log: 切换后端至PaddleOCR-NCNN,切换工程为CMake Change-Id: I4d5d2c5d37505a4a24b389b1a4c5d12f17bfa38c
This commit is contained in:
87
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/bg_sub.cpp
vendored
Normal file
87
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/bg_sub.cpp
vendored
Normal file
@ -0,0 +1,87 @@
|
||||
/**
|
||||
* @file bg_sub.cpp
|
||||
* @brief Background subtraction tutorial sample code
|
||||
* @author Domenico D. Bloisi
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <opencv2/imgcodecs.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <opencv2/videoio.hpp>
|
||||
#include <opencv2/highgui.hpp>
|
||||
#include <opencv2/video.hpp>
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
const char* params
|
||||
= "{ help h | | Print usage }"
|
||||
"{ input | vtest.avi | Path to a video or a sequence of image }"
|
||||
"{ algo | MOG2 | Background subtraction method (KNN, MOG2) }";
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
CommandLineParser parser(argc, argv, params);
|
||||
parser.about( "This program shows how to use background subtraction methods provided by "
|
||||
" OpenCV. You can process both videos and images.\n" );
|
||||
if (parser.has("help"))
|
||||
{
|
||||
//print help information
|
||||
parser.printMessage();
|
||||
}
|
||||
|
||||
//! [create]
|
||||
//create Background Subtractor objects
|
||||
Ptr<BackgroundSubtractor> pBackSub;
|
||||
if (parser.get<String>("algo") == "MOG2")
|
||||
pBackSub = createBackgroundSubtractorMOG2();
|
||||
else
|
||||
pBackSub = createBackgroundSubtractorKNN();
|
||||
//! [create]
|
||||
|
||||
//! [capture]
|
||||
VideoCapture capture( samples::findFile( parser.get<String>("input") ) );
|
||||
if (!capture.isOpened()){
|
||||
//error in opening the video input
|
||||
cerr << "Unable to open: " << parser.get<String>("input") << endl;
|
||||
return 0;
|
||||
}
|
||||
//! [capture]
|
||||
|
||||
Mat frame, fgMask;
|
||||
while (true) {
|
||||
capture >> frame;
|
||||
if (frame.empty())
|
||||
break;
|
||||
|
||||
//! [apply]
|
||||
//update the background model
|
||||
pBackSub->apply(frame, fgMask);
|
||||
//! [apply]
|
||||
|
||||
//! [display_frame_number]
|
||||
//get the frame number and write it on the current frame
|
||||
rectangle(frame, cv::Point(10, 2), cv::Point(100,20),
|
||||
cv::Scalar(255,255,255), -1);
|
||||
stringstream ss;
|
||||
ss << capture.get(CAP_PROP_POS_FRAMES);
|
||||
string frameNumberString = ss.str();
|
||||
putText(frame, frameNumberString.c_str(), cv::Point(15, 15),
|
||||
FONT_HERSHEY_SIMPLEX, 0.5 , cv::Scalar(0,0,0));
|
||||
//! [display_frame_number]
|
||||
|
||||
//! [show]
|
||||
//show the current frame and the fg masks
|
||||
imshow("Frame", frame);
|
||||
imshow("FG Mask", fgMask);
|
||||
//! [show]
|
||||
|
||||
//get the input from the keyboard
|
||||
int keyboard = waitKey(30);
|
||||
if (keyboard == 'q' || keyboard == 27)
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
86
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/meanshift/camshift.cpp
vendored
Normal file
86
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/meanshift/camshift.cpp
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
#include <iostream>
|
||||
#include <opencv2/imgcodecs.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <opencv2/videoio.hpp>
|
||||
#include <opencv2/highgui.hpp>
|
||||
#include <opencv2/video.hpp>
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const string about =
|
||||
"This sample demonstrates the camshift algorithm.\n"
|
||||
"The example file can be downloaded from:\n"
|
||||
" https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic_small.mp4";
|
||||
const string keys =
|
||||
"{ h help | | print this help message }"
|
||||
"{ @image |<none>| path to image file }";
|
||||
CommandLineParser parser(argc, argv, keys);
|
||||
parser.about(about);
|
||||
if (parser.has("help"))
|
||||
{
|
||||
parser.printMessage();
|
||||
return 0;
|
||||
}
|
||||
string filename = parser.get<string>("@image");
|
||||
if (!parser.check())
|
||||
{
|
||||
parser.printErrors();
|
||||
return 0;
|
||||
}
|
||||
|
||||
VideoCapture capture(filename);
|
||||
if (!capture.isOpened()){
|
||||
//error in opening the video input
|
||||
cerr << "Unable to open file!" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Mat frame, roi, hsv_roi, mask;
|
||||
// take first frame of the video
|
||||
capture >> frame;
|
||||
|
||||
// setup initial location of window
|
||||
Rect track_window(300, 200, 100, 50); // simply hardcoded the values
|
||||
|
||||
// set up the ROI for tracking
|
||||
roi = frame(track_window);
|
||||
cvtColor(roi, hsv_roi, COLOR_BGR2HSV);
|
||||
inRange(hsv_roi, Scalar(0, 60, 32), Scalar(180, 255, 255), mask);
|
||||
|
||||
float range_[] = {0, 180};
|
||||
const float* range[] = {range_};
|
||||
Mat roi_hist;
|
||||
int histSize[] = {180};
|
||||
int channels[] = {0};
|
||||
calcHist(&hsv_roi, 1, channels, mask, roi_hist, 1, histSize, range);
|
||||
normalize(roi_hist, roi_hist, 0, 255, NORM_MINMAX);
|
||||
|
||||
// Setup the termination criteria, either 10 iteration or move by atleast 1 pt
|
||||
TermCriteria term_crit(TermCriteria::EPS | TermCriteria::COUNT, 10, 1);
|
||||
|
||||
while(true){
|
||||
Mat hsv, dst;
|
||||
capture >> frame;
|
||||
if (frame.empty())
|
||||
break;
|
||||
cvtColor(frame, hsv, COLOR_BGR2HSV);
|
||||
calcBackProject(&hsv, 1, channels, roi_hist, dst, range);
|
||||
|
||||
// apply camshift to get the new location
|
||||
RotatedRect rot_rect = CamShift(dst, track_window, term_crit);
|
||||
|
||||
// Draw it on image
|
||||
Point2f points[4];
|
||||
rot_rect.points(points);
|
||||
for (int i = 0; i < 4; i++)
|
||||
line(frame, points[i], points[(i+1)%4], 255, 2);
|
||||
imshow("img2", frame);
|
||||
|
||||
int keyboard = waitKey(30);
|
||||
if (keyboard == 'q' || keyboard == 27)
|
||||
break;
|
||||
}
|
||||
}
|
83
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/meanshift/meanshift.cpp
vendored
Normal file
83
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/meanshift/meanshift.cpp
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
#include <iostream>
|
||||
#include <opencv2/imgcodecs.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <opencv2/videoio.hpp>
|
||||
#include <opencv2/highgui.hpp>
|
||||
#include <opencv2/video.hpp>
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const string about =
|
||||
"This sample demonstrates the meanshift algorithm.\n"
|
||||
"The example file can be downloaded from:\n"
|
||||
" https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic_small.mp4";
|
||||
const string keys =
|
||||
"{ h help | | print this help message }"
|
||||
"{ @image |<none>| path to image file }";
|
||||
CommandLineParser parser(argc, argv, keys);
|
||||
parser.about(about);
|
||||
if (parser.has("help"))
|
||||
{
|
||||
parser.printMessage();
|
||||
return 0;
|
||||
}
|
||||
string filename = parser.get<string>("@image");
|
||||
if (!parser.check())
|
||||
{
|
||||
parser.printErrors();
|
||||
return 0;
|
||||
}
|
||||
|
||||
VideoCapture capture(filename);
|
||||
if (!capture.isOpened()){
|
||||
//error in opening the video input
|
||||
cerr << "Unable to open file!" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Mat frame, roi, hsv_roi, mask;
|
||||
// take first frame of the video
|
||||
capture >> frame;
|
||||
|
||||
// setup initial location of window
|
||||
Rect track_window(300, 200, 100, 50); // simply hardcoded the values
|
||||
|
||||
// set up the ROI for tracking
|
||||
roi = frame(track_window);
|
||||
cvtColor(roi, hsv_roi, COLOR_BGR2HSV);
|
||||
inRange(hsv_roi, Scalar(0, 60, 32), Scalar(180, 255, 255), mask);
|
||||
|
||||
float range_[] = {0, 180};
|
||||
const float* range[] = {range_};
|
||||
Mat roi_hist;
|
||||
int histSize[] = {180};
|
||||
int channels[] = {0};
|
||||
calcHist(&hsv_roi, 1, channels, mask, roi_hist, 1, histSize, range);
|
||||
normalize(roi_hist, roi_hist, 0, 255, NORM_MINMAX);
|
||||
|
||||
// Setup the termination criteria, either 10 iteration or move by atleast 1 pt
|
||||
TermCriteria term_crit(TermCriteria::EPS | TermCriteria::COUNT, 10, 1);
|
||||
|
||||
while(true){
|
||||
Mat hsv, dst;
|
||||
capture >> frame;
|
||||
if (frame.empty())
|
||||
break;
|
||||
cvtColor(frame, hsv, COLOR_BGR2HSV);
|
||||
calcBackProject(&hsv, 1, channels, roi_hist, dst, range);
|
||||
|
||||
// apply meanshift to get the new location
|
||||
meanShift(dst, track_window, term_crit);
|
||||
|
||||
// Draw it on image
|
||||
rectangle(frame, track_window, 255, 2);
|
||||
imshow("img2", frame);
|
||||
|
||||
int keyboard = waitKey(30);
|
||||
if (keyboard == 'q' || keyboard == 27)
|
||||
break;
|
||||
}
|
||||
}
|
101
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/optical_flow/optical_flow.cpp
vendored
Normal file
101
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/optical_flow/optical_flow.cpp
vendored
Normal file
@ -0,0 +1,101 @@
|
||||
#include <iostream>
|
||||
#include <opencv2/core.hpp>
|
||||
#include <opencv2/highgui.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <opencv2/videoio.hpp>
|
||||
#include <opencv2/video.hpp>
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const string about =
|
||||
"This sample demonstrates Lucas-Kanade Optical Flow calculation.\n"
|
||||
"The example file can be downloaded from:\n"
|
||||
" https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic_small.mp4";
|
||||
const string keys =
|
||||
"{ h help | | print this help message }"
|
||||
"{ @image | vtest.avi | path to image file }";
|
||||
CommandLineParser parser(argc, argv, keys);
|
||||
parser.about(about);
|
||||
if (parser.has("help"))
|
||||
{
|
||||
parser.printMessage();
|
||||
return 0;
|
||||
}
|
||||
string filename = samples::findFile(parser.get<string>("@image"));
|
||||
if (!parser.check())
|
||||
{
|
||||
parser.printErrors();
|
||||
return 0;
|
||||
}
|
||||
|
||||
VideoCapture capture(filename);
|
||||
if (!capture.isOpened()){
|
||||
//error in opening the video input
|
||||
cerr << "Unable to open file!" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Create some random colors
|
||||
vector<Scalar> colors;
|
||||
RNG rng;
|
||||
for(int i = 0; i < 100; i++)
|
||||
{
|
||||
int r = rng.uniform(0, 256);
|
||||
int g = rng.uniform(0, 256);
|
||||
int b = rng.uniform(0, 256);
|
||||
colors.push_back(Scalar(r,g,b));
|
||||
}
|
||||
|
||||
Mat old_frame, old_gray;
|
||||
vector<Point2f> p0, p1;
|
||||
|
||||
// Take first frame and find corners in it
|
||||
capture >> old_frame;
|
||||
cvtColor(old_frame, old_gray, COLOR_BGR2GRAY);
|
||||
goodFeaturesToTrack(old_gray, p0, 100, 0.3, 7, Mat(), 7, false, 0.04);
|
||||
|
||||
// Create a mask image for drawing purposes
|
||||
Mat mask = Mat::zeros(old_frame.size(), old_frame.type());
|
||||
|
||||
while(true){
|
||||
Mat frame, frame_gray;
|
||||
|
||||
capture >> frame;
|
||||
if (frame.empty())
|
||||
break;
|
||||
cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
|
||||
|
||||
// calculate optical flow
|
||||
vector<uchar> status;
|
||||
vector<float> err;
|
||||
TermCriteria criteria = TermCriteria((TermCriteria::COUNT) + (TermCriteria::EPS), 10, 0.03);
|
||||
calcOpticalFlowPyrLK(old_gray, frame_gray, p0, p1, status, err, Size(15,15), 2, criteria);
|
||||
|
||||
vector<Point2f> good_new;
|
||||
for(uint i = 0; i < p0.size(); i++)
|
||||
{
|
||||
// Select good points
|
||||
if(status[i] == 1) {
|
||||
good_new.push_back(p1[i]);
|
||||
// draw the tracks
|
||||
line(mask,p1[i], p0[i], colors[i], 2);
|
||||
circle(frame, p1[i], 5, colors[i], -1);
|
||||
}
|
||||
}
|
||||
Mat img;
|
||||
add(frame, mask, img);
|
||||
|
||||
imshow("Frame", img);
|
||||
|
||||
int keyboard = waitKey(30);
|
||||
if (keyboard == 'q' || keyboard == 27)
|
||||
break;
|
||||
|
||||
// Now update the previous frame and previous points
|
||||
old_gray = frame_gray.clone();
|
||||
p0 = good_new;
|
||||
}
|
||||
}
|
59
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/optical_flow/optical_flow_dense.cpp
vendored
Normal file
59
3rdparty/opencv-4.5.4/samples/cpp/tutorial_code/video/optical_flow/optical_flow_dense.cpp
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
#include <iostream>
|
||||
#include <opencv2/core.hpp>
|
||||
#include <opencv2/highgui.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <opencv2/videoio.hpp>
|
||||
#include <opencv2/video.hpp>
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
VideoCapture capture(samples::findFile("vtest.avi"));
|
||||
if (!capture.isOpened()){
|
||||
//error in opening the video input
|
||||
cerr << "Unable to open file!" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Mat frame1, prvs;
|
||||
capture >> frame1;
|
||||
cvtColor(frame1, prvs, COLOR_BGR2GRAY);
|
||||
|
||||
while(true){
|
||||
Mat frame2, next;
|
||||
capture >> frame2;
|
||||
if (frame2.empty())
|
||||
break;
|
||||
cvtColor(frame2, next, COLOR_BGR2GRAY);
|
||||
|
||||
Mat flow(prvs.size(), CV_32FC2);
|
||||
calcOpticalFlowFarneback(prvs, next, flow, 0.5, 3, 15, 3, 5, 1.2, 0);
|
||||
|
||||
// visualization
|
||||
Mat flow_parts[2];
|
||||
split(flow, flow_parts);
|
||||
Mat magnitude, angle, magn_norm;
|
||||
cartToPolar(flow_parts[0], flow_parts[1], magnitude, angle, true);
|
||||
normalize(magnitude, magn_norm, 0.0f, 1.0f, NORM_MINMAX);
|
||||
angle *= ((1.f / 360.f) * (180.f / 255.f));
|
||||
|
||||
//build hsv image
|
||||
Mat _hsv[3], hsv, hsv8, bgr;
|
||||
_hsv[0] = angle;
|
||||
_hsv[1] = Mat::ones(angle.size(), CV_32F);
|
||||
_hsv[2] = magn_norm;
|
||||
merge(_hsv, 3, hsv);
|
||||
hsv.convertTo(hsv8, CV_8U, 255.0);
|
||||
cvtColor(hsv8, bgr, COLOR_HSV2BGR);
|
||||
|
||||
imshow("frame2", bgr);
|
||||
|
||||
int keyboard = waitKey(30);
|
||||
if (keyboard == 'q' || keyboard == 27)
|
||||
break;
|
||||
|
||||
prvs = next;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user