【嵌入式AI挑战营】03GCC交叉编译环境安装
[复制链接]
交叉编译环境GCC安装和程序编译
一、SDK下载安装
困扰我时间挺长的一个SKD开发环境安装,Buildroot 系统的交叉编译工具链可在 SDK 中获取。然后下载这个工具链内容,尝试按照教程安装,但发现它这个链接下的内容应该不是工具链,之后进行了漫长的工具链查找阶段。但是教程是对的。。
但安装后发现是自己忽略了什么,因为在入门指南和资料下载内有相关的链接。再次按照安装教程进行程序安装。
下载SDK的地址如图所示:
- 交叉编译器安装后测试
以程序 hello.c 为例,编译出对应的可执行文件,文件执行效果是在终端上打印 hello world 。hello.c 代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("hello world\n");
return 0;
}
编译成功。
- ONNX转换到RKNN模型
转换代码convert.py
import sys
from rknn.api import RKNN
DATASET_PATH = '../model/dataset.txt'
DEFAULT_RKNN_PATH = '../model/facenet.rknn'
DEFAULT_QUANT = True
def parse_arg():
if len(sys.argv) < 3:
print("Usage: python3 {} onnx_model_path [platform] [dtype(optional)] [output_rknn_path(optional)]".format(sys.argv[0]));
print(" platform choose from [rk3562, rk3566, rk3568, rk3576, rk3588, rk1808, rv1109, rv1126]")
print(" dtype choose from [i8] for [rk3562, rk3566, rk3568, rk3576, rk3588]")
print(" dtype choose from [u8] for [rk1808, rv1109, rv1126]")
exit(1)
model_path = sys.argv[1]
platform = sys.argv[2]
do_quant = DEFAULT_QUANT
if len(sys.argv) > 3:
model_type = sys.argv[3]
if model_type not in ['i8', 'u8', 'fp']:
print("ERROR: Invalid model type: {}".format(model_type))
exit(1)
elif model_type in ['i8', 'u8']:
do_quant = True
else:
do_quant = False
if len(sys.argv) > 4:
output_path = sys.argv[4]
else:
output_path = DEFAULT_RKNN_PATH
return model_path, platform, do_quant, output_path
if __name__ == '__main__':
model_path, platform, do_quant, output_path = parse_arg()
# Create RKNN object
rknn = RKNN(verbose=False)
# Pre-process config
print('--> Config model')
rknn.config(mean_values=[[104, 117, 123]], std_values=[[1, 1, 1]], target_platform=platform)
print('done')
# Load model
print('--> Loading model')
ret = rknn.load_onnx(model=model_path)
if ret != 0:
print('Load model failed!')
exit(ret)
print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=do_quant, dataset=DATASET_PATH)
if ret != 0:
print('Build model failed!')
exit(ret)
print('done')
# Export rknn model
print('--> Export rknn model')
ret = rknn.export_rknn(output_path)
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
# Release
rknn.release()
这个代码针对不同的程序需要进行改动,才可以进行使用。
-
|