javaapiOpenCV4Android--使用java api做人脸识别
2013-05-30 20:27
393 查看
在本篇文章中,我们主要介绍javaapi的内容,自我感觉有个不错的建议和大家分享下
在android上有两种方法应用opencv,第一应用opencv供给好的库文件,然后调用opencv的java api来做图像处理。第二种是应用opencv的C++ api,但是需要ndk来创立动态库,然后android工程间接调用动态库中的函数。
本文主要应用第一种方法,(关于环境的配置,网上很多,个人应用的是http://blog.csdn.net/nuptboyzhb/article/details/8696940,其实如果单纯的应用第一种方法,cdt和ndk都不用安装,只需要解压opencv的ok了)
第一步,将opencv解压,拷贝sdk/java到eclipse工程文件夹下
![](http://img.blog.csdn.net/20130530161850415)
![](http://img.blog.csdn.net/20130530161913883)
第二步,导入工程,将java导入到eclipse工程中,修改配置(选择android api勾选is library)
![](http://img.blog.csdn.net/20130530162129848)
api选择必须是11也就是3.0 以上,否则会报错。
第三步,建立自己的工程
修改配置,library add刚才添加的java工程便可。(也可修改project.properties文件在最后加上android.library.reference.1=../java,确保java工程和你新建的工程目录是同级的。若没有project.properties,那修改default.properties)
![](http://img.blog.csdn.net/20130530162755479)
添加胜利会出现以下图片,(java_src)
![](http://img.blog.csdn.net/20130530163435094)
第四步,编写代码
首先在onResume中加载初始化opencv库
然后实现baseloadercallback捏词,在其中加载是别的分类器,代码来自于opencv人脸是别的范例。
每日一道理
听,是谁的琴声,如此凄凉,低调的音,缓慢的节奏,仿佛正诉说着什么。音低调得略微有些抖动,听起来似乎心也有些抖动,我感觉到一种压抑的沉闷气息,是否已凝结在这空气中……
最后在按钮的事件中添加如下
其中用到了一个灰度化的函数
暂时就这么多了,opencv java api供给的图片转化为灰度的方法,暂时还没找到。
![](http://img.blog.csdn.net/20130530164921446)
文章结束给大家分享下程序员的一些笑话语录: 古鸽是一种搜索隐禽,在中国快绝迹了…初步的研究表明,古鸽的离去,很可能导致另一种长着熊爪,酷似古鸽,却又习性不同的猛禽类——犤毒鸟
---------------------------------
原创文章 By
java和api
---------------------------------
在android上有两种方法应用opencv,第一应用opencv供给好的库文件,然后调用opencv的java api来做图像处理。第二种是应用opencv的C++ api,但是需要ndk来创立动态库,然后android工程间接调用动态库中的函数。
本文主要应用第一种方法,(关于环境的配置,网上很多,个人应用的是http://blog.csdn.net/nuptboyzhb/article/details/8696940,其实如果单纯的应用第一种方法,cdt和ndk都不用安装,只需要解压opencv的ok了)
第一步,将opencv解压,拷贝sdk/java到eclipse工程文件夹下
第二步,导入工程,将java导入到eclipse工程中,修改配置(选择android api勾选is library)
api选择必须是11也就是3.0 以上,否则会报错。
第三步,建立自己的工程
修改配置,library add刚才添加的java工程便可。(也可修改project.properties文件在最后加上android.library.reference.1=../java,确保java工程和你新建的工程目录是同级的。若没有project.properties,那修改default.properties)
添加胜利会出现以下图片,(java_src)
第四步,编写代码
首先在onResume中加载初始化opencv库
@Override public void onResume() { super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback); }
然后实现baseloadercallback捏词,在其中加载是别的分类器,代码来自于opencv人脸是别的范例。
每日一道理
听,是谁的琴声,如此凄凉,低调的音,缓慢的节奏,仿佛正诉说着什么。音低调得略微有些抖动,听起来似乎心也有些抖动,我感觉到一种压抑的沉闷气息,是否已凝结在这空气中……
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { Log.i(TAG, "OpenCV loaded successfully"); try { // load cascade file from application resources InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface); File cascadeDir = getDir("cascade", Context.MODE_PRIVATE); mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml"); FileOutputStream os = new FileOutputStream(mCascadeFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } is.close(); os.close(); mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath()); if (mJavaDetector.empty()) { Log.e(TAG, "Failed to load cascade classifier"); mJavaDetector = null; } else Log.i(TAG, "Loaded cascade classifier from " + mCascadeFile.getAbsolutePath()); cascadeDir.delete(); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "Failed to load cascade. Exception thrown: " + e); } } break; default: { super.onManagerConnected(status); } break; } } };
最后在按钮的事件中添加如下
mRgba=new Mat(); mGray=new Mat(); Bitmap imgtemp=((BitmapDrawable) getResources().getDrawable(R.drawable.lena)).getBitmap(); Utils.bitmapToMat(imgtemp, mRgba); Bitmap img=ConvertGrayImg(R.drawable.lena); Utils.bitmapToMat(img, mGray); //mGray//灰度化 if (mAbsoluteFaceSize == 0) { int height = mGray.rows(); if (Math.round(height * mRelativeFaceSize) > 0) { mAbsoluteFaceSize = Math.round(height * mRelativeFaceSize); } } MatOfRect faces = new MatOfRect(); if (mJavaDetector != null) { mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2, // TODO: objdetect.CV_HAAR_SCALE_IMAGE new Size(mAbsoluteFaceSize, mAbsoluteFaceSize), new Size()); } Rect[] facesArray = faces.toArray(); for (int i = 0; i < facesArray.length; i++) Core.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3); Utils.matToBitmap(mRgba, imgtemp,true); imgView.setImageBitmap(imgtemp);
其中用到了一个灰度化的函数
ConvertGrayImg,可以参考http://blog.csdn.net/hellogv/article/details/6094127
暂时就这么多了,opencv java api供给的图片转化为灰度的方法,暂时还没找到。
文章结束给大家分享下程序员的一些笑话语录: 古鸽是一种搜索隐禽,在中国快绝迹了…初步的研究表明,古鸽的离去,很可能导致另一种长着熊爪,酷似古鸽,却又习性不同的猛禽类——犤毒鸟
---------------------------------
原创文章 By
java和api
---------------------------------
相关文章推荐
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- Android下的人脸识别——FaceDetector的使用
- 在android平台编译并使用dlib人脸识别库
- Android 使用FACE++架构包实现人脸识别
- 【Android】Android使用OpenCV实现人脸识别(OpenCV+JavaCV)
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- [Android]Android中人脸识别接口的使用
- Android虹软人脸识别sdk使用工具类
- Android 人脸识别————关于虹软人脸识别SDK引擎使用总结
- Android使用Face++ SDK进行人脸识别和年龄检测
- android 相机使用(拍照、录像、图片查看、静态人脸识别、延时拍照)
- 快速使用Android静态人脸识别(附源码)
- 使用face++接口实现在Android设备上的人脸识别
- Android使用Face++架构包实现人脸识别
- Android 使用Face++进行人脸识别
- Android 虹软SDK人脸识别图文使用详细
- android jni中将大数据回调到java层的时候用法,比如视频流,音频流等,图片流等 比如我用ffmpeg解码好视频流,想送到java层使用opengGL进行显示,opencv进行人脸识别等等
- android webView使用js/css实现夜间模式 长按识别图片以及二维码,网页可以上传图片
- Android入门(54)——第九章 使用GestureOverlayView进行手势识别
- android 人脸识别