股票场内基金交易,没时间盯盘?
使用优财助手电脑客户端记录下您的股票买入卖出数据,能帮您时刻盯盘,会根据您记录的未售出买入价计算上涨或下跌幅度,及时弹框通知您。想知道如何使用?快点击左方视频观看了解吧~~下载地址:http://youcaizhushou.com
前言
上篇文章介绍了 Android 的人脸检测,这篇文章来介绍 openCV 的人脸检测。由于在 Android 平台上能直接使用 JavaCV,而 JavaCV 包含 openCV。所以,这篇文章就在 JavaCV 的基础上来实现 openCV 的人脸检测。
引入 JavaCV
下载 JavaCV 需要的包
下载地址
需要下载的包:javacv-bin.zip 和 opencv-2.4.3-android-arm.zip
引用 JavaCV
分别解压下载的包。将 javacv-bin 中的 javacpp.jar 和 javacv.jar 拷贝到项目的 libs 下,并引用。
将 opencv-2.4.3-android-arm 中 libs 下的 armeabi 和 armeabi-v7a 中的 .so 文件拷贝到项目的 libs 下的 armeabi 和 armeabi-v7a 中。
人脸检测
加载分类器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public void init() throws IOException { File classifierFile = Loader.extractResource(getClass(), "/com/ifenghui/face/camera/haarcascade_frontalface_alt2.xml", getCacheDir(), "classifier", ".xml");//获取分类器文件 if (classifierFile == null || classifierFile.length() <= 0) { throw new IOException("Could not extract the classifier file from Java resource."); } // Preload the opencv_objdetect module to work around a known bug. Loader.load(opencv_objdetect.class);//加载分类器 classifier = new opencv_objdetect.CvHaarClassifierCascade(cvLoad(classifierFile.getAbsolutePath()));//获取分类器对象 classifierFile.delete(); if (classifier.isNull()) { throw new IOException("Could not load the classifier file."); } storage = opencv_core.CvMemStorage.create(); } |
注:第 2,3,4 行中使用的分类器文件 haarcascadefrontalfacealt2.xml 在 openCV 安装路径下的 data/haarcascades/ 下。
人脸检测
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
protected void detectorFaceFromImage(Bitmap faceBitmap, int width, int height) { // First, downsample our image and convert it into a grayscale IplImage int f = SUBSAMPLING_FACTOR;//图片缩小倍数 if (grayImage == null || grayImage.width() != width / f || grayImage.height() != height / f) { grayImage = opencv_core.IplImage.create(width / f, height / f, opencv_core.IPL_DEPTH_8U, 1);//创建缩小后的 IplImage } opencv_core.IplImage faceIplImage = opencv_core.IplImage.create(width, height, IPL_DEPTH_8U, 4); faceBitmap.copyPixelsToBuffer(faceIplImage.getByteBuffer());//bitmap 转成 IplImage opencv_core.IplImage bitGray = opencv_core.IplImage.create(width, height, IPL_DEPTH_8U, 1); opencv_imgproc.cvCvtColor(faceIplImage, bitGray, opencv_imgproc.CV_BGR2GRAY);// 转换成灰度图片 opencv_imgproc.cvResize(bitGray, grayImage, opencv_imgproc.CV_INTER_LINEAR); opencv_imgproc.cvEqualizeHist(grayImage, grayImage);//直方图均衡化,不知道干啥用的 cvClearMemStorage(storage); facesCV = cvHaarDetectObjects(grayImage, classifier, storage, 1.1, 2, opencv_objdetect.CV_HAAR_DO_CANNY_PRUNING);//调用人脸检测 RectF rectF = new RectF(); float scaleX = SUBSAMPLING_FACTOR; float scaleY = SUBSAMPLING_FACTOR; int total = facesCV.total(); for (int i = 0; i < total; i++) {//获取人脸范围的矩形,一便绘制 opencv_core.CvRect r = new opencv_core.CvRect(cvGetSeqElem(facesCV, i)); int x = r.x(), y = r.y(), w = r.width(), h = r.height(); rectF.set(x * scaleX, y * scaleY, (x + w) * scaleX, (y + h) * scaleY); //canvas.drawRect(x*scaleX, y*scaleY, (x+w)*scaleX, (y+h)*scaleY, paint); } } |
结语
openCV 的人脸检测的效率很高,但是需要先加载分类器,这会影响检测的效率。如果需要检测的图片很少,加载分类器使用的时间所占的比重就大。在需要检测的图片不是太多的情况下使用 Android 的人脸检测似乎比 openCV 更好一些。
想获得去掉 5 元限制的证券账户吗?

证券交易股票基金的佣金,不足 5 元会按照 5 元收取。比如交易 1000 元的股票,按照普遍的证券佣金手续费率万 2.5,其交易佣金为 0.25 元,小于 5 元,实际会收取佣金 5 元,买卖两次需要支付 10 元佣金成本,1% 的利润就这样没了。
如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。
请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。
如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。
请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。