[Mac] OpenCV4.0 + Java , IDE Eclipse 相关设定 (linux) ,ant ,cmake, 环境变量,范例.人脸辨识


笔记一下,要在Mac 使用OpenCV 有一些步骤

后面会有一个网络参考的人脸辨识范例

首先到OpenCV 官网 https://opencv.org/

https://opencv.org/opencv-4-0-0.html

我使用 4.0 当范例,下载Sources 包,抓回来后解压缩,里面一堆东西,先不管

要在Java 使用openCV,必须要将原本的source 打包过,才能变成java 可以用的jar 档

我是参考网络用 cmake 的方式打包

https://cmake.org/ 到官网抓下来安装后,设定环境变量

touch ~/.bash_profile; open ~/.bash_profile

 # 在 bash_profile内加上环境变量
 # Add Cmake Root to Path
 export CMAKE_ROOT=/Applications/CMake.app/Contents/bin/
 export PATH=$CMAKE_ROOT:$PATH

source .bash_profile

设定好后,输入 cmake --version 看看是否有跑出版本,看到代表成功

WUNTWCEML103:Downloads leeray$ cmake --version
cmake version 3.14.0-rc4

CMake suite maintained and supported by Kitware (kitware.com/cmake).

还需要安装 ant 编译才会成功

我使用Homebrew 来安装

brew install ant

 

安装完成后,到openCV目录下,新增一个文档并执行命令

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

结束后会看到一些本机的资讯,例如刚安装的ant

结束后在执行

make -j8

需要一段时间,结束后会在bin 下看到 opencv-400.jar

.../opencv-4.0.0/release/bin

到这边本机的设定差不多结束,接着可以开始Eclipse 的设定

新增一个Java项目

接着到偏好设定

Java -> Build Path -> User Libraries -> New 一个 Libraries 名称可以自己取

jar 档,就选bin 下那个 opencv-400jar

然后 Native 要选择 release  下的 lib 路径 

第一个范例:hello openCV

package openCV;

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class HelloOpenCV {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		  System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
	      Mat mat = Mat.eye( 3, 5, CvType.CV_8UC1 );
	      System.out.println( "mat = " + mat.dump() );
	}
}

执行完结果,看到这里代表成功,可以开始玩其他东西了,下面有一个图片辨识人脸的范例

package openCV;

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.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;

public class FaceCheck {
	

	static {
		// Java 在使用 OpenCV 前必须加载 Core.NATIVE_LIBRARY_NAME 类,否则会报错
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
	}

	

	public static void main(String[] args) {
		face();
	}
	
	/
	 * OpenCV-4.0.0 人脸辨识
	 * @return: void
	 * @date: 2019年3月14日
	 */
	public static void face() {
		// 1 读取 OpenCV自带的人脸辨识特征XML文档
		//OpenCV 图像识别库一般位于 opencvsourcesdata 下面
		CascadeClassifier facebook=new CascadeClassifier("/Users/leeray/Downloads/opencv-4.0.0/data/haarcascades/haarcascade_frontalface_alt.xml");
		// 2 读取测试图片
		//Mat image=Imgcodecs.imread("/Users/leeray/Downloads/20190124141937514.png");
		Mat image=Imgcodecs.imread("/Users/leeray/Downloads/aaa.jpg");
        // 2-1 确认图片是否有抓到
		System.out.println("image="+image.empty());
		// 3 特征匹配
		MatOfRect face = new MatOfRect();

		facebook.detectMultiScale(image, face);
		// 4 匹配 Rect 矩阵 数组
		Rect[] rects=face.toArray();
		System.out.println("匹配到 "+rects.length+" 个人脸");
		// 5 为每张识别到的人脸画一个圈
		for (int i = 0; i < rects.length; i++) {
	
			Imgproc.rectangle(image,
					new Point(rects[i].x, rects[i].y), 
					new Point(rects[i].x + rects[i].width, rects[i].y + rects[i].height), 
					new Scalar(0, 0, 255));
			//方格加上文字
			//Imgproc.putText(image,"Human", new Point(rects[i].x, rects[i].y),Imgproc.FONT_HERSHEY_SCRIPT_SIMPLEX, 1.0, new Scalar(0, 255, 0),1,Imgproc.LINE_AA,false);
			Mat dst = image.submat(rects[i]);
			//模糊化(可先拿掉)
			Imgproc.GaussianBlur(dst, dst, new Size(5, 5), 1);

		}
		// 6 展示图片
		HighGui.imshow("图片Title", image);
		HighGui.waitKey(0);
	}
	
}




网络找到这张图片当作范例(若需要移除请告知,谢谢)

执行完后结果,红色框就是辨识出来,有些可能侧脸所以没辨识到