作者链接哇是林啊 1

标签:#harmonyos #flutter #鸿蒙 AI 引擎 #智能应用 #AI 集成

鸿蒙系统内置强大的 AI 引擎,提供图像识别、语音交互、自然语言处理等原生 AI 能力,将其与 Flutter 的跨端优势结合,可快速开发出适配多设备的智能应用。本文详细讲解 Flutter 集成鸿蒙 AI 引擎的完整流程,实现图像识别、语音转文字、智能推荐三大核心功能,附带完整代码案例,助力开发者抢占鸿蒙 AI 生态赛道。

一、鸿蒙 AI 引擎基础配置

1.1 环境与依赖准备

  • 鸿蒙环境:DevEco Studio 4.1+,鸿蒙 6.0 SDK(需勾选 AI 引擎组件);
  • Flutter 环境:Flutter 3.16+;
  • 依赖插件:harmony_ai_engine: ^1.0.0(鸿蒙 AI 引擎 Flutter 封装插件)。

flutter_module/pubspec.yaml中添加依赖:

yaml

dependencies:
  flutter:
    sdk: flutter
  harmony_ai_engine: ^1.0.0
  image_picker: ^1.0.7 # 图片选择插件,配合图像识别
  audio_recorder2: ^2.0.0 # 录音插件,配合语音识别

1.2 鸿蒙 AI 权限配置

修改entry/src/main/module.json5,添加 AI 能力所需权限:

json

{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.CAMERA",
        "reason": "图像识别需要相机权限",
        "usedScene": {"ability": ["com.example.harmony_flutter.MainAbility"], "when": "always"}
      },
      {
        "name": "ohos.permission.MICROPHONE",
        "reason": "语音识别需要麦克风权限",
        "usedScene": {"ability": ["com.example.harmony_flutter.MainAbility"], "when": "always"}
      },
      {
        "name": "ohos.permission.READ_MEDIA",
        "reason": "读取本地图片用于识别",
        "usedScene": {"ability": ["com.example.harmony_flutter.MainAbility"], "when": "always"}
      }
    ]
  }
}

二、核心 AI 功能实现(Flutter + 鸿蒙原生)

2.1 图像识别:物体检测与分类

借助鸿蒙 AI 引擎的图像识别能力,实现拍摄或选择图片后,识别物体类别和置信度。以下是Flutter 端图像识别核心代码

dart

// flutter_module/lib/core/ai/image_recognition.dart
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:harmony_ai_engine/harmony_ai_engine.dart';

class ImageRecognitionManager {
  final HarmonyAIEngine _aiEngine = HarmonyAIEngine.instance;

  // 初始化图像识别引擎
  Future<void> initImageRecognizer() async {
    await _aiEngine.initImageEngine();
  }

  // 从相册选择图片识别
  Future<List<RecognitionResult>?> recognizeImageFromGallery() async {
    final picker = ImagePicker();
    final XFile? file = await picker.pickImage(source: ImageSource.gallery);
    if (file == null) return null;
    return await _aiEngine.recognizeImage(file.path);
  }

  // 相机拍摄图片识别
  Future<List<RecognitionResult>?> recognizeImageFromCamera() async {
    final picker = ImagePicker();
    final XFile? file = await picker.pickImage(source: ImageSource.camera);
    if (file == null) return null;
    return await _aiEngine.recognizeImage(file.path);
  }
}

// 识别结果模型
class RecognitionResult {
  final String label; // 物体标签
  final double confidence; // 置信度

  RecognitionResult({required this.label, required this.confidence});
}

对应的鸿蒙原生端图像识别引擎初始化代码

java

运行

// entry/src/main/java/com/example/harmony_flutter/ai/ImageRecognitionEngine.java
import ohos.ai.cv.common.ConnectionCallback;
import ohos.ai.cv.objectdetect.ObjectDetect;
import ohos.ai.cv.objectdetect.ObjectDetectConfig;
import ohos.ai.engine.AIEngine;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;

public class ImageRecognitionEngine {
    private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00130, "ImageRecognition");
    private ObjectDetect objectDetect;

    // 初始化图像识别引擎
    public void init() {
        AIEngine.getInstance().init(new ConnectionCallback() {
            @Override
            public void onServiceConnect() {
                HiLog.info(LABEL, "AI引擎连接成功");
                objectDetect = ObjectDetect.getInstance();
                ObjectDetectConfig config = new ObjectDetectConfig.Builder().build();
                objectDetect.setConfig(config);
            }

            @Override
            public void onServiceDisconnect() {
                HiLog.error(LABEL, "AI引擎连接失败");
            }
        });
    }

    // 图像识别核心方法
    public List<Map<String, Object>> recognize(String imagePath) {
        // 调用鸿蒙AI引擎识别图像
        List<ohos.ai.cv.objectdetect.RecognitionResult> nativeResults = objectDetect.detect(imagePath);
        List<Map<String, Object>> results = new ArrayList<>();
        for (var result : nativeResults) {
            Map<String, Object> map = new HashMap<>();
            map.put("label", result.getLabel());
            map.put("confidence", result.getConfidence());
            results.add(map);
        }
        return results;
    }
}

2.2 语音转文字:实时语音识别

集成鸿蒙 AI 引擎的语音识别能力,实现实时录音并转换为文字,适用于智能助手、语音输入等场景。Flutter 端语音识别代码如下:

dart

// flutter_module/lib/core/ai/speech_recognition.dart
import 'package:harmony_ai_engine/harmony_ai_engine.dart';
import 'package:audio_recorder2/audio_recorder2.dart';
import 'dart:io';

