Android结合CameraX与MLKit检测身份证时如何获取方向正确的输入Bitmap?
基于MLKit的身份证检测项目Bitmap方向适配问题
项目最终目标
- 从原始输入图像中裁剪出仅包含身份证的有效区域,完成后续识别流程
现存核心问题
- 通过给定图片文件URI创建输入Bitmap时,生成的Bitmap始终存在方向错误
- 两种主流Bitmap生成方式均存在90度或270度的方向偏移:
- 调用
MediaStore.Images.Media.getBitmap(requireContext().contentResolver, inputUri)接口从URI解码生成Bitmap - 调用
BitmapFactory.decodeFile(photoFile.path)接口从本地文件路径解码生成Bitmap
- 调用
- 自行生成的Bitmap方向与MLKit处理的图像方向不匹配,直接使用MLKit返回的检测坐标裁剪Bitmap时,会选取错误的图像区域
已完成的排查结论
- 本地存储的输入文件本身方向为0度(正向无偏移),通过
ExifInterface查询、MediaStore解析获取的图片方向元信息均为0度 - MLKit直接读取输入URI处理时方向逻辑完全正确,返回的
detectedObject.boundingBox检测坐标与MLKit内部处理的图像方向严格匹配,坐标值准确 - 输入图片URI来自CameraX拍照回调,拍摄生成的.jpg文件存储在应用外部存储自定义的photoFile路径下,已确认CameraX输出的原图本身方向完整正确
预期实现方案
- 封装
getBitmapWithCorrectOrientation(inputUri)方法,获取方向完全正确的输入Bitmap - 调用
InputImage.fromFilePath(contentResolver, inputUri)生成MLKit可处理的输入图像 - 将MLKit检测返回的boundingBox坐标直接作用于方向正确的输入Bitmap上,裁剪得到准确的身份证区域
内容的提问来源于stack exchange,提问作者Qazi Fahim Farhan
相关产品推荐
相关产品推荐

