团队作业1

一:选题 基于智能文字场景个人财务管理创新应用【合合信息】

对于这道题,我们分析有以下的难点,调用相机,调用相册,进行图片识别,文字,智能分析进行分类,类型图的绘制,等等

我们对于以上问题的解决,剩下的后端就是一些crud的操作和界面的优化

界面优化我们很看重,准备把一半的精力投入到这上面,对于一些现成的手机应用,来选择自己的认为好的,来进行制作

调用相机:

通过网上搜索,可以进行实现,但目前无法在调用电脑的摄像头,可以进行拍摄,个人认为需要和电脑的摄像头进行配置。

经过尝试后实现:

代码如下:

Activity:

private static final int TAKE_PHOTO = 1;
private ImageView picture;
private Uri imageUri;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button takePhoto = (Button) findViewById(R.id.take_photo);
picture = (ImageView) findViewById(R.id.picture);
takePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 创建File对象,用于存储拍照后的图片
// 将图片命名为output_image.jpg,并将它存放在手机SD卡的应用关联缓存目录下
// getExternalCacheDir()可以得到这个目录
File outputImage = new File(getExternalCacheDir(), "output_image.jpg");
try {
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}

// 进行一个判断
// 如果运行设备的系统版本低于Android 7.0,就调用Uri的fromFile()方法将File对象转换成Uri对象
// 这个Uri对象标识着output_image.jpg这张图片的本地真实路径
// 否则,就调用FileProvider的getUriForFile()方法将File对象转换成一个封装过的Uri对象
// getUriForFile()方法接收 3个参数,第一个参数要求传入Context对象,第二个参数可以是任意唯一的字符串,第三个参数则是我们刚刚创建的File对象
// 之所以要进行这样一层转换,是因为从Android 7.0系统开始,直接使用本地真实路径的Uri被认为是不安全的,会抛出一个FileUriExposedException 异常
// 而FileProvider则是-种特殊的内容提供器,它使用了和内容提供器类似的机制来对数据进行保护,可以选择性地将封装过的Uri共享给外部,从而提高了应用的安全性
if (Build.VERSION.SDK_INT >= 24) {
imageUri = FileProvider.getUriForFile(MainActivity.this, "com.example.Camera.fileprovider", outputImage);
} else {
imageUri = Uri.fromFile(outputImage);
}

//启用相机程序
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);
}
});
}

//报错 Overriding method should call super.onActivityResult
//不影响结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
try {
//将拍摄的照片显示出来
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
picture.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
default:
break;
}
}

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/take_photo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Take Photo"
/>
<ImageView
android:id="@+id/picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>

效果:

 

 

 

以下为参考博客:

https://blog.csdn.net/fwt1226/article/details/106942994、

https://cloud.tencent.com/developer/article/1743018#:~:text=Android%E8%B0%83%E7%94%A8%E7%B3%BB%E7%BB%9F%E7%85%A7%E7%9B%B8%E6%9C%BA%E6%8B%8D%E7%85%A7%E4%B8%8E%E6%91%84%E5%83%8F%E7%9A%84%E6%96%B9%E6%B3%95%201%201%E3%80%81%E7%B3%BB%E7%BB%9F%E7%8E%B0%E6%9C%89%E7%9B%B8%E6%9C%BA%E5%BA%94%E7%94%A8%E7%9A%84%E8%B0%83%E7%94%A8%20%E5%AF%B9%E4%BA%8E%E5%A6%82%E4%BD%95%E8%B0%83%E7%94%A8%E7%B3%BB%E7%BB%9F%E7%8E%B0%E6%9C%89%E5%BA%94%E7%94%A8%EF%BC%8C%E4%B9%8B%E5%89%8D%E5%B0%B1%E6%9C%89%E8%AE%B2%E8%A7%A3%EF%BC%8C%E8%BF%99%E9%87%8C%E7%AE%80%E5%8D%95%E5%86%8D%E8%AF%B4%E4%B8%80%E4%B8%8B%E3%80%82%20...%202%202%E3%80%81%E7%B3%BB%E7%BB%9F%E7%8E%B0%E6%9C%89%E7%9B%B8%E6%9C%BA%E6%8B%8D%E6%91%84%E7%85%A7%E7%89%87%20%E4%B8%8A%E9%9D%A2%E4%BB%8B%E7%BB%8D%E5%88%B0%EF%BC%8C%E5%BC%80%E5%90%AF%E7%B3%BB%E7%BB%9F%E7%8E%B0%E6%9C%89%E7%9B%B8%E6%9C%BA%E5%BA%94%E7%94%A8%E6%8B%8D%E6%91%84%E7%85%A7%E7%89%87%EF%BC%8C%E9%9C%80%E8%A6%81%E7%94%A8%E7%9A%84MediaStore.ACTION_IMAGE_CAPTURE%E4%BD%9C%E4%B8%BAIntent%E7%9A%84action%E5%BC%80%E5%90%AFActivity%E5%8D%B3%E5%8F%AF%E3%80%82,%E5%9C%A8%E6%96%B0%E5%BC%80%E5%90%AF%E7%9A%84Activity%E4%B8%AD%EF%BC%8C%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%E8%8E%B7%E5%8F%96%E5%AE%83%E7%9A%84%E8%BF%94%E5%9B%9E%E5%80%BC%EF%BC%8C%E5%88%99%E9%9C%80%E8%A6%81%E4%BD%BF%E7%94%A8startActivityForResult%20%28Intent%2Cint%29%E6%96%B9%E6%B3%95%E5%BC%80%E5%90%AFActivity%EF%BC%8C%E5%B9%B6%E9%87%8D%E5%86%99onActivityResult%20%28int%2Cint%2CIntent%29%E8%8E%B7%E5%8F%96%E7%B3%BB%E7%BB%9F%E7%9B%B8%E6%9C%BA%E7%9A%84%E8%BF%94%E5%9B%9E%E6%95%B0%E6%8D%AE%EF%BC%8C%E9%82%A3%E4%B9%88%E6%88%91%E4%BB%AC%E5%8F%AA%E9%9C%80%E8%A6%81%E5%9C%A8onActivityResult%20%28%29%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%88%B0%E8%BF%94%E5%9B%9E%E5%80%BC%E5%8D%B3%E5%8F%AF%E3%80%82%20...%204%204%E3%80%81%E7%B3%BB%E7%BB%9F%E7%8E%B0%E6%9C%89%E7%9B%B8%E6%9C%BA%E6%8B%8D%E6%91%84%E5%9B%BE%E7%89%87Demo%20

https://www.imooc.com/learn/543

调用图册:

代码实现:

Activity:

private Button btn_2;
private ImageView iv_image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
btn_2 = findViewById(R.id.btn_2);
iv_image = findViewById(R.id.iv_image);
btn_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, 2);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2) {
// 从相册返回的数据
Log.e(this.getClass().getName(), "Result:" + data.toString());
if (data != null) {
// 得到图片的全路径
Uri uri = data.getData();
iv_image.setImageURI(uri);
Log.e(this.getClass().getName(), "Uri:" + String.valueOf(uri));
}
}
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>

<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动"
android:layout_gravity="center"
android:textColor="@color/white"
/>
<ImageView
android:id="@+id/iv_image"
android:layout_width="match_parent"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"
/>
</LinearLayout>
效果展示:

 

 


参考博客:
https://blog.csdn.net/m0_61865312/article/details/124622259
总结:
以上为摄像头的简单实现,下一步对界面进行优化,将基本功能实现后植入图片识别功能

 

posted @   无敌三人组  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示