楊蒙蒙,鄧三星,劉越奇,李克強,呂勇杰
(黃河交通學院 河南省智能制造技術與裝備工程技術研究中心,河南焦作,454950)
隨著中國汽車數量逐年增加,智能交通成為當前科研研究的熱點,其中人工智能技術和圖像識別技術得到快速發展。車牌智能識別技術在智能停車場收費管理、小區門禁管理等領域有廣泛的應用[1~2]。通過單片機控制技術和圖像識別技術結合,設計一種基于OpenMV的車牌識別系統,通過OpenMV 模塊進行車牌圖像準確識別,并能夠進行語音播報,且能通過OLED 模塊顯示車輛入場的計時提示、出場的繳費提示,從而達到車牌識別系統智能控制的目的。
車牌識別系統的硬件部分由主控芯片STM32F103、OpenMV 模塊、OLED 顯示模塊、語音模塊以及電源等模塊構成。系統通過攝像頭進行車牌圖像采集,然后由主控芯片STM32 進行圖像處理,輸出識別結果。單片機根據識別結果計算停車時長以及費用,并驅動語音模板播報數據,最后將檢測數據實時顯示在OLED 中。
車牌識別系統的單片機最小系統由STM32F103C8T6芯片和相應的外圍電路組成。STM32F103C8T6 芯片是由2.0~3.6 V的直流電壓供電[3]。該芯片是STM32 系列64位引腳和128K flash,采用單線串行輸出,以及JTAG 接口方式,具極高性能、極低價格、極低功耗等優點。晶振電路是單片機運行的一個重要因素。由于晶振電路的頻率穩定性極好,而且這類電路能有效抵御外界因素的不利干擾,所以我們通常選擇晶振電路來產生系統參考頻率。使用晶振電路產生的頻率可以保證其頻率精度。
STM32F103C8T6 單片機最小系統包含1個8MHz 晶振、2個22pF 電容等,它是維持系統正常穩定運行的基本電路。電路組成如圖1所示。

圖1 STM32最小系統電路圖
車牌識別系統的圖像識別模塊選用OpenMV,它是一款小巧,低功耗,低成本的攝像頭模塊[4],其主要應用于機器視覺領域。其核心為STM32F427,在緊湊的硬件模塊上,集成OV7725 攝像頭芯片,可采用C 語言高效實現機器視覺算法[5]。OpenMV 使用的STM32F427 硬件資源豐富,可 提 供UART、I2C、SPI、PWM、ADC、DAC、GPIO 接口,擴展外設功能比較方便[6]。USB 接口用于將OpenMV IDE連接到計算機,以提供編程幫助、調試和固件升級。
車牌識別系統的顯示模塊采用OLED12864 模塊,用于車牌信息、停車計時與計費信的顯示。OLED12864 顯示器分辨率為128×64, 屏幕尺寸為0.96 寸[7]。單片機系統地將控制電平信號輸入給顯示模塊中控制其顯示的內容,且該系統都由這種方式將所產生的數據顯示在這些模塊上面。OLED12864 液晶顯示屏原理圖如圖2所示。

圖2 顯示模塊電路圖
車牌識別系統識別車輛車牌信息后,經常需要在車輛進出的時候需要播放特定的語音信息。因此本系統需要選擇一款性價比超級高,播放語音的音質特別好的語音播報的模塊,系統通過串口控制且有4 路通道,電壓范圍8 ~24V的喇叭。語音播報模塊電路如圖3所示。

圖3 語音播報模塊電路
系統開機后,首先初始化數據,基于STM32 和OpenMV 對車牌信息進行相應的識別工作。如果檢測到信號,就通過AD 轉換傳遞給單片機處理,然后驅動語音模塊播報入場信息,單片機刷新OLED,完成車牌號顯示。當第一次識別到車牌號,判定為車輛入場,開始計時,并語音播報:“你好,歡迎停車”。第二次識別到車牌號,判定為出場,停止計時,并將停車時長顯示在OLED 顯示模塊上,并將停車費用顯示在OLED 屏上,同時語音播報:“一路順風,歡迎下次光臨”。系統主程序流程圖如圖4所示。

圖4 系統主程序流程圖
圖像識別程序通過OpenMV 對車牌的圖像信息進行拍攝以及識別,識別結果經過模塊處理傳輸至單片機進行判斷,執行的過程如圖5所示。OLED 顯示程序設計主要是按照OLED的操作來進行程序編寫,即按照寫指令、寫數據,寫地址的方式對需要寫入的數據依次進行寫入。設計語音播報模塊,根據單片機處理識別結果之后驅動模塊進行對應的入場、出場語音播報。

