在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

聚豐項目 > 基于RT-Thread攝像頭車牌圖像采集

基于RT-Thread攝像頭車牌圖像采集

使用基于RT-thread操作系統(tǒng)的AB32VG1開發(fā)板作為主控,對ov7670攝像頭進行圖像采集,并使用串口發(fā)送圖片RGB565格式到PC供opencv進行圖像識別。 原項目設(shè)想在開發(fā)板上進行采集的同時并通過簡單的二值算法和插值算法實現(xiàn)車牌號識別,但實踐中發(fā)現(xiàn)開發(fā)板的ram并不夠保存采集回來的圖像信息,與數(shù)據(jù)手冊中介紹的192k有一定差距,實現(xiàn)用戶能使用的ram是70k;同時原設(shè)想是帶lcd屏幕的,但最后發(fā)覺io口數(shù)量不夠,只能通過串口調(diào)試顯示,但lcd屏幕的 spi代碼仍保留在原碼中,可供參考。 目前開發(fā)板通過攝像頭采集完整數(shù)據(jù)部分已經(jīng)完成,并且可以通過串口uart1發(fā)送到上位機進行圖像顯示。識別號牌上位機需要另外再做。

Mak_z Mak_z

分享
3 喜歡這個項目
團隊介紹

Mak_z Mak_z

團隊成員

Mak_z 高級軟件工程師

分享
項目簡介
使用基于RT-thread操作系統(tǒng)的AB32VG1開發(fā)板作為主控,對ov7670攝像頭進行圖像采集,并使用串口發(fā)送圖片RGB565格式到PC供opencv進行圖像識別。 原項目設(shè)想在開發(fā)板上進行采集的同時并通過簡單的二值算法和插值算法實現(xiàn)車牌號識別,但實踐中發(fā)現(xiàn)開發(fā)板的ram并不夠保存采集回來的圖像信息,與數(shù)據(jù)手冊中介紹的192k有一定差距,實現(xiàn)用戶能使用的ram是70k;同時原設(shè)想是帶lcd屏幕的,但最后發(fā)覺io口數(shù)量不夠,只能通過串口調(diào)試顯示,但lcd屏幕的 spi代碼仍保留在原碼中,可供參考。 目前開發(fā)板通過攝像頭采集完整數(shù)據(jù)部分已經(jīng)完成,并且可以通過串口uart1發(fā)送到上位機進行圖像顯示。識別號牌上位機需要另外再做。
硬件說明

WeChat Image_20211203175215.jpg

1.攝像頭ov7670fifo:采用csi總線的普通30w攝像頭。考慮到用模擬讀取攝像頭,io的反轉(zhuǎn)速度可能不能滿足高速采集的需要,因此保險起見,直接使用帶fifo的攝像頭。sccb總線采用全模擬的方式,跳過了所有中間層,直接操作寄存器,提高了總線的時鐘;

WeChat Image_20211203175215.jpg

2.串口工具PL2302(ttl轉(zhuǎn)RS232),一款與pc通訊的串口工具,免驅(qū)。

WeChat Image_20211203175644.jpg

3.總接線圖

WeChat Image_20211203175228.jpg



軟件說明

一、軟件流程圖

WeChat Photo Editor_20211203180021.jpg


二、關(guān)鍵代碼

/* 攝像頭IO口采用直接操作寄存器的方式實現(xiàn),極大提升io速度 */

#define BSP_FIFO_RCK_PIN            "PA.5"

#define BSP_FIFO_RCK_SET_LOW         (GPIOA_BASE[GPIOx] &= ~(1ul << 5))

#define BSP_FIFO_RCK_SET_HIGH         (GPIOA_BASE[GPIOx] |= (1ul << 5))

 

/* sccb總線的初始化并設(shè)置ov7670相應(yīng)寄存器 */

    sccb_init();

 

    if(sccb_write_reg(0x12, 0x80) == RT_FALSE){

        return RT_FALSE;

    }

 

    rt_thread_delay(50);

 

    id1 = sccb_read_reg(0x0b);

    id2 = sccb_read_reg(0x0a);

 

rt_kprintf("id1 = 0x%02x, id2 = 0x%02x\n", id1, id2);

 

    for(rt_uint16_t i = 0;i < sizeof(ov7670_init_reg_tbl) / sizeof(ov7670_init_reg_tbl[0]);i++){

        sccb_write_reg(ov7670_init_reg_tbl[i][0], ov7670_init_reg_tbl[i][1]);

}

 

