0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于聆思CSK6视觉AI开发套件实现剪子包袱锤游戏

安芯教育科技 来源:安谋科技学堂 2023-12-05 09:56 次阅读

本文来自极术社区聆思CSK6视觉AI开发套件试用活动文章。作者用聆思CSK6芯片支持的手势识别能力结合8X8点阵实现一款剪子包袱锤的游戏。

开发环境搭建

1.1 硬件环境

如下图所示,本次产品有聆思的CSK6011-NanoKit视觉开发套件和8*8点阵组成,CSK6011-NanoKit负责手势的识别,点阵负责图形的显示,两者通过SPI总线连接在一起。

f9bb990c-930d-11ee-939d-92fbcf53809c.png

1.2 软件环境

软件开发环境搭建可以参考CSK6环境搭建,聆思很贴心的提供了完整的打包开发环境,利用lisa工具可以完成项目的创建、编译和下载,此外厂商还基于VSCODE插件的方式提供了完整的IDE开发环境。

点阵的使用

2.1 硬件连接

8x8点阵的主控是GC7219(完全兼容MAX7219),其典型的应用图如下所示:

f9e36630-930d-11ee-939d-92fbcf53809c.png

芯片可以通过GPIO或者SPI来驱动,官方提供了SPI的参考demo,本次将基于其实现对点阵的控制。将GC7219(点阵)与CSK6011的SPI0连接,利用板载的3.3V管脚供电,相关管脚的连接示意图如下:

f9ee05ae-930d-11ee-939d-92fbcf53809c.png

2.2 图标建模

由于CSK6011目前支持5种手势,分别为LIKE()、OK()、STOP()、YES()、SIX(),采用相似原则,取LIKE=锤,STOP=包袱,YES=剪刀。相关示图标建模(共阴)如下:

fa05e462-930d-11ee-939d-92fbcf53809c.png

2.3 驱动开发

2.3.1 建立SPI开发工程

参见SPI参考工程的实现,搭建SPI驱动开发工程。

2.3.2 GC7219的适配

由GC7219的手册可知,其支持MSB模式,且最高频率只有10M,因此spi的Config需要做如下修改。

  /* spi master 8bit, LSB first*/
  spi_cfg.operation = SPI_WORD_SET(8) | SPI_OP_MODE_MASTER | SPI_TRANSFER_LSB;
  spi_cfg.frequency = 10 * 1000000UL;

改为:

    /* spi master 8bit, MSB first*/
    spi_cfg.operation = SPI_WORD_SET(8) | SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB;
    spi_cfg.frequency = 5 * 1000000UL;

2.3.3 添加点阵驱动

如图2.2所示,GC7219支持共阴点阵,各图像的数组定义如下代码片段。

unsigned char jiandao_table[8][2] = {
    {0x01,0x24},{0x02,0x24},{0x03,0x24},{0x04,0x7E},
    {0x05,0x7E},{0x06,0x7E},{0x07,0x7E},{0x08,0x00}
};


unsigned char shitou_table[8][2] = {
    {0x01,0x00},{0x02,0x40},{0x03,0x40},{0x04,0x7C},
    {0x05,0x7C},{0x06,0x7C},{0x07,0x7C},{0x08,0x00}
};


unsigned char bu_table[8][2] = {
    {0x01,0x08},{0x02,0x1C},{0x03,0x1E},{0x04,0x1E},
    {0x05,0x5E},{0x06,0x7E},{0x07,0x7E},{0x08,0x00}
};

由zephr的API调用可知,其发送函数spi_write需要传入一个数据链表,然后会按照列表逐一发送相关数据,完整的代码如下:

/*
 * SPDX-License-Identifier: Apache-2.0
 */


#include 
#include 
#include 
#include 
#include 
#include 
#include 


unsigned char work_state[2]={0x0C, 0x1}; // normal work mode
unsigned char test_state[2]={0x0F, 0x0}; // no test mode
unsigned char decode_cfg[2]={0x09, 0x0}; // no decode
unsigned char scan_range[2]={0x0B, 0x7}; // scan 0-7


unsigned char jiandao_table[8][2] = {
  {0x01,0x24},{0x02,0x24},{0x03,0x24},{0x04,0x7E},
  {0x05,0x7E},{0x06,0x7E},{0x07,0x7E},{0x08,0x00}
};


unsigned char shitou_table[8][2] = {
  {0x01,0x00},{0x02,0x40},{0x03,0x40},{0x04,0x7C},
  {0x05,0x7C},{0x06,0x7C},{0x07,0x7C},{0x08,0x00}
};


unsigned char bu_table[8][2] = {
  {0x01,0x08},{0x02,0x1C},{0x03,0x1E},{0x04,0x1E},
  {0x05,0x5E},{0x06,0x7E},{0x07,0x7E},{0x08,0x00}
};


#define TX_PACKAGE_MAX_CNT  8


