採点アプリを作ろう!【解答用紙に○×△をつける(OpenCV)】
はじめに
採点斬りでは、採点終了後、配点を表示するかわりに〇×△マークがついていませんでした。そこでOpenCVを使って、マークをつけるよう、コードを組んでみました。
採点がすべて完了し、解答用紙の出力まで終わった後に実行します。
完成形
※採点は超絶適当につけています。
コードのおおまかな方針
trimDataから座標を取得し、そこからマークの大きさをきめています。また、○×△はKaitoYoushiフォルダの配点フォルダ情報を取得し、そこから分類して○×△を決めています。
不完全なところ
仮に×なし、〇のみやその逆が起こった場合に対応ができていません。まぁ、あらかじめ、0点の用紙と満点の用紙を用意しておけば、そのようなことは起きないのでいいかなと思っています。 ではコード↓
def Saiten_mark() if os.path.exists("./setting/kaitoYousi/saiten"): shutil.rmtree("./setting/kaitoYousi/saiten") df_zahyo = pd.read_csv("./setting/trimData.csv", index_col=0) Jpg_list = os.listdir("./setting/kaitoYousi") daimon_list = df_zahyo.index[1:-2] df_zahyo = df_zahyo.T for jpg in Jpg_list: # 画像を読み込む img = cv2.imread("./setting/kaitoYousi/" + jpg) # 問題番号リストで回す for daimon in daimon_list: # 問題番号の座標を取得 x_s,y_s,x_g,y_g=df_zahyo[daimon] x= round(x_s+(x_g-x_s)/2) y=round(y_s+(y_g-y_s)/2) # 大きさによって〇のサイズを変える if x_g-x_s < y_g-y_s: size = (x_g-x_s)/3 elif y_g-y_s < x_g-x_s: size = (y_g-y_s)/3 # 大問フォルダの中の配点フォルダ名を取得 haiten_list=os.listdir("./setting/output/"+daimon) # 0点フォルダは最初 haiten_0 = haiten_list[0] # 0点フォルダのpass img_path_0 = daimon +"/"+ haiten_0 + "/" + jpg # バツを付ける if os.path.exists("./setting/output/" + img_path_0): img = cv2.drawMarker(img, (x, y), (255, 0, 0), thickness=8, markerType=cv2.MARKER_TILTED_CROSS, markerSize=int(size)) else: pass # 正解フォルダは最後 haiten_cor = haiten_list[-1] # 正解フォルダのpass img_path_cor = daimon +"/"+ haiten_cor + "/" + jpg # 丸を付ける if os.path.exists("./setting/output/" + img_path_cor): img = cv2.circle(img, (x, y), int(size), (0, 0, 255), thickness=3, lineType=cv2.LINE_AA) else: pass # もし配点フォルダが2つなら、○×のみなのでpassする。 if len(haiten_list) == 2: pass else: haiten_bubun = haitenlist[1:-1] for bubun in haiten_bubun: img_path_bubun = daimon +"/"+ bubun + "/" + jpg # 三角を付ける if os.path.exists("./setting/output/" + img_path_bubun): img = cv2.drawMarker(img, (x, y), (0, 255, 0), thickness=3, markerType=cv2.MARKER_TRIANGLE_UP, markerSize=int(size)) else: pass # セーブする if not os.path.exists("./setting/kaitoYousi/saiten"): os.makedirs("./setting/kaitoYousi/saiten") cv2.imwrite("./setting/kaitoYousi/saiten"+"/"+ jpg, img)