用Python+OpenCV+PyQt開發的答題卡識別軟體
軟體使用視頻
軟體使用說明
軟體設計思路
如何設定答案
界面風格
備注
這是一個可以識別定制答題卡的軟體,它可以根據用戶自定的答案來進行識別,校對正誤并統計分數,該軟體可以識別80道選擇題,支持單選和多選,用戶在識別前可以進行影像調整,去除噪點,以減少自然光帶來的識別誤差,
注:原始碼需付費下載,如不需要,可以就看下軟體的設計思路,希望能夠幫到你,
原始碼下載地址:
https://download.csdn.net/download/La_vie_est_belle/18371132
https://k.koudai.com/l1jMrXp5
軟體使用視頻
用Python+OpenCV+PyQt開發答題卡識別軟體
軟體使用說明
1. 下載原始碼后,首先安裝依賴庫,專案所用到的依賴庫已經放在了requirements.txt檔案中,大家可以使用以下命令進行安裝(注意要先進入專案路徑):
pip3 install -r requirements.txt
2. 安裝完畢后,運行main.py即可打開軟體:

3. 接著點擊"請選擇答案檔案"按鈕選擇試卷的標準答案:

4. 然后點擊"影像調整"按鈕,調整影像識別引數,去除影像噪點:
- 點擊定位按鈕,定位試卷:


- 調整高斯模糊值以及Thresh閾值,去除噪點,可以看到學生填涂區域(準考證號和選擇題)的很多噪點已經被清除了,接著點擊確定引數按鈕即可,之后在答題卡識別時都將以該引數調整影像:


5. 最后點擊開始識別按鈕進行識別,識別出來的準考證號和選擇題填涂區域將顯示在螢屏上:
注:每張答題卡都將會驗證6次,驗證次數可以在settings/config.json檔案中修改,

在下方的表格中會顯示學生的準考證號以及填涂答案,如果文本為紅色,則說明學生的答案跟標準答案不匹配,如果單元格是空的話,說明學生未填涂或者光線導致的識別誤差(可以再調整識別引數),
6. 全部識別完畢后,點擊"停止識別"按鈕,再點擊"匯出成績"按鈕即可獲得識別結果的Excel表格:

軟體設計思路
1. 首先設計好答題卡模板,在四個邊角加上定位標志,

2. 將答題卡模板各個區域涂黑,然后使用OpenCV獲取到準考證區域和選擇題區域所有的長方形輪廓,將所有目標填涂區域的輪廓坐標進行保存,因為圖片質量很高,所以我們可以用OpenCV很容易地獲取到描黑的填涂區域輪廓,此時程式所需的答題卡識別坐標檔案就制作好了,

3. 之后我們識別學生填涂的答題卡時,可以從檔案中直接讀取坐標,然后讓程式判斷相應區域的非零值(None Zero Value),符合條件的話說明學生有填涂該區域,準考證區域的判斷稍有不同,我們應該判斷非零值最符合條件的一項,因為同一列只能填涂一個數字,描得最黑的那個區域上的數字即為目標數字,
4. 開始識別時打開了一個識別執行緒,該執行緒接收攝像頭傳過來的影像,在定位、優化、識別圖片之后,通過PyQt信號將準考證號和選項回傳給主視窗,
5. 識別出來后,將學生的準考證號和選項顯示到PyQt的QTableWidge控制元件上,如果學生選項跟答案的字串不一致,則標紅并且扣除相應分數,
6. 最后利用openpyxl模塊生成excel,
如何設定答案
請將標準答案放在txt檔案中:

每一行填寫一個答案,左側為題號,中間為標準答案,右側為該題分值,題號、標準答案和分值用-進行分隔,
如果某一題是多選的話,那只用把當中的選項修改下就行了:1-AB-1
界面風格
該軟體還提供了三種不同的界面風格:
flatwhite.css:

lightblue.css:

psblack.css:

可以在main.py中修改以下代碼來設定不同的風格:
qss = read_qss('./res/qss/flatwhite.css')
app.setStyleSheet(qss)
備注
1. 答題卡模板已經隨原始碼放在專案檔案夾中,可以自行列印出來填涂,

2. 答題卡四個邊角處有長方形黑塊,用于定位,所以在識別時一定要讓攝像頭看到這四個角,
3. 請在識別前調整影像,否則影像的噪點會很多,不利于識別,
4. 由于是在自然光下進行的識別(不是在機盒的暗室中),所以自然光有一定小概率導致識別誤差,
5. 當因為光照無法定位或識別到答題卡時,用戶可以用手輕輕觸碰下答題卡,
6. settings/config.json中的verify_num為驗證次數,改大可以提高驗證準確率,但會影響識別速度,stu_number_length為準考證號長度,該值可以依據學生考試時所用的準考證號長度來定,最大值為6,
7. 程式所用的攝像頭是720p的,即解析度1280x720,
8. 外置攝像頭插上后可通過界面上的"更換視頻設備"按鈕來更換視頻源,
9. 在答題卡下墊上白紙可使識別效果拔群(像視頻中那樣),
10. 如果其他疑問或建議請私信我,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/286305.html
標籤:python
