羅亮 王盼盼
浙教版高中信息技術教材《數據與計算》,有一個答題卡填圖識別算法解析示例,因為貼近生活,學生們都很感興趣。這個案例可以進一步拓展,如通過文檔高拍儀對答題卡數據進行采集,那就能實現一個真實的答題卡識別工具。當然,最好的拓展莫過于自己搭建一個功能更加強大的智能文檔高拍儀原型,那樣不僅可以識別答題卡,還可以識別文字、二維碼之類。
文檔高拍儀原型的功能分析
文檔高拍儀的基本功能是圖像采集,增強功能是光學字符識別、條碼識別等。圖像采集分辨率是決定高拍儀型號的重要依據,像素太高,對圖片的處理速度和傳輸會提出新的要求,一般來說,500W像素比較合適??梢?,文檔高拍儀的原型在硬件方面要求很低,選擇任何一款迷你電腦再結合攝像頭即可。
在學校眾多的開源硬件中,學生選擇虛谷號作為核心硬件。虛谷號是一個面向人工智能教學和Python編程學習的開源硬件平臺,板內集成高性能處理器和通用單片機、兼容Arduino,可掛載攝像頭等各種通用外設,可以外接鍵盤顯示器成為獨立主機,也可以自帶電源獨立運行Arduino、Python程序進行相應信息處理。想象一下,虛谷、充電寶、攝像頭組合在一個外殼之中,形成手持設備,隨走隨拍,是多么方便的事情啊。
圖像采集完成以后,可以嘗試使用開源的光學字符識別軟件進行字符識別或者使用百度大腦AI開放平臺的圖片文本識別功能??晒┻x擇的基于Python的開源光學字符識別軟件有darknet-ocr、Pyocr、pytesser、Tesseract OCR、CNOCR。這些開源軟件各有擅長之處,CNOCR適合識別圖片中的中文,但該開源軟件需要在Windows平臺下進行識別,所以筆者最終還是采用調用百度AI功能實現文檔高拍儀的增強功能。
使用高拍儀肯定需要了解當前工作狀態(tài),虛谷號自帶的LED燈則派上了用場。當然,也可以加一塊小型的OLED顯示屏。經過以上分析,可以得到文檔高拍儀原型所需軟硬件,如圖1所示,對應處理流程如圖2所示。
文檔高拍儀原型功能實現
筆者采用模塊化思想將高拍儀功能分解細化,逐一實現,然后合并功能,大致分成圖片采集、啟動處理、狀態(tài)表示、OCR識別、結果呈現五大方面。
1.圖片采集
圖片采集是視覺處理Opencv模塊的一個基本功能。筆者將USB攝像頭通過USB連接上虛谷號之后,就完成了硬件準備。frame代表攝像頭采集的像素內容,后期需要對frame進行集中處理。在“測試場景”窗口為當前活動窗口的情況下,按'q'鍵退出圖片采集,按's'鍵將采集的圖像以文件形式保存。在后期功能合成時,如cv.imshow、cv. destroyAllWindows這些與目標功能達成不一致且耗費資源的代碼可以略過不予使用。相關關鍵性程序代碼如圖3所示。
2.啟動圖片采集識別
一般情況下,高拍儀通過按鍵方式實現拍照。虛谷號自身沒有按鍵,只是預留有相關接口。若要啟動圖片采集功能,可以采取使用虛谷號擴展板或通過攝像頭采集識別圖片或聲音中的特殊標志來實現。由于已經采用攝像頭來采集圖片而且OpenCV視覺處理可以涉及輪廓檢測,因此可以劃過與被采集場景背景對比強烈的純色物品,只要虛谷號識別出該物品輪廓面積在一定范圍內,就表示開始啟動拍照采集。相關關鍵性程序代碼如圖4所示。
3.工作狀態(tài)顯示
虛谷號兼容Arduino,自帶一個可程序控制的LED。從虛谷號開機到準備進入圖片采集狀態(tài)再到圖片采集進行中都可以借助該LED的不同頻率的亮和滅來表示對應的狀態(tài)。實現狀態(tài)顯示的程序代碼與借助pinpong庫來實現基本一致,亮燈滅燈的次數、亮燈持續(xù)時間、滅燈持續(xù)時間,可以通過一個自定義函數實現。例如,ledstatus(led,5,0.2,0.2)表示等待啟動;ledstatus(led,3,1,1)表示已采集1張圖片;ledstatus(led,2,2,0.5)表示圖片識別完成,可通過客戶端查看識別結果。狀態(tài)顯示相關模塊代碼使用簡單通用適應各類開源硬件的pinpong庫完成,如上頁圖5所示。
4.OCR識別
圖片采集后,可以考慮文檔高拍儀增強功能實現。從實現途徑便捷性與OCR識別效果角度考慮,最終決定還是使用調用百度API的方式來實現OCR識別。訪問百度AI開放平臺,注冊成為百度開發(fā)者并創(chuàng)建應用后就能得到相應的AppID、API Key、Secret Key信息。根據圖6所示的調用百度AI文本識別示例代碼可以完成單張圖片中的文字識別。
經過測試,在同等條件下,采用百度API調用方式識別效率比使用開源OCR軟件識別效率更高。
5.識別結果呈現
每次文字識別結果可以直接累加存儲在單個文本文件中,也可以格式化為網頁文件。針對該存儲識別結果的文件可以通過建立Http服務,讓任何一臺與虛谷迷你電腦聯網的客戶端查閱。
虛谷自帶WIFI而且安裝了Python,建立Http服務的代碼很簡單而且實用,格式如下:
python3 -m http.server 8000
該代碼含義為指定虛谷迷你電腦當前文件夾為Http服務根目錄,指定訪問端口為8000。
與虛谷迷你電腦聯網的任何一臺客戶端都可以打開瀏覽器,輸入訪問網址(http://虛谷迷你電腦IP:8000/)查閱識別結果。
文檔高拍儀原型功能改進
經過測試,以虛谷號為核心完成的文檔高拍儀原型能夠基本完成預設的功能,但在調試過程中還發(fā)現存在一些問題,還需要不斷迭代完善,如:
①攝像頭的分辨率不高而且變焦過慢,導致抓拍圖像并不清晰;
②缺少補光功能導致被拍攝對象本身呈現的亮度不一致,影響后期的文字識別;
③適當增加虛谷號的傳感控制與狀態(tài)表示,更有利于操作者理解操作進程;
④運用OPENCV視覺處理能力有待進一步加強,如調整對比度、銳化、降噪等。
運用虛谷號結合攝像頭實現文檔高拍儀功能,是一個典型的開源硬件項目,雖然解決的過程有些坎坷,但收獲很多。教師在學生的技術基礎上,給予學生觸手可及的創(chuàng)意方案庫,充分調動學生的創(chuàng)意,結合實際場景,讓他們不斷提出新的需求,不斷挑戰(zhàn)新的難題,做出實踐性很強的解決方案。類似虛谷號的迷你電腦能玩的項目其實非常多,如視覺處理眼睛控制鼠標實現媒體互動、視覺處理無人機禁飛區(qū)域判斷等,希望有更多的老師帶著學生一起探究。