feat: 切换后端至PaddleOCR-NCNN,切换工程为CMake
1.项目后端整体迁移至PaddleOCR-NCNN算法,已通过基本的兼容性测试 2.工程改为使用CMake组织,后续为了更好地兼容第三方库,不再提供QMake工程 3.重整权利声明文件,重整代码工程,确保最小化侵权风险 Log: 切换后端至PaddleOCR-NCNN,切换工程为CMake Change-Id: I4d5d2c5d37505a4a24b389b1a4c5d12f17bfa38c
This commit is contained in:
13
3rdparty/opencv-4.5.4/samples/java/sbt/README
vendored
Normal file
13
3rdparty/opencv-4.5.4/samples/java/sbt/README
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
A demo of the Java wrapper for OpenCV with two examples:
|
||||
1) feature detection and matching and
|
||||
2) face detection.
|
||||
The examples are coded in Scala and Java.
|
||||
Anyone familiar with Java should be able to read the Scala examples.
|
||||
Please feel free to contribute code examples in Scala or Java, or any JVM language.
|
||||
|
||||
To run the examples:
|
||||
1) Install OpenCV and copy the OpenCV jar to lib/.
|
||||
This jar must match the native libraries installed in your system.
|
||||
If this isn't the case, you may get a java.lang.UnsatisfiedLinkError at runtime.
|
||||
2) Go to the root directory and type "sbt/sbt run".
|
||||
This should generate images in your current directory.
|
0
3rdparty/opencv-4.5.4/samples/java/sbt/lib/copy_opencv_jar_here
vendored
Normal file
0
3rdparty/opencv-4.5.4/samples/java/sbt/lib/copy_opencv_jar_here
vendored
Normal file
22
3rdparty/opencv-4.5.4/samples/java/sbt/project/build.scala
vendored
Normal file
22
3rdparty/opencv-4.5.4/samples/java/sbt/project/build.scala
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
import sbt._
|
||||
import Keys._
|
||||
|
||||
object OpenCVJavaDemoBuild extends Build {
|
||||
def scalaSettings = Seq(
|
||||
scalaVersion := "2.10.0",
|
||||
scalacOptions ++= Seq(
|
||||
"-optimize",
|
||||
"-unchecked",
|
||||
"-deprecation"
|
||||
)
|
||||
)
|
||||
|
||||
def buildSettings =
|
||||
Project.defaultSettings ++
|
||||
scalaSettings
|
||||
|
||||
lazy val root = {
|
||||
val settings = buildSettings ++ Seq(name := "OpenCVJavaDemo")
|
||||
Project(id = "OpenCVJavaDemo", base = file("."), settings = settings)
|
||||
}
|
||||
}
|
1
3rdparty/opencv-4.5.4/samples/java/sbt/project/plugins.sbt
vendored
Normal file
1
3rdparty/opencv-4.5.4/samples/java/sbt/project/plugins.sbt
vendored
Normal file
@ -0,0 +1 @@
|
||||
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
|
1
3rdparty/opencv-4.5.4/samples/java/sbt/sbt/sbt
vendored
Normal file
1
3rdparty/opencv-4.5.4/samples/java/sbt/sbt/sbt
vendored
Normal file
@ -0,0 +1 @@
|
||||
java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"
|
BIN
3rdparty/opencv-4.5.4/samples/java/sbt/sbt/sbt-launch.jar
vendored
Normal file
BIN
3rdparty/opencv-4.5.4/samples/java/sbt/sbt/sbt-launch.jar
vendored
Normal file
Binary file not shown.
45
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/java/DetectFaceDemo.java
vendored
Normal file
45
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/java/DetectFaceDemo.java
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
import org.opencv.core.Core;
|
||||
import org.opencv.core.Mat;
|
||||
import org.opencv.core.MatOfRect;
|
||||
import org.opencv.core.Point;
|
||||
import org.opencv.core.Rect;
|
||||
import org.opencv.core.Scalar;
|
||||
import org.opencv.imgcodecs.Imgcodecs;
|
||||
import org.opencv.imgproc.Imgproc;
|
||||
import org.opencv.objdetect.CascadeClassifier;
|
||||
|
||||
/*
|
||||
* Detects faces in an image, draws boxes around them, and writes the results
|
||||
* to "faceDetection.png".
|
||||
*/
|
||||
public class DetectFaceDemo {
|
||||
public void run() {
|
||||
System.out.println("\nRunning DetectFaceDemo");
|
||||
|
||||
// Create a face detector from the cascade file in the resources
|
||||
// directory.
|
||||
CascadeClassifier faceDetector = new CascadeClassifier(getClass()
|
||||
.getResource("/lbpcascade_frontalface.xml").getPath());
|
||||
Mat image = Imgcodecs.imread(getClass().getResource(
|
||||
"/AverageMaleFace.jpg").getPath());
|
||||
|
||||
// Detect faces in the image.
|
||||
// MatOfRect is a special container class for Rect.
|
||||
MatOfRect faceDetections = new MatOfRect();
|
||||
faceDetector.detectMultiScale(image, faceDetections);
|
||||
|
||||
System.out.println(String.format("Detected %s faces",
|
||||
faceDetections.toArray().length));
|
||||
|
||||
// Draw a bounding box around each face.
|
||||
for (Rect rect : faceDetections.toArray()) {
|
||||
Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x
|
||||
+ rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
|
||||
}
|
||||
|
||||
// Save the visualized detection.
|
||||
String filename = "faceDetection.png";
|
||||
System.out.println(String.format("Writing %s", filename));
|
||||
Imgcodecs.imwrite(filename, image);
|
||||
}
|
||||
}
|
BIN
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/resources/AverageMaleFace.jpg
vendored
Normal file
BIN
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/resources/AverageMaleFace.jpg
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/resources/img1.png
vendored
Normal file
BIN
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/resources/img1.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 272 KiB |
BIN
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/resources/img2.png
vendored
Normal file
BIN
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/resources/img2.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 278 KiB |
23
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/scala/Main.scala
vendored
Normal file
23
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/scala/Main.scala
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* The main runner for the Java demos.
|
||||
* Demos whose name begins with "Scala" are written in the Scala language,
|
||||
* demonstrating the generic nature of the interface.
|
||||
* The other demos are in Java.
|
||||
* Currently, all demos are run, sequentially.
|
||||
*
|
||||
* You're invited to submit your own examples, in any JVM language of
|
||||
* your choosing so long as you can get them to build.
|
||||
*/
|
||||
|
||||
import org.opencv.core.Core
|
||||
|
||||
object Main extends App {
|
||||
// We must load the native library before using any OpenCV functions.
|
||||
// You must load this library _exactly once_ per Java invocation.
|
||||
// If you load it more than once, you will get a java.lang.UnsatisfiedLinkError.
|
||||
System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
|
||||
|
||||
ScalaCorrespondenceMatchingDemo.run()
|
||||
ScalaDetectFaceDemo.run()
|
||||
new DetectFaceDemo().run()
|
||||
}
|
69
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/scala/ScalaCorrespondenceMatchingDemo.scala
vendored
Normal file
69
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/scala/ScalaCorrespondenceMatchingDemo.scala
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
import org.opencv.imgcodecs.Imgcodecs
|
||||
import org.opencv.features2d.DescriptorExtractor
|
||||
import org.opencv.features2d.Features2d
|
||||
import org.opencv.core.MatOfKeyPoint
|
||||
import org.opencv.core.Mat
|
||||
import org.opencv.features2d.FeatureDetector
|
||||
import org.opencv.features2d.DescriptorMatcher
|
||||
import org.opencv.core.MatOfDMatch
|
||||
import reflect._
|
||||
|
||||
/*
|
||||
* Finds corresponding points between a pair of images using local descriptors.
|
||||
* The correspondences are visualized in the image "scalaCorrespondences.png",
|
||||
* which is written to disk.
|
||||
*/
|
||||
object ScalaCorrespondenceMatchingDemo {
|
||||
def run() {
|
||||
println(s"\nRunning ${classTag[this.type].toString.replace("$", "")}")
|
||||
|
||||
// Detects keypoints and extracts descriptors in a given image of type Mat.
|
||||
def detectAndExtract(mat: Mat) = {
|
||||
// A special container class for KeyPoint.
|
||||
val keyPoints = new MatOfKeyPoint
|
||||
// We're using the ORB detector.
|
||||
val detector = FeatureDetector.create(FeatureDetector.ORB)
|
||||
detector.detect(mat, keyPoints)
|
||||
|
||||
println(s"There were ${keyPoints.toArray.size} KeyPoints detected")
|
||||
|
||||
// Let's just use the best KeyPoints.
|
||||
val sorted = keyPoints.toArray.sortBy(_.response).reverse.take(50)
|
||||
// There isn't a constructor that takes Array[KeyPoint], so we unpack
|
||||
// the array and use the constructor that can take any number of
|
||||
// arguments.
|
||||
val bestKeyPoints: MatOfKeyPoint = new MatOfKeyPoint(sorted: _*)
|
||||
|
||||
// We're using the ORB descriptor.
|
||||
val extractor = DescriptorExtractor.create(DescriptorExtractor.ORB)
|
||||
val descriptors = new Mat
|
||||
extractor.compute(mat, bestKeyPoints, descriptors)
|
||||
|
||||
println(s"${descriptors.rows} descriptors were extracted, each with dimension ${descriptors.cols}")
|
||||
|
||||
(bestKeyPoints, descriptors)
|
||||
}
|
||||
|
||||
// Load the images from the |resources| directory.
|
||||
val leftImage = Imgcodecs.imread(getClass.getResource("/img1.png").getPath)
|
||||
val rightImage = Imgcodecs.imread(getClass.getResource("/img2.png").getPath)
|
||||
|
||||
// Detect KeyPoints and extract descriptors.
|
||||
val (leftKeyPoints, leftDescriptors) = detectAndExtract(leftImage)
|
||||
val (rightKeyPoints, rightDescriptors) = detectAndExtract(rightImage)
|
||||
|
||||
// Match the descriptors.
|
||||
val matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE)
|
||||
// A special container class for DMatch.
|
||||
val dmatches = new MatOfDMatch
|
||||
// The backticks are because "match" is a keyword in Scala.
|
||||
matcher.`match`(leftDescriptors, rightDescriptors, dmatches)
|
||||
|
||||
// Visualize the matches and save the visualization.
|
||||
val correspondenceImage = new Mat
|
||||
Features2d.drawMatches(leftImage, leftKeyPoints, rightImage, rightKeyPoints, dmatches, correspondenceImage)
|
||||
val filename = "scalaCorrespondences.png"
|
||||
println(s"Writing ${filename}")
|
||||
assert(Imgcodecs.imwrite(filename, correspondenceImage))
|
||||
}
|
||||
}
|
44
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/scala/ScalaDetectFaceDemo.scala
vendored
Normal file
44
3rdparty/opencv-4.5.4/samples/java/sbt/src/main/scala/ScalaDetectFaceDemo.scala
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
import org.opencv.core.Core
|
||||
import org.opencv.core.MatOfRect
|
||||
import org.opencv.core.Point
|
||||
import org.opencv.core.Scalar
|
||||
import org.opencv.imgcodecs.Imgcodecs
|
||||
import org.opencv.imgproc.Imgproc
|
||||
import org.opencv.objdetect.CascadeClassifier
|
||||
import reflect._
|
||||
|
||||
/*
|
||||
* Detects faces in an image, draws boxes around them, and writes the results
|
||||
* to "scalaFaceDetection.png".
|
||||
*/
|
||||
object ScalaDetectFaceDemo {
|
||||
def run() {
|
||||
println(s"\nRunning ${classTag[this.type].toString.replace("$", "")}")
|
||||
|
||||
// Create a face detector from the cascade file in the resources directory.
|
||||
val faceDetector = new CascadeClassifier(getClass.getResource("/lbpcascade_frontalface.xml").getPath)
|
||||
val image = Imgcodecs.imread(getClass.getResource("/AverageMaleFace.jpg").getPath)
|
||||
|
||||
// Detect faces in the image.
|
||||
// MatOfRect is a special container class for Rect.
|
||||
val faceDetections = new MatOfRect
|
||||
faceDetector.detectMultiScale(image, faceDetections)
|
||||
|
||||
println(s"Detected ${faceDetections.toArray.size} faces")
|
||||
|
||||
// Draw a bounding box around each face.
|
||||
for (rect <- faceDetections.toArray) {
|
||||
Imgproc.rectangle(
|
||||
image,
|
||||
new Point(rect.x, rect.y),
|
||||
new Point(rect.x + rect.width,
|
||||
rect.y + rect.height),
|
||||
new Scalar(0, 255, 0))
|
||||
}
|
||||
|
||||
// Save the visualized detection.
|
||||
val filename = "scalaFaceDetection.png"
|
||||
println(s"Writing ${filename}")
|
||||
assert(Imgcodecs.imwrite(filename, image))
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user