/* 開啟攝像頭vsync掃描線程(沒有外部中斷因此改用輪詢的方式實現(xiàn)) */

    rt_thread_t thread;

    /* 查詢VSYNC線程 */

    thread = rt_thread_create("ov7670_vsync", ov7670_vsync_thread_entry, RT_NULL, 1024, 5, 100);

 

    if (thread == RT_NULL){

        rt_kprintf("ov7670_vsync thread create fail!\n");

        return RT_FALSE;

    }

    /* 啟動線程 */

rt_thread_startup(thread);

 

/* 提取hal庫實現(xiàn)了uart的數(shù)據(jù)發(fā)送函數(shù) */

void uart1_send(rt_uint8_t *pbuf, rt_uint32_t len)

{

    for(rt_uint32_t i = 0;i < len;i++){

        hal_uart_clrflag(UART1_BASE,  UART_FLAG_TXPND);

        hal_uart_write(UART1_BASE, pbuf[i]);

        while(hal_uart_getflag(UART1_BASE, UART_FLAG_TXPND) == 0);

    }

}


/* LCD底層驅(qū)動代碼,因為引腳不夠,所以無法演示,測試可用,另外程序里也配有寄存器版本的操作代碼 */

static rt_uint32_t spi_bit_xfer(struct rt_spi_device *device, struct rt_spi_message *message)

{

    struct rt_spi_bit_ops *ops = (struct rt_spi_bit_ops *)device->user_data;

 

    rt_uint8_t tmp_buf[1024];

    rt_memset(tmp_buf, 0, sizeof(tmp_buf));


    if(message->send_buf == RT_NULL){

        message->send_buf = tmp_buf;

    }else if(message->recv_buf == RT_NULL){

        message->recv_buf = tmp_buf;

    }else{

        return RT_FALSE;

    }

 

    if (message->cs_take){

        ops->set_cs(ops->data, PIN_LOW);

    }

#ifdef SPI_DC

    message->length & SPI_DC ? ops->set_dc(ops->data, PIN_HIGH) : ops->set_dc(ops->data, PIN_LOW);

    message->length &= ~SPI_DC;     /* 復(fù)原消息長度 */

//    rt_kprintf("message->length = %d\n", message->length);

#endif

    spi_rw_bytes(device, (rt_uint8_t *)message->send_buf, (rt_uint8_t *)message->recv_buf, message->length);

 

    if (message->cs_release){

        ops->set_cs(ops->data, PIN_HIGH);

    }

}

 

static const struct rt_spi_ops spi_bit_bus_ops ={

    RT_NULL,

    spi_bit_xfer

};




優(yōu)化思路:

1. 由于ab32vg1沒有外部中斷可以使用,ov7670的幀同步信號vsync只有500us的高電平時間,因此為了捕捉到該信號,vsync線程一直占用很多的資源;

2. 串口與上位通訊的速度目前最快只有115200bps,上位機可以接受256000bps的速度,但將驅(qū)動改為256000bps后,接收會出現(xiàn)亂碼,因此串口使用的圖片數(shù)據(jù)非常緩慢;




演示效果

WeChat Image_20211204120824.jpg


附件

(11.93 MB)下載

評論區(qū)(2 )
  • Mak_z: 附件工程包含spi LCD屏驅(qū)動和攝像頭csi接口底層代碼,可直接使用

    回復(fù)

    • jf_40520711: 你好,我們家小區(qū)門口攔桿壞了不能啟動,你這個可以識別提前預(yù)制好的車牌數(shù)據(jù),識別后自動起桿嗎,然后設(shè)定時間和感應(yīng)器,時間達到預(yù)設(shè)值并且無車通過時自動降桿嗎

      回復(fù)

主站蜘蛛池模板: 日本精品视频四虎在线观看| 日本a网| 亚洲欧洲国产精品你懂的| 国产九九热| 国产aa| 亚洲一区二区三区在线网站| 美女扒开下面让男人捅| 亚洲精品福利你懂| 色综合久久久久久久久五月性色| 青草国内精品视频在线观看| 黄色自拍偷拍| 悠悠影院欧美日韩国产| 手机看片国产免费永久| 港台无码| 性视频在线| 美女露出尿囗| 亚洲午夜久久久久久91| 久久久久久久久女黄| 嘿嘿午夜| 老熟女毛片| 四虎www.| 国产乱码精品一区二区三| 午夜神马福利影院| a级男女性高爱潮高清试| 久久99热精品免费观看无卡顿| 年轻人影院www你懂的| a级毛毛片看久久| 国产传媒在线观看视频免费观看| 亚洲人成电影| 超大乳抖乳露双乳视频| 久久精品影院永久网址| 亚洲欧美色中文字幕| 在线天堂中文在线网| 亚洲狠狠狠一区二区三区| 天堂网址| 国产片91人成在线观看| 免费看国产黄色片| 亚洲ay| 午夜剧场毛片| 美国bj69| 久久久噜噜噜|