Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从图像类Java android创建firebase vision图像_Java_Android_Image_Barcode Scanner_Firebase Mlkit - Fatal编程技术网

从图像类Java android创建firebase vision图像

从图像类Java android创建firebase vision图像,java,android,image,barcode-scanner,firebase-mlkit,Java,Android,Image,Barcode Scanner,Firebase Mlkit,因此,我试图用谷歌ML工具包创建一个条形码扫描仪,该扫描仪使用android内置摄像头扫描二维码,但FirebasevisionImage类获取了一个media.image,我不知道如何创建它。这是我的密码 公共类QrActivity扩展了AppCompatActivity实现了SurfaceHolder.Callback{ private static final String TAG = "QrActivity"; SurfaceView surfaceView = findViewByI

因此,我试图用谷歌ML工具包创建一个条形码扫描仪,该扫描仪使用android内置摄像头扫描二维码,但FirebasevisionImage类获取了一个media.image,我不知道如何创建它。这是我的密码

公共类QrActivity扩展了AppCompatActivity实现了SurfaceHolder.Callback{

private static final String TAG = "QrActivity";

SurfaceView surfaceView = findViewById(R.id.cameraView);
SurfaceHolder holder = surfaceView.getHolder();
CameraManager cameraManager;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_qr);
}

@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
    surfaceHolder = this.holder ;

    try {
        Image myimage = cameraManager.openCamera(1,);
        getRotationCompensation(getCameraId(),QrActivity.this,getApplicationContext());
        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent,1);
        FirebaseVisionImage image = FirebaseVisionImage.fromMediaImage(reader,  getRotationCompensation(getCameraId(),QrActivity.this,getApplicationContext()));

    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
还有一个获取和返回相机id的方法,并创建一个sparseInt数组来获取相机旋转

private String getCameraId(){
        String mCameraId = null;
        CameraManager cameraManager =(CameraManager) getSystemService(Context.CAMERA_SERVICE);
        try {
            for(String cameraId:cameraManager.getCameraIdList()){
                CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId);
                if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING)==1){
                    mCameraId = cameraId;
                    return mCameraId;
                }

            }
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
        return mCameraId;
    }

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);
    }
但我想知道的是如何使条形码扫描仪与设备摄像头配合使用


参考

看起来您使用的是android.hardware.camera2 API,设置起来确实有点困难。请参阅camera2文档,但简而言之,您可以使用android.media.ImageReader并要求camera2 API将图像渲染到其“表面”,并从ImageReader.OnImageAvailableListener获取媒体.image


ML Kit正在改进Quick Start应用程序,使其包含camera2示例代码。请继续关注。谢谢。

Thank you@Isabella。实际上,我使用google vision api使其正常工作,该api很快就会被弃用,但它现在已经完成了工作。