我正在使用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
我按照本教程学习如何构建可以扫描QR码的Android应用程序.
这是完整的代码.我使用等级添加了Google Play服务compile 'com.google.android.gms:play-services:7.8.0'.
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="bitinvent.io.qrscanner" >
<meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="barcode"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<SurfaceView
android:id="@+id/cameraView"
android:layout_width="640px"
android:layout_height="480px"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"/>
<TextView
android:id="@+id/infoTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/cameraView"
android:layout_marginLeft="16dp"
android:text="Nothing to read"
android:textSize="20sp"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
package bitinvent.io.qrscanner;
import …Run Code Online (Sandbox Code Playgroud) 我目前正在编写应该能够查看文本图片的代码,然后从基于Android的设备的图片中提取文本.我在网上做了一些研究,发现谷歌提供了自己的API,名为"Mobile Vision"(一个包含很多项目的软件包,包括文本识别,面部识别等).然而,在他们的演示中,他们只展示实时文本识别.我想知道是否有人可以使用Mobile Vision 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
我从这里结帐了最新的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
我觉得这个问题已经解决了很多次,但我无法弄清楚.我基本上遵循了关于移动视觉的这个小教程并完成了它.之后我尝试从ColorBlob开始检测对象并绘制边框.
想法是从框架的中间开始(有目的地将对象保持在相机的中间)并通过其颜色检测该对象的边缘.只要我以横向模式(Frame.ROTATION_0)保持手机,它就可以正常工作.一旦我处于纵向模式(Frame.Rotation_90),边界Rect就会被绘制成旋转,因此具有更多高度的对象将被绘制为具有更多宽度,并且还有点偏离.
该文档说,探测器总是提供给COORDS未旋转直立框架,所以我怎么来计算相对于它的旋转边框COORDS?我认为这不重要,但这是我如何找到颜色Rect
public Rect getBounds(Frame frame){
int w = frame.getMetadata().getWidth();
int h = frame.getMetadata().getHeight();
int scale = 50;
int scaleX = w / scale;
int scaleY = h / scale;
int midX = w / 2;
int midY = h / 2;
float ratio = 10.0
Rect mBoundary = new Rect();
float[] hsv = new float[3];
Bitmap bmp = frame.getBitmap();
int px = bmp.getPixel(midX, midY);
Color.colorToHSV(px, hsv);
Log.d(TAG, "detect: mid hsv: " + hsv[0] …Run Code Online (Sandbox Code Playgroud) 我似乎发现自己处于用于条形码扫描的Google Vision API的深层杂草中.在查看各种替代库(ZBar,ZXing,甚至是一些成本较低的第三方实现)之后,我的思绪可能有点油腻,但我在找到任何可以实现某种扫描的地方的信息时遇到了一些困难.区域限制.
用例非常简单:如果我是用户将手机指向一个带有多个相同类型条形码的盒子(想想这里的运输标签),我想明确指出一些小取景器或对齐直边屏幕正好是我想要捕捉的东西,而不必担心在该感兴趣区域之外的任何东西给我一些我不想要的扫描结果.
以上情况在我见过的大多数其他Android库中处理,带有相对或绝对坐标的Rect,这也是iOS的AVCapture元数据结果系统的一部分(它使用相对的CGRect,但实际上是相同的概念).
我已经挖很深成条形码阅读器示例应用程序 在这里,但执行是不透明的,一点点得到什么,但高层次的实现细节了.
在成功检测到相机预览帧内任何位置的条形码时,对于感兴趣区域之外的条形码上的简单无操作,似乎是一个难看的补丁,因为该设备仍在努力计算这些帧.
我错过了一个非常简单明了的东西吗?有什么想法可以干净利落地实施,否则呢?
非常感谢您抽出时间阅读本文!
Google移动视觉(https://developers.google.com/vision/)API是否脱机工作?还是需要互联网连接?该示例应用程序不需要任何网络权限.这意味着API完全脱机工作.我正在寻找对此的肯定确认.
PS.此外,我正在寻找有关此API的更多信息.例如,它是否使用神经网络?如果是这样,使用了什么算法?我无法在任何地方找到任何细节讨论.
我正在使用谷歌Android Vision API的条码阅读器示例.预览大小似乎没有填满整个可用空间(我使用的是Nexus 4,预览右侧有一个未使用的白色空间,约为宽度的1/3).
我希望能够在各种设备上运行此示例,并始终将其填满整个可用空间.
所以我一直在玩的是:
CameraSource.Builder builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector).setFacing(CameraSource.CAMERA_FACING_BACK).setRequestedPreviewSize(?, ?).setRequestedFps(15.0f);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢!
java android google-play-services google-vision android-vision
我需要使用WebRTC for android将特定的裁剪(面部)视频发送到videoChannel.我能够操作CameraRession类WebRTC来裁剪面部.现在我将它设置为ImageView.
listenForBytebufferFrames()的Camera1Session.java
private void listenForBytebufferFrames() {
this.camera.setPreviewCallbackWithBuffer(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera callbackCamera) {
Camera1Session.this.checkIsOnCameraThread();
if(callbackCamera != Camera1Session.this.camera) {
Logging.e("Camera1Session", "Callback from a different camera. This should never happen.");
} else if(Camera1Session.this.state != Camera1Session.SessionState.RUNNING) {
Logging.d("Camera1Session", "Bytebuffer frame captured but camera is no longer running.");
} else {
mFrameProcessor.setNextFrame(data, callbackCamera);
long captureTimeNs = TimeUnit.MILLISECONDS.toNanos(SystemClock.elapsedRealtime());
if(!Camera1Session.this.firstFrameReported) {
int startTimeMs = (int)TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - Camera1Session.this.constructionTimeNs);
Camera1Session.camera1StartTimeMsHistogram.addSample(startTimeMs);
Camera1Session.this.firstFrameReported = true;
}
ByteBuffer byteBuffer1 = ByteBuffer.wrap(data); …Run Code Online (Sandbox Code Playgroud) android-vision ×10
android ×9
camera ×2
java ×2
apprtcdemo ×1
barcode ×1
drawing ×1
qr-code ×1
webrtc ×1