圖5 OpenMV數據采集子程序流程圖
編程軟件選擇Keil 4 軟件,采用C 語言進行編程。首先編寫車牌識別系統設計代碼,然后在Keil 4 軟件進行代碼編譯并調試,對出現的異常情況進行排查,編譯成功將.hex文件下載至單片機,對程序燒錄,最后進行OpenMV、語音播報模塊、顯示傳感器子程序調試。觀察車輛的入場和出場是否能夠正確獲取數據,驅動語音模塊進行響應播報。程序編譯效果如圖6所示。

圖6 編譯效果圖
主要源程序如下:
#include "sys.h"
#include "delay.h"
#include "FreeRTOS.h"
#include "task.h"
#include "stdio.h"
#include "sys_cfg.h"
#include "log/log.h"
#include "sys_boot.h"
//任務句柄
TaskHandle_t StartTask_Handler;
//任務函數
void start_task(void *pvParameters);
TaskHandle_t LED0Task_Handler;
//任務函數
void led0_task(void *pvParameters);
int main()
{
HAL_Init(); //初始化HAL庫
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYG ROUP_4);
Stm32_Clock_Init(RCC_PLL_MUL9);//設置時鐘,72M
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_TIM1_CLK_ENABLE();
__HAL_RCC_TIM2_CLK_ENABLE();
__HAL_RCC_TIM3_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
__HAL_RCC_AFIO_CLK_ENABLE();
//使能I/O 復用時鐘 //使能ADC1 時鐘
delay_init(72); //初始化延時函數
log_init();
sys_boot(); /*系統啟動*/
return(1);
}
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); //進入臨界區
vTaskDelete(StartTask_Handler);
//刪除開始任務
taskEXIT_CRITICAL(); //退出臨界區
}
//LED0 任務函數
void led0_task(void *pvParameters)
{
float dis = 0;
while(1)
{
printf("1111");
vTaskDelay(1000);
}
}
系統首先利用OpenMV 通過對大量車牌圖像樣本進行訓練,生成模型,提高系統對車牌圖像的識別效率和正確率。模型訓練好之后,將OpenMV 模塊對準測試的車牌號就可以進行識別。訓練測試效果如圖7所示。

圖7 訓練測試效果圖
利用OpenMV 對車牌圖片訓練過程中,識別到某個字符時,拉高相應OpenMV 引腳的電平。STM32 單片機在檢測對應引腳電平過程中,檢測某引腳為高電平,判定為識別到對應的車牌,然后由主控芯片向OLED12864 顯示模塊發出指令,顯示車牌信息。
具體識別過中,首先對車輛進行進場識別,OpenMV正確識別車牌信息后,OLED12864 顯示模塊顯示歡迎停車與車牌信息,如圖8所示。

圖8 車輛進場識別效果圖
車輛出場時,OpenMV 再次對車輛信息進行出場識別,正確識別車牌信息后,OLED 12864 顯示模塊顯示停車時長,并自動計算費用,如圖9所示。

圖9 車輛出場識別效果圖
仿人機器人的步態行走設計,利用STM32 單片機來控制開源舵機控制器,進而操作舵機,完成仿人機器人的行走、轉彎、翻滾動作,可實現在線調試與脫機運行,動作相對穩定、姿態標準。仿人機器人脫機調試時,能夠做到斷開與上位機的連接后,脫機自動運行編寫好的動作組文件,各模塊配合運行平穩,舵機角度可無級調節、扭矩大,能勝任一些較復雜動作,動作運行流暢,但是也存在一些問題,例如受限于電池包的重量體積等,故機器人續航時間較短,不能連續長時間運行,這些都需要在后期的改進中逐步優化,本設計為國內外相關仿人機器人的研究提供了一些借鑒。
基于圖像識別的車牌識別系統利用OpenMV 模塊和STM32F103C8T6 單片機,完成圖像識別硬件電路設計和軟件流程設計,通過大量車牌樣本數據的訓練,得到訓練模型,能夠實現車輛進場和出場的快速車牌識別,并通過設計語音播報模塊進行語音播報提示,最后通過OLED12864 模塊顯示車輛停車時間,并可實現自動計費功能,初步實現車牌識別系統智能控制效果,為智能停車場提供參考案例。