manga109のキャラ画像加工
背景
所属研究室で行っている研究の一環として、漫画用のキャラクタ画像データセットを構築する試みを検討している。manga109 という学術用の許可済み漫画画像データセットが存在するが、そのままではキャラクタの画像が切り抜かれていないため加工して使用することにした。これら処理を行うためにpythonの調査を行い実践しまとめていく。
仕様
最終的な処理から逆算して仕様を決めていく。最終的には特定の画像から(xmin, ymin), (xmax, ymax)の座標を切り抜くつもりである。
検討した結果、上記のような擬似コードを考えた。manga109のアノテーションには顔と身体の領域座標が含まれているため、それを取得して該当のページから画像を切り出して保存するという流れである。
PILからImageモジュールを読み込んでクロップする方法が見つかったのでこれを採用する。クロップに必要な座標の形式は4数字の列であったので、この形式でxml上の座標を取得できればよい。
ページ情報の取得
manga109データセットにはページのアノテーションも施してあるため、利用する。アノテーションのページ数(page=数字)と実際の漫画ページの対応を調べたところ、原稿データの画像上のページ番号ではなく、見開きを1ページとしたmanga109のデータ形式に沿ったラベリングであった。よってxmlのアノテーション上のページ番号とそこに含まれる顔と身体の座標を取得すればよい。ページごとの処理になるので、アノテーションの各ページ番号に対してそれに対応するページの画像から画像を切り抜きそのページのフォルダを作成して格納することとする。作品は自分で指定するため、そこまでのパス指定は打ち込みで良いとしてページ番号を変数としてページ番号.jpgを参照せねばならない。
xml形式のデータから数字などを読み取るために、ひとまず上記のようなプログラムを作成し参照には成功した。しかし、ページの番号や座標を得るには至っていないため今後調査を重ねて実装していく。
クロップ
ファイル名に変数を用いる方法としてformat関数があったのでこれを利用する
詳細説明は省くが、変数を用いて切り抜き元となる画像を指定しクロップを行う。
まとめ
駆け足になったが、今後もツール作成を目標に調査を進める。一見単純な処理だと考えていたが、意外と苦労した。
次は各ページおよび顔と身体の座標の取得、リスト化して座標を格納する方法を中心として作成を進めていく。
この記事が気に入ったらサポートをしてみませんか?