本周团队工作:本周团队进入到了拓展功能与核心功能的开发,工作量较大,我们完成了相机集成功能、OCR识别功能、文本提取功能、模型自动下载与嵌入翻译功能、基于 DeepSeek-R1 的流式对话生成、故事生成、Stable Diffusion端服务器搭建与可视化故事板层功能等。

一、相机集成

1.我们使用了Jetpack的CameraX库,它提供了一致且易于使用的 API 接口,同时解决了不同设备间的兼容性问题。它提供了相机的preview预览,并与fragment生命周期进行绑定,避免资源泄漏,支持人像模式与夜间模式,而且可以通过ImageCapture 拍摄高分辨率照片。

照相机使用权限与特性配置如下:

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />

2.Toast轻量反馈机制的使用:在Android开发中,"Toast"是一种轻量级的用户反馈机制,用于向用户显示一个浮动的提示信息。它通常用于提供操作成功、警告或错误信息等短暂的通知。Toast消息会显示在屏幕的中间,并且会在几秒钟后自动消失。 

二、OCR识别

1.此功能我们团队是通过Google提供的ML Kit实现的。ML Kit的Text Recognition可以实现OCR技术,从图像中检测和识别文本内容。

创建识别器实例:

val options = TranslatorOptions.Builder()
                        .setSourceLanguage(com.google.mlkit.nl.translate.TranslateLanguage.ENGLISH)
                        .setTargetLanguage(com.google.mlkit.nl.translate.TranslateLanguage.CHINESE)
                        .build()
                    val translator = Translation.getClient(options)

处理图像并识别文本:

recognizer.process(image)
            .addOnSuccessListener { visionText ->
                val detectedText = visionText.text
                onDetectedText(detectedText)
                
                val options = TranslatorOptions.Builder()
                    .setSourceLanguage(com.google.mlkit.nl.translate.TranslateLanguage.ENGLISH)
                    .setTargetLanguage(com.google.mlkit.nl.translate.TranslateLanguage.CHINESE)
                    .build()
                val translator = Translation.getClient(options)

实现效果:
 

三、模型自动下载与嵌入翻译功能

 1.翻译模型下载的是Google 提供的神经网络机器翻译模型(NMT模型),这是一种基于 Transformer 架构的神经网络模型,支持55种语言之间的互译,并且经过了8bits量化处理,减小了模型的参数量,可以用于移动设备。当首次下载应用或模型版本有所更新时,此代码会自动下载最新版本的模型到内存中使用。在我们的app中,我们限定了只允许中英文切换,当应用卸载时会自动清除模型。技术实现细节可见VocabVerse图像识别、文字提取与翻译功能实现---第八周-CSDN博客

最终实现效果如下:

四、Deepseek-R1 API的调用与流式对话生成

1.api接口调试

输出结果为:

我们可以发现,输出的结果中,只有message字段里的content字段的内容是我们需要的,而且包含了思考和最终答案,正是我们需要的。

2.流式响应与trySend():引入流式响应(Streaming),用了 OkHttp + EventSource 实现对 AI 模型的 SSE 监听,这本质上就是模拟 OpenAI 的 Chat Completion Streaming。

val request = Request.Builder()
    .url(apiUrl)
    .header("Authorization", "Bearer $apiKey")
    .post(body)
    .build()

val eventSource = EventSources.createFactory(client)
    .newEventSource(request, object : EventSourceListener() {
        override fun onEvent(...) {
            // 解析 delta 内容,一片一片接收
        }
    })

trySend(content) 是 callbackFlow 提供的一个函数,用于 将数据发送到 Flow 的下游(比如 ViewModel 或 UI)。

3.集成到故事生成功能当中:

具体技术细节详见VocabVerse背单词应用的AI板块开发-CSDN博客

五、StableDiffusion端服务器搭建

1.下图是我们项目中客户端与StableDiffusion服务器的交互:

2.服务器整体架构如下:

 

六、客户端prompt封装与发送

1.运行流程图如下所示:

2.界面实现:

具体技术细节详见山东大学创新项目实训(5)SD端服务器搭建与可视化故事板层核心功能实现-CSDN博客

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