class SpeechRecognitionManager {
  final HarmonyAIEngine _aiEngine = HarmonyAIEngine.instance;
  bool _isRecording = false;
  String? _recordPath;

  bool get isRecording => _isRecording;

  // 初始化语音识别引擎
  Future<void> initSpeechRecognizer() async {
    await _aiEngine.initSpeechEngine();
  }

  // 开始录音
  Future<void> startRecord() async {
    final directory = Directory.systemTemp;
    _recordPath = '${directory.path}/speech_record.wav';
    await AudioRecorder2.start(path: _recordPath!);
    _isRecording = true;
  }

  // 停止录音并识别
  Future<String?> stopAndRecognize() async {
    await AudioRecorder2.stop();
    _isRecording = false;
    if (_recordPath == null) return null;
    return await _aiEngine.recognizeSpeech(_recordPath!);
  }
}

2.3 智能推荐:基于用户行为的个性化推荐

结合鸿蒙 AI 引擎的用户画像分析能力,实现基于用户行为的内容推荐。以下是推荐功能核心代码

dart

// flutter_module/lib/core/ai/recommendation_engine.dart
import 'package:harmony_ai_engine/harmony_ai_engine.dart';

class RecommendationEngine {
  final HarmonyAIEngine _aiEngine = HarmonyAIEngine.instance;

  // 上报用户行为(浏览、点击、收藏)
  Future<void> reportUserBehavior(String contentId, String behaviorType) async {
    await _aiEngine.reportBehavior({
      'contentId': contentId,
      'behaviorType': behaviorType,
      'timestamp': DateTime.now().millisecondsSinceEpoch,
    });
  }

  // 获取个性化推荐内容
  Future<List<String>?> getRecommendations() async {
    return await _aiEngine.getRecommendations();
  }
}

三、AI 功能集成 UI 页面

创建flutter_module/lib/pages/ai_home_page.dart,整合三大 AI 功能,提供直观的交互界面:

dart

// flutter_module/lib/pages/ai_home_page.dart
import 'package:flutter/material.dart';
import '../core/ai/image_recognition.dart';
import '../core/ai/speech_recognition.dart';
import '../core/ai/recommendation_engine.dart';

class AIHomePage extends StatefulWidget {
  const AIHomePage({super.key});

  @override
  State<AIHomePage> createState() => _AIHomePageState();
}

class _AIHomePageState extends State<AIHomePage> {
  final ImageRecognitionManager _imageManager = ImageRecognitionManager();
  final SpeechRecognitionManager _speechManager = SpeechRecognitionManager();
  final RecommendationEngine _recommendEngine = RecommendationEngine();

  String _recognitionResult = "";
  String _speechText = "";
  List<String> _recommendations = [];

  @override
  void initState() {
    super.initState();
    _initAIEngines();
  }

  Future<void> _initAIEngines() async {
    await _imageManager.initImageRecognizer();
    await _speechManager.initSpeechRecognizer();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('鸿蒙AI+Flutter智能应用')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            // 图像识别按钮
            ElevatedButton(
              onPressed: _recognizeFromGallery,
              child: const Text('相册选图识别'),
            ),
            ElevatedButton(
              onPressed: _recognizeFromCamera,
              child: const Text('相机拍摄识别'),
            ),
            Text('识别结果:$_recognitionResult'),
            const Divider(),
            // 语音识别按钮
            ElevatedButton(
              onPressed: _speechManager.isRecording ? _stopSpeech : _startSpeech,
              child: Text(_speechManager.isRecording ? '停止录音' : '开始录音'),
            ),
            Text('语音转文字:$_speechText'),
            const Divider(),
            // 智能推荐
            ElevatedButton(
              onPressed: _getRecommendations,
              child: const Text('获取个性化推荐'),
            ),
            Expanded(
              child: ListView.builder(
                itemCount: _recommendations.length,
                itemBuilder: (context, index) => ListTile(title: Text(_recommendations[index])),
              ),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _recognizeFromGallery() async {
    final results = await _imageManager.recognizeImageFromGallery();
    if (results != null) {
      setState(() {
        _recognitionResult = results.map((e) => '${e.label}(${e.confidence.toStringAsFixed(2)})').join(', ');
      });
    }
  }

  Future<void> _recognizeFromCamera() async {
    final results = await _imageManager.recognizeImageFromCamera();
    if (results != null) {
      setState(() {
        _recognitionResult = results.map((e) => '${e.label}(${e.confidence.toStringAsFixed(2)})').join(', ');
      });
    }
  }

  Future<void> _startSpeech() async {
    await _speechManager.startRecord();
    setState(() {});
  }

  Future<void> _stopSpeech() async {
    final text = await _speechManager.stopAndRecognize();
    setState(() {
      _speechText = text ?? '识别失败';
    });
  }

  Future<void> _getRecommendations() async {
    final list = await _recommendEngine.getRecommendations();
    setState(() {
      _recommendations = list ?? [];
    });
  }
}

四、功能测试与优化

4.1 测试场景

  1. 图像识别:测试不同光线、不同物体的识别准确率,鸿蒙 AI 引擎对常见物体的识别准确率可达 95% 以上;
  2. 语音识别:测试安静、嘈杂环境下的识别效果,支持普通话、英文等多语言识别;
  3. 智能推荐:模拟用户浏览、点击行为,验证推荐内容的个性化程度。

4.2 优化建议

  1. 图像识别:对模糊图片进行预处理(锐化、降噪),提升识别准确率;
  2. 语音识别:添加语音端点检测,避免录制无效音频;
  3. 推荐功能:定期更新用户行为数据,优化推荐算法模型。
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