本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站。作者:Wordiansom
Win11上并且安装在其他盘的时候会出现的问题坑。。。。。。(能用win10就用win10)。
开发环境:Windows11 21H2
通过下面连接下载CSK6 SDK,
https://castor.iflyos.cn/castor/v3/lisaPluginZephyr/download?platform=windows
选择安装在其他盘(我安装在了D盘)
一直等待安装结束。
使用诊断命令lisa zep doctor之后出现问题
即使pip更新之后依旧是旧版本的pip,这仍然会导致安装环境出现警告,需要更新pip使用新版本的,这个警告就不会出现了,但是会出现依旧使用旧版本的问题,需要卸载原有的版本,然后后安装匹配的版本,就不会出现这样的警告了。
由于操作环境是win11各种问题还有兼容性,处理这些也费劲(能用win10就win10吧。。。。。。)
在Git安装目录下找到git.exe,赋予兼容性运行。
更新之后就需要更新.gitconfig文件
手工编辑.gitconfig文件(一般在c:\Users\你的windows用户名\),在[safe]节点下加入:
directory = D:/SoftWare/LISTENAI/LISA/csk-sdk/zephyr
注意这个directory会在诊断中出现问题所在上图中已经标出来了。需要将他直接加在这个directory中。
然后再lisa info zep出现下面的说明安装成功了
在HelloWorld最简项目的基础上实现LED灯的控制操作,(一定是要在跑通helloworld的项目之后,会生成对应的文件,否则会出现很多文件不会有,后面无法添加。若没有可查看一下文档,其实就是在基础文件编译的条件下进行修改。文档连接:
https://docs.listenai.com/chips/600X/application/getting_start
)需要新建一个 HelloWorld 项目,创建项目指令:lisa zep create
选中helloworld之后会出现修改项目名称,(可修改成LED) ,确认之后
LED灯控制的应用需要通过GPIO来控制,故需要在项目配置文件 应用根目录/prj.conf 文件中添加GPIO配置,将下面的复制进去即可。
# 打开GPIO配置
CONFIG_GPIO=y
应用项目下的C文件通过CMakeLists.txt配置进行编译,如下所示:
target_sources(app PRIVATE src/main.c)
这部分其实在对应文件已经生成。
在app/boards/目录下增加csk6011a_nano.overlay设备树配置文件并添加led的GPIO配置,具体内容如下:(这是原文中的,你会发现找不到app文件夹,app就是你自己使用的工程目录,而且需要自己建立app/boards目录,再添加csk6011a_nano.overlay文件在该目录下,这里原文中没有说清楚。。。。)
/ /根节点/
/*定义别名为led0的gpio设备树*/
{
aliases {
led0 = &board_led_0_label;/* led0别名映射到led0设备树node label */
};
{
leds {
compatible = "gpio-leds";/* 设置led设备树的ymal绑定文件 */
board_led_0_label: board_led_0_nodeid { /* node label和node id,皆可自定义命名 */
gpios = <&gpiob 6 GPIO_ACTIVE_LOW>; /* GPIO逻辑电平模式设置 */
label = "User LED1"; /* 节点的 label 属性,通过传入device_get_binding()接口可以获取gpio设备实例 */
};
};
#include
#include
/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS 1000
/* 通过别名获取 "led0" 设备树 node id */
#define LED0_NODE DT_ALIAS(led0)
/* 通过 node id 获取 led0 设备树信息 */
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
void main(void)
{
printk("Hello World! %s\n", CONFIG_BOARD);
int ret;
/* 检查硬件设备是否就绪 */
if (!device_is_ready(led.port)) {
return;
}
/* 将GPIO配置为输出并将其初始化为逻辑电平1 */
ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
if (ret < 0) {
return;
}
while (1) {
/* GPIO电平反转控制 */
ret = gpio_pin_toggle_dt(&led);
if (ret < 0) {
return;
}
k_msleep(SLEEP_TIME_MS);
}
}
在helloworld根目录下通过以下指令完成编译:
lisa zep build -b csk6011a_nano
-b 后的参数为开发板对应的板型,本章节使用的开发板对应的板型为:csk6011a_nano 。
将开发板的DAPLink USB通过USB数据线连接PC,通过烧录指令烧录:
lisa zep flash --runner pyoc
效果(闪图)如下:
可以开始新的卡bug之路了。
获取并初始化Sample与SDK执行以下命令后,将拉取 Sample 项目 和SDK到本地并自动完成初始化,注意代码仓在本地存放的路径不能有中文名称,否则容易引起错误;
lisa zep create --from-git https://cloud.listenai.com/zephyr/applications/app_algo_hsd_sample_for_csk6.git
时间有点长,慢慢等待。
打开PC端图像预览功能
打开项目的根目录下找到的prj.conf文件,将CONFIG_WEBUSB=n改为CONFIG_WEBUSB=y 。
lisa zep build -b csk6011a_nano
若需抛弃已有编译产物,进行全量编译(Rebuild这个在所有项目里面都可以使用到)
lisa zep flash
前面完成了应用程序烧录,接下来将算法运行所需的资源进行烧录,可以在app_algo_hsd_sample_for_csk6/resource/res.overlay 文件中看到这些资源所占用的分区。
使用 USB 线接上 DAPLink USB 口进行烧录,依次执行以下命令,完成资源的烧录。
Windows下
lisa zep exec cskburn -s \\.\COMx -C 6 0x500000 .\resource\res.bin -b 748800
其中的 COMx 代表开发套件连接到 PC 上对应的串口号。例如:COM7
烧录之后会出现下面的问题:
无论怎么使用烧录都是这样的,需要另外一根USB先连接,文中根本没有提到,如果一根线可能出现供电不足,出现烧录失败,反复尝试依旧失败。再多加入一根线之后,烧录就成功了。
连接开发板的 DAPLink USB ,使用串口调试工具打开 COM 口(波特率为 115200 ),使用开发板上的 reset 按键进行复位后,即可看到日志输出。(瞎看结束之后一定要记得关闭串口,后面有坑。。。。。)
*** Booting Zephyr OS build 36309bca986d ***
[00:00:03.185,000] hsd: Setup resource [head_shoulder] which in <0x18500031,0xa6ce0>
[00:00:03.187,000] hsd: Setup resource [gesture] which in <0x185a6d11,0x132448>
- Device name: DVPI
[00:00:03.315,000] hsd: fmt: [VYUY] width [640] height [480]
[00:00:03.316,000] hsd: Alloc video buffer: 614400
[00:00:03.317,000] hsd: Alloc video buffer: 614400
[00:00:03.318,000] hsd: Alloc video buffer: 614400
Heap at 0x305c9530 contains 42841 units in 16 buckets
bucket# min units total largest largest
threshold chunks (units) (bytes)
-----------------------------------------------------------
15 32769 1 42831 342640
342640 free bytes, 0 allocated bytes, overhead = 96 bytes (0.0%)
[00:00:03.515,000] main: head shoulder cnt: 1
[00:00:03.516,000] main: gesture result id: 0 ,state: 0
[00:00:03.608,000] main: head shoulder cnt: 1
[00:00:03.609,000] main: gesture result id: 0 ,state: 0
[00:00:03.700,000] main: head shoulder cnt: 1
[00:00:03.701,000] main: gesture result id: 0 ,state: 0
[00:00:03.792,000] main: head shoulder cnt: 1
[00:00:03.793,000] main: gesture result id: 0 ,state: 0
[00:00:03.884,000] main: head shoulder cnt: 1
[00:00:03.885,000] main: gesture result id: 0 ,state: 0
[00:00:03.976,000] main: head shoulder cnt: 1
[00:00:03.976,000] main: gesture result id: 0 ,state: 0
[00:00:04.068,000] main: head shoulder cnt: 1
[00:00:04.069,000] main: gesture result id: 0 ,state: 0
[00:00:04.159,000] main: head shoulder cnt: 1
开启 PC 调试模式后,设备会在输出算法识别结果的同时,将图像压缩传至 PC 端供用户预览。
在 app_algo_hsd_sample_for_csk6 项目的根目录下找到 prj.conf 文件,将其中的 CONFIG_WEBUSB=n 改为 CONFIG_WEBUSB=y ,再进行固件编译、烧录。如已开启,则跳到下一步;
lisa zep build -b csk6011a_nano
lisa zep flash
拉取PC工具项目到本地
git clone https://cloud.listenai.com/zephyr/applications/csk_view_finder_spd.git
使用 Chrome 内核的浏览器,打开项目 csk_view_finder_spd/src 目录下的 index.html, driver.html, usage.html文件都需要仔细查看下,里面是指南少走弯路;(注意一定要使用Chrome 内核的浏览器,我是用搜狗浏览器时钟无法连接设备,读取的设备号也是乱码)
会发现设备管理下面没有安装驱动,开始打驱动,这里会出现兼容问题,安装过程简单,就是好费时间。
工具csk_view_finder_spd/src 目录下有指引html文件,可以看着按照顺序来。
我这边在win11的环境下安装等待了很长时间,在安装驱动文件的时候一定要使用管理员方式打开,结果显示操作超时。
但是在设备管理器中发现驱动是安装成功的,驱动的设备名称和设别号都是正常工作,但是始终连接不上设备,都没有提示。后来在驱动的管理的页面发现上面提示需要重新启动。在一个就是在安装驱动的时候一定不能开串口助手连接查看返回日志,这样会出现串口设备占用,导致通信时间过长,使得安装时间非常长。
重启之后,对驱动进行重新安装,就可以安装成功了,依然管理员权限使用,否则就会出现安装时间过长,最后安装成功。
使用TypeC数据线连接 CSK6 USB 接口至电脑,若在PC端可看到如下弹窗提示,说明设备已被识别成功
点击选择设备,看到匹配成功的。
连接上就会出现如下的画面:
点击开始记录之后,在结束记录后会自动下载记录数据到本地电脑上面
这个压缩文件里面都是识别的用到的文件,
pic目录下都是记录过程中图像文件
rect文件下都是记录下来的头肩识别到的数据,每一个照片里面都标记了识别出头肩的方框,
recognize.json文件这里面存储的都是头肩的坐标文件,文件详情如下,详细记录下了头肩方框的X,Y,坐标还有方框的大小数据,还有识别到的概率值,可以在这里面查找对应的数据进一步使用,就比如在宣讲会PPT中说到的云台人脸跟随的设备,这是百万级的应用,结合这些数据进行进一步的使用。
整个过程下来,可能不同的配置环境会出现不同问题,但是总体来说这些还是比较友好的,就是处理系统的兼容问题,以及安装过程中出现的各种问题。AI性能方面,可能在由于为了帧率的问题,将分辨率设置的非常低,很模糊,但是是被框可以很好的跟随人的位置变化,实时效果可以说随时不错的了。摄像头距离方面,稍微远离就会出现识别不到,可能跟分辨率有关系,可以通过综合性能权重来权衡这个问题。