Articles of javacv

Android上的人脸识别

我试图在Android上开发一个人脸识别应用程序,因为我不想在项目中使用NDK(根本没有时间切换),我坚持用Java开发整个应用程序,因此我有一些问题: Contrib模块似乎不包含在OpenCV 2.4.2中。 有没有在项目中使用它? 我尝试使用JavaCV来使用Contrib模块的“FaceRecognizer”类。 有两个类可用称为“FaceRecognizer”和“FaceRecognizerPtr”。 有谁知道这两者之间的区别是什么? 上面提到的类有一个名为“Train”的方法,它在C ++中接收两个types为“Mat&Integer”( model->train(images,labels) & train(Vector<mat> theImages, Vector<int> theLabels )。我尝试在Java中传递ArrayList<mat> & ArrayList<integer>和Vectors,但似乎该方法显式接受“CvArr”数据types,我不知道如何获取…这是错误: opencv_contrib.FaceRecognizertypes的方法列表(opencv_core.CvArr,opencv_core.CvArr)不适用于参数(ArrayList,ArrayList) 有谁知道如何将我的ArrayList更改为CvArr? 这是我的第一篇文章,我不知道是否要在一个post或三个post中提出所有三个问题,所以给您带来的不便感到抱歉。如果您需要任何有关该项目的其他信息,请随时询问。

如何在Android上安装JavaCV并使用FrameGrabber

有人能告诉我我做错了吗? 这些是我所遵循的步骤: 从android开发者网站下载了adt-bundle-windows 创build一个新的项目和一个libs / armeabi文件夹 将所有* .so文件从javacv-android-arm.jar,opencv-2.4.3-android-arm.zip和ffmpeg-1.0-android-arm.zip中直接提取到新创build的“libs / armeabi”文件夹中,而不创build任何新的子目录。 (我不明白的一部分是“从javacv-android-arm.jar中提取所有* .so文件” ,我只是在libs / armeabi文件夹中插入javacv-android-arm.jar文件) 导航到项目>属性> Java构buildpath>库,然后单击“添加JAR …”。 从新创build的“libs”文件夹中selectjavacpp.jar和javacv.jar。 之后,我从这里下载了OpenCV2.4.3,从这里下载了ffmpeg,并提取了我的C:/ root下的文件。 最后在设置我的系统path…之后, C:\opencv\build\x64\vc10\bin;C:\ffmpeg-64\bin;C:\Program Files\Java\jdk1.7.0_10\bin 如果我尝试在我的Android应用程序中简单地使用FrameGrabber … import com.googlecode.javacv.FFmpegFrameGrabber; import com.googlecode.javacpp.Loader; import com.googlecode.javacv.*; import com.googlecode.javacv.cpp.*; import static com.googlecode.javacv.cpp.opencv_core.*; import static com.googlecode.javacv.cpp.opencv_imgproc.*; import static com.googlecode.javacv.cpp.opencv_calib3d.*; import static com.googlecode.javacv.cpp.opencv_objdetect.*; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity […]

使用JavaCV和FFmpeg播放video

所以,我正在开发一个Android的自定义video播放器,但我需要播放比Android支持的video文件(mp4,3gp …)更多,如wmv,avi,flv。 在这个时候,我已经将任何videotypes转换为.mp4,我可以在重新编码后播放它们,但我不知道如何播放这些wmv,avi文件,而无需将它们重新编码为mp4。 有没有什么办法可以在Android上播放任何video而无需重新编码? JavaCV + FFmpeg库已经在工作,只是不知道该怎么做。 顺便说一下,我用我重新编码video的代码: public static void convert(File file) { FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file.getAbsolutePath()); IplImage captured_frame = null; FrameRecorder recorder = null; recorder = new FFmpegFrameRecorder("/mnt/sdcard/external_sd/videosteste/primeiroteste.mp4", 300, 300); recorder.setVideoCodec(13); recorder.setFrameRate(30); recorder.setFormat("mp4"); try { recorder.start(); frameGrabber.start(); while (true) { try { captured_frame = frameGrabber.grab(); if (captured_frame == null) { System.out.println("!!! Failed […]

从图像序列创buildvideojavacv

为了在android中创buildvideo序列,我使用了javacv 0.6库,但是我遇到了问题:它通常在HTC Sensation(Android 4.0.1,处理器typesarmv7)和HTC Desire(Android 2.3.3,处理器typesarm7)手机,但它不适用于HTC Wildfire(Android 2.3.5,处理器typesarmv6)手机,特别是在这部分代码失败 FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(videoFilePath, TalkingPhotoConstants.VIDEO_FRAME_WIDTH,TalkingPhotoConstants.VIDEO_FRAME_HEIGHT); 在附上的代码中。 public class MovieCreator extends AsyncTask<String, Void, Boolean> { private opencv_core.IplImage[] iplimage; private String audioFilePath; private ProgressDialog progressDialog; private Context context; private List<TalkFrame> frames; public MovieCreator(Context context, opencv_core.IplImage[] images, String audioFilePath, List<TalkFrame> frames) { this.context = context; this.iplimage = images; this.audioFilePath […]

JavaCV录像机方向在纵向模式下不适用

您好我使用https://github.com/bytedeco/javacv/录制video。 当使用风景模式方向是好的,但是当我将方向改变为肖像模式时,video旋转-90度。 任何机构都有一个想法,我可能做错了什么。 这是代码。 package org.bytedeco.javacv_android_example.record; import android.app.Activity; import android.content.Context; import android.content.pm.ActivityInfo; import android.hardware.Camera; import android.hardware.Camera.PreviewCallback; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.os.PowerManager; import android.util.Log; import android.view.Display; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.Button; import android.widget.LinearLayout; import android.widget.RelativeLayout; import org.bytedeco.javacpp.opencv_core; import […]

在OpenCV中将Mat对象从本机代码返回到java

我有一个OpenCV Android应用程序。 它的大部分代码是用Java编写的,但是我有一个用C语言编写的函数。函数获取一个Mat对象并返回一个新对象。 我的问题是如何从原生代码返回到Java? 找不到任何这样的例子。 谢谢。

一起使用JavaCV和Realm会导致“java.lang.UnsatisfiedLinkError”

我最近试图启动一个JavaCV的FFmpegFrameGrabber的实例,得到以下错误: java.lang.UnsatisfiedLinkError: org.bytedeco.javacpp.avutil at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:324) at org.bytedeco.javacpp.Loader.load(Loader.java:413) at org.bytedeco.javacpp.Loader.load(Loader.java:381) at org.bytedeco.javacpp.avformat$AVFormatContext.<clinit>(avformat.java:2597) at org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe(FFmpegFrameGrabber.java:386) at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:380)… 虽然存在解决这个问题的方法,但是没有人为我工作。 通过很多试验,我发现这个奇怪的是,如果我的项目中没有包括Realm,我不会再收到这个错误。 下面是我的build.gradle文件的一部分,其中包含了所有这些库: compile group: 'org.bytedeco', name: 'javacv', version: '1.1' compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.0.0-1.1', classifier: 'android-arm' compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.0.0-1.1', classifier: 'android-x86' compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.8.1-1.1', classifier: 'android-arm' […]

Android OpenCVfind轮廓

我需要提取图像的最大轮廓。 这是我目前使用的代码。 网上收集了一些片段 List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); Imgproc.findContours(outerBox, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); double maxArea = -1; int maxAreaIdx = -1; for (int idx = 0; idx < contours.size(); idx++) { Mat contour = contours.get(idx); double contourarea = Imgproc.contourArea(contour); if (contourarea > maxArea) { maxArea = contourarea; maxAreaIdx = idx; } } 它似乎工作。 不过,我不太清楚如何从这里出发。 […]

JavaCV + Android Studio + gradle-可能吗?

我正在尝试与Android Studio和Gradle一起使用JavaCV。 我写了这样的代码片段: repositories { mavenCentral() maven { url "http://maven2.javacv.googlecode.com/git/" } } dependencies { compile files('libs/android-support-v4.jar') compile group: 'com.googlecode.javacpp', name: 'javacpp', version: '0.5' compile group: 'com.googlecode.javacv', name: 'javacv', version: '0.5' } 我在外部库中看到导入的库。 所以我试图运行这个: … IplImage zdjecie=cvLoadImage(Environment.getExternalStorageDirectory().getPath()+ "/1.bmp"); cvSaveImage(Environment.getExternalStorageDirectory().getPath() + "/2.bmp", zdjecie); … 我得到错误: Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniopencv_core: findLibrary returned null …因为我不知道如何处理opencv(及其他).so文件。 那么我们应该如何在Android Studio中使用JavaCV?

使用Ffmpeg设置videostream元数据

我正在使用JavaCV FFmpegFrameRecorder类将Android的相机预览帧编码到video中。 目标是复制以下命令行的结果: ffmpeg -i input.mp4 -metadata:s:v:0 rotate="90" output.mp4 我修改了startUnsafe()方法如下,但它没有生成所需的输出: if ((video_st = avformat_new_stream(oc, video_codec)) != null) { video_c = video_st.codec(); video_c.codec_id(oformat.video_codec()); video_c.codec_type(AVMEDIA_TYPE_VIDEO); … AVDictionary avDictionary = new AVDictionary(null); av_dict_set(avDictionary, "rotate", "90", 0); video_st.metadata(avDictionaty); … } … avformat_write_header(oc, (PointerPointer) null); 这仍然正确地编码video,但添加的元数据不会出现在ffprobe上。 如果有帮助,video编码是h264。 顺便说一下,这里的ffprobe输出: ffprobe version 2.3.3 Copyright (c) 2007-2014 the FFmpeg developers built on Jan […]