Java 关于android应用程序编码,特别是针对摄像头活动

Java 关于android应用程序编码,特别是针对摄像头活动,java,android,Java,Android,我的想法 我想咨询一下如何将我的想法应用到我所做的摄影活动中 我试着搜索我想做的事情的例子,但我搜索的内容似乎没有找到合适的词来搜索,所以我一直在这方面碰壁 基本上,我正在尝试制作一个应用程序,可以拍摄一张照片,然后给它贴上标签,以便用于图像识别中的机器学习 请告诉我我可以使用哪些库和命令来实现这一点,甚至可以调用哪些函数,因为我是java和android编程的新手 package com.example.jeriously.mama; 导入android.content.Intent; 导

我的想法

我想咨询一下如何将我的想法应用到我所做的摄影活动中

我试着搜索我想做的事情的例子,但我搜索的内容似乎没有找到合适的词来搜索,所以我一直在这方面碰壁

基本上,我正在尝试制作一个应用程序,可以拍摄一张照片,然后给它贴上标签,以便用于图像识别中的机器学习

请告诉我我可以使用哪些库和命令来实现这一点,甚至可以调用哪些函数,因为我是java和android编程的新手

package com.example.jeriously.mama;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.widget.Button;
导入android.Manifest;
导入android.content.Context;
导入android.content.pm.PackageManager;
导入android.graphics.ImageFormat;
导入android.graphics.SurfaceTexture;
导入android.hardware.camera2.CameraAccessException;
导入android.hardware.camera2.CameraCaptureSession;
导入android.hardware.camera2.CameraCharacteristics;
导入android.hardware.camera2.CameraDevice;
导入android.hardware.camera2.CameraManager;
导入android.hardware.camera2.CameraMetadata;
导入android.hardware.camera2.CaptureRequest;
导入android.hardware.camera2.totalcapturesult;
导入android.hardware.camera2.params.StreamConfigurationMap;
导入android.media.Image;
导入android.media.ImageReader;
导入android.os.Environment;
导入android.os.Handler;
导入android.os.HandlerThread;
导入android.support.annotation.NonNull;
导入android.support.v4.app.ActivityCompat;
导入android.util.Size;
导入android.util.SparseIntArray;
导入android.view.Surface;
导入android.view.TextureView;
导入android.view.view;
导入android.widget.Toast;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.nio.ByteBuffer;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入java.util.UUID;
公共类CaptureActivity扩展了AppCompativity{
按钮获取图片;
意图获取图片,捕捉图片;
TextureView getpicture\u view\u tv;
字符串标签,标签内容;
int xmin,xmax,ymin,ymax;
专用静态最终SparseIntArray方向=新SparseIntArray();
静止的{
方向。附加(表面。旋转0,90);
方向。附加(表面。旋转_90,0);
方向。附加(表面。旋转_180270);
方向。附加(表面。旋转_270180);
}
私用字符串;
私人摄像设备;
专用CameraCaptureSession cameraCaptureSessions;
私有CaptureRequest.Builder captureRequestBuilder;
私人规模;
私人图像阅读器;
//保存到文件
私有文件picture1、picture2、picture3、picture4、picture5、picture6、picture7、picture8、picture9、picture10;
私有静态最终int请求\摄像机\权限=200;
支持私有布尔值;
私人处理程序mBackgroundHandler;
私有HandlerThread mBackgroundThread;
ImageReader.OnImageAvailableListener readerListener1、readerListener2、readerListener3、readerListener4、readerListener5、readerListener6、readerListener7、readerListener8、readerListener9、readerListener10;
CameraDevice.StateCallback StateCallback=新建CameraDevice.StateCallback(){
@凌驾
打开公共无效(@NonNull CameraDevice camera){
cameraDevice=摄像机;
createCameraPreview();
}
@凌驾
公共无效onDisconnected(@NonNull CameraDevice CameraDevice){
cameraDevice.close();
}
@凌驾
公共无效onError(@NonNull CameraDevice CameraDevice,int i){
cameraDevice.close();
cameraDevice=null;
}
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u捕获);
capture_i=getIntent();
label=capture_i.getStringExtra(SetupNewActivity.label);
getpicture\u view\u tv=(TextureView)findViewById(R.id.getpicture\u view);
//在Java1.4中,您可以使用关键字“assert”来检查表达式true或false
断言getpicture\u view\u tv!=null;
getpicture\u view\u tv.setSurfaceTextureListener(textureListener);
getpicture_b=(按钮)findviewbyd(R.id.getpicture);
getpicture_b.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
拍摄照片();
}
});
}
私人照片{
如果(cameraDevice==null)
返回;
CameraManager=(CameraManager)getSystemService(Context.CAMERA_服务);
试一试{
CameraCharacteristics characteristics=manager.getCameraCharacteristics(cameraDevice.getId());
Size[]jpegsize=null;
如果(特征!=null)
jpegSizes=characteristics.get(CameraCharacteristics.SCALER\u STREAM\u CONFIGURATION\u MAP)
.getOutputSizes(ImageFormat.JPEG);
//使用自定义大小捕获图像
整数宽度=640;
内部高度=480;
如果(jpegSizes!=null&&jpegSizes.length>0)
{
宽度=JPEG大小[0]。getWidth();
高度=JPEG大小[0]。getHeight();
}
最终ImageReader=ImageReader.newInstance(宽度、高度、ImageFormat.JPEG,1);
List outputSurface=new ArrayList(2);
add(reader.getSurface());
添加(新表面(getpicture\u view\u tv.getSurfaceTexture());
最终捕获请求。