从图像 class Java android 创建一个 firebase 视觉图像
creating a firebase vision image from image class Java android
所以我正在尝试使用 google ML Kit 创建一个条形码扫描仪,该扫描仪使用 android 内置相机扫描二维码,但 FirebasevisionImage class 需要 media.image 和我不知道如何创建它。这是我的代码。
public class 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();
}
}
还有一种获取和 return 相机 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);
}
但我想知道的是如何使条码扫描器与设备相机一起工作。
引用https://firebase.google.com/docs/ml-kit/android/read-barcodes
你好像用的是android.hardware.camera2 API,设置起来确实有点困难。请参考 camera2 文档,但简而言之,您可以使用 android.media.ImageReader 并要求 camera2 API 将图像渲染到其 "Surface" 并从 [=18] 获取 media.Image =].
ML Kit 正在努力改进快速入门应用以包含 camera2 示例代码。敬请关注。谢谢。
所以我正在尝试使用 google ML Kit 创建一个条形码扫描仪,该扫描仪使用 android 内置相机扫描二维码,但 FirebasevisionImage class 需要 media.image 和我不知道如何创建它。这是我的代码。
public class 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();
}
}
还有一种获取和 return 相机 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);
}
但我想知道的是如何使条码扫描器与设备相机一起工作。
引用https://firebase.google.com/docs/ml-kit/android/read-barcodes
你好像用的是android.hardware.camera2 API,设置起来确实有点困难。请参考 camera2 文档,但简而言之,您可以使用 android.media.ImageReader 并要求 camera2 API 将图像渲染到其 "Surface" 并从 [=18] 获取 media.Image =].
ML Kit 正在努力改进快速入门应用以包含 camera2 示例代码。敬请关注。谢谢。