You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下如何将model.tflite转换为model.cc与model.h?

解决Windows下TensorFlow Lite for Microcontrollers模型转C源文件的问题

问题原因分析

  • Windows版xxd默认行为和Unix版存在差异:不会自动生成头文件,且变量命名、类型修饰符不符合TFLM示例要求
  • 示例中的alignas(8)是内存对齐要求,用于提升TFLM运行效率;const修饰符标记模型数据不可修改,帮助编译器做优化;int类型长度足够存储模型大小(你的4MB模型远小于32位int的最大值)

方案一:用Windows版xxd手动调整生成代码

步骤1:生成基础C数组文件

运行命令:

xxd -i -n g_model model.tflite > model.cc
  • -n g_model 指定变量名为g_model,避免xxd自动生成带下划线的变量名

步骤2:修改model.cc内容

打开生成的model.cc,做以下调整:

  1. 在数组定义前添加alignas(8)和const,把:
    unsigned char g_model[] = {
    
    改成:
    alignas(8) const unsigned char g_model[] = {
    
    (若用uint8_t替代unsigned char,需在文件开头添加#include <cstdint>)
  2. 修改长度变量的类型和修饰符,把:
    unsigned int g_model_len = 4009981;
    
    改成:
    const int g_model_len = 4009981;
    

步骤3:手动创建model.h

新建model.h文件,写入以下内容:

#ifndef MODEL_H_
#define MODEL_H_

#include <cstdint>

extern const alignas(8) uint8_t g_model[];
extern const int g_model_len;

#endif // MODEL_H_

方案二:用Python脚本一键生成(推荐Windows用户)

直接运行以下Python脚本,可自动生成符合要求的model.cc和model.h,无需手动修改:

import os

def tflite_to_c_array(input_path, output_cc, output_h):
    with open(input_path, 'rb') as f:
        model_data = f.read()
    
    # 生成model.cc
    with open(output_cc, 'w', encoding='utf-8') as cc_file:
        cc_file.write('#include "model.h"\n\n')
        cc_file.write('alignas(8) const uint8_t g_model[] = {\n')
        
        # 按每行12个字节格式化输出
        for idx, byte in enumerate(model_data):
            if idx % 12 == 0:
                cc_file.write('  ')
            cc_file.write(f'0x{byte:02x}, ')
            if (idx + 1) % 12 == 0:
                cc_file.write('\n')
        
        cc_file.write('\n};\n\n')
        cc_file.write(f'const int g_model_len = {len(model_data)};\n')
    
    # 生成model.h
    with open(output_h, 'w', encoding='utf-8') as h_file:
        h_file.write('#ifndef MODEL_H_\n')
        h_file.write('#define MODEL_H_\n\n')
        h_file.write('#include <cstdint>\n\n')
        h_file.write('extern const alignas(8) uint8_t g_model[];\n')
        h_file.write('extern const int g_model_len;\n\n')
        h_file.write('#endif // MODEL_H_\n')

if __name__ == '__main__':
    # 替换为你的.tflite模型路径
    tflite_to_c_array('model.tflite', 'model.cc', 'model.h')

使用方法:

  1. 把脚本保存为convert_model.py
  2. 确保你的Python环境已安装(Windows 10自带或官网下载)
  3. 打开命令提示符,切换到脚本和模型所在目录,运行:
    python convert_model.py
    

验证生成结果

生成的文件应符合以下要求:

  • model.cc中数组带alignas(8)和const修饰,长度变量为const int类型
  • model.h包含数组和长度的外部声明,并有头文件保护宏

内容的提问来源于stack exchange,提问作者leone.kutch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:27:20