qiao---

  • 2024-12-13
  • 回复了主题帖: 【极海APM32M3514电机通用评估板】滑膜观测器电角度与霍尔采集到的电角度数据比对

    这个滑膜,电机可以反转吗?

  • 2024-12-11
  • 回复了主题帖: 【Luckfox幸狐 RV1106 Linux 开发板】3-PWM测试__控制舵机任意旋转

    xfliu11 发表于 2024-12-9 10:45 为啥我的舵机一接上,就一直自己转呢,pwm都没有使能 自己用示波器看下就知道了

  • 2024-09-07
  • 回复了主题帖: 【Luckfox幸狐 RV1106 Linux 开发板】5-给系统移植QT环境__显示电子时钟界面

    羽落清泫 发表于 2024-8-16 17:31   为什么这里选不了qt5,是需要下载源码嘛? 应该是依赖其他的模块,你可以看看依赖关系

  • 回复了主题帖: 【STM32MP135F-DK】7-部署QT开发环境+运行第一个QT程序

    lsc2001 发表于 2024-9-5 15:50 博主你好,我在最后运行程  序的时候出现了界面显示不全,但是在Ubuntu中是完整的    ... 添加字库就好了

  • 2024-08-11
  • 加入了学习《【DigiKey“智造万物,快乐不停”创意大赛】-简易电流源演示》,观看 【DigiKey“智造万物,快乐不停”创意大赛】-简易电流源演示

  • 加入了学习《【DigiKey创意大赛】多通道微型气相色谱采集单元》,观看 多通道微型气相色谱采集单元

  • 发表了主题帖: 【正点原子i.MX93开发板】7-测评汇总贴(完整小项目)

    再次感谢eeworld和正点原子给我这次测评的机会,本期测评对之前的测评进行汇总,并将之前的测评代码汇总起来形成了iot一个小项目。 这个开发板所有的测评贴子如下: 【正点原子i.MX93开发板】1-开箱与开机测评 https://bbs.eeworld.com.cn/thread-1284416-1-1.html 【正点原子i.MX93开发板】2-LCD显示测评和移植LVGL显示框架 https://bbs.eeworld.com.cn/thread-1285675-1-1.html 【正点原子i.MX93开发板】3-人工智能的测评(AI识别) https://bbs.eeworld.com.cn/thread-1285843-1-1.html 【正点原子i.MX93开发板】4-LVGL的GUI制作(显示更新系统信息) https://bbs.eeworld.com.cn/thread-1286331-1-1.html 【正点原子i.MX93开发板】5-移植mqtt,上传数据到云端 https://bbs.eeworld.com.cn/thread-1288628-1-1.html 【正点原子i.MX93开发板】6-QT上位机搭建(获取云端数据) https://bbs.eeworld.com.cn/thread-1290200-1-1.html 我测评了这个开发板的音频播放能力,视频播放能力、网络能力、AI运算能力、显示屏色彩还原度等等。同时我将之前做demo汇聚起来了,下面是整个小项目的视频: [localvideo]74ed072391755d8fd0cad223387e0c74[/localvideo] 在之前的测评中我已经将所有的代码分享出来了,如果有可能用到参考的话,可以去之前的测评去取。

  • 发表了主题帖: 【正点原子i.MX93开发板】6-QT上位机搭建(获取云端数据)

    本帖最后由 qiao--- 于 2024-8-11 02:17 编辑 上期测评我成功实现了正点原子i.MX93开发板物联网的能力,让他能够把数据上云,本期测评我将为这个开发板做一个QT上位机,这样一整个物联网的项目就非常完整了。 由于是为大家展示效果加上本人UI制作本领有限,所以界面做的不是很好看,望网友见谅。工程在本文的最后也分享给到大家。 本次QT上位机是使用HTTPS协议获取云端的数据,我将本期测评的内容划分为下面几个步骤: 鉴权Token获取 JSON数据获取 界面搭建 1.鉴权Token获取 使用HTTPS协议获取华为云上我们自己定义的属性的时候,华为云有个鉴权机制,需要验证这个Token,这个Token可以用你的账号和密码去获取,并且这个Token获取的有效期只有一天。这里我们需要编写一个函数用来获取我们的Token,这样我们每一次打开软件的时候就可以自动获取Token。下面是我的获取Token的代码:  上面我打马赛克的地方就是需要我们填写账号和密码的地方,在返回的接受回调函数中我们存储Token并且打印它,看看Token长什么样子。   下面就是Token,它是一个很长的字符串:  2. JSON数据获取 我们在成功获取Token后就可以进行华为云上属性的获取了,我们需要编写一个属性获取的函数,并把他们存储在变量里,最后编写一个定时器,每隔一段时间获取一次。   这段代码,我们编写了一个获取JSON数据属性的代码,并把他们解析了出来装在了变量里,方便我们后边使用。返回的JSON数据可以给大家看一下长这样,其中红框部分就是我们需要解析的数据。   3.界面搭建 这里我简单搭建了一个界面显示温度和湿度信息,我是直接拖动控件搭建UI的。然后在主界面里添加图片和定时器更新代码:   界面如图所示:     总结:通过本期测评我搭建了QT上位机,使我之前的项目更加完整了,最后通过测评获取到的华为云的数据准确无误。

  • 2024-08-01
  • 加入了学习《AI人工智能深度学习(RV1126)-第1期 准备篇》,观看 IMX415和IMX335摄像头的使用

  • 2024-07-31
  • 回复了主题帖: 【正点原子i.MX93开发板】5-移植mqtt,上传数据到云端

    lugl4313820 发表于 2024-7-25 16:20 大佬的文章,一如既住那么优秀,感谢分享mqtt的知识分享! 感谢贴友捧场

  • 2024-07-24
  • 发表了主题帖: 【正点原子i.MX93开发板】5-移植mqtt,上传数据到云端

    本帖最后由 qiao--- 于 2024-7-25 14:11 编辑 正点原子的这块i.MX93开发板具有两块千兆网口,本期测评将测评这块开发板的网络传输的能力。移植mqtt库到开发板上,最后上传到云端方便数据的记录和查看。 本期测评将分为下面的几个步骤: 交叉编译mqtt库 编写mqtt测试程序 测试并观察结果  1.交叉编译mqtt库 我这次使用的mqtt库是paho.mqtt.c,这个库还需要依赖ssl库,因此在交叉编译paho.mqtt.c之前还需要交叉编译ssl库。 先给出两个库的下载连接: paho.mqtt.c-1.3.13 :https://github.com/eclipse/paho.mqtt.c/archive/refs/tags/v1.3.13.tar.gz openssl-OpenSSL_1_1_1g:https://codeload.github.com/openssl/openssl/tar.gz/refs/tags/OpenSSL_1_1_1g 将这两个库下载好后拷贝到我们的交叉编译服务器上,并解压。   先交叉编译openssl,可以输入下面的命令 tar zxf openssl-OpenSSL_1_1_1g.tar.gz cd openssl-OpenSSL_1_1_1g/ ./config no-asm shared no-async --prefix=`pwd`/ssl_result --cross-compile-prefix=aarch64-none-linux-gnu- sed -i 's/-m64//' Makefile make && make install   最后会生成下面的文件   紧接着编译paho.mqtt.c,使用下面的命令 tar zxf paho.mqtt.c-1.3.13.tar.gz mkdir paho.mqtt.c_result/bin -p mkdir paho.mqtt.c_result/include -p mkdir paho.mqtt.c_result/lib -p mkdir paho.mqtt.c_result/share/man/man1 -p cd paho.mqtt.c-1.3.13/ make CC=aarch64-none-linux-gnu-gcc CFLAGS:="-I `pwd`/../ssl_result/include" LDFLAGS:="-L `pwd`/../ssl_result/lib" make install 最后会生成下面的文件   到这里库就编译完成了。库的目录结构如下:   2.编写mqtt测试程序 我这里是上传自己的捏造的数据。首先需要定义自己的连接参数,如下图所示。   然后编写,连接到iot的函数,代码如下所示。 其次是编写上传Topic的函数。    最后在主函数中编写调用逻辑,我这里就是连接上了之后,就每隔5S上传一次数据。   总的代码如下所示。 #include "MQTTClient.h" //包含 MQTT 客户端库头文件 #define CLIENTID "" //客户端 id #define USERNAME "" //用户名 #define PASSWORD "" //密码 #define BROKER_ADDRESS "" #define HOSTNAME "" #define HOSTPORT "" #define TOPIC "" MQTTClient client ; MQTTClient_connectOptions conn_opts ; MQTTClient_willOptions will_opts ; MQTTClient_message pubmsg ; int msgarrvd(void *context, char *topicName, int topicLen,MQTTClient_message *message) { return 1; } void connlost(void *context, char *cause) { printf("\nConnection lost\n"); printf(" cause: %s\n", cause); } void connect_mqtt() { conn_opts = MQTTClient_connectOptions_initializer; will_opts = MQTTClient_willOptions_initializer; pubmsg = MQTTClient_message_initializer; int rc; /* 创建 mqtt 客户端对象 */ if (MQTTCLIENT_SUCCESS != (rc = MQTTClient_create(&client, BROKER_ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL))) { printf("Failed to create client, return code %d\n", rc); rc = EXIT_FAILURE; return; } /* 设置回调 */ if (MQTTCLIENT_SUCCESS != (rc = MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, NULL))) { printf("Failed to set callbacks, return code %d\n", rc); rc = EXIT_FAILURE; return; } conn_opts.keepAliveInterval = 30; //心跳包间隔时间 conn_opts.cleansession = 0; //cleanSession 标志 conn_opts.username = USERNAME; //用户名 conn_opts.password = PASSWORD; //密码 if (MQTTCLIENT_SUCCESS != (rc = MQTTClient_connect(client, &conn_opts))) { printf("Failed to connect, return code %d\n", rc); rc = EXIT_FAILURE; return; } printf("MQTT 服务器连接成功!\n"); return; } int count = 0; int MQTT_Publish(){ int rc; count++; MQTTClient_message tempmsg = MQTTClient_message_initializer; sprintf(payload, "{\"services\": [{\"service_id\":\"ZD\",\"properties\": {\"TEMP\": %f,\"HUMI\": %f}}]}", count,count+1); // 格式化要发布的数据 tempmsg.payload = payload; //消息的内容 tempmsg.payloadlen = strlen(payload); //内容的长度 tempmsg.qos = 0; //QoS 等级 tempmsg.retained = 1; //保留消息 if (MQTTCLIENT_SUCCESS != (rc = MQTTClient_publishMessage(client, TOPIC, &tempmsg, NULL))) { printf("Failed to publish message, return code %d\n", rc); rc = EXIT_FAILURE; return rc; } return 0; } int main(){ connect_mqtt(); while (1) { MQTT_Publish(); msleep(5000); // 每隔5s } return 0; } 我这里编写了一个 CMakeLists.txt,用cmake来管理项目,里面的代码如下所示:   cmake_minimum_required(VERSION 3.10) project(mqtt) # 设置目标平台和交叉编译器 set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm64) set(CMAKE_C_COMPILER aarch64-none-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-none-linux-gnu-g++) link_directories(${PROJECT_SOURCE_DIR}/paho.mqtt.c_result/lib) # 指定包含目录 include_directories(${PROJECT_SOURCE_DIR}/paho.mqtt.c_result/include) # 添加源文件 set(SRC_LIST main.c) # 创建可执行文件 add_executable(main ${SRC_LIST}) # 链接 target_link_libraries(main paho-mqtt3c) 最后交叉编译一下我们项目,就可以了。 mkdir build cd build cmake .. make   3.测试并观察结果 我们将我们的项目拷贝到我们板子上,然后运行他。 首先要保证自己的网络没问题,我这里使用是网口,可以ping一下baidu看看网络连接情况。   我的板子连接情况如下所示。   进入板子的终端运行程序,效果如下。   华为云有设备连接显示在线。   同时也有数据不断的上传上来。   我的代码逻辑是湿度比温度高一,上传的准确无误。 总结:本期测评测评了正点原子i.MX93开发板的物联网的能力,该开发板能够准确的上传数据到华为云,网络连接的稳定性很好。

  • 2024-07-12
  • 回复了主题帖: 颁奖:嵌入式工程师AI挑战营(初阶),致敬敢于将边缘AI收入统治领域的你们

    个人信息已确认,请安排邮寄。优秀奖选择均码防晒衣。感谢luckfox和EEworld对本次活动的大力支持

  • 回复了主题帖: 【STM32MP135F-DK】7-部署QT开发环境+运行第一个QT程序

    zhgongzuoshi 发表于 2024-7-11 16:03 楼主,“勾选上后我们从新编译一下我们的内核 make uImage LOADADDR=0xC2000040 ”时,会报错, ... 重新拉代码编译

  • 2024-07-01
  • 回复了主题帖: 【正点原子i.MX93开发板】4-LVGL的GUI制作(显示更新系统信息)

    wangerxian 发表于 2024-6-30 11:45 GUI_Guider免费还是收费的呀? 完全免费的

  • 2024-06-30
  • 发表了主题帖: 【正点原子i.MX93开发板】4-LVGL的GUI制作(显示更新系统信息)

    本帖最后由 qiao--- 于 2024-6-30 02:14 编辑 前言:在我的第二期测评我们成功的移植了LVGL框架,本期测评就可以利用这个框架开发出一些好看的UI。本人的审美能力欠缺,UI制作的可能并不是很好看(这是UI工程师干的活),帖友们不要介意,重要的是开发过程。本期测评将分为以下三个部分的: 用GUI_Guider开发一个简易界面并移植运行 写一个C语言程序读出系统信息(ip地址,cpu占用率,cpu温度等) 将以上两者综合移植 1.用GUI_Guider开发一个简易界面并移植运行 经常看我的测评的贴友应该知道,GUI_Guider是我的老朋友了,我经常用这个软件开发我的lvgl应用。里面自带模拟器开发起来方便,就是里面的控件有点少,不过也够用了。有对GUI_Guider不熟悉的贴友可以看我之前的文章: 【ACM32G103RCT6】8-基于RTC和LVGL的手机时间界面 https://bbs.eeworld.com.cn/thread-1270419-1-1.html 【Sipeed 博流BL808全能板】5-手表界面开发 https://bbs.eeworld.com.cn/thread-1273077-1-1.html 这两篇文章讲了GUI_Guider工程的创建和移植,但是不是Linux下的移植,本期 测评将移植于Linux系统。 在GUI_Guider创建一个工程后简单添加一些控件,并运行模拟器,我的效果如下图所示:   成功运行,接下来就是把我们这个工程移植到我们之前的lvgl框架中。移植步骤还是移植下面两个文件夹,由于我的custom文件夹下没有内容,我就不移植了,我就只移植generated这一个文件夹。   将这个文件夹复制到我们第二期测评拉下来代码的lvgl目录中,目录结构如下所示:   此时这个项目还不知道我们移植这个文件的.c和.h文件的位置,因此还要修改Makefile文件 修改lvgl目录下的lvgl.mk文件,添加以下内容:   include $(LVGL_DIR)/$(LVGL_DIR_NAME)/generated/generated.mk 在generated目录下的generated.mk文件添加以下内容   PRJ_DIR ?= $(LVGL_DIR)/$(LVGL_DIR_NAME) 修改完成后我们还需要修改我们的main.c中的代码,调用我们UI代码。代码主要是添加一个头文件,然后调用系统生成的UI创建代码。     然后进行编译make -j4  ,就可以编译成功。我们运行这个程序,效果如下所示:   但是这个UI里面的数据不是动态显示的,我们还要添加一些代码。   2.写一个C语言程序读出系统信息(ip地址,cpu占用率,cpu温度等) 由于上面的代码不能动态显示,我们还需要写一个demo,读出系统的信息,最后将他移植到我们项目中。Linux 的一些系统信息都是通过文件的形式来提供接口的,我们只需要通过文件IO来访问这些接口就行了。我的示例代码如下所示: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <net/if.h> #include <sys/ioctl.h> #include <time.h> #define MAX_BUFFER_SIZE 256 #define MAX_IP_LENGTH 16 // 定义IPv4地址的最大长度为15个字符,加上字符串终止符'\0' // 实现获取本地IP地址的函数 int get_local_ip(char *ip_buffer) { int fd; // 套接字描述符 struct ifreq ifr; // 网络接口请求结构体 // 创建一个套接字 fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd < 0) { perror("socket"); // 输出错误信息并返回 return -1; } // 指定要查询的网络接口(这里使用eth0,可根据实际情况修改) strncpy(ifr.ifr_name, "eth0", IFNAMSIZ - 1); // 拷贝接口名到请求结构体 // 获取接口的IP地址 if (ioctl(fd, SIOCGIFADDR, &ifr) < 0) { perror("ioctl"); // 输出错误信息并返回 close(fd); // 关闭套接字 return -1; } // 将获取到的IP地址转换成字符串形式并存储在ip_buffer中 inet_ntop(AF_INET, &((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr, ip_buffer, INET_ADDRSTRLEN); close(fd); // 关闭套接字 return 0; // 返回成功 } // 获取 CPU 温度 float get_cpu_temperature() { FILE *fp; float temp = 0.0; fp = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); if (fp == NULL) { perror("Error opening temperature file"); return -1.0; } fscanf(fp, "%f", &temp); fclose(fp); return temp / 1000.0; // 转换为摄氏度 } // 获取 CPU 占用率 float get_cpu_usage() { FILE *fp; char buffer[MAX_BUFFER_SIZE]; long double a[4], b[4]; float usage; fp = fopen("/proc/stat", "r"); if (fp == NULL) { perror("Error opening CPU stat file"); return -1.0; } fgets(buffer, sizeof(buffer), fp); sscanf(buffer, "cpu %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2], &a[3]); fclose(fp); sleep(1); // 等待一段时间再次获取数据 fp = fopen("/proc/stat", "r"); if (fp == NULL) { perror("Error opening CPU stat file"); return -1.0; } fgets(buffer, sizeof(buffer), fp); sscanf(buffer, "cpu %Lf %Lf %Lf %Lf", &b[0], &b[1], &b[2], &b[3]); fclose(fp); usage = ((b[0] + b[1] + b[2]) - (a[0] + a[1] + a[2])) / ((b[0] + b[1] + b[2] + b[3]) - (a[0] + a[1] + a[2] + a[3])) * 100.0; return usage; } int main() { float cpu_temp, cpu_usage; cpu_temp = get_cpu_temperature(); time_t rawtime; struct tm *timeinfo; char timeBuffer[80]; char ip_address[MAX_IP_LENGTH]; // 用于存储IP地址的字符数组 time(&rawtime); // 获取当前时间 timeinfo = localtime(&rawtime); // 将时间转换为本地时间结构体 strftime(timeBuffer, sizeof(timeBuffer), "%Y-%m-%d %H:%M:%S", timeinfo); // 格式化时间为字符串 printf("当前时间是: %s\n", timeBuffer); // 调用获取本地IP地址的函数 if (get_local_ip(ip_address) == 0) { printf("Local IP address: %s\n", ip_address); // 打印获取到的IP地址 } else { printf("Failed to get local IP address.\n"); // 获取失败时的错误提示 } if (cpu_temp != -1.0) { printf("CPU Temperature: %.2f°C\n", cpu_temp); } else { printf("Failed to get CPU Temperature.\n"); } cpu_usage = get_cpu_usage(); if (cpu_usage != -1.0) { printf("CPU Usage: %.2f%%\n", cpu_usage); } else { printf("Failed to get CPU Usage.\n"); } return 0; } 在系统上编译并运行就可以成功的打印出系统信息,运行结果如下图所示:     3.将以上两步综合移植 现在我们就需要将上面两步综合让我们的UI能够动态显示。 我的想法是创建一个子线程来更新UI标签,这样就可以动态显示了。我的线程执行代码如下所示: // 线程函数,用于更新标签文本 void *update_label_thread(void *arg) { float cpu_temp, cpu_usage; char cpu_temp_s[10],cpu_usage_s[10]; char ip_address[MAX_IP_LENGTH]; // 用于存储IP地址的字符数组 char timeBuffer[80]; while (1) { time_t rawtime; struct tm *timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); strftime(timeBuffer, sizeof(timeBuffer), "%Y-%m-%d\r\n%H:%M:%S", timeinfo); cpu_temp = get_cpu_temperature(); if (cpu_temp != -1.0) { printf("CPU Temperature: %.2f°C\n", cpu_temp); } else { printf("Failed to get CPU Temperature.\n"); } // 调用获取本地IP地址的函数 if (get_local_ip(ip_address) == 0) { printf("Local IP address: %s\n", ip_address); // 打印获取到的IP地址 } else { printf("Failed to get local IP address.\n"); // 获取失败时的错误提示 } cpu_usage = get_cpu_usage(); if (cpu_usage != -1.0) { printf("CPU Usage: %.2f%%\n", cpu_usage); } else { printf("Failed to get CPU Usage.\n"); } // 更新 lvgl 标签的文本 lv_label_set_text(guider_ui.screen_timeInfo, timeBuffer); lv_label_set_text(guider_ui.screen_ipInfo, ip_address); sprintf(cpu_usage_s, "%.2f%%", cpu_usage); lv_label_set_text(guider_ui.screen_CPULoad, cpu_usage_s); sprintf(cpu_temp_s, "%.2f *C", cpu_temp); lv_label_set_text(guider_ui.screen_CPUTemp, cpu_temp_s); // 等待一段时间,这里简单地使用 usleep 模拟 usleep(10000); // 等待 10毫秒 } return NULL; }   然后再在main函数里创建线程调用上面那个线程执行函数。   最后进行编译就OK了。动态显示效果如下的视频所示: [localvideo]e52272a624dabf6edfbdec7037b14ae8[/localvideo] 我在这里解压了一个程序,可以看到CPU占用率立即就上去了,而且时间也一直再变,可见我们的程序没有出错。 我改变一下我的ip地址试试。 [localvideo]306d5817bc86cf55c7d17062ee1a693e[/localvideo] IP地址也变了,移植成功!   总结:通过本期测评我们成功用LVGL框架开发出了一个UI,并且能够显示系统信息到UI上,后面我们将移植MQTT程序将这些数据上传到云平台上(这个板子没有传感器,只能采取读系统信息这种方式)。

  • 2024-06-27
  • 回复了主题帖: 【正点原子i.MX93开发板】3-人工智能的测评(AI识别)

    hellokitty_bean 发表于 2024-6-26 09:29 NPU厉害呀。。。。准确率、算力和10ms出结果,已算上乘了 是的,常见的一些应用已经足够了  

  • 回复了主题帖: 【正点原子i.MX93开发板】3-人工智能的测评(AI识别)

    wangerxian 发表于 2024-6-25 19:17 有NPU的手势识别例程嘛?话说NPU的AI性能比CPU强这么多呀。 无,npu并行计算的,肯定要快的多

  • 2024-06-25
  • 发表了主题帖: 【正点原子i.MX93开发板】3-人工智能的测评(AI识别)

    本帖最后由 qiao--- 于 2024-6-25 00:30 编辑 正点原子i.MX93开发板具有0.5TOPS算力,对于一般的一些AI识别应用来说已经足够了。接下来我将测评这块开发板这方面的性能。这里我将分别用CPU跑AI和用NPU跑AI来看看效果。   首先来测评一下正点原子这块开发板的AI的相关资料。直接说结论,目前这块开发板由于最近才上市,所以这块资料不是很完善,只能保证满足官方的历程能跑通。下面是他们文档中的声明,但是我相信后面正点原子会很快把这方面的资料补起来。     1.CPU进行AI识别 我这里跑的都是官方的例子。用的摄像头是USB摄像头。 首先将正点原子的模型文件拷贝到板子里,他们家的模型相关资料在01、程序源码\01、程序源码\06、AI例程源码\01、例程源码中,模型文件如下所示:   将他们拷贝到板子的/usr/bin/eiq-examples-git/modes下面即可。 这里我用CPU跑一个手势识别的例子,看看帧率如何,精度如何。 在跑这些例子的时候首先要做一下准备工作,如下: 将开发板的初始UI关掉,方便我们显示结果到显示屏上。 开启Weston 的支持,因为正点原子提供的程序需要使用 OpenCV 来管理窗口。 命令分别如下: systemctl stop systemui systemctl start weston 然后进入到手势识别的项目目录 cd /usr/bin/eiq-examples-git/gesture_detection/ 执行下面命令进行识别 python3 main.py -i /dev/video0 效果视频如下: [localvideo]21d5fd7215eadb3f7761f344c72e152c[/localvideo] 由上视频可以看出。用CPU进行推理的的帧率肉眼可见的低,几乎是1s推理一帧图片,识别率还可以,手掌可以使识别出来,经过我的测试发现,手掌做一些复杂的动作时候就推理不出来了。不过这块板子用CPU推理的速度相比其他市场上的一些开发板用CPU推理已经很高了。   2.GPU进行AI识别 我这里GPU进行AI识别的例子是使用的目标检测识别。 在上面拷贝了模型文件的基础上需要通过 vela 工具将模型编译成可以使 NPU 进行推理的 vela 模型。 进入到/usr/bin/eiq-examples-git 目录,使用 vela 工具编译 models 目录下 mobilenet_v1_1.0_224_quant.tflite模型,并使用--output-dir 参数指定 vela_models 目录,执行以下命令 这样NPU可推理的模型就在vela_models/目录下了。 cd /usr/bin/eiq-examples-git vela models/ssd_mobilenet_v1_quant.tflite --output-dir vela_models/ 出现下面的结果代表转化成功   在测试之前需要将 main.py 推理脚本里面的模型路径和模型名称进行修改 cd /usr/bin/eiq-examples-git/object_detection vi main.py 我的修改如下所示:   最后就可以进行推理了,使用下面的命令,其中/usr/lib/libethosu_delegate.so是指定NPU推理的动态库。 python3 main.py -i cars0.bmp -d /usr/lib/libethosu_delegate.so 推理效果如下所示: [localvideo]952d71b04109542941520db5d754a560[/localvideo] 从视频中可以看出,推理速度肉眼可见的上升,大约10ms可以推理出来一帧数据,检测的准确率还可以。   总结:通过本期测评我们测评了正点原子i.MX93开发板AI识别方面的性能以及资料情况,正点原子AI方面的教程有待完善,开发板的NPU推理的性能不错,有0.5TOPS算力,在推理目标检测模型的时候每10ms可以推出1帧数据,识别准确率较好。

  • 2024-06-24
  • 回复了主题帖: 【正点原子i.MX93开发板】2-LCD显示测评和移植LVGL显示框架

    本帖最后由 qiao--- 于 2024-6-25 00:57 编辑 lugl4313820 发表于 2024-6-22 22:33 大佬,你一出手,果然是惊艳呀,他应该支持HDMI吧,那样显示器是不是便宜一点? 是的,不支持HDMI,应该是接口PCB没画

  • 2024-06-22
  • 回复了主题帖: 【Luckfox幸狐 RV1106 Linux 开发板】5-给系统移植QT环境__显示电子时钟界面

    jafatek 发表于 2024-6-21 09:57 感谢大佬,根据您的步骤一点点操作完美运行。膜拜,辛苦了 感谢支持

统计信息

已有562人来访过

  • 芯积分:835
  • 好友:5
  • 主题:60
  • 回复:166

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言