応用プログラミング及び実習 2021年度 ex06 †[edit]
注意 †[edit]notebook のセルを実行していると,たまにセルの番号のところが [*] となったままで反応が返ってこなくなるときがあります. ありがちな状況と対処法を書いときます
ex06A †[edit]Step1 †[edit]授業で作成したファイル ex06constants.txt を読み込んでディクショナリに格納するコードを書こう. 以下の内容の ex06constants.py というファイルを作成し,それを修正しましょう. 最後の行の修正も忘れずに. # 空のディクショナリを作る constants = {} # ファイルを読み込む → 各行を分解 → 1つ目をキー,2列目を値(浮動小数点数値)としてディクショナリに登録 with open('ex06constants.txt', 'r', encoding='utf-8') as file: # キーの一覧を使ってループし,ディクショナリの内容を表示.p.194参照 for k in constants.keys(): print(k) # キー k の値と,そのキーに対応した数値を小数点以下2桁まで表示させるように修正しよう # 以下を修正して自分の学籍番号と氏名を出力させるようにしといてください print('A01055 ほげほげお') Step2 †[edit](1) 以下の内容のファイル ex06readscore.py を作りましょう ##### このファイルの中身は変更する必要ないはずです ##### ### 関数 readScore() の定義 # def readScore(fn): idL = [] # 空のリストを作る.ID用 scoreL = [] # 空のリストを作る.スコア用 with open(fn, 'r', encoding='utf-8') as f: # ファイルを読み込みモードで開く for line in f: # ファイルから1行ずつ読み込んでループ i, s = line.split() # 空白区切りで分割.1つ目を i に,残り(2つ目)を s に idL.append(i) # idL の末尾に i を追加 scoreL.append(float(s)) # scoreL の末尾に float(s) を追加 return idL, scoreL # 授業で説明していないが,以下の if の条件式は,このプログラムが他から import された時は # False, 直接起動されたときは True になる.したがって,if ブロックの中は後者の場合のみ # 実行され,他のプログラムから import されたときは無視される if __name__ == '__main__': # 動作確認 x, y = readScore('gamescores.txt') print(len(x), len(y)) (2) 実行して動作確認しましょう.このプログラムは gamescores.txt を読み込みます.同じフォルダ/ディレクトリ内に存在しないといけません.見つからないひとはこちらへ: AProg/2021/ex03#kadaiB (3) AProg/2021/ex03#kadaiB で作った ex03score.py をコピーして,ex06score.py というファイルを作り,次のことをやりましょう.
(4) 上記のことをやっただけでは, 関数 readScore を呼び出してる行でエラーになります.ここを修正しましょう. ex06readscore.py で定義されている関数 readScore を呼び出すようにしてください. ヒント: モジュール名.関数名 で,この場合のモジュール名は...(モジュールって何?ってひとは,第3回授業 のその4のnotebookと動画で復習してください). (5) 動作確認しましょう.ex03Bが満点でなかったひとは,指摘された問題点の修正も忘れずに. (6) ex06score.py の最後に,ex06constants.py と同様に自分の学籍番号氏名を出力する行を追加しといてください. 提出法 †[edit]上記の課題で作ったプログラムのうち,以下の二つを提出してください.ファイル名を間違えないよう注意.
提出場所: この科目の Moodle コース の「ex06課題A」 ex06B †[edit]顔検出しよう step1 †[edit](0) この課題では,OpenCV という画像処理・コンピュータビジョンのためのライブラリを利用します. 以下のようにして,追加でインストールしましょう. pip3 install opencv-python (1) 右のリンク先のファイルをこの授業のためのディレクトリに保存しましょう: facedetect.py (保存法は .ipynb のファイルと同じです) (2) 正しい場所に保存したら,実行しましょう. ネットワークからファイルをダウンロードするはずです.「終了」と出てたらok (3) 複数人の顔が真正面を向いて写っている画像を適当に探して,同じ場所に保存しましょう. (4) 以下を ex06face.py という名前で保存しましょう. import cv2 import facedetect # 画像を読み込む image = cv2.imread( ここに画像ファイル名を指定 ) print("画像サイズ: {0[1]} x {0[0]}".format(image.shape)) # 顔検出を実行 posizeList = facedetect.facedetect(image) # 顔の位置と大きさを表示 for i, posize in enumerate(posizeList): print("{0}人目: {1}".format(i+1, posize)) # 画像を書き出す cv2.imwrite("hoge.png", image) # 以下を修正して自分の学籍番号と氏名を出力させるようにしといてください print('A01055 ほげほげお') (5) 「ここに画像ファイル名を指定」のところを書き換えて,実行してみましょう.
step2 †[edit]ex06face.py を修正して,検出した顔に四角い枠をつけた画像を hoge.png として出力するようにしよう. 枠線を描くには,OpenCV の cv2.rectangle() 関数を使いましょう. 引数 color および thickness を指定して,緑色で線の太さ 3 にしてください. 参考: https://note.nkmk.me/python-opencv-draw-function/ 提出法 †[edit]提出場所: この科目の Moodle コース の「ex06課題B」
ex06C †[edit]県庁所在地クイズを作ろう
提出場所: この科目の Moodle コース の「ex06課題C」
ex06S (omake) †[edit]これはおまけ課題です.やらなくても減点はありません.やったら棒茄子? 三目並べ = oxゲーム = Tic-Tac-Toe を作ろう step1 †[edit]
step2 †[edit]
step3 †[edit]コンピュータと対戦できるように改造しよう.先手番 o は常に人間側(あなた)で後手番 x は乱数使ってランダムに手を打たせるようにしたらよい. step4 †[edit]ここまでのプログラムをうまく作っていたら,盤面を表すリストのリストを 3x3 ではなく 4x4, 5x5 等の適当なサイズにしても動作するようになっているはずです.動作を確認して,そうなっていなければ修正しなさい. 提出法 †[edit]1118木1講時の時間中に,対面で高橋に見せてください. |