【每日学点鸿蒙知识】tensorflowlite编译、音频编码线程、沉浸式状态栏、TextArea最大字节数限制等

1、如何编译Tensorflow lite库?

之前项目基于tflite推理引擎做人脸识别的功能,鸿蒙侧如何复用tflite模型?

tflite对Android和iOS本身支配了GPU支持,但是鸿蒙侧目前并没有,鸿蒙提供了自己的推理引擎,而且支持将tflite模型转换为鸿蒙推理引擎模型,建议使用鸿蒙官方方案。

2、音频编码需要单独设置线程吗?

编码可以不另外起线程,系统的编解码会起线程。写文件是应用自己根据自身需求另外起线程处理。

3、创建音频编码器配置参数报错

复制代码
// 通过 codecname 创建编码器
OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_AUDIO_MPEG, true);
const char *name = OH_AVCapability_GetName(capability);
audioEnc_ = OH_AudioCodec_CreateByName(name);

 // 配置最大输入长度, 每帧音频数据的大小(可选)
    uint32_t DEFAULT_MAX_INPUT_SIZE = inSamplerate * TIME_PER_FRAME * inChannel * sizeof(short); // aac
    OH_AVFormat *format = OH_AVFormat_Create();
    // 写入format
    OH_AVFormat_SetIntValue(format,OH_MD_KEY_AUD_CHANNEL_COUNT, inChannel);
    OH_AVFormat_SetIntValue(format,OH_MD_KEY_AUD_SAMPLE_RATE, inSamplerate);
    OH_AVFormat_SetLongValue(format,OH_MD_KEY_BITRATE, outBitrate);
    OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, SAMPLE_FORMAT);
    OH_AVFormat_SetLongValue(format,OH_MD_KEY_CHANNEL_LAYOUT, CHANNEL_LAYOUT);
//     OH_AVFormat_SetIntValue(format,OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
    // 配置编码器
    ret = OH_AudioCodec_Configure(audioEnc_, format);
    if (ret != AV_ERR_OK) {
        printLog("configure failed");
    }

传入参数:采样率48000, 声道数2, 码率128,ret返回为3:

复制代码
/**  
 * @error invalid argument. */
AV_ERR_INVALID_VAL = 3,

输出码率设置太低,改成128000。

4、如何设置沉浸式状态栏?

在UIAbility onWindowStageCreate方法中设置沉浸式状态栏:

复制代码
async function enterImmersion(windowClass: window.Window) {  
  // 设置窗口布局为沉浸式布局  
  await windowClass.setWindowLayoutFullScreen(true)  
}

async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {  
  await enterImmersion(windowClass)  
}

5、如何设置TextArea最大允许输入字节数?

可以在onChange回调中,自行计算当前输入的字节长度(参考示例如下),再与服务端的最大字节长度做对比,若超出则禁止输入:

复制代码
export function CalUtf8BytesLen(str: string): number {  
  let length = 0;  
  for (const char of str) {  
    let code = char.charCodeAt(0);  
    if (code <= 0x7f) {  
      length += 1; // 0xxxxxxx  
    } else if (code <= 0x7ff) {  
      length += 2; // 110xxxxx 10xxxxxx  
    } else if (code >= 0xd800 && code <= 0xdfff) {  
      // surrogate pair  
      if (char.length === 2) {  
        code = (char.charCodeAt(0) - 0xd800) * 0x400 + char.charCodeAt(1) - 0xdc00 + 0x10000;  
        length += 4; // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  
      } else {  
        throw new Error('Invalid surrogate pair');  
      }  
    } else {  
      length += 3; // 1110xxxx 10xxxxxx 10xxxxxx  
    }  
  }  return length;  
}
相关推荐
愚公搬代码36 分钟前
【愚公系列】《剪映+DeepSeek+即梦:短视频制作》033-调色:废片秒变氛围感大片(HSL的精准调节)
音视频
王码码20351 小时前
Flutter 组件 inappwebview_cookie_manager 适配 鸿蒙Harmony 实战 - 驾驭核心大 Web 容器缓存隧道、构建金融级政企应用绝对防串号跨域大隔离基座
flutter·harmonyos·鸿蒙·openharmony·inappwebview_cookie_manager
左手厨刀右手茼蒿1 小时前
Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案
flutter·harmonyos·鸿蒙·openharmony
键盘鼓手苏苏1 小时前
Flutter 组件 spry 适配鸿蒙 HarmonyOS 实战:轻量化 Web 框架,构建高性能端侧微服务与 Middleware 治理架构
flutter·harmonyos·鸿蒙·openharmony
攻城狮在此3 小时前
华为汇聚交换机DHCP中继配置
网络·华为
互联网散修3 小时前
鸿蒙应用开发:图片渐进式加载Canvas渲染案例分享
harmonyos·渐进式加载图片
Swift社区5 小时前
鸿蒙游戏里的 AI Agent 设计
人工智能·游戏·harmonyos
亚历克斯神5 小时前
Flutter 组件 t_stats 的适配 鸿蒙Harmony 实战 - 驾驭高性能统计学运算、实现鸿蒙端海量数据实时态势感知与工业级描述性统计方案
flutter·harmonyos·鸿蒙·openharmony·t_stats
键盘鼓手苏苏5 小时前
Flutter 组件 angel3_orm_mysql 的适配 鸿蒙Harmony 实战 - 驾驭专业 ORM 映射引擎、实现鸿蒙端与 MySQL 数据库的透明映射与高性能 SQL 审计方案
flutter·harmonyos·鸿蒙·openharmony·angel3_orm_mysql
左手厨刀右手茼蒿5 小时前
Flutter 组件 serverpod_swagger 的适配 鸿蒙Harmony 实战 - 驾驭 API 文档自动化、实现鸿蒙端全栈联调与 Swagger UI 动态审计方案
flutter·harmonyos·鸿蒙·openharmony·serverpod_swagger