我正在使用Android vision API中的FaceTracker示例.但是,我在录制视频时遇到了困难,同时在它们上面绘制了叠加层.
一种方法是将位图存储为图像并使用FFmpeg或Xuggler将它们合并为视频,但我想知道如果我们可以在预计投影时在运行时录制视频,是否有更好的解决方案.
更新1: 我使用媒体记录器更新了以下类,但录制仍然无法正常工作.当我调用triggerRecording()函数时抛出以下错误:
MediaRecorder:以无效状态调用:4
我在清单文件中有外部存储权限.
更新2:
我在代码中修复了上述问题,并在onSurfaceCreated回调中移动了setupMediaRecorder().但是,当我停止录制时,它会抛出运行时异常.根据文档,如果没有视频/音频数据,将抛出运行时异常.
那么,我在这里错过了什么?
public class CameraSourcePreview extends ViewGroup {
private static final String TAG = "CameraSourcePreview";
private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
ORIENTATIONS.append(Surface.ROTATION_0, 90);
ORIENTATIONS.append(Surface.ROTATION_90, 0);
ORIENTATIONS.append(Surface.ROTATION_180, 270);
ORIENTATIONS.append(Surface.ROTATION_270, 180);
}
private MediaRecorder mMediaRecorder;
/**
* Whether the app is recording video now
*/
private boolean mIsRecordingVideo;
private Context mContext;
private SurfaceView mSurfaceView;
private boolean mStartRequested;
private boolean mSurfaceAvailable;
private CameraSource mCameraSource; …Run Code Online (Sandbox Code Playgroud) android android-camera android-mediarecorder google-vision android-vision
我一直在玩新的Google Barcode API中的示例代码.它将条形码和条形码值叠加在条形码的实时摄像机上.(也面临)
我无法告诉如何将条形码值返回到我的应用程序.A)如何判断检测事件何时发生以及B)如何访问ravValue以便在我的应用程序的其他部分中使用.有人能帮忙吗?
https://developers.google.com/vision/multi-tracker-tutorial
https://github.com/googlesamples/android-vision
更新: 在@ pm0733464的答案的基础上,我在Tracker类中添加了一个回调接口(称为onFound),我可以在Activity中访问该接口.调整Google多跟踪器示例:
GraphicTracker:
class GraphicTracker<T> extends Tracker<T> {
private GraphicOverlay mOverlay;
private TrackedGraphic<T> mGraphic;
private Callback mCallback;
GraphicTracker(GraphicOverlay overlay, TrackedGraphic<T> graphic, Callback callback) {
mOverlay = overlay;
mGraphic = graphic;
mCallback = callback;
}
public interface Callback {
void onFound(String barcodeValue);
}
@Override
public void onUpdate(Detector.Detections<T> detectionResults, T item) {
mCallback.onFound(((Barcode) item).rawValue);
mOverlay.add(mGraphic);
mGraphic.updateItem(item);
}
Run Code Online (Sandbox Code Playgroud)
BarcodeTrackerFactory:
class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> {
private GraphicOverlay mGraphicOverlay;
private GraphicTracker.Callback mCallback;
BarcodeTrackerFactory(GraphicOverlay graphicOverlay, GraphicTracker.Callback callback) …Run Code Online (Sandbox Code Playgroud) 我最初是一名Android开发人员,我想知道Android SDK是否有任何计算机视觉库或增强现实库,因为我打算将这些库用于移动应用程序.
我已经读过,如果我下载NDK,我可以"导入/使用"C openCV和ARtoolkit库,但我想知道这是否可行,或者是否有更好更简单的方法来使用这些工具.
Android应用程序使用Java编程,但OpenCV和ARtoolkit使用C/C++.有没有办法使用这些库?
android opencv computer-vision augmented-reality google-vision
以下是我迄今为止所做的一些研究: - 我使用Google Vision API检测各种面部标记.以下是参考:https://developers.google.com/vision/introduction
这是获取面部标志的示例代码的链接.它使用相同的Google Vision API.这是参考链接:https://github.com/googlesamples/ios-vision
我已经浏览了互联网上的各种博客,其中MSQRD基于谷歌的云愿景.以下是它的链接:https://medium.com/@AlexioCassani/how-to-create-a-msqrd-like-app-with-google-cloud-vision-802b578b30a0
对于Android,这里是参考:https: //www.raywenderlich.com/158580/augmented-reality-android-googles-face-api
有多个付费SDK完全填满了目的.但它们的价格很高.所以无法负担得起.例如:
有可能有一些人认为这个问题与此重复:像MSQRD/SnapChat这样的 面部过滤器实现
但该线程差不多是1.6岁,没有正确答案.
我已经阅读了这篇文章:https: //dzone.com/articles/mimic-snosaic-filters-programmatically-1
它描述了实现所需结果的所有必要步骤.但他们建议使用自己制作的SDK.
根据我的研究,没有足够好的材料可以帮助完全填充所需的结果,如MSQRD面部过滤器.
还有一个Github存储库周围有相同的实现,但它没有提供相同的信息. https://github.com/rootkit/LiveFaceMask
现在我的问题是:
如果我们使用Google Vision API(甚至使用DiLib)获得面部标志,我可以在其上添加2d或3d模型.在这种格式中需要这样做需要一些X,Y坐标和顶点计算.
注意:我已经浏览了Googles"GooglyEyesDemo",它在眼睛上添加了预览图层.它基本上增加了一个面部视图.所以我不想在它上面添加UIView一维预览图层.附图供参考:
https://developers.google.com/vision/ios/face-tracker-tutorial
创建模型:我还想知道如何为像MSQRD这样的实时过滤器创建模型.我欢迎任何软件或格式建议.希望我所做的研究能够帮助他人,而其他人的经验可以帮助我达到预期的效果.如果需要更多详细信息,请与我们联系.**
谢谢哈利
我想使用视觉API提供的新面部检测功能以及应用程序中的其他帧处理.为此,我需要访问由面部检测器处理的相机框架,并使用面部检测数据连接处理器.
正如我在示例中看到的,CameraSource抽象了检测和摄像头访问,我无法访问正在处理的帧.是否有如何在此API中获取相机框架的示例,或者,可能创建并连接接收它的检测器?那至少可能吗?
谢谢,卢西奥
我正在尝试使用Google Play服务(Vision)中的新功能将QR码扫描添加到我的应用程序中.但当我运行我的应用程序时,我得到了这个:
I/Vision? Supported ABIS: [armeabi-v7a, armeabi]
D/Vision? Library not found: /data/data/com.google.android.gms/files/com.google.android.gms.vision/barcode/libs/armeabi-v7a/libbarhopper.so
I/Vision? Requesting barcode detector download.
Run Code Online (Sandbox Code Playgroud)
我按照教程声明了条形码依赖:
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="barcode" />
Run Code Online (Sandbox Code Playgroud)
我尝试重新安装应用程序并重新启动手机,没有任何帮助.
使用Google Play Services 7.8,设备上安装的版本为7.8.11.
compile 'com.google.android.gms:play-services-vision:7.8.0'
Run Code Online (Sandbox Code Playgroud)
用于创建条形码检测器的代码:
boolean initBarcodeDetector() {
final BarcodeTrackerFactory barcodeTrackerFactory = new BarcodeTrackerFactory(this);
final MultiProcessor<Barcode> multiProcessor = new MultiProcessor.Builder<>(barcodeTrackerFactory)
.build();
barcodeDetector = new BarcodeDetector.Builder(this)
.build();
barcodeDetector.setProcessor(multiProcessor);
if (barcodeDetector.isOperational() == false) {
Toast.makeText(this, R.string.barcode_not_operational, Toast.LENGTH_LONG).show();
finish();
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
上面的close返回false并barcodeDetector.isOperational()返回活动,因为返回false.
android barcode google-play-services google-vision android-vision
我在想什么?
我试图用可绘画/油漆在脸上拍照,但是,我无法在同一张照片上同时拍摄.
我试过了什么?
我尝试过使用,CameraSource.takePicture但我只是脸上没有任何可绘画/油漆.
mCameraSource.takePicture(shutterCallback, new CameraSource.PictureCallback() {
@Override
public void onPictureTaken(byte[] bytes) {
try {
String mainpath = getExternalStorageDirectory() + separator + "TestXyz" + separator + "images" + separator;
File basePath = new File(mainpath);
if (!basePath.exists())
Log.d("CAPTURE_BASE_PATH", basePath.mkdirs() ? "Success": "Failed");
String path = mainpath + "photo_" + getPhotoTime() + ".jpg";
File captureFile = new File(path);
captureFile.createNewFile();
if (!captureFile.exists())
Log.d("CAPTURE_FILE_PATH", captureFile.createNewFile() ? "Success": "Failed");
FileOutputStream stream = new FileOutputStream(captureFile);
stream.write(bytes);
stream.flush();
stream.close();
} catch (IOException e) { …Run Code Online (Sandbox Code Playgroud) 我一整天都在寻找解决方案。我已经检查了几个关于我的问题的线程。
但这对我没有多大帮助。基本上我希望相机预览是全屏的,但文本只能在屏幕中央被识别,在那里绘制了一个矩形。
我正在使用的技术:
play-services-vision我目前的状态: 我创建了一个 BoxDetector 类:
public class BoxDetector extends Detector {
private Detector mDelegate;
private int mBoxWidth, mBoxHeight;
public BoxDetector(Detector delegate, int boxWidth, int boxHeight) {
mDelegate = delegate;
mBoxWidth = boxWidth;
mBoxHeight = boxHeight;
}
public SparseArray detect(Frame frame) {
int width = frame.getMetadata().getWidth();
int height = frame.getMetadata().getHeight();
int right = (width / 2) + (mBoxHeight / 2);
int left = (width / 2) - …Run Code Online (Sandbox Code Playgroud) 我从这里结帐了最新的Google Vision API:
https://github.com/googlesamples/android-vision
我在带有KitKat的LG G2设备上运行它.我所做的唯一更改是Gradle文件中的minSdkVerion:
...
defaultConfig {
applicationId "com.google.android.gms.samples.vision.face.multitracker"
minSdkVersion 19
...
Run Code Online (Sandbox Code Playgroud)
但它没有集中注意力.我如何让它集中注意力?
camera android google-play-services google-vision android-vision
我似乎发现自己处于用于条形码扫描的Google Vision API的深层杂草中.在查看各种替代库(ZBar,ZXing,甚至是一些成本较低的第三方实现)之后,我的思绪可能有点油腻,但我在找到任何可以实现某种扫描的地方的信息时遇到了一些困难.区域限制.
用例非常简单:如果我是用户将手机指向一个带有多个相同类型条形码的盒子(想想这里的运输标签),我想明确指出一些小取景器或对齐直边屏幕正好是我想要捕捉的东西,而不必担心在该感兴趣区域之外的任何东西给我一些我不想要的扫描结果.
以上情况在我见过的大多数其他Android库中处理,带有相对或绝对坐标的Rect,这也是iOS的AVCapture元数据结果系统的一部分(它使用相对的CGRect,但实际上是相同的概念).
我已经挖很深成条形码阅读器示例应用程序 在这里,但执行是不透明的,一点点得到什么,但高层次的实现细节了.
在成功检测到相机预览帧内任何位置的条形码时,对于感兴趣区域之外的条形码上的简单无操作,似乎是一个难看的补丁,因为该设备仍在努力计算这些帧.
我错过了一个非常简单明了的东西吗?有什么想法可以干净利落地实施,否则呢?
非常感谢您抽出时间阅读本文!
google-vision ×10
android ×9
barcode ×1
camera ×1
ios ×1
java ×1
objective-c ×1
opencv ×1
snapchat ×1
vision-api ×1