TA的每日心情 | 开心 2024-7-12 13:54 |
|---|
签到天数: 5 天 连续签到: 1 天 [LV.2]偶尔看看I
秀才
- 积分
- 301
|
在本次活动中,使用RA8P1开发板外接摄像头,不仅可以通过屏幕显示摄像头捕捉到的图像数据,这里和大家分享一下,实际的开发过程。
一:显示屏的开发过程
1.1 :RGB 屏幕的选择
本次我所使用的屏幕是正点原子的RGB TFTLCD-V1.3的 七寸屏幕,分辨率为1024*600,实物如下所示:
而且瑞萨的RA8芯片内部寄存了高性能图形控制器模块,
RA8 系列 GLCDC (Graphics LCDController) 提供了从 MCU 内部存储器或外部图像缓存向 RGB/LCD 显示屏输出图像的能力。它集成了:
- 帧缓冲控制:可配置多帧缓冲,实现页面切换或双缓冲显示
- 颜色格式支持:RGB565, RGB888, ARGB8888 等
- 图形处理功能:背景图层、文字/图形合成、透明度混合、调色板等
- 同步信号生成:HSYNC, VSYNC, DE(Data Enable)等
- DMA 支持:高速数据传输,减少 CPU 占用
- 中断功能:帧结束中断、行结束中断等
1.2:下载例程测试一下RGB的功能是否正常:
,这里为了快速开发,烧录了一个官方的RGB LVGL的驱动程序,测试屏幕的功能是正常的,
二;摄像头的知识2.1 摄像头使用过程
主要功能包括:
初始化 CEU 摄像头接口,捕获实时视频流
配置 OV5640 摄像头参数(分辨率、帧率、输出格式)
使用 RT-Thread LCD 驱动显示摄像头捕获的图像
支持图像格式转换(YUV422 → RGB565)
三: 实物测试如下:
- while(1)
- {
- rt_tick_t start = rt_tick_get();
- sensor_snapshot(&sensor, g_image_rgb565_sdram_buffer, 0);
- rgb565_to_gray_resize_192_and_quantization(g_image_rgb565_sdram_buffer, CAM_WIDTH, CAM_HEIGHT, in_i8);
- memcpy(GetModelInputPtr_serving_default_image_input_0(), in_i8, INPUT_SIZE);
- RunModel(false);
- int8_t* output1 = GetModelOutputPtr_StatefulPartitionedCall_0_70273(); // 6
- int8_t* output2 = GetModelOutputPtr_StatefulPartitionedCall_1_70283(); // 12
- dequantize_int8(output1, out_f1, output1_len, scale_out1, zero_point_out1);
- dequantize_int8(output2, out_f2, output2_len, scale_out2, zero_point_out2);
- int16_t total = 0;
- static det_box_t pool[540]; // 6*6*3 + 12*12*3 = 108 + 432 = 540
- total += decode_output_layer(out_f1, GRID_SIZE_1, 0, LCD_WIDTH, LCD_HEIGHT, CONF_THRESH,
- pool + total, (int16_t)(sizeof(pool)/sizeof(pool[0])) - total);
- total += decode_output_layer(out_f2, GRID_SIZE_2, 1, LCD_WIDTH, LCD_HEIGHT, CONF_THRESH,
- pool + total, (int16_t)(sizeof(pool)/sizeof(pool[0])) - total);
- // nms
- int32_t kept = nms_filter(pool, total, NMS_THRESH);
- int32_t out_n = MIN(kept, MAX_BOXES); // 拷贝前 kept(不超过 MAX_BOXES)
- d2_width thickness = 1;
- uint32_t argb = 0xFF00FF00;
- lcd_draw_jpg_with_frame(0, 0, g_image_rgb565_sdram_buffer, CAM_WIDTH, CAM_HEIGHT, argb, thickness, pool, out_n);
- rt_tick_t end = rt_tick_get();
- rt_kprintf("detect box num: %d\n", out_n);
- rt_kprintf("Time elapsed: %d ms\n", (end - start) * (1000 / RT_TICK_PER_SECOND));
- rt_thread_mdelay(5);
- led_status = !led_status;
- if(led_status)
- {
- rt_pin_write(LED_PIN, PIN_HIGH);
- }
- else
- {
- rt_pin_write(LED_PIN, PIN_LOW);
- }
- }
- }
复制代码
这里使用摄像头随便识别一下人物的识别,可见识别的准确度很高,可以清晰的识别到书籍上面的人脸。
可见使用官方的例程进行的识别,第一次体会到AI功能的强大。
|
|