何國康,張志勇
(山西農業大學 工學院,山西晉中 030801)
在現實生活中,照相機的拍照等動作往往需要通過手動操作相機按鈕來完成,這種方式在集體拍照、自拍等缺少拍照人員的情況下很不方便。隨著科技的發展,人類進入智能化時代,其中語音識別技術在發展過程中逐步走向成熟[1]。為了解決以上問題,使照相機擺脫手動操作,提出的系統將非特定語音識別技術運用到照相機上,通過語音識別技術來完成照相機的拍照任務。語音識別技術時時刻刻影響著人們的生活,所以語音識別技術的研究和語音識別產品的研發對人們生活水平的提高有著重要的意義[2]。
語音識別技術應用在照相機上可以使照相機的操作更簡單,從傳統的按鈕到語音識別控制,極大地方便了相機的使用。目前,大多數語音識別主要在PC 機上進行開發,其優點是PC 機的性能較好,可以運行更復雜的算法,但是可移植性非常低[3]。文中主要以嵌入式微控制器為核心,對系統加以實現,包括硬件的設計和軟件設計,相對于PC 機有體積小、功耗低、運用靈活等特點[4]。
按照系統功能及指標要求,系統主要包括電源模塊、STM32F407ZGT6 最小系統、JTAG 下載電路、OV2640 攝像頭、STC11L08XE 最小系統和LD3320 語音識別系統[5]。整個系統由5 V 電源供電,在開機狀態下,系統采集到“開始”關鍵詞時,2.8 寸TFTLCD 可以實時顯示彩色攝像頭OV2640 所采集到的圖像;當識別到“對比度”關鍵詞時,系統會對所采集圖像的對比度進行逐次加一調整;當識別到“特效”關鍵詞時,系統會對采集的圖像進行特效的調整,比如使圖像灰度化、綠色化、黃色化等。系統總體結構框圖如圖1 所示。

圖1 系統總體結構框圖
濾波電路對于一個系統的穩定運行非常重要,所以系統根據需求設計了帶有濾波電路的5 V 轉3.3 V 穩壓電路,穩壓芯片采用AMS1117-3.3 線性穩壓芯片。該芯片的輸入電壓范圍為4.75~12 V,允許最大的輸出電流為1 A,輸出電壓為3.3 V[6]。
在STM32 中,需要給系統提供一個8 MHz 的外部晶振作為系統時鐘[7]。除此之外,有時還需要給系統提供一個32.768 kHz 的RTC 時鐘振蕩器。如果不使用系統內部RTC 時鐘也可以不設計這個電路。對于8 MHz 的外部晶振,需要在晶振的輸入和輸出端分別接入22 pF 的電容,同時需要在輸入和輸入端之間并聯一個1 MΩ的電阻,系統才能正常工作[8]。系統時鐘電路如圖2 所示。

圖2 系統時鐘電路
OV2640 攝像頭是一款CMOS 類型圖像傳感器,支持輸出最大為200 萬像素,支持使用VGA 時序輸出圖像數據,輸出的圖像數據格式支持YUV、YCbCr422、RGB565 以及JPEG 格式[9]。當直接輸出JPEG 格式的圖像時,可大大減少數據量,方便網絡傳輸。由于系統需要在TFT 液晶顯示屏上直接顯示出來,所以需要選擇RGB565 格式。攝像頭內部集成了圖像補償,同時還支持伽馬曲線、白平衡、飽和度、色度等基礎的圖像處理[10]。根據處理器的性能,傳感器輸出圖像數據幀率為15~60 幀范圍可調[11]。圖像采集電路的連接方式如圖3 所示。

圖3 圖像采集電路
系統LCD顯示模塊采用的是2.8寸TFT液晶顯示屏幕,它可以顯示240×320 像素的RGB565 格式[12]。由于STM32 芯片中帶有FSMC 專用接口,所以顯示屏可以采用16 位并行方式與STM32 芯片進行連接,相對于傳統的8 位接口方式,傳輸速率得到了很大的提升[13]。由于屏幕自身帶有RAM 存儲器,所以系統工作時可以直接采用DMA 方式將攝像頭采集的圖像直接傳輸到顯示屏RAM 中,大大減少了CPU 資源[14]。LCD 顯示電路具體實現方式如圖4 所示。

