构建适合大众的数字助手(第二部分)
内容提要
本文介绍了viewfAInder项目的第二个增量版本,使用camerax获取预览图像并使用Gemini提供描述。作者改进了用户体验,修复了图像旋转问题,并介绍了绘制形状和与Gemini通信的方法。下一步将进一步改进用户界面并将应用程序安装为Android助手。
延伸解读
图像旋转问题的修复与验证
文章指出,camerax 获取的分析图像可能未正确旋转,但 Gemini 仍能描述内容。作者通过将设备旋转角度传递给 targetRotation,并利用 matrix.postRotate 旋转位图来修复。为了验证,作者在界面中添加了分析图像的预览,方便开发者确认方向是否一致。这提醒我们,在集成相机与 AI 时,方向对齐是常见陷阱,需要显式处理。
绘制形状与坐标缩放
为了实现类似“圈选搜索”的功能,文章使用 Canvas 和 pointerInput 捕获用户绘制的路径。由于分析位图与预览视图的尺寸可能不同,需要根据两者宽高比缩放坐标点,再将路径绘制到位图上。这一步骤确保了用户绘制的区域能准确对应到发送给 Gemini 的图像部分,避免因缩放导致分析偏差。
与 Gemini 的交互方式
askGemini() 函数将位图和提示词发送给 Gemini。提示词要求描述红色线条圈出的区域,并尽可能添加相关网页链接。这种设计让用户能聚焦于特定区域,获得更精准的描述。文章展示了如何通过 generateContent 传递图像和文本,并处理加载、成功和错误状态,为类似应用提供了可复用的模式。
Q&A
viewfAInder项目的第二个增量版本有哪些主要改进?
该版本改进了用户体验,修复了图像旋转问题,并增加了用户绘制形状的功能。
如何使用camerax获取连续预览图像?
使用camerax的Preview和ImageAnalysis类,可以获取连续的预览图像并进行分析。
用户如何在应用中绘制形状?
用户可以在屏幕上绘制形状,完成后应用程序会将图像发送给Gemini进行分析。
askGemini()函数的作用是什么?
askGemini()函数用于将图像和提示发送给Gemini进行内容生成。
下一步的开发计划是什么?
下一步将进一步改进用户界面,并将应用程序安装为Android助手。
如何解决图像旋转问题?
通过将设备的旋转信息传递给setupCamera()函数,确保图像分析时的方向与设备一致。