---
# System prepended metadata

title: 試卷拍立評

---

# 試卷拍立評
## 動機與目的
#### 動機
1. 批閱者花費大量時間手改考卷與上傳分數
2. 紙張測驗結果難以統計與數位化
3. 作弊事件頻傳
4. 線上考試的不便

現今還是有許多考試或問卷是使用紙張方式進行測驗和填答，相信老師們或是曾經有大量批改過考卷的人一定都知道，改考卷和上傳成績是一個很勞心費神的事情。
第二點，紙張測驗結果難以統計與數位化，如果只是手動上傳成績到資料庫可能還可以接受，如果還要上傳學生的答案呢?動輒數十題，浪費的時間是非常可觀的。
還有作弊的問題，我們時常因為空間大小與座位數量的問題，很難真的將學生們隔開，這就很容易讓有心人瞄到附近的人在寫的答案。

有鑑於此，我們開發了試卷拍立評系統，只要對著考卷拍照或是上傳考卷的掃描圖檔，就能立即得到分數和自動訂正後的考卷並且自動上傳到學生成績資料庫，節省大量時間在閱卷上。也因為學生的答案與成績都已經及時上傳資料庫，所以老師或是學生們可以更快地得知成績的統計或是計算處理上的結果。這個時候大家可能會有個疑問，為甚麼不使用答案卡作答就好?因為不是隨處都有答案卡與讀卡機可以使用，但人手一支手機，使用我們的系統不僅有自動化的便利性還能維持紙張考卷作答的人性化。
#### 目的
1. 節省批閱與上傳成績的大量時間
2. 紙張測驗結果的統計與處理自動化
3. 更容易實現一試多卷防止作弊
我們最主要的目的當然就是節省批閱與上傳成績的大量時間，那為甚麼可以節省大量的時間呢?假設一張考卷需要1分鐘的時間來批改加上傳，一個班級50個人就需要將近一個小時在批閱上，如果使用我們的系統，從拍照到自動批改到上傳，只需要不到幾秒，速度上就快了十倍以上，如果是掃描好的圖檔直接上傳到試卷拍立評系統，省去手動拍照的時間，速度上還會更快。
因為學生的作答資訊都自動化的上傳到學生成績資料庫上了，所以在統計和計算處理上都變得更加輕鬆與即時。
第三點，一試多卷就是同樣的考試題目，但是打亂題目順序，就能分成A卷B卷C卷...等，10題就有10!種排列組合，很輕鬆就能讓每個人拿到的考卷都不一樣，就算坐附近的人瞄的到別人的答案，也會因為題目順序不同而無法直接照抄，遏止作弊的情形發生。
## 系統架構與技術內容
1. 系統架構圖

* 分為三大部分，第一個部份是終端操作系統，也就是手機或者電腦或是任何可以進行拍照的設備。我們的功能有拍照即時上傳即時顯示訂正好的考卷，或是將儲存在手機或電腦上的圖檔上傳。不僅可以一整個班級的考卷同時上傳，就算很多的班級考卷混在一起，也可以正確辨識考卷所屬。我們建議是使用電腦將掃描過後的圖檔進行上傳，不僅準確率更高，還省去拍照的動作，讓上傳到系統的速度上還會更快，因為掃描的速度絕對比手動拍照更快更輕鬆。再來是成績統計的功能，不管是總成績、總平均等都可以在裡面查詢到，最重要的是，因為我們有儲存學生每題答案的資訊，所以也可以很輕鬆地計算出學生每一題的錯誤率，對於老師們在掌握學生作答情況會有很大的幫助，這在一般紙張測驗時是很難達成的，因為很難去儲存學生的答案資訊。

* 第二個部分是辨識系統，我們將辨識系統放在透過flask所架構的伺服器上，用來接收終端上傳的圖檔，原始圖檔會先經過必要資訊提取步驟，裡面包含資料區塊和作答區塊，資料區塊包含QRcode、學號、電子郵件，作答區塊包含學生作答的資訊。提取完必要的資料後，依照個別需求放入不同的辨識模型，例如學號放入純數字字串辨識模型，電子郵件放入英數字混和字串辨識模型，學生作答的資訊放入純英文字辨識模型。辨識完成後，先從資料庫拿取標準答案用來與學生的答案做比對，得到分數，然後將正確答案還有分數訂正到原始圖檔上，回傳給終端系統，還有發送含有已訂正的考卷圖檔、分數的電子郵件給學生，同時將學生答案與分數新增至學生成績資料庫裡面。
* 第三個部分是資料庫系統，用來模擬真實的學生成績資料庫，以下是ER圖與關聯表格。
![](https://i.imgur.com/VxUVQ7R.png)
![](https://i.imgur.com/B68sXwa.png)
![](https://i.imgur.com/p7bdXZJ.png)
2. 系統的運作模式
終端系統(拍照、掃描)取得考卷圖檔，透過網路(api)上傳到辨識系統，辨識系統經過資料提取、辨識、比對、訂正圖檔、發還訂正圖檔給終端系統、傳送郵件給學生、將學生成績與答案透過網路上傳資料庫。
終端系統需要成績統計的功能，向資料庫透過網路(api)發送需求，資料庫透過網路(api)回傳查詢結果。

3. 系統之間使用的重點技術
*  flutter：終端操作系統是透過flutter框架所建構的，利用這個框架我可以很輕鬆地使用同一份程式碼解決跨平台需求的問題。
* flask：辨識系統是建立在flask所架構的伺服器上，和終端的溝通全靠api進行，flask的特點就是簡潔又便利，讓我們可以省去很多時間在網路配置上。
* 邊緣檢測與輪廓提取：辨識系統收到終端所傳上來的圖檔後，先用canny演算法檢測所有邊緣資訊，再利用輪廓檢測找出紙張位置，擺正紙張後切割出來，再使用一次canny演算法和輪廓檢測加上限制條件來找出我們所需要資料的位置。
* 字串分割與辨識：字串先透過輪廓檢測切割出單一的英數字，再放入辨識模型中，我們一共建立了三種模型，純數字辨識模型、純英文字辨識模型、英數字混和辨識模型，全是依靠MNIST手寫數字資料集與EMNIST手寫英文字資料集所訓練而成。
* 怎麼防止作弊還有得知考卷所屬：就是依靠考卷上的QRcode，裡面會儲存班級、考卷資訊、題目順序，並且經過加密。
## 實例展示
1. 實驗
2. 遇到的困難與解法
## 未來展望