圖4 LCD顯示電路
系統軟件部分的設計使用Keil集成開發環境,對于STC11L08XE 和STM32F407ZGT6 的開發,Keil 分為兩種不同的版本,STC11L08XE 單片機的開發需要使用KeilforC51,而STM32F407ZGT6嵌入式微控制器的開發需要KeilforARM 版本[15]。Keil 能夠實現程序的編輯、編譯、連接、調試、仿真等整個開發過程[16]。
系統開機后,首先對STM32、STC11、LD3320、OV2640 和LCD 進行初始化,語音識別部分由STC11 單片機和LD3320 語音識別芯片協同完成。識別到系統語音庫中的關鍵詞時,STC11 單片機通過串口將數據發送給STM32 嵌入式微控制器,嵌入式微控制器根據接收的數據進行一系列的照相機操作。當系統識別到“開始”關鍵詞時,系統進入實時圖像采集界面,OV2640 采集的圖像在LCD上顯示;系統識別到“特效”關鍵詞時,每識別一次,圖像會變換一次特效;當系統識別到“縮放”關鍵詞時,LCD 顯示的圖像會被縮放;識別到“拍照”關鍵詞時,系統進行一次拍照操作。系統的主流程控制圖如圖5 所示。

圖5 系統主流程控制圖
語音識別系統是通過STC11 單片機和LD3320語音識別芯片來完成的,STC11 單片機和LD3320 之間通過并行方式連接。語音識別程序的設計需要采用中斷方式來完成,它的工作分為單片機初始化和語音識別初始化、寫入識別關鍵詞、開始識別和中斷響應幾個步驟。
1)單片機初始化和語音識別初始化。在初始化程序中,需完成軟件復位、工作模式設定、系統時鐘頻率設置、FIFO 設定。
2)寫入識別關鍵詞。關鍵詞需要根據LD3320芯片關鍵詞寫入規則進行寫入,每一個關鍵詞應對應一個存儲字節,關鍵詞需要有相應的編號,它可以相同或不連續,但是數值要小于256。關鍵詞需要使用標準普通話的漢語拼音,兩個字之間需要加一個空格,表1 是該系統的關鍵詞示例。

表1 關鍵詞示例
3)開始識別。在語音開始識別之前需要設置幾個相關的寄存器,麥克風語音的輸入需要用到ADC轉換通道,可以通過設置ADC 的增益來設置麥克風的靈敏度,麥克風的靈敏度越高,可以識別的距離越遠,但是抗干擾能力比較弱,容易發生誤識別。
4)中斷響應。當麥克風采集到聲音時,不管識別的結果是否與庫中的關鍵詞相匹配,都會產生一個中斷信號。若識別到正確的結果,則STC11 單片機會通過串口向STM32 發送一個操作數據。
系統的照相機部分是使用STM32F407ZGT6 芯片實現的,照相機系統主要由OV2640 攝像頭和TFTLCD 組成。STM32 和攝像頭采用DCMI 接口連接,圖像的傳輸使用DMA。圖像采集程序流程圖如圖6 所示。圖像采集過程的主要函數如下:

圖6 圖像采集程序流程圖

為了驗證設計的語音控制相機的可行性和實驗效果,基于上述設計方案制作了一款基于語音識別控制的相機。系統PCB 圖和實物圖如圖7、8 所示。

圖7 系統PCB圖

圖8 系統實物圖
系統的相機功能是由語音識別進行控制的,現將程序下載好后對語音控制功能進行測試。
系統測試步驟如下:
1)系統開機后進入系統初始化界面,在顯示屏上可以看到系統創作時間等信息。
2)靠近麥克風用普通話說“開始”關鍵詞,系統識別成功后顯示屏上會實時顯示攝像頭采集的圖像,然后依次說出“特效”“對比度”“飽和度”“縮放”等關鍵詞,觀察屏幕上實時圖像的變化。
3)系統識別到“拍照”關鍵詞時,實時圖像結束傳輸,顯示屏顯示傳輸結束前一刻的畫面。
為了保證測試的準確性,分別在安靜環境和嘈雜環境對系統的6 條語音進行了測試。測試時分別讓3 個非特定人對每條語音指令進行10 次測試,記錄成功的次數,測試的結果如表2 所示。

表2 系統測試結果
由測試的數據可以得出,在安靜環境下,系統的識別率可以穩定達到85%以上;但在嘈雜環境下,識別率相較于安靜環境下有所降低。同時,在安靜環境中的穩定性也比嘈雜環境中要好很多,在安靜環境下,一般說一遍語音就可以識別到,個別比較長的關鍵詞需要說2 到3 遍;但在嘈雜環境下,有時需要重復說幾遍關鍵詞才可以識別,在識別速度上嘈雜環境也較慢于安靜環境。
文中采用STM32F407ZGT6 微控制器和LD3320語音識別模塊,完成了一套基于語音識別的相機控制系統。該系統將嵌入式、單片機、語音識別和通信技術融合在一起,實現了照相機的拍照、對比度調整、特效變換、縮放等功能。經過測試,系統各個功能模塊工作正常,語音識別成功率也達到了預定的要求。但不可否認,系統還存在許多不足,語音識別部分與現在的先進水平相比存在非常大的差距,功能還不夠完善,以后要注重提高語音識別的正確率和精準度以及系統的抗干擾能力,滿足不同環境下的使用需求。