void main(void)
{
  int idx=0;
  const struct device *spi;
  struct spi_config spi_cfg = {0};
  struct spi_buf_set tx_set;
  unsigned char digit[2]={0};


  printk("spi master example
");


  spi = DEVICE_DT_GET(DT_NODELABEL(spi0));
  if (!device_is_ready(spi)) {
    printk("SPI device %s is not ready
", spi->name);
    return;
  }


  /* spi master 8bit, LSB first*/
  spi_cfg.operation = SPI_WORD_SET(8) | SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB;
  spi_cfg.frequency = 5 * 1000000UL;


  /* Make spi transaction package buffers */
  struct spi_buf *tx_package = k_calloc(TX_PACKAGE_MAX_CNT, sizeof(struct spi_buf));
  if (tx_package == NULL) {
    printk("tx_package calloc failed
");
    return;
  }


  /* Init 7219 */
  tx_package[0].buf = work_state;
  tx_package[0].len = 2;
  tx_package[1].buf = test_state;
  tx_package[1].len = 2;
  tx_package[2].buf = decode_cfg;
  tx_package[2].len = 2;
  tx_package[3].buf = scan_range;
  tx_package[3].len = 2;


  tx_set.buffers = tx_package;
  tx_set.count  = 4;


  printk("Init 7219 ...
");
  spi_write(spi, &spi_cfg, &tx_set);


  do {
    k_msleep(1000);
    printk("spi master sending jiandao_table data ...
");
    for (idx=0; idx<8; idx++) {
            digit[0]=jiandao_table[idx][0];
            digit[1]=jiandao_table[idx][1];
            tx_package[0].buf = digit;
            tx_package[0].len = 2;
            tx_set.buffers    = tx_package;
            tx_set.count      = 1;
            spi_write(spi, &spi_cfg, &tx_set);
        }


        k_msleep(1000);
        printk("spi master sending shitou_table data ...
");
        for (idx=0; idx<8; idx++) {
            digit[0]=shitou_table[idx][0];
            digit[1]=shitou_table[idx][1];
            tx_package[0].buf = digit;
            tx_package[0].len = 2;
            tx_set.buffers    = tx_package;
            tx_set.count      = 1;
            spi_write(spi, &spi_cfg, &tx_set);
        }


        k_msleep(1000);
        printk("spi master sending bu_table data ...
");
        for (idx=0; idx<8; idx++) {
            digit[0]=bu_table[idx][0];
            digit[1]=bu_table[idx][1];
            tx_package[0].buf = digit;
            tx_package[0].len = 2;
            tx_set.buffers    = tx_package;
            tx_set.count      = 1;
            spi_write(spi, &spi_cfg, &tx_set);
        }
    } while (1);
}

2.3.4 搭建AI工程

参考文档AI能力-视觉的相关步骤搭建AI工程,这里主要说明一下遇到的几个问题和注意事项。


1)因为此处使用的是最新git工程,所以打印可能与文档有出入,git版本和打印对应如下:

fa1cfcce-930d-11ee-939d-92fbcf53809c.png

2)如果直接下载git工程编译升级,PC端工具无法正常使用,需要执行如下两条命令,参考连接一键拉取-sample-和-sdk-异常解决方法,然后再执行编译烧写操作。

lisa zep init-app 
lisa zep update

3)基于Edge浏览器如果直接打开在线PC工具,点击"Windows系统"会出现404错误,所以建议直接下载pc工具工程到本地离线使用。

git clone https://cloud.listenai.com/zephyr/applications/csk_view_finder_spd.git

4)执行"lisa zep flash"后如果立即执行如下资源下载命令可能会失败,这时候建议拔插一下DAP口或者检查一下串口是否被占用。

fa321b5e-930d-11ee-939d-92fbcf53809c.png

经过上述步骤以后,通过PC端工具查看效果如下:

fa465416-930d-11ee-939d-92fbcf53809c.png

2.3.5 识别和显示

将SPI-GC7219的工程和AI手势识别的工程融合在一起,程序流程如下:

fa6aacc6-930d-11ee-939d-92fbcf53809c.png

效果展示

效果如下,机器会根据人类的出拳来出拳,用来给做简单的演示还是挺有意思的。

总结

整体体验下来,感觉聆思在SOM的易用性、接口的完整性、文档的丰富度、和支持的及时性上做的都不错,按照文档一步步做下来,很快就可以入门做一些简单的产品。美中不足的是目前聆思的AI训练和调参工具还没有面向大众开放,可能是因为技术性比较强,但因此少了一部分趣味性,在手势AI识别的demo中也能够感觉到光照和距离对识别的准确性影响很大,但是在如此低的功耗和性能下做到这样的程度已经很棒了。最后祝聆思科技的产品越做越棒,极术社区越做越大带给广大开发兴趣人员更多丰富的活动。

转自 | 安谋科技学堂

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 手势识别
    +关注

    关注

    8

    文章

    225

    浏览量

    47772
  • AI
    AI
    +关注

    关注

    87

    文章

    30072

    浏览量

    268331
  • 开发环境
    +关注

    关注

    1

    文章

    220

    浏览量

    16580
  • GPIO
    +关注

    关注

    16

    文章

    1196

    浏览量

    51896
  • 开发套件
    +关注

    关注

    2

    文章

    151

    浏览量

    24260

原文标题:【聆思CSK6视觉AI开发套件试用】基于AI手势识别的剪子包袱锤游戏

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CSK6视觉语音大模型AI开发板入门资源合集(硬件资料、大模型语音/多模态交互/英语评测SDK合集)

    本帖最后由 jf_40317719 于 2024-6-18 17:39 编辑 视觉语音大模型 AI 开发套件( CSK6-MIX )是
    发表于 06-18 17:33

    智能硬件接入主流大模型做语音交互(附文心一言、豆包、kimi、智谱glm、通义千问示例)

    本帖最后由 jf_40317719 于 2024-8-21 19:17 编辑 多模态交互离不开硬件载体,近期有不少开发者在研究CSK6大模型
    发表于 08-21 19:13

    【附实操视频】CSK6大模型开发板接入国内主流大模型(星火大模型、文心一言、豆包、kimi、智谱glm、通义千问)

    本帖最后由 jf_40317719 于 2024-8-22 10:15 编辑 多模态交互离不开硬件载体,近期有不少开发者在研究CSK6大模型
    发表于 08-22 10:12

    学习搭建CSK6板卡的开发环境

    zep工具下载 CSK6一键安装包并运行安装1.4、检查开发环境lisa zep安装完成后,检查开发环境。执行命令:lisa info zep二、编译blinky例程选择一个目录,创建blinky项目
    发表于 11-09 16:12

    CSK6视觉AI开发套件初次体验

    前言前段时间申请了CSK6视觉AI开发套件,心想MCU算力有限不太可能搞定视觉任务,经过简单的试用发现效果很不错,不得不感叹现在芯片发展太快
    发表于 11-09 16:19

    基于CSK6视觉AI开发套件的人脸识别功能测试

    1、人脸识别功能测试  开发板支持人脸识别,提取人脸的边界框、标定点、头部姿态角度等,支持68个关键点检测;头部姿态角度图示,支持pitch、roll、yaw三个角度。  适合离线的方式,支持的人
    发表于 11-21 16:16

    如何通过简单几步调通GPIO控制电磁继电器的工作

    开发板介绍我还是先来简单介绍一下我们的主角:CSK6视觉AI开发套件。它是思科技针对
    发表于 11-23 14:50

    一文详解Ubuntu环境下AI图像识别体验

    1、Ubuntu环境下AI图像识别体验  CSK6思科技新一代的 AI 芯片 SoC 产品系列,采用多核异构架构,集成了 ARM Star MCU,HiFi4 DSP,以及
    发表于 11-23 16:09

    CSK6视觉AI开发套件使用

    即将创建的项目,在这个目录下执行以下命令lisa zep create ,该命令会列出当前 CSK6 适配的项目 sample ,我们可选择任意一个作为我们的工程模板,创建在当前目录中。在命令行中进
    发表于 12-13 16:24

    CSK6视觉AI开发套件点灯 + AI功能体验

    build -b csk6011a_nano下载lisa zep flash点灯好家伙。dts都来了,Zephyr 什么东西不过dts linux 驱动必备。但是感觉要劝退一堆小白AI功能模型文件7M。应该是
    发表于 12-15 10:07

    CSK6视觉AI开发套件初体验

    一,开发板介绍CSK6思科技推出的一款MCU+DSP+NPU的SoC芯片。SRAM是1M,PSRAM是8M,不是很清楚各个核之间是怎么做内存共享?应该不会相互独立的。二,开发环境配
    发表于 12-21 09:23

    CSK6011与NVIDIA Jetson Nano开发板对比

    nano 基础套装1719 + usb摄像头109 =1828 RMBCSK6视觉AI套件 248 RMBps:nano 购买USB摄像头主要是因为自带的csi摄像头极不稳定。5、总
    发表于 02-14 14:19

    STM32F7691开发套件能用openMV实现视觉识别吗?

    请问选择了AI方向,选用的是STM32F7691开发套件,能用openMV实现视觉识别吗,还是必须在板子上用F769NI芯片实现
    发表于 08-07 06:26

    CSK6 LNN工具体验】自定义人脸检测模型

    在微信偶然发现思科技的CSK6开发板的评估活动,因为经常在各种硬件平台上测试模型,因此申请了测评。很荣幸能被选中。
    的头像 发表于 10-18 11:46 708次阅读
    【<b class='flag-5'>聆</b><b class='flag-5'>思</b><b class='flag-5'>CSK6</b> LNN工具体验】自定义人脸检测模型

    CSK6芯片性能与应用前景分析

    CSK6芯片性能与应用前景分析
    的头像 发表于 05-15 09:11 690次阅读