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,做以下调整:
- 在数组定义前添加
alignas(8)和const,把:
改成:unsigned char g_model[] = {
(若用alignas(8) const unsigned char g_model[] = {uint8_t替代unsigned char,需在文件开头添加#include <cstdint>) - 修改长度变量的类型和修饰符,把:
改成: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')
使用方法:
- 把脚本保存为
convert_model.py - 确保你的Python环境已安装(Windows 10自带或官网下载)
- 打开命令提示符,切换到脚本和模型所在目录,运行:
python convert_model.py
验证生成结果
生成的文件应符合以下要求:
model.cc中数组带alignas(8)和const修饰,长度变量为const int类型model.h包含数组和长度的外部声明,并有头文件保护宏
内容的提问来源于stack exchange,提问作者leone.kutch
相关产品推荐
相关产品推荐

