本次為大家推薦的迪文開發(fā)者論壇開源項目是一個很有意思的模擬人眼跟隨運動的例程。工程師使用幾張人眼圖片素材,實現(xiàn)了眼珠運動、眨眼、人臉識別和跟隨等功能,讓我們一睹為快:
01
方案簡介
1. UI圖片素材
編者注:迪文智能屏是基于圖片來完成UI開發(fā)的,可以便捷的實現(xiàn)各類顯示效果。
2.界面開發(fā)
通過DGUS軟件開發(fā)界面比較簡單,只需要兩個圖形控件即可。在該例程中,工程師選擇了一款2.1寸圓形智能屏。
3.實現(xiàn)眨眼
隔一段時間讓眼皮的圖片輪流顯示一下://眨眼動畫
void blink_animat(void)
{
if(blink_flag == 0)
{
blink_cnt++;
if(blink_cnt >= 4)
{
blink_flag = 1;
}
}
else
{
blink_cnt--;
if(blink_cnt <= 0)
{
blink_flag = 0;
} }
write_dgus_vp(0x3000, (u8 *)&blink_cnt, 2);
}
void blink_run()
{
static u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 2000000)
{
run_timer_cnt = 0;
blink_animat();
Delay_ms(30);
blink_animat();
Delay_ms(30);
blink_animat();
Delay_ms(30);
blink_animat();
Delay_ms(30);
blink_animat();
Delay_ms(30);
blink_animat();
Delay_ms(30);
blink_animat();
Delay_ms(30);
blink_animat();
Delay_ms(30);
}
}
4.實現(xiàn)眼珠自然左右看
這里和眨眼類似,但是需要比較晶振的控制眼球運動的時間,這里經(jīng)過多次調(diào)試,工程師設(shè)計出了下面這套代碼。//眼珠動畫
void eyeball_animat(void)
{
eyeball_timer_cnt++;
if(eyeball_timer_cnt < 50)
{
eyeball_cnt = 20;
}
else if(eyeball_timer_cnt < 51)
{
eyeball_cnt = 50;
}
else if(eyeball_timer_cnt < 52)
{
eyeball_cnt = 80;
}
else if(eyeball_timer_cnt < 53)
{
eyeball_cnt = 94;
}
else if(eyeball_timer_cnt < 103)
{
eyeball_cnt = 94;
}
else if(eyeball_timer_cnt < 104)
{
eyeball_cnt = 80;
}
else if(eyeball_timer_cnt < 105)
{
eyeball_cnt = 50;
}
else if(eyeball_timer_cnt < 106)
{
eyeball_cnt = 20;
}
else if(eyeball_timer_cnt < 107)
{
eyeball_cnt = -10;
}
else if(eyeball_timer_cnt < 108)
{
eyeball_cnt = -40;
}
else if(eyeball_timer_cnt < 158)
{
eyeball_cnt = -54;
}
else if(eyeball_timer_cnt < 159)
{
eyeball_cnt = -40;
}
else if(eyeball_timer_cnt < 160)
{
eyeball_cnt = -10;
}
else if(eyeball_timer_cnt < 161)
{
eyeball_cnt = 20;
eyeball_timer_cnt = 0;
}
//左右移動
// if(eyeball_flag == 0)
// {
// eyeball_cnt++;
// if(eyeball_cnt >= 94)
// {
// eyeball_flag = 1;
// }
// }
// else
// {
// eyeball_cnt--;
// if(eyeball_cnt <= -54)
// {
// eyeball_flag = 0;
// }
// }
if(eyeball_cnt >= 0)
{
eyeball_pos[0] = 0x00;
eyeball_pos[1] = eyeball_cnt;
}
else
{
eyeball_pos[0] = 0xFF;
eyeball_pos[1] = (eyeball_cnt & 0xFF);
}
write_dgus_vp(0x3111, (u8 *)&eyeball_pos, 2);
}
void eyeball_run()
{
static u32 run_timer_cnt = 0;
run_timer_cnt++;
if(run_timer_cnt >= 20000)
{
run_timer_cnt = 0;
eyeball_animat();
}
}
5.加入ESP32人臉識別,實現(xiàn)眼珠跟隨人臉運動
這里的處理方式是,檢測到人臉的時候眼睛自己不運動了,定義一個變量在while循環(huán)中自增,當(dāng)自增到一定數(shù)值時,眼珠就自己運動。當(dāng)串口收到數(shù)據(jù)時,這個變量就清零,然后只根據(jù)人臉的位置進行眼睛的移動。主要代碼如下:if(rec_data_timer_cnt < 1000000)
{
rec_data_timer_cnt++;
}
else
{
eyeball_run();
}
extern u32 rec_data_timer_cnt;
extern u16 eyeball_timer_cnt;
void Communication_CMD(u8 st)
{
if((uart[st].Rx_F==1 )&&(uart[st].Rx_T==0))
{
rec_data_timer_cnt = 0;
eyeball_timer_cnt = 0;
#if(Type_Communication==1)
Describe_8283(st);
#elif(Type_Communication==2)
Describe_Modbus(st);
#endif
uart[st].Rx_F=0;
uart[st].Rx_Num=0;
}
}
-
人臉識別
+關(guān)注
關(guān)注
76文章
4070瀏覽量
83737 -
迪文屏
+關(guān)注
關(guān)注
3文章
83瀏覽量
5744
發(fā)布評論請先 登錄
百度地圖與雅迪推出組合屏智能導(dǎo)航解決方案
迪文COF屏產(chǎn)線二期擴產(chǎn)圓滿成功,首款高性價比COF屏正式發(fā)布!

迪文科技邀您共赴上海國際壓縮機及設(shè)備展覽會

迪文高校暑期實踐活動圓滿結(jié)束

迪文串口屏如何與電腦連接
迪文串口屏ModBus開發(fā)流程

迪文串口屏基礎(chǔ)GUI開發(fā)流程